LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/starmath/source - cfgitem.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 363 664 54.7 %
Date: 2013-07-09 Functions: 40 66 60.6 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <vcl/svapp.hxx>
      21             : #include <sal/macros.h>
      22             : #include "cfgitem.hxx"
      23             : 
      24             : #include "starmath.hrc"
      25             : #include "smdll.hxx"
      26             : #include "format.hxx"
      27             : 
      28             : using namespace com::sun::star;
      29             : using namespace com::sun::star::uno;
      30             : using namespace com::sun::star::beans;
      31             : 
      32             : 
      33             : 
      34             : static const char aRootName[] = "Office.Math";
      35             : 
      36             : #define SYMBOL_LIST         "SymbolList"
      37             : #define FONT_FORMAT_LIST    "FontFormatList"
      38             : 
      39             : /////////////////////////////////////////////////////////////////
      40             : 
      41             : 
      42          14 : static Sequence< OUString > lcl_GetFontPropertyNames()
      43             : {
      44             :     static const char * aPropNames[] =
      45             :     {
      46             :         "Name",
      47             :         "CharSet",
      48             :         "Family",
      49             :         "Pitch",
      50             :         "Weight",
      51             :         "Italic",
      52             :         0
      53             :     };
      54             : 
      55          14 :     const char** ppPropName = aPropNames;
      56             : 
      57          14 :     Sequence< OUString > aNames( 6 );
      58          14 :     OUString *pNames = aNames.getArray();
      59          98 :     for( sal_Int32 i = 0; *ppPropName;  ++i, ++ppPropName )
      60             :     {
      61          84 :         pNames[i] = OUString::createFromAscii( *ppPropName );
      62             :     }
      63          14 :     return aNames;
      64             : }
      65             : 
      66             : /////////////////////////////////////////////////////////////////
      67             : 
      68             : 
      69         330 : static Sequence< OUString > lcl_GetSymbolPropertyNames()
      70             : {
      71             :     static const char * aPropNames[] =
      72             :     {
      73             :         "Char",
      74             :         "Set",
      75             :         "Predefined",
      76             :         "FontFormatId",
      77             :         0
      78             :     };
      79             : 
      80         330 :     const char** ppPropName = aPropNames;
      81             : 
      82         330 :     Sequence< OUString > aNames( 4 );
      83         330 :     OUString *pNames = aNames.getArray();
      84        1650 :     for( sal_Int32 i = 0; *ppPropName;  ++i, ++ppPropName )
      85             :     {
      86        1320 :         pNames[i] = OUString::createFromAscii( *ppPropName );
      87             :     }
      88         330 :     return aNames;
      89             : }
      90             : 
      91             : /////////////////////////////////////////////////////////////////
      92             : 
      93             : static const char * aMathPropNames[] =
      94             : {
      95             :     "Print/Title",
      96             :     "Print/FormulaText",
      97             :     "Print/Frame",
      98             :     "Print/Size",
      99             :     "Print/ZoomFactor",
     100             :     "LoadSave/IsSaveOnlyUsedSymbols",
     101             :     "Misc/IgnoreSpacesRight",
     102             :     "View/ToolboxVisible",
     103             :     "View/AutoRedraw",
     104             :     "View/FormulaCursor"
     105             : };
     106             : 
     107             : 
     108             : //! Beware of order according to *_BEGIN *_END defines in format.hxx !
     109             : //! see respective load/save routines here
     110             : static const char * aFormatPropNames[] =
     111             : {
     112             :     "StandardFormat/Textmode",
     113             :     "StandardFormat/GreekCharStyle",
     114             :     "StandardFormat/ScaleNormalBracket",
     115             :     "StandardFormat/HorizontalAlignment",
     116             :     "StandardFormat/BaseSize",
     117             :     "StandardFormat/TextSize",
     118             :     "StandardFormat/IndexSize",
     119             :     "StandardFormat/FunctionSize",
     120             :     "StandardFormat/OperatorSize",
     121             :     "StandardFormat/LimitsSize",
     122             :     "StandardFormat/Distance/Horizontal",
     123             :     "StandardFormat/Distance/Vertical",
     124             :     "StandardFormat/Distance/Root",
     125             :     "StandardFormat/Distance/SuperScript",
     126             :     "StandardFormat/Distance/SubScript",
     127             :     "StandardFormat/Distance/Numerator",
     128             :     "StandardFormat/Distance/Denominator",
     129             :     "StandardFormat/Distance/Fraction",
     130             :     "StandardFormat/Distance/StrokeWidth",
     131             :     "StandardFormat/Distance/UpperLimit",
     132             :     "StandardFormat/Distance/LowerLimit",
     133             :     "StandardFormat/Distance/BracketSize",
     134             :     "StandardFormat/Distance/BracketSpace",
     135             :     "StandardFormat/Distance/MatrixRow",
     136             :     "StandardFormat/Distance/MatrixColumn",
     137             :     "StandardFormat/Distance/OrnamentSize",
     138             :     "StandardFormat/Distance/OrnamentSpace",
     139             :     "StandardFormat/Distance/OperatorSize",
     140             :     "StandardFormat/Distance/OperatorSpace",
     141             :     "StandardFormat/Distance/LeftSpace",
     142             :     "StandardFormat/Distance/RightSpace",
     143             :     "StandardFormat/Distance/TopSpace",
     144             :     "StandardFormat/Distance/BottomSpace",
     145             :     "StandardFormat/Distance/NormalBracketSize",
     146             :     "StandardFormat/VariableFont",
     147             :     "StandardFormat/FunctionFont",
     148             :     "StandardFormat/NumberFont",
     149             :     "StandardFormat/TextFont",
     150             :     "StandardFormat/SerifFont",
     151             :     "StandardFormat/SansFont",
     152             :     "StandardFormat/FixedFont"
     153             : };
     154             : 
     155             : 
     156          14 : static Sequence< OUString > lcl_GetPropertyNames(
     157             :         const char * aPropNames[], sal_uInt16 nCount )
     158             : {
     159             : 
     160          14 :     const char** ppPropName = aPropNames;
     161             : 
     162          14 :     Sequence< OUString > aNames( nCount );
     163          14 :     OUString *pNames = aNames.getArray();
     164         371 :     for (sal_Int32 i = 0;  i < nCount;  ++i, ++ppPropName)
     165             :     {
     166         357 :         pNames[i] = OUString::createFromAscii( *ppPropName );
     167             :     }
     168          14 :     return aNames;
     169             : }
     170             : 
     171           7 : static Sequence< OUString > GetFormatPropertyNames()
     172             : {
     173           7 :     return lcl_GetPropertyNames( aFormatPropNames, SAL_N_ELEMENTS( aFormatPropNames ) );
     174             : }
     175             : 
     176           7 : static Sequence< OUString > GetOtherPropertyNames()
     177             : {
     178           7 :     return lcl_GetPropertyNames( aMathPropNames, SAL_N_ELEMENTS( aMathPropNames ) );
     179             : }
     180             : 
     181             : /////////////////////////////////////////////////////////////////
     182             : 
     183             : struct SmCfgOther
     184             : {
     185             :     SmPrintSize     ePrintSize;
     186             :     sal_uInt16      nPrintZoomFactor;
     187             :     bool            bPrintTitle;
     188             :     bool            bPrintFormulaText;
     189             :     bool            bPrintFrame;
     190             :     bool            bIsSaveOnlyUsedSymbols;
     191             :     bool            bIgnoreSpacesRight;
     192             :     bool            bToolboxVisible;
     193             :     bool            bAutoRedraw;
     194             :     bool            bFormulaCursor;
     195             : 
     196             :     SmCfgOther();
     197             : };
     198             : 
     199             : 
     200           7 : SmCfgOther::SmCfgOther()
     201             : {
     202           7 :     ePrintSize          = PRINT_SIZE_NORMAL;
     203           7 :     nPrintZoomFactor    = 100;
     204             :     bPrintTitle         = bPrintFormulaText   =
     205             :     bPrintFrame         = bIgnoreSpacesRight  =
     206             :     bToolboxVisible     = bAutoRedraw         =
     207           7 :     bFormulaCursor      = bIsSaveOnlyUsedSymbols = true;
     208           7 : }
     209             : 
     210             : /////////////////////////////////////////////////////////////////
     211             : 
     212             : 
     213          14 : SmFontFormat::SmFontFormat()
     214             : {
     215          14 :     aName.AssignAscii( FONTNAME_MATH );
     216          14 :     nCharSet    = RTL_TEXTENCODING_UNICODE;
     217          14 :     nFamily     = FAMILY_DONTKNOW;
     218          14 :     nPitch      = PITCH_DONTKNOW;
     219          14 :     nWeight     = WEIGHT_DONTKNOW;
     220          14 :     nItalic     = ITALIC_NONE;
     221          14 : }
     222             : 
     223             : 
     224           0 : SmFontFormat::SmFontFormat( const Font &rFont )
     225             : {
     226           0 :     aName       = rFont.GetName();
     227           0 :     nCharSet    = (sal_Int16) rFont.GetCharSet();
     228           0 :     nFamily     = (sal_Int16) rFont.GetFamily();
     229           0 :     nPitch      = (sal_Int16) rFont.GetPitch();
     230           0 :     nWeight     = (sal_Int16) rFont.GetWeight();
     231           0 :     nItalic     = (sal_Int16) rFont.GetItalic();
     232           0 : }
     233             : 
     234             : 
     235         330 : const Font SmFontFormat::GetFont() const
     236             : {
     237         330 :     Font aRes;
     238         330 :     aRes.SetName( aName );
     239         330 :     aRes.SetCharSet( (rtl_TextEncoding) nCharSet );
     240         330 :     aRes.SetFamily( (FontFamily) nFamily );
     241         330 :     aRes.SetPitch( (FontPitch) nPitch );
     242         330 :     aRes.SetWeight( (FontWeight) nWeight );
     243         330 :     aRes.SetItalic( (FontItalic) nItalic );
     244         330 :     return aRes;
     245             : }
     246             : 
     247             : 
     248           0 : bool SmFontFormat::operator == ( const SmFontFormat &rFntFmt ) const
     249             : {
     250           0 :     return  aName    == rFntFmt.aName       &&
     251           0 :             nCharSet == rFntFmt.nCharSet    &&
     252           0 :             nFamily  == rFntFmt.nFamily     &&
     253           0 :             nPitch   == rFntFmt.nPitch      &&
     254           0 :             nWeight  == rFntFmt.nWeight     &&
     255           0 :             nItalic  == rFntFmt.nItalic;
     256             : }
     257             : 
     258             : 
     259             : /////////////////////////////////////////////////////////////////
     260             : 
     261          14 : SmFntFmtListEntry::SmFntFmtListEntry( const String &rId, const SmFontFormat &rFntFmt ) :
     262             :     aId     (rId),
     263          14 :     aFntFmt (rFntFmt)
     264             : {
     265          14 : }
     266             : 
     267             : 
     268           7 : SmFontFormatList::SmFontFormatList()
     269             : {
     270           7 :     bModified = false;
     271           7 : }
     272             : 
     273             : 
     274           0 : void SmFontFormatList::Clear()
     275             : {
     276           0 :     if (!aEntries.empty())
     277             :     {
     278           0 :         aEntries.clear();
     279           0 :         SetModified( true );
     280             :     }
     281           0 : }
     282             : 
     283             : 
     284          14 : void SmFontFormatList::AddFontFormat( const String &rFntFmtId,
     285             :         const SmFontFormat &rFntFmt )
     286             : {
     287          14 :     const SmFontFormat *pFntFmt = GetFontFormat( rFntFmtId );
     288             :     OSL_ENSURE( !pFntFmt, "FontFormatId already exists" );
     289          14 :     if (!pFntFmt)
     290             :     {
     291          14 :         SmFntFmtListEntry aEntry( rFntFmtId, rFntFmt );
     292          14 :         aEntries.push_back( aEntry );
     293          14 :         SetModified( true );
     294             :     }
     295          14 : }
     296             : 
     297             : 
     298           0 : void SmFontFormatList::RemoveFontFormat( const String &rFntFmtId )
     299             : {
     300             : 
     301             :     // search for entry
     302           0 :     for (size_t i = 0;  i < aEntries.size();  ++i)
     303             :     {
     304           0 :         if (aEntries[i].aId == rFntFmtId)
     305             :         {
     306             :             // remove entry if found
     307           0 :             aEntries.erase( aEntries.begin() + i );
     308           0 :             SetModified( true );
     309           0 :             break;
     310             :         }
     311             :     }
     312           0 : }
     313             : 
     314             : 
     315         358 : const SmFontFormat * SmFontFormatList::GetFontFormat( const String &rFntFmtId ) const
     316             : {
     317         358 :     const SmFontFormat *pRes = 0;
     318             : 
     319         642 :     for (size_t i = 0;  i < aEntries.size();  ++i)
     320             :     {
     321         614 :         if (aEntries[i].aId == rFntFmtId)
     322             :         {
     323         330 :             pRes = &aEntries[i].aFntFmt;
     324         330 :             break;
     325             :         }
     326             :     }
     327             : 
     328         358 :     return pRes;
     329             : }
     330             : 
     331             : 
     332             : 
     333           0 : const SmFontFormat * SmFontFormatList::GetFontFormat( size_t nPos ) const
     334             : {
     335           0 :     const SmFontFormat *pRes = 0;
     336           0 :     if (nPos < aEntries.size())
     337           0 :         pRes = &aEntries[nPos].aFntFmt;
     338           0 :     return pRes;
     339             : }
     340             : 
     341             : 
     342           0 : const String SmFontFormatList::GetFontFormatId( const SmFontFormat &rFntFmt ) const
     343             : {
     344           0 :     String aRes;
     345             : 
     346           0 :     for (size_t i = 0;  i < aEntries.size();  ++i)
     347             :     {
     348           0 :         if (aEntries[i].aFntFmt == rFntFmt)
     349             :         {
     350           0 :             aRes = aEntries[i].aId;
     351           0 :             break;
     352             :         }
     353             :     }
     354             : 
     355           0 :     return aRes;
     356             : }
     357             : 
     358             : 
     359           0 : const String SmFontFormatList::GetFontFormatId( const SmFontFormat &rFntFmt, bool bAdd )
     360             : {
     361           0 :     String aRes( GetFontFormatId( rFntFmt) );
     362           0 :     if (0 == aRes.Len()  &&  bAdd)
     363             :     {
     364           0 :         aRes = GetNewFontFormatId();
     365           0 :         AddFontFormat( aRes, rFntFmt );
     366             :     }
     367           0 :     return aRes;
     368             : }
     369             : 
     370             : 
     371           0 : const String SmFontFormatList::GetFontFormatId( size_t nPos ) const
     372             : {
     373           0 :     String aRes;
     374           0 :     if (nPos < aEntries.size())
     375           0 :         aRes = aEntries[nPos].aId;
     376           0 :     return aRes;
     377             : }
     378             : 
     379             : 
     380           0 : const OUString SmFontFormatList::GetNewFontFormatId() const
     381             : {
     382             :     // returns first unused FormatId
     383             : 
     384           0 :     OUString aPrefix("Id");
     385           0 :     sal_Int32 nCnt = GetCount();
     386           0 :     for (sal_Int32 i = 1;  i <= nCnt + 1;  ++i)
     387             :     {
     388           0 :         OUString aTmpId =  aPrefix + OUString::valueOf(i);
     389           0 :         if (!GetFontFormat(aTmpId))
     390           0 :             return aTmpId;
     391           0 :     }
     392             :     OSL_ENSURE( !this, "failed to create new FontFormatId" );
     393             : 
     394           0 :     return OUString();
     395             : }
     396             : 
     397             : /////////////////////////////////////////////////////////////////
     398             : 
     399           7 : SmMathConfig::SmMathConfig() :
     400           7 :     ConfigItem(OUString(aRootName))
     401             : {
     402           7 :     pFormat         = 0;
     403           7 :     pOther          = 0;
     404           7 :     pFontFormatList = 0;
     405           7 :     pSymbolMgr      = 0;
     406             : 
     407           7 :     bIsOtherModified = bIsFormatModified = false;
     408           7 : }
     409             : 
     410             : 
     411           4 : SmMathConfig::~SmMathConfig()
     412             : {
     413           2 :     Save();
     414           2 :     delete pFormat;
     415           2 :     delete pOther;
     416           2 :     delete pFontFormatList;
     417           2 :     delete pSymbolMgr;
     418           2 : }
     419             : 
     420             : 
     421           7 : void SmMathConfig::SetOtherModified( bool bVal )
     422             : {
     423           7 :     bIsOtherModified = bVal;
     424           7 : }
     425             : 
     426             : 
     427           7 : void SmMathConfig::SetFormatModified( bool bVal )
     428             : {
     429           7 :     bIsFormatModified = bVal;
     430           7 : }
     431             : 
     432             : 
     433           0 : void SmMathConfig::SetFontFormatListModified( bool bVal )
     434             : {
     435           0 :     if (pFontFormatList)
     436           0 :         pFontFormatList->SetModified( bVal );
     437           0 : }
     438             : 
     439             : 
     440         330 : void SmMathConfig::ReadSymbol( SmSym &rSymbol,
     441             :                         const OUString &rSymbolName,
     442             :                         const OUString &rBaseNode ) const
     443             : {
     444         330 :     Sequence< OUString > aNames = lcl_GetSymbolPropertyNames();
     445         330 :     sal_Int32 nProps = aNames.getLength();
     446             : 
     447         660 :     OUString aDelim( OUString::valueOf( (sal_Unicode) '/' ) );
     448         330 :     OUString *pName = aNames.getArray();
     449        1650 :     for (sal_Int32 i = 0;  i < nProps;  ++i)
     450             :     {
     451        1320 :         OUString &rName = pName[i];
     452        1320 :         OUString aTmp( rName );
     453        1320 :         rName = rBaseNode;
     454        1320 :         rName += aDelim;
     455        1320 :         rName += rSymbolName;
     456        1320 :         rName += aDelim;
     457        1320 :         rName += aTmp;
     458        1320 :     }
     459             : 
     460         660 :     const Sequence< Any > aValues = ((SmMathConfig*) this)->GetProperties( aNames );
     461             : 
     462         330 :     if (nProps  &&  aValues.getLength() == nProps)
     463             :     {
     464         330 :         const Any * pValue = aValues.getConstArray();
     465         330 :         Font        aFont;
     466         330 :         sal_UCS4    cChar = '\0';
     467         660 :         String      aSet;
     468         330 :         bool        bPredefined = false;
     469             : 
     470         660 :         OUString    aTmpStr;
     471         330 :         sal_Int32       nTmp32 = 0;
     472         330 :         bool        bTmp = false;
     473             : 
     474         330 :         bool bOK = true;
     475         330 :         if (pValue->hasValue()  &&  (*pValue >>= nTmp32))
     476         330 :             cChar = static_cast< sal_UCS4 >( nTmp32 );
     477             :         else
     478           0 :             bOK = false;
     479         330 :         ++pValue;
     480         330 :         if (pValue->hasValue()  &&  (*pValue >>= aTmpStr))
     481         330 :             aSet = aTmpStr;
     482             :         else
     483           0 :             bOK = false;
     484         330 :         ++pValue;
     485         330 :         if (pValue->hasValue()  &&  (*pValue >>= bTmp))
     486         330 :             bPredefined = bTmp;
     487             :         else
     488           0 :             bOK = false;
     489         330 :         ++pValue;
     490         330 :         if (pValue->hasValue()  &&  (*pValue >>= aTmpStr))
     491             :         {
     492         330 :             const SmFontFormat *pFntFmt = GetFontFormatList().GetFontFormat( aTmpStr );
     493             :             OSL_ENSURE( pFntFmt, "unknown FontFormat" );
     494         330 :             if (pFntFmt)
     495         330 :                 aFont = pFntFmt->GetFont();
     496             :         }
     497             :         else
     498           0 :             bOK = false;
     499         330 :         ++pValue;
     500             : 
     501         330 :         if (bOK)
     502             :         {
     503         330 :             String aUiName( rSymbolName );
     504         660 :             String aUiSetName( aSet );
     505         330 :             if (bPredefined)
     506             :             {
     507         330 :                 String aTmp;
     508         330 :                 aTmp = GetUiSymbolName( rSymbolName );
     509             :                 OSL_ENSURE( aTmp.Len(), "localized symbol-name not found" );
     510         330 :                 if (aTmp.Len())
     511         330 :                     aUiName = aTmp;
     512         330 :                 aTmp = GetUiSymbolSetName( aSet );
     513             :                 OSL_ENSURE( aTmp.Len(), "localized symbolset-name not found" );
     514         330 :                 if (aTmp.Len())
     515         330 :                     aUiSetName = aTmp;
     516             :             }
     517             : 
     518         330 :             rSymbol = SmSym( aUiName, aFont, cChar, aUiSetName, bPredefined );
     519         330 :             if (aUiName != String(rSymbolName))
     520         330 :                 rSymbol.SetExportName( rSymbolName );
     521             :         }
     522             :         else
     523             :         {
     524             :             OSL_FAIL( "symbol read error" );
     525         330 :         }
     526         330 :     }
     527         330 : }
     528             : 
     529             : 
     530        1784 : SmSymbolManager & SmMathConfig::GetSymbolManager()
     531             : {
     532        1784 :     if (!pSymbolMgr)
     533             :     {
     534           5 :         pSymbolMgr = new SmSymbolManager;
     535           5 :         pSymbolMgr->Load();
     536             :     }
     537        1784 :     return *pSymbolMgr;
     538             : }
     539             : 
     540             : 
     541           0 : void SmMathConfig::Commit()
     542             : {
     543           0 :     Save();
     544           0 : }
     545             : 
     546             : 
     547           2 : void SmMathConfig::Save()
     548             : {
     549           2 :     SaveOther();
     550           2 :     SaveFormat();
     551           2 :     SaveFontFormatList();
     552           2 : }
     553             : 
     554             : 
     555           5 : void SmMathConfig::GetSymbols( std::vector< SmSym > &rSymbols ) const
     556             : {
     557           5 :     Sequence< OUString > aNodes( ((SmMathConfig*) this)->GetNodeNames( SYMBOL_LIST ) );
     558           5 :     const OUString *pNode = aNodes.getConstArray();
     559           5 :     sal_Int32 nNodes = aNodes.getLength();
     560             : 
     561           5 :     rSymbols.resize( nNodes );
     562           5 :     std::vector< SmSym >::iterator aIt( rSymbols.begin() );
     563           5 :     std::vector< SmSym >::iterator aEnd( rSymbols.end() );
     564         340 :     while (aIt != aEnd)
     565             :     {
     566         330 :         ReadSymbol( *aIt++, *pNode++, SYMBOL_LIST );
     567           5 :     }
     568           5 : }
     569             : 
     570             : 
     571           0 : void SmMathConfig::SetSymbols( const std::vector< SmSym > &rNewSymbols )
     572             : {
     573           0 :     sal_uIntPtr nCount = rNewSymbols.size();
     574             : 
     575           0 :     Sequence< OUString > aNames = lcl_GetSymbolPropertyNames();
     576           0 :     const OUString *pNames = aNames.getConstArray();
     577           0 :     sal_uIntPtr nSymbolProps = sal::static_int_cast< sal_uInt32 >(aNames.getLength());
     578             : 
     579           0 :     Sequence< PropertyValue > aValues( nCount * nSymbolProps );
     580           0 :     PropertyValue *pValues = aValues.getArray();
     581             : 
     582           0 :     PropertyValue *pVal = pValues;
     583           0 :     OUString aDelim( OUString::valueOf( (sal_Unicode) '/' ) );
     584           0 :     std::vector< SmSym >::const_iterator aIt( rNewSymbols.begin() );
     585           0 :     std::vector< SmSym >::const_iterator aEnd( rNewSymbols.end() );
     586           0 :     while (aIt != aEnd)
     587             :     {
     588           0 :         const SmSym &rSymbol = *aIt++;
     589           0 :         OUString  aNodeNameDelim( SYMBOL_LIST );
     590           0 :         aNodeNameDelim += aDelim;
     591           0 :         aNodeNameDelim += rSymbol.GetExportName();
     592           0 :         aNodeNameDelim += aDelim;
     593             : 
     594           0 :         const OUString *pName = pNames;
     595             : 
     596             :         // Char
     597           0 :         pVal->Name  = aNodeNameDelim;
     598           0 :         pVal->Name += *pName++;
     599           0 :         pVal->Value <<= static_cast< sal_UCS4 >( rSymbol.GetCharacter() );
     600           0 :         pVal++;
     601             :         // Set
     602           0 :         pVal->Name  = aNodeNameDelim;
     603           0 :         pVal->Name += *pName++;
     604           0 :         OUString aTmp( rSymbol.GetSymbolSetName() );
     605           0 :         if (rSymbol.IsPredefined())
     606           0 :             aTmp = GetExportSymbolSetName( aTmp );
     607           0 :         pVal->Value <<= aTmp;
     608           0 :         pVal++;
     609             :         // Predefined
     610           0 :         pVal->Name  = aNodeNameDelim;
     611           0 :         pVal->Name += *pName++;
     612           0 :         pVal->Value <<= (sal_Bool) rSymbol.IsPredefined();
     613           0 :         pVal++;
     614             :         // FontFormatId
     615           0 :         SmFontFormat aFntFmt( rSymbol.GetFace() );
     616           0 :         String aFntFmtId( GetFontFormatList().GetFontFormatId( aFntFmt, true ) );
     617             :         OSL_ENSURE( aFntFmtId.Len(), "FontFormatId not found" );
     618           0 :         pVal->Name  = aNodeNameDelim;
     619           0 :         pVal->Name += *pName++;
     620           0 :         pVal->Value <<= OUString( aFntFmtId );
     621           0 :         pVal++;
     622           0 :     }
     623             :     OSL_ENSURE( pVal - pValues == sal::static_int_cast< ptrdiff_t >(nCount * nSymbolProps), "properties missing" );
     624           0 :     ReplaceSetProperties( SYMBOL_LIST, aValues );
     625             : 
     626           0 :     StripFontFormatList( rNewSymbols );
     627           0 :     SaveFontFormatList();
     628           0 : }
     629             : 
     630             : 
     631         332 : SmFontFormatList & SmMathConfig::GetFontFormatList()
     632             : {
     633         332 :     if (!pFontFormatList)
     634             :     {
     635           7 :         LoadFontFormatList();
     636             :     }
     637         332 :     return *pFontFormatList;
     638             : }
     639             : 
     640             : 
     641           7 : void SmMathConfig::LoadFontFormatList()
     642             : {
     643           7 :     if (!pFontFormatList)
     644           7 :         pFontFormatList = new SmFontFormatList;
     645             :     else
     646           0 :         pFontFormatList->Clear();
     647             : 
     648           7 :     Sequence< OUString > aNodes( GetNodeNames( FONT_FORMAT_LIST ) );
     649           7 :     const OUString *pNode = aNodes.getConstArray();
     650           7 :     sal_Int32 nNodes = aNodes.getLength();
     651             : 
     652          21 :     for (sal_Int32 i = 0;  i < nNodes;  ++i)
     653             :     {
     654          14 :         SmFontFormat aFntFmt;
     655          14 :         ReadFontFormat( aFntFmt, pNode[i], FONT_FORMAT_LIST );
     656          14 :         if (!pFontFormatList->GetFontFormat( pNode[i] ))
     657             :         {
     658             :             OSL_ENSURE( 0 == pFontFormatList->GetFontFormat( pNode[i] ),
     659             :                     "FontFormat ID already exists" );
     660          14 :             pFontFormatList->AddFontFormat( pNode[i], aFntFmt );
     661             :         }
     662          14 :     }
     663           7 :     pFontFormatList->SetModified( false );
     664           7 : }
     665             : 
     666             : 
     667          14 : void SmMathConfig::ReadFontFormat( SmFontFormat &rFontFormat,
     668             :         const OUString &rSymbolName, const OUString &rBaseNode ) const
     669             : {
     670          14 :     Sequence< OUString > aNames = lcl_GetFontPropertyNames();
     671          14 :     sal_Int32 nProps = aNames.getLength();
     672             : 
     673          28 :     OUString aDelim( OUString::valueOf( (sal_Unicode) '/' ) );
     674          14 :     OUString *pName = aNames.getArray();
     675          98 :     for (sal_Int32 i = 0;  i < nProps;  ++i)
     676             :     {
     677          84 :         OUString &rName = pName[i];
     678          84 :         OUString aTmp( rName );
     679          84 :         rName = rBaseNode;
     680          84 :         rName += aDelim;
     681          84 :         rName += rSymbolName;
     682          84 :         rName += aDelim;
     683          84 :         rName += aTmp;
     684          84 :     }
     685             : 
     686          28 :     const Sequence< Any > aValues = ((SmMathConfig*) this)->GetProperties( aNames );
     687             : 
     688          14 :     if (nProps  &&  aValues.getLength() == nProps)
     689             :     {
     690          14 :         const Any * pValue = aValues.getConstArray();
     691             : 
     692          14 :         OUString    aTmpStr;
     693          14 :         sal_Int16       nTmp16 = 0;
     694             : 
     695          14 :         bool bOK = true;
     696          14 :         if (pValue->hasValue()  &&  (*pValue >>= aTmpStr))
     697          14 :             rFontFormat.aName = aTmpStr;
     698             :         else
     699           0 :             bOK = false;
     700          14 :         ++pValue;
     701          14 :         if (pValue->hasValue()  &&  (*pValue >>= nTmp16))
     702          14 :             rFontFormat.nCharSet = nTmp16; // 6.0 file-format GetSOLoadTextEncoding not needed
     703             :         else
     704           0 :             bOK = false;
     705          14 :         ++pValue;
     706          14 :         if (pValue->hasValue()  &&  (*pValue >>= nTmp16))
     707          14 :             rFontFormat.nFamily = nTmp16;
     708             :         else
     709           0 :             bOK = false;
     710          14 :         ++pValue;
     711          14 :         if (pValue->hasValue()  &&  (*pValue >>= nTmp16))
     712          14 :             rFontFormat.nPitch = nTmp16;
     713             :         else
     714           0 :             bOK = false;
     715          14 :         ++pValue;
     716          14 :         if (pValue->hasValue()  &&  (*pValue >>= nTmp16))
     717          14 :             rFontFormat.nWeight = nTmp16;
     718             :         else
     719           0 :             bOK = false;
     720          14 :         ++pValue;
     721          14 :         if (pValue->hasValue()  &&  (*pValue >>= nTmp16))
     722          14 :             rFontFormat.nItalic = nTmp16;
     723             :         else
     724           0 :             bOK = false;
     725          14 :         ++pValue;
     726             : 
     727             :         OSL_ENSURE( bOK, "read FontFormat failed" );
     728          14 :         (void)bOK;
     729          14 :     }
     730          14 : }
     731             : 
     732             : 
     733           2 : void SmMathConfig::SaveFontFormatList()
     734             : {
     735           2 :     SmFontFormatList &rFntFmtList = GetFontFormatList();
     736             : 
     737           2 :     if (!rFntFmtList.IsModified())
     738           4 :         return;
     739             : 
     740           0 :     Sequence< OUString > aNames = lcl_GetFontPropertyNames();
     741           0 :     sal_Int32 nSymbolProps = aNames.getLength();
     742             : 
     743           0 :     size_t nCount = rFntFmtList.GetCount();
     744             : 
     745           0 :     Sequence< PropertyValue > aValues( nCount * nSymbolProps );
     746           0 :     PropertyValue *pValues = aValues.getArray();
     747             : 
     748           0 :     PropertyValue *pVal = pValues;
     749           0 :     OUString aDelim( OUString::valueOf( (sal_Unicode) '/' ) );
     750           0 :     for (size_t i = 0;  i < nCount;  ++i)
     751             :     {
     752           0 :         String aFntFmtId( rFntFmtList.GetFontFormatId( i ) );
     753           0 :         const SmFontFormat aFntFmt( *rFntFmtList.GetFontFormat( aFntFmtId ) );
     754             : 
     755           0 :         OUString  aNodeNameDelim( FONT_FORMAT_LIST );
     756           0 :         aNodeNameDelim += aDelim;
     757           0 :         aNodeNameDelim += aFntFmtId;
     758           0 :         aNodeNameDelim += aDelim;
     759             : 
     760           0 :         const OUString *pName = aNames.getConstArray();
     761             : 
     762             :         // Name
     763           0 :         pVal->Name  = aNodeNameDelim;
     764           0 :         pVal->Name += *pName++;
     765           0 :         pVal->Value <<= OUString( aFntFmt.aName );
     766           0 :         pVal++;
     767             :         // CharSet
     768           0 :         pVal->Name  = aNodeNameDelim;
     769           0 :         pVal->Name += *pName++;
     770           0 :         pVal->Value <<= (sal_Int16) aFntFmt.nCharSet; // 6.0 file-format GetSOStoreTextEncoding not needed
     771           0 :         pVal++;
     772             :         // Family
     773           0 :         pVal->Name  = aNodeNameDelim;
     774           0 :         pVal->Name += *pName++;
     775           0 :         pVal->Value <<= (sal_Int16) aFntFmt.nFamily;
     776           0 :         pVal++;
     777             :         // Pitch
     778           0 :         pVal->Name  = aNodeNameDelim;
     779           0 :         pVal->Name += *pName++;
     780           0 :         pVal->Value <<= (sal_Int16) aFntFmt.nPitch;
     781           0 :         pVal++;
     782             :         // Weight
     783           0 :         pVal->Name  = aNodeNameDelim;
     784           0 :         pVal->Name += *pName++;
     785           0 :         pVal->Value <<= (sal_Int16) aFntFmt.nWeight;
     786           0 :         pVal++;
     787             :         // Italic
     788           0 :         pVal->Name  = aNodeNameDelim;
     789           0 :         pVal->Name += *pName++;
     790           0 :         pVal->Value <<= (sal_Int16) aFntFmt.nItalic;
     791           0 :         pVal++;
     792           0 :     }
     793             :     OSL_ENSURE( sal::static_int_cast<size_t>(pVal - pValues) == nCount * nSymbolProps, "properties missing" );
     794           0 :     ReplaceSetProperties( FONT_FORMAT_LIST, aValues );
     795             : 
     796           0 :     rFntFmtList.SetModified( false );
     797             : }
     798             : 
     799             : 
     800           0 : void SmMathConfig::StripFontFormatList( const std::vector< SmSym > &rSymbols )
     801             : {
     802             :     size_t i;
     803             : 
     804             :     // build list of used font-formats only
     805             :     //!! font-format IDs may be different !!
     806           0 :     SmFontFormatList aUsedList;
     807           0 :     for (i = 0;  i < rSymbols.size();  ++i)
     808             :     {
     809             :         OSL_ENSURE( rSymbols[i].GetName().getLength() > 0, "non named symbol" );
     810           0 :         aUsedList.GetFontFormatId( SmFontFormat( rSymbols[i].GetFace() ) , true );
     811             :     }
     812           0 :     const SmFormat & rStdFmt = GetStandardFormat();
     813           0 :     for (i = FNT_BEGIN;  i <= FNT_END;  ++i)
     814             :     {
     815           0 :         aUsedList.GetFontFormatId( SmFontFormat( rStdFmt.GetFont( i ) ) , true );
     816             :     }
     817             : 
     818             :     // remove unused font-formats from list
     819           0 :     SmFontFormatList &rFntFmtList = GetFontFormatList();
     820           0 :     size_t nCnt = rFntFmtList.GetCount();
     821           0 :     SmFontFormat *pTmpFormat = new SmFontFormat[ nCnt ];
     822           0 :     String       *pId     = new String      [ nCnt ];
     823             :     size_t k;
     824           0 :     for (k = 0;  k < nCnt;  ++k)
     825             :     {
     826           0 :         pTmpFormat[k] = *rFntFmtList.GetFontFormat( k );
     827           0 :         pId[k]     = rFntFmtList.GetFontFormatId( k );
     828             :     }
     829           0 :     for (k = 0;  k < nCnt;  ++k)
     830             :     {
     831           0 :         if (0 == aUsedList.GetFontFormatId( pTmpFormat[k] ).Len())
     832             :         {
     833           0 :             rFntFmtList.RemoveFontFormat( pId[k] );
     834             :         }
     835             :     }
     836           0 :     delete [] pId;
     837           0 :     delete [] pTmpFormat;
     838           0 : }
     839             : 
     840             : 
     841           7 : void SmMathConfig::LoadOther()
     842             : {
     843           7 :     if (!pOther)
     844           7 :         pOther = new SmCfgOther;
     845             : 
     846           7 :     Sequence< OUString > aNames( GetOtherPropertyNames() );
     847           7 :     sal_Int32 nProps = aNames.getLength();
     848             : 
     849          14 :     Sequence< Any > aValues( GetProperties( aNames ) );
     850           7 :     if (nProps  &&  aValues.getLength() == nProps)
     851             :     {
     852           7 :         const Any *pValues = aValues.getConstArray();
     853           7 :         const Any *pVal = pValues;
     854             : 
     855           7 :         sal_Int16   nTmp16 = 0;
     856           7 :         bool    bTmp = false;
     857             : 
     858             :         // Print/Title
     859           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     860           7 :             pOther->bPrintTitle = bTmp;
     861           7 :         ++pVal;
     862             :         // Print/FormulaText
     863           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     864           7 :             pOther->bPrintFormulaText = bTmp;
     865           7 :         ++pVal;
     866             :         // Print/Frame
     867           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     868           7 :             pOther->bPrintFrame = bTmp;
     869           7 :         ++pVal;
     870             :         // Print/Size
     871           7 :         if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     872           7 :             pOther->ePrintSize = (SmPrintSize) nTmp16;
     873           7 :         ++pVal;
     874             :         // Print/ZoomFactor
     875           7 :         if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     876           7 :             pOther->nPrintZoomFactor = nTmp16;
     877           7 :         ++pVal;
     878             :         // LoadSave/IsSaveOnlyUsedSymbols
     879           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     880           7 :             pOther->bIsSaveOnlyUsedSymbols = bTmp;
     881           7 :         ++pVal;
     882             :         // Misc/IgnoreSpacesRight
     883           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     884           7 :             pOther->bIgnoreSpacesRight = bTmp;
     885           7 :         ++pVal;
     886             :         // View/ToolboxVisible
     887           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     888           7 :             pOther->bToolboxVisible = bTmp;
     889           7 :         ++pVal;
     890             :         // View/AutoRedraw
     891           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     892           7 :             pOther->bAutoRedraw = bTmp;
     893           7 :         ++pVal;
     894             :         // View/FormulaCursor
     895           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     896           7 :             pOther->bFormulaCursor = bTmp;
     897           7 :         ++pVal;
     898             : 
     899             :         OSL_ENSURE( pVal - pValues == nProps, "property mismatch" );
     900           7 :         SetOtherModified( false );
     901           7 :     }
     902           7 : }
     903             : 
     904             : 
     905           2 : void SmMathConfig::SaveOther()
     906             : {
     907           2 :     if (!pOther || !IsOtherModified())
     908           4 :         return;
     909             : 
     910           0 :     const Sequence< OUString > aNames( GetOtherPropertyNames() );
     911           0 :     sal_Int32 nProps = aNames.getLength();
     912             : 
     913           0 :     Sequence< Any > aValues( nProps );
     914           0 :     Any *pValues = aValues.getArray();
     915           0 :     Any *pValue  = pValues;
     916             : 
     917             :     // Print/Title
     918           0 :     *pValue++ <<= (sal_Bool) pOther->bPrintTitle;
     919             :     // Print/FormulaText
     920           0 :     *pValue++ <<= (sal_Bool) pOther->bPrintFormulaText;
     921             :     // Print/Frame
     922           0 :     *pValue++ <<= (sal_Bool) pOther->bPrintFrame;
     923             :     // Print/Size
     924           0 :     *pValue++ <<= (sal_Int16) pOther->ePrintSize;
     925             :     // Print/ZoomFactor
     926           0 :     *pValue++ <<= (sal_Int16) pOther->nPrintZoomFactor;
     927             :     // LoadSave/IsSaveOnlyUsedSymbols
     928           0 :     *pValue++ <<= (sal_Bool) pOther->bIsSaveOnlyUsedSymbols;
     929             :     // Misc/IgnoreSpacesRight
     930           0 :     *pValue++ <<= (sal_Bool) pOther->bIgnoreSpacesRight;
     931             :     // View/ToolboxVisible
     932           0 :     *pValue++ <<= (sal_Bool) pOther->bToolboxVisible;
     933             :     // View/AutoRedraw
     934           0 :     *pValue++ <<= (sal_Bool) pOther->bAutoRedraw;
     935             :     // View/FormulaCursor
     936           0 :     *pValue++ <<= (sal_Bool) pOther->bFormulaCursor;
     937             : 
     938             :     OSL_ENSURE( pValue - pValues == nProps, "property mismatch" );
     939           0 :     PutProperties( aNames , aValues );
     940             : 
     941           0 :     SetOtherModified( false );
     942             : }
     943             : 
     944           7 : void SmMathConfig::LoadFormat()
     945             : {
     946           7 :     if (!pFormat)
     947           7 :         pFormat = new SmFormat;
     948             : 
     949             : 
     950           7 :     Sequence< OUString > aNames( GetFormatPropertyNames() );
     951           7 :     sal_Int32 nProps = aNames.getLength();
     952             : 
     953          14 :     Sequence< Any > aValues( GetProperties( aNames ) );
     954           7 :     if (nProps  &&  aValues.getLength() == nProps)
     955             :     {
     956           7 :         const Any *pValues = aValues.getConstArray();
     957           7 :         const Any *pVal = pValues;
     958             : 
     959           7 :         OUString    aTmpStr;
     960           7 :         sal_Int16       nTmp16 = 0;
     961           7 :         bool        bTmp = false;
     962             : 
     963             :         // StandardFormat/Textmode
     964           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     965           7 :             pFormat->SetTextmode( bTmp );
     966           7 :         ++pVal;
     967             :         // StandardFormat/GreekCharStyle
     968           7 :         if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     969           7 :             pFormat->SetGreekCharStyle( nTmp16 );
     970           7 :         ++pVal;
     971             :         // StandardFormat/ScaleNormalBracket
     972           7 :         if (pVal->hasValue()  &&  (*pVal >>= bTmp))
     973           7 :             pFormat->SetScaleNormalBrackets( bTmp );
     974           7 :         ++pVal;
     975             :         // StandardFormat/HorizontalAlignment
     976           7 :         if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     977           7 :             pFormat->SetHorAlign( (SmHorAlign) nTmp16 );
     978           7 :         ++pVal;
     979             :         // StandardFormat/BaseSize
     980           7 :         if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     981           7 :             pFormat->SetBaseSize( Size(0, SmPtsTo100th_mm( nTmp16 )) );
     982           7 :         ++pVal;
     983             : 
     984             :         sal_uInt16 i;
     985          42 :         for (i = SIZ_BEGIN;  i <= SIZ_END;  ++i)
     986             :         {
     987          35 :             if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     988          35 :                 pFormat->SetRelSize( i, nTmp16 );
     989          35 :             ++pVal;
     990             :         }
     991             : 
     992         175 :         for (i = DIS_BEGIN;  i <= DIS_END;  ++i)
     993             :         {
     994         168 :             if (pVal->hasValue()  &&  (*pVal >>= nTmp16))
     995         168 :                 pFormat->SetDistance( i, nTmp16 );
     996         168 :             ++pVal;
     997             :         }
     998             : 
     999           7 :         LanguageType nLang = Application::GetSettings().GetUILanguageTag().getLanguageType();
    1000          56 :         for (i = FNT_BEGIN;  i < FNT_END;  ++i)
    1001             :         {
    1002          49 :             Font aFnt;
    1003          49 :             bool bUseDefaultFont = true;
    1004          49 :             if (pVal->hasValue()  &&  (*pVal >>= aTmpStr))
    1005             :             {
    1006          49 :                 bUseDefaultFont = aTmpStr.isEmpty();
    1007          49 :                 if (bUseDefaultFont)
    1008             :                 {
    1009          49 :                     aFnt = pFormat->GetFont( i );
    1010          49 :                     aFnt.SetName( GetDefaultFontName( nLang, i ) );
    1011             :                 }
    1012             :                 else
    1013             :                 {
    1014           0 :                     const SmFontFormat *pFntFmt = GetFontFormatList().GetFontFormat( aTmpStr );
    1015             :                     OSL_ENSURE( pFntFmt, "unknown FontFormat" );
    1016           0 :                     if (pFntFmt)
    1017           0 :                         aFnt = pFntFmt->GetFont();
    1018             :                 }
    1019             :             }
    1020          49 :             ++pVal;
    1021             : 
    1022          49 :             aFnt.SetSize( pFormat->GetBaseSize() );
    1023          49 :             pFormat->SetFont( i, aFnt, bUseDefaultFont );
    1024          49 :         }
    1025             : 
    1026             :         OSL_ENSURE( pVal - pValues == nProps, "property mismatch" );
    1027           7 :         SetFormatModified( false );
    1028           7 :     }
    1029           7 : }
    1030             : 
    1031             : 
    1032           2 : void SmMathConfig::SaveFormat()
    1033             : {
    1034           2 :     if (!pFormat || !IsFormatModified())
    1035           4 :         return;
    1036             : 
    1037           0 :     const Sequence< OUString > aNames( GetFormatPropertyNames() );
    1038           0 :     sal_Int32 nProps = aNames.getLength();
    1039             : 
    1040           0 :     Sequence< Any > aValues( nProps );
    1041           0 :     Any *pValues = aValues.getArray();
    1042           0 :     Any *pValue  = pValues;
    1043             : 
    1044             :     // StandardFormat/Textmode
    1045           0 :     *pValue++ <<= (sal_Bool) pFormat->IsTextmode();
    1046             :     // StandardFormat/GreekCharStyle
    1047           0 :     *pValue++ <<= (sal_Int16) pFormat->GetGreekCharStyle();
    1048             :     // StandardFormat/ScaleNormalBracket
    1049           0 :     *pValue++ <<= (sal_Bool) pFormat->IsScaleNormalBrackets();
    1050             :     // StandardFormat/HorizontalAlignment
    1051           0 :     *pValue++ <<= (sal_Int16) pFormat->GetHorAlign();
    1052             :     // StandardFormat/BaseSize
    1053           0 :     *pValue++ <<= (sal_Int16) SmRoundFraction( Sm100th_mmToPts(
    1054           0 :                                     pFormat->GetBaseSize().Height() ) );
    1055             : 
    1056             :     sal_uInt16 i;
    1057           0 :     for (i = SIZ_BEGIN;  i <= SIZ_END;  ++i)
    1058           0 :         *pValue++ <<= (sal_Int16) pFormat->GetRelSize( i );
    1059             : 
    1060           0 :     for (i = DIS_BEGIN;  i <= DIS_END;  ++i)
    1061           0 :         *pValue++ <<= (sal_Int16) pFormat->GetDistance( i );
    1062             : 
    1063           0 :     for (i = FNT_BEGIN;  i < FNT_END;  ++i)
    1064             :     {
    1065           0 :         OUString aFntFmtId;
    1066             : 
    1067           0 :         if (!pFormat->IsDefaultFont( i ))
    1068             :         {
    1069           0 :             SmFontFormat aFntFmt( pFormat->GetFont( i ) );
    1070           0 :             aFntFmtId = GetFontFormatList().GetFontFormatId( aFntFmt, true );
    1071           0 :             OSL_ENSURE( !aFntFmtId.isEmpty(), "FontFormatId not found" );
    1072             :         }
    1073             : 
    1074           0 :         *pValue++ <<= aFntFmtId;
    1075           0 :     }
    1076             : 
    1077             :     OSL_ENSURE( pValue - pValues == nProps, "property mismatch" );
    1078           0 :     PutProperties( aNames , aValues );
    1079             : 
    1080           0 :     SetFormatModified( false );
    1081             : }
    1082             : 
    1083             : 
    1084         202 : const SmFormat & SmMathConfig::GetStandardFormat() const
    1085             : {
    1086         202 :     if (!pFormat)
    1087           7 :         ((SmMathConfig *) this)->LoadFormat();
    1088         202 :     return *pFormat;
    1089             : }
    1090             : 
    1091             : 
    1092           0 : void SmMathConfig::SetStandardFormat( const SmFormat &rFormat, bool bSaveFontFormatList )
    1093             : {
    1094           0 :     if (!pFormat)
    1095           0 :         LoadFormat();
    1096           0 :     if (rFormat != *pFormat)
    1097             :     {
    1098           0 :         *pFormat = rFormat;
    1099           0 :         SetFormatModified( true );
    1100           0 :         SaveFormat();
    1101             : 
    1102           0 :         if (bSaveFontFormatList)
    1103             :         {
    1104             :             // needed for SmFontTypeDialog's DefaultButtonClickHdl
    1105           0 :             SetFontFormatListModified( true );
    1106           0 :             SaveFontFormatList();
    1107             :         }
    1108             :     }
    1109           0 : }
    1110             : 
    1111             : 
    1112          21 : SmPrintSize SmMathConfig::GetPrintSize() const
    1113             : {
    1114          21 :     if (!pOther)
    1115           3 :         ((SmMathConfig *) this)->LoadOther();
    1116          21 :     return pOther->ePrintSize;
    1117             : }
    1118             : 
    1119             : 
    1120           0 : void SmMathConfig::SetPrintSize( SmPrintSize eSize )
    1121             : {
    1122           0 :     if (!pOther)
    1123           0 :         LoadOther();
    1124           0 :     if (eSize != pOther->ePrintSize)
    1125             :     {
    1126           0 :         pOther->ePrintSize = eSize;
    1127           0 :         SetOtherModified( true );
    1128             :     }
    1129           0 : }
    1130             : 
    1131             : 
    1132          21 : sal_uInt16 SmMathConfig::GetPrintZoomFactor() const
    1133             : {
    1134          21 :     if (!pOther)
    1135           0 :         ((SmMathConfig *) this)->LoadOther();
    1136          21 :     return pOther->nPrintZoomFactor;
    1137             : }
    1138             : 
    1139             : 
    1140           0 : void SmMathConfig::SetPrintZoomFactor( sal_uInt16 nVal )
    1141             : {
    1142           0 :     if (!pOther)
    1143           0 :         LoadOther();
    1144           0 :     if (nVal != pOther->nPrintZoomFactor)
    1145             :     {
    1146           0 :         pOther->nPrintZoomFactor = nVal;
    1147           0 :         SetOtherModified( true );
    1148             :     }
    1149           0 : }
    1150             : 
    1151             : 
    1152           0 : void SmMathConfig::SetOtherIfNotEqual( bool &rbItem, bool bNewVal )
    1153             : {
    1154           0 :     if (bNewVal != rbItem)
    1155             :     {
    1156           0 :         rbItem = bNewVal;
    1157           0 :         SetOtherModified( true );
    1158             :     }
    1159           0 : }
    1160             : 
    1161             : 
    1162          21 : bool SmMathConfig::IsPrintTitle() const
    1163             : {
    1164          21 :     if (!pOther)
    1165           0 :         ((SmMathConfig *) this)->LoadOther();
    1166          21 :     return pOther->bPrintTitle;
    1167             : }
    1168             : 
    1169             : 
    1170           0 : void SmMathConfig::SetPrintTitle( bool bVal )
    1171             : {
    1172           0 :     if (!pOther)
    1173           0 :         LoadOther();
    1174           0 :     SetOtherIfNotEqual( pOther->bPrintTitle, bVal );
    1175           0 : }
    1176             : 
    1177             : 
    1178          21 : bool SmMathConfig::IsPrintFormulaText() const
    1179             : {
    1180          21 :     if (!pOther)
    1181           0 :         ((SmMathConfig *) this)->LoadOther();
    1182          21 :     return pOther->bPrintFormulaText;
    1183             : }
    1184             : 
    1185             : 
    1186           0 : void SmMathConfig::SetPrintFormulaText( bool bVal )
    1187             : {
    1188           0 :     if (!pOther)
    1189           0 :         LoadOther();
    1190           0 :     SetOtherIfNotEqual( pOther->bPrintFormulaText, bVal );
    1191           0 : }
    1192             : 
    1193         318 : bool SmMathConfig::IsSaveOnlyUsedSymbols() const
    1194             : {
    1195         318 :     if (!pOther)
    1196           4 :         ((SmMathConfig *) this)->LoadOther();
    1197         318 :     return pOther->bIsSaveOnlyUsedSymbols;
    1198             : }
    1199             : 
    1200          21 : bool SmMathConfig::IsPrintFrame() const
    1201             : {
    1202          21 :     if (!pOther)
    1203           0 :         ((SmMathConfig *) this)->LoadOther();
    1204          21 :     return pOther->bPrintFrame;
    1205             : }
    1206             : 
    1207             : 
    1208           0 : void SmMathConfig::SetPrintFrame( bool bVal )
    1209             : {
    1210           0 :     if (!pOther)
    1211           0 :         LoadOther();
    1212           0 :     SetOtherIfNotEqual( pOther->bPrintFrame, bVal );
    1213           0 : }
    1214             : 
    1215             : 
    1216           0 : void SmMathConfig::SetSaveOnlyUsedSymbols( bool bVal )
    1217             : {
    1218           0 :     if (!pOther)
    1219           0 :         LoadOther();
    1220           0 :     SetOtherIfNotEqual( pOther->bIsSaveOnlyUsedSymbols, bVal );
    1221           0 : }
    1222             : 
    1223             : 
    1224          21 : bool SmMathConfig::IsIgnoreSpacesRight() const
    1225             : {
    1226          21 :     if (!pOther)
    1227           0 :         ((SmMathConfig *) this)->LoadOther();
    1228          21 :     return pOther->bIgnoreSpacesRight;
    1229             : }
    1230             : 
    1231             : 
    1232           0 : void SmMathConfig::SetIgnoreSpacesRight( bool bVal )
    1233             : {
    1234           0 :     if (!pOther)
    1235           0 :         LoadOther();
    1236           0 :     SetOtherIfNotEqual( pOther->bIgnoreSpacesRight, bVal );
    1237           0 : }
    1238             : 
    1239             : 
    1240          26 : bool SmMathConfig::IsAutoRedraw() const
    1241             : {
    1242          26 :     if (!pOther)
    1243           0 :         ((SmMathConfig *) this)->LoadOther();
    1244          26 :     return pOther->bAutoRedraw;
    1245             : }
    1246             : 
    1247             : 
    1248           0 : void SmMathConfig::SetAutoRedraw( bool bVal )
    1249             : {
    1250           0 :     if (!pOther)
    1251           0 :         LoadOther();
    1252           0 :     SetOtherIfNotEqual( pOther->bAutoRedraw, bVal );
    1253           0 : }
    1254             : 
    1255             : 
    1256          27 : bool SmMathConfig::IsShowFormulaCursor() const
    1257             : {
    1258          27 :     if (!pOther)
    1259           0 :         ((SmMathConfig *) this)->LoadOther();
    1260          27 :     return pOther->bFormulaCursor;
    1261             : }
    1262             : 
    1263             : 
    1264           0 : void SmMathConfig::SetShowFormulaCursor( bool bVal )
    1265             : {
    1266           0 :     if (!pOther)
    1267           0 :         LoadOther();
    1268           0 :     SetOtherIfNotEqual( pOther->bFormulaCursor, bVal );
    1269           0 : }
    1270             : 
    1271           0 : void SmMathConfig::Notify( const com::sun::star::uno::Sequence< OUString >& )
    1272          21 : {}
    1273             : 
    1274             : /////////////////////////////////////////////////////////////////
    1275             : 
    1276             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10