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

Generated by: LCOV version 1.11