LCOV - code coverage report
Current view: top level - sw/source/core/fields - expfld.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 173 626 27.6 %
Date: 2012-08-25 Functions: 31 66 47.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 75 831 9.0 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : 
      30                 :            : #include <hintids.hxx>
      31                 :            : #include <unotools/collatorwrapper.hxx>
      32                 :            : #include <unotools/charclass.hxx>
      33                 :            : #include <editeng/unolingu.hxx>
      34                 :            : #include <svx/pageitem.hxx>
      35                 :            : #include <editeng/langitem.hxx>
      36                 :            : #include <editeng/fontitem.hxx>
      37                 :            : #include <com/sun/star/text/SetVariableType.hpp>
      38                 :            : #include <unofield.hxx>
      39                 :            : #include <frmfmt.hxx>
      40                 :            : #include <fmtfld.hxx>
      41                 :            : #include <txtfld.hxx>
      42                 :            : #include <fmtanchr.hxx>
      43                 :            : #include <txtftn.hxx>
      44                 :            : #include <doc.hxx>
      45                 :            : #include <layfrm.hxx>
      46                 :            : #include <pagefrm.hxx>
      47                 :            : #include <cntfrm.hxx>
      48                 :            : #include <rootfrm.hxx>
      49                 :            : #include <tabfrm.hxx>
      50                 :            : #include <flyfrm.hxx>
      51                 :            : #include <ftnfrm.hxx>
      52                 :            : #include <rowfrm.hxx>
      53                 :            : #include <expfld.hxx>
      54                 :            : #include <usrfld.hxx>
      55                 :            : #include <ndtxt.hxx>
      56                 :            : #include <calc.hxx>
      57                 :            : #include <pam.hxx>
      58                 :            : #include <docfld.hxx>
      59                 :            : #include <swcache.hxx>
      60                 :            : #include <swtable.hxx>
      61                 :            : #include <breakit.hxx>
      62                 :            : #include <SwStyleNameMapper.hxx>
      63                 :            : #include <unofldmid.h>
      64                 :            : #include <numrule.hxx>
      65                 :            : #include <switerator.hxx>
      66                 :            : 
      67                 :            : using namespace ::com::sun::star;
      68                 :            : using namespace ::com::sun::star::text;
      69                 :            : using ::rtl::OUString;
      70                 :            : 
      71                 :            : //-----------------------------------------------------------------------------
      72                 :        342 : sal_Int16 lcl_SubTypeToAPI(sal_uInt16 nSubType)
      73                 :            : {
      74                 :        342 :         sal_Int16 nRet = 0;
      75   [ -  +  -  +  :        342 :         switch(nSubType)
                      - ]
      76                 :            :         {
      77                 :            :             case nsSwGetSetExpType::GSE_EXPR:
      78                 :          0 :                 nRet = SetVariableType::VAR;      // 0
      79                 :          0 :                 break;
      80                 :            :             case nsSwGetSetExpType::GSE_SEQ:
      81                 :        336 :                 nRet = SetVariableType::SEQUENCE; // 1
      82                 :        336 :                 break;
      83                 :            :             case nsSwGetSetExpType::GSE_FORMULA:
      84                 :          0 :                 nRet = SetVariableType::FORMULA;  // 2
      85                 :          0 :                 break;
      86                 :            :             case nsSwGetSetExpType::GSE_STRING:
      87                 :          6 :                 nRet = SetVariableType::STRING;   // 3
      88                 :          6 :                 break;
      89                 :            :         }
      90                 :        342 :         return nRet;
      91                 :            : }
      92                 :            : //-----------------------------------------------------------------------------
      93                 :          3 : sal_Int32 lcl_APIToSubType(const uno::Any& rAny)
      94                 :            : {
      95                 :          3 :         sal_Int16 nVal = 0;
      96                 :          3 :         rAny >>= nVal;
      97                 :          3 :         sal_Int32 nSet = 0;
      98   [ -  -  -  +  :          3 :         switch(nVal)
                      - ]
      99                 :            :         {
     100                 :          0 :             case SetVariableType::VAR:      nSet = nsSwGetSetExpType::GSE_EXPR;  break;
     101                 :          0 :             case SetVariableType::SEQUENCE: nSet = nsSwGetSetExpType::GSE_SEQ;  break;
     102                 :          0 :             case SetVariableType::FORMULA:  nSet = nsSwGetSetExpType::GSE_FORMULA; break;
     103                 :          3 :             case SetVariableType::STRING:   nSet = nsSwGetSetExpType::GSE_STRING;   break;
     104                 :            :             default:
     105                 :            :                 OSL_FAIL("wrong value");
     106                 :          0 :                 nSet = -1;
     107                 :            :         }
     108                 :          3 :         return nSet;
     109                 :            : }
     110                 :            : 
     111                 :            : //-----------------------------------------------------------------------------
     112                 :            : 
     113                 :         18 : void ReplacePoint( String& rTmpName, sal_Bool bWithCommandType )
     114                 :            : {
     115                 :            :     // replace first and last (if bWithCommandType: last two) dot Ersten und letzten Punkt ersetzen, da in Tabellennamen Punkte erlaubt sind
     116                 :            :     // since table names may contain dots
     117                 :            : 
     118                 :         18 :     xub_StrLen nLen = rTmpName.Len();
     119                 :         18 :     sal_Unicode *pStr = rTmpName.GetBufferAccess(), *pBackStr = pStr + nLen;
     120                 :            : 
     121         [ -  + ]:         18 :     long nBackCount = bWithCommandType ? 2 : 1;
     122                 :            :     xub_StrLen i;
     123                 :            : 
     124         [ +  + ]:         72 :     for( i = nLen; i; --i, pBackStr-- )
     125         [ -  + ]:         54 :         if( '.' == *pBackStr )
     126                 :            :         {
     127                 :          0 :             *pBackStr = DB_DELIM;
     128         [ #  # ]:          0 :             if(!--nBackCount)
     129                 :          0 :                 break;
     130                 :            :         }
     131         [ +  + ]:         72 :     for( i = 0; i < nLen; ++i, ++pStr )
     132         [ -  + ]:         54 :         if( '.' == *pStr )
     133                 :            :         {
     134                 :          0 :             *pStr = DB_DELIM;
     135                 :          0 :             break;
     136                 :            :         }
     137                 :         18 : }
     138                 :            : 
     139                 :          0 : SwTxtNode* GetFirstTxtNode( const SwDoc& rDoc, SwPosition& rPos,
     140                 :            :                             const SwCntntFrm *pCFrm, Point &rPt )
     141                 :            : {
     142                 :          0 :     SwTxtNode* pTxtNode = 0;
     143         [ #  # ]:          0 :     if ( !pCFrm )
     144                 :            :     {
     145                 :          0 :         const SwNodes& rNodes = rDoc.GetNodes();
     146                 :          0 :         rPos.nNode = *rNodes.GetEndOfContent().StartOfSectionNode();
     147                 :            :         SwCntntNode* pCNd;
     148 [ #  # ][ #  # ]:          0 :         while( 0 != (pCNd = rNodes.GoNext( &rPos.nNode ) ) &&
                 [ #  # ]
     149                 :          0 :                 0 == ( pTxtNode = pCNd->GetTxtNode() ) )
     150                 :            :                         ;
     151                 :            :         OSL_ENSURE( pTxtNode, "wo ist der 1.TextNode" );
     152         [ #  # ]:          0 :         rPos.nContent.Assign( pTxtNode, 0 );
     153                 :            :     }
     154         [ #  # ]:          0 :     else if ( !pCFrm->IsValid() )
     155                 :            :     {
     156                 :          0 :         pTxtNode = (SwTxtNode*)pCFrm->GetNode();
     157                 :          0 :         rPos.nNode = *pTxtNode;
     158         [ #  # ]:          0 :         rPos.nContent.Assign( pTxtNode, 0 );
     159                 :            :     }
     160                 :            :     else
     161                 :            :     {
     162                 :          0 :         pCFrm->GetCrsrOfst( &rPos, rPt );
     163                 :          0 :         pTxtNode = rPos.nNode.GetNode().GetTxtNode();
     164                 :            :     }
     165                 :          0 :     return pTxtNode;
     166                 :            : }
     167                 :            : 
     168                 :          0 : const SwTxtNode* GetBodyTxtNode( const SwDoc& rDoc, SwPosition& rPos,
     169                 :            :                                 const SwFrm& rFrm )
     170                 :            : {
     171                 :          0 :     const SwLayoutFrm* pLayout = (SwLayoutFrm*)rFrm.GetUpper();
     172                 :          0 :     const SwTxtNode* pTxtNode = 0;
     173                 :            : 
     174         [ #  # ]:          0 :     while( pLayout )
     175                 :            :     {
     176         [ #  # ]:          0 :         if( pLayout->IsFlyFrm() )
     177                 :            :         {
     178                 :            :             // hole das FlyFormat
     179                 :          0 :             SwFrmFmt* pFlyFmt = ((SwFlyFrm*)pLayout)->GetFmt();
     180                 :            :             OSL_ENSURE( pFlyFmt, "kein FlyFormat gefunden, wo steht das Feld" );
     181                 :            : 
     182                 :          0 :             const SwFmtAnchor &rAnchor = pFlyFmt->GetAnchor();
     183                 :            : 
     184         [ #  # ]:          0 :             if( FLY_AT_FLY == rAnchor.GetAnchorId() )
     185                 :            :             {
     186                 :            :                 // und der Fly muss irgendwo angehaengt sein, also
     187                 :            :                 // den befragen
     188                 :          0 :                 pLayout = (SwLayoutFrm*)((SwFlyFrm*)pLayout)->GetAnchorFrm();
     189                 :          0 :                 continue;
     190                 :            :             }
     191   [ #  #  #  #  :          0 :             else if ((FLY_AT_PARA == rAnchor.GetAnchorId()) ||
           #  # ][ #  # ]
     192                 :          0 :                      (FLY_AT_CHAR == rAnchor.GetAnchorId()) ||
     193                 :          0 :                      (FLY_AS_CHAR == rAnchor.GetAnchorId()))
     194                 :            :             {
     195                 :            :                 OSL_ENSURE( rAnchor.GetCntntAnchor(), "keine gueltige Position" );
     196                 :          0 :                 rPos = *rAnchor.GetCntntAnchor();
     197                 :          0 :                 pTxtNode = rPos.nNode.GetNode().GetTxtNode();
     198         [ #  # ]:          0 :                 if ( FLY_AT_PARA == rAnchor.GetAnchorId() )
     199                 :            :                 {
     200                 :            :                     const_cast<SwTxtNode*>(pTxtNode)->MakeStartIndex(
     201                 :          0 :                             &rPos.nContent );
     202                 :            : // oder doch besser das Ende vom (Anker-)TextNode nehmen ??
     203                 :            : //                  ((SwTxtNode*)pTxtNode)->MakeEndIndex( &rPos.nContent );
     204                 :            :                 }
     205                 :            : 
     206                 :            :                 // noch nicht abbrechen, kann ja auch noch im
     207                 :            :                 // Header/Footer/Footnote/Fly stehen !!
     208                 :          0 :                 pLayout = ((SwFlyFrm*)pLayout)->GetAnchorFrm()
     209         [ #  # ]:          0 :                             ? ((SwFlyFrm*)pLayout)->GetAnchorFrm()->GetUpper() : 0;
     210                 :          0 :                 continue;
     211                 :            :             }
     212                 :            :             else
     213                 :            :             {
     214                 :            :                 pLayout->FindPageFrm()->GetCntntPosition(
     215                 :          0 :                                                 pLayout->Frm().Pos(), rPos );
     216                 :          0 :                 pTxtNode = rPos.nNode.GetNode().GetTxtNode();
     217                 :            :             }
     218                 :            :         }
     219         [ #  # ]:          0 :         else if( pLayout->IsFtnFrm() )
     220                 :            :         {
     221                 :            :             // hole den Node vom Anker
     222                 :          0 :             const SwTxtFtn* pFtn = ((SwFtnFrm*)pLayout)->GetAttr();
     223                 :          0 :             pTxtNode = &pFtn->GetTxtNode();
     224                 :          0 :             rPos.nNode = *pTxtNode;
     225                 :          0 :             rPos.nContent = *pFtn->GetStart();
     226                 :            :         }
     227 [ #  # ][ #  # ]:          0 :         else if( pLayout->IsHeaderFrm() || pLayout->IsFooterFrm() )
                 [ #  # ]
     228                 :            :         {
     229                 :            :             const SwCntntFrm* pCntFrm;
     230                 :          0 :             const SwPageFrm* pPgFrm = pLayout->FindPageFrm();
     231         [ #  # ]:          0 :             if( pLayout->IsHeaderFrm() )
     232                 :            :             {
     233                 :            :                 const SwTabFrm *pTab;
     234 [ #  # ][ #  #  :          0 :                 if( 0 != ( pCntFrm = pPgFrm->FindFirstBodyCntnt()) &&
          #  #  #  #  #  
              # ][ #  # ]
     235                 :          0 :                     0 != (pTab = pCntFrm->FindTabFrm()) && pTab->IsFollow() &&
     236                 :          0 :                     pTab->GetTable()->GetRowsToRepeat() > 0 &&
     237                 :          0 :                     pTab->IsInHeadline( *pCntFrm ) )
     238                 :            :                 {
     239                 :            :                     // take the next line
     240                 :          0 :                     const SwLayoutFrm* pRow = pTab->GetFirstNonHeadlineRow();
     241                 :          0 :                     pCntFrm = pRow->ContainsCntnt();
     242                 :            :                 }
     243                 :            :             }
     244                 :            :             else
     245                 :          0 :                 pCntFrm = pPgFrm->FindLastBodyCntnt();
     246                 :            : 
     247         [ #  # ]:          0 :             if( pCntFrm )
     248                 :            :             {
     249                 :          0 :                 pTxtNode = pCntFrm->GetNode()->GetTxtNode();
     250                 :          0 :                 rPos.nNode = *pTxtNode;
     251                 :          0 :                 ((SwTxtNode*)pTxtNode)->MakeEndIndex( &rPos.nContent );
     252                 :            :             }
     253                 :            :             else
     254                 :            :             {
     255                 :          0 :                 Point aPt( pLayout->Frm().Pos() );
     256                 :          0 :                 aPt.Y()++;      // aus dem Header raus
     257         [ #  # ]:          0 :                 pCntFrm = pPgFrm->GetCntntPos( aPt, sal_False, sal_True, sal_False );
     258         [ #  # ]:          0 :                 pTxtNode = GetFirstTxtNode( rDoc, rPos, pCntFrm, aPt );
     259                 :            :             }
     260                 :            :         }
     261                 :            :         else
     262                 :            :         {
     263                 :          0 :             pLayout = pLayout->GetUpper();
     264                 :          0 :             continue;
     265                 :            :         }
     266                 :          0 :         break;      // gefunden und beende die Schleife
     267                 :            :     }
     268                 :          0 :     return pTxtNode;
     269                 :            : }
     270                 :            : 
     271                 :            : /*--------------------------------------------------------------------
     272                 :            :     Beschreibung: SwSetExpFieldType by JP
     273                 :            :  --------------------------------------------------------------------*/
     274                 :            : 
     275                 :       1549 : SwGetExpFieldType::SwGetExpFieldType(SwDoc* pDc)
     276                 :       1549 :     : SwValueFieldType( pDc, RES_GETEXPFLD )
     277                 :            : {
     278                 :       1549 : }
     279                 :            : 
     280                 :          0 : SwFieldType* SwGetExpFieldType::Copy() const
     281                 :            : {
     282         [ #  # ]:          0 :     return new SwGetExpFieldType(GetDoc());
     283                 :            : }
     284                 :            : 
     285                 :       1551 : void SwGetExpFieldType::Modify( const SfxPoolItem*, const SfxPoolItem* pNew )
     286                 :            : {
     287 [ +  - ][ +  - ]:       1551 :     if( pNew && RES_DOCPOS_UPDATE == pNew->Which() )
                 [ +  - ]
     288                 :       1551 :         NotifyClients( 0, pNew );
     289                 :            :     // sonst nichts weiter expandieren
     290                 :       1551 : }
     291                 :            : 
     292                 :            : /*--------------------------------------------------------------------
     293                 :            :     Beschreibung: SwGetExpField by JP
     294                 :            :  --------------------------------------------------------------------*/
     295                 :            : 
     296                 :         15 : SwGetExpField::SwGetExpField(SwGetExpFieldType* pTyp, const String& rFormel,
     297                 :            :                             sal_uInt16 nSub, sal_uLong nFmt)
     298                 :            :     : SwFormulaField( pTyp, nFmt, 0.0 ),
     299                 :            :     bIsInBodyTxt( sal_True ),
     300                 :            :     nSubType(nSub),
     301         [ +  - ]:         15 :     bLateInitialization( false )
     302                 :            : {
     303         [ +  - ]:         15 :     SetFormula( rFormel );
     304                 :         15 : }
     305                 :            : 
     306                 :          6 : String SwGetExpField::Expand() const
     307                 :            : {
     308         [ -  + ]:          6 :     if(nSubType & nsSwExtendedSubType::SUB_CMD)
     309                 :          0 :         return GetFormula();
     310                 :            :     else
     311                 :          6 :         return sExpand;
     312                 :            : }
     313                 :            : 
     314                 :          0 : String SwGetExpField::GetFieldName() const
     315                 :            : {
     316                 :            :     String aStr( SwFieldType::GetTypeStr(
     317                 :            :         static_cast<sal_uInt16>(((nsSwGetSetExpType::GSE_FORMULA & nSubType) != 0)
     318                 :            :                                             ? TYP_FORMELFLD
     319         [ #  # ]:          0 :                                             : TYP_GETFLD ) ));
     320         [ #  # ]:          0 :     aStr += ' ';
     321 [ #  # ][ #  # ]:          0 :     aStr += GetFormula();
                 [ #  # ]
     322                 :          0 :     return aStr;
     323                 :            : }
     324                 :            : 
     325                 :         12 : SwField* SwGetExpField::Copy() const
     326                 :            : {
     327                 :         12 :     SwGetExpField *pTmp = new SwGetExpField((SwGetExpFieldType*)GetTyp(),
     328 [ +  - ][ +  - ]:         12 :                                             GetFormula(), nSubType, GetFormat());
     329                 :         12 :     pTmp->SetLanguage(GetLanguage());
     330         [ +  - ]:         12 :     pTmp->SwValueField::SetValue(GetValue());
     331                 :         12 :     pTmp->sExpand       = sExpand;
     332                 :         12 :     pTmp->bIsInBodyTxt  = bIsInBodyTxt;
     333                 :         12 :     pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
     334         [ -  + ]:         12 :     if( bLateInitialization )
     335                 :          0 :         pTmp->SetLateInitialization();
     336                 :            : 
     337                 :         12 :     return pTmp;
     338                 :            : }
     339                 :            : 
     340                 :          0 : void SwGetExpField::ChangeExpansion( const SwFrm& rFrm, const SwTxtFld& rFld )
     341                 :            : {
     342         [ #  # ]:          0 :     if( bIsInBodyTxt )      // nur Felder in Footer, Header, FootNote, Flys
     343                 :            :         return;
     344                 :            : 
     345                 :            :     OSL_ENSURE( !rFrm.IsInDocBody(), "Flag ist nicht richtig, Frame steht im DocBody" );
     346                 :            : 
     347                 :            :     // bestimme mal das Dokument (oder geht es noch einfacher?)
     348                 :          0 :     const SwTxtNode* pTxtNode = &rFld.GetTxtNode();
     349                 :          0 :     SwDoc& rDoc = *(SwDoc*)pTxtNode->GetDoc();
     350                 :            : 
     351                 :            :     // einen Index fuers bestimmen vom TextNode anlegen
     352 [ #  # ][ #  # ]:          0 :     SwPosition aPos( SwNodeIndex( rDoc.GetNodes() ) );
         [ #  # ][ #  # ]
     353         [ #  # ]:          0 :     pTxtNode = GetBodyTxtNode( rDoc, aPos, rFrm );
     354                 :            : 
     355                 :            :     // Wenn kein Layout vorhanden, kommt es in Kopf und Fusszeilen dazu
     356                 :            :     // das ChnageExpansion uebers Layout-Formatieren aufgerufen wird
     357                 :            :     // aber kein TxtNode vorhanden ist
     358                 :            :     //
     359         [ #  # ]:          0 :     if(!pTxtNode)
     360                 :            :         return;
     361                 :            :     // #i82544#
     362         [ #  # ]:          0 :     if( bLateInitialization )
     363                 :            :     {
     364 [ #  # ][ #  # ]:          0 :         SwFieldType* pSetExpFld = rDoc.GetFldType(RES_SETEXPFLD, GetFormula(), sal_False);
                 [ #  # ]
     365         [ #  # ]:          0 :         if( pSetExpFld )
     366                 :            :         {
     367                 :          0 :             bLateInitialization = false;
     368         [ #  # ]:          0 :             if( !(GetSubType() & nsSwGetSetExpType::GSE_STRING) &&
           [ #  #  #  # ]
                 [ #  # ]
     369                 :          0 :                 static_cast< SwSetExpFieldType* >(pSetExpFld)->GetType() == nsSwGetSetExpType::GSE_STRING )
     370         [ #  # ]:          0 :             SetSubType( nsSwGetSetExpType::GSE_STRING );
     371                 :            :         }
     372                 :            :     }
     373                 :            : 
     374         [ #  # ]:          0 :     _SetGetExpFld aEndFld( aPos.nNode, &rFld, &aPos.nContent );
     375 [ #  # ][ #  # ]:          0 :     if(GetSubType() & nsSwGetSetExpType::GSE_STRING)
     376                 :            :     {
     377                 :            :         SwHash** ppHashTbl;
     378                 :            :         sal_uInt16 nSize;
     379         [ #  # ]:          0 :         rDoc.FldsToExpand( ppHashTbl, nSize, aEndFld );
     380 [ #  # ][ #  # ]:          0 :         LookString( ppHashTbl, nSize, GetFormula(), sExpand );
                 [ #  # ]
     381         [ #  # ]:          0 :         ::DeleteHashTable( ppHashTbl, nSize );      // HashTabelle loeschen
     382                 :            :     }
     383                 :            :     else
     384                 :            :     {
     385                 :            :         // fuelle den Calculator mit den Werten
     386         [ #  # ]:          0 :         SwCalc aCalc( rDoc );
     387         [ #  # ]:          0 :         rDoc.FldsToCalc(aCalc, aEndFld);
     388                 :            : 
     389                 :            :         // Wert berechnen
     390 [ #  # ][ #  # ]:          0 :         SetValue(aCalc.Calculate(GetFormula()).GetDouble());
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     391                 :            : 
     392                 :            :         // Auswertung nach Format
     393                 :          0 :         sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue(
     394   [ #  #  #  # ]:          0 :                                 GetValue(), GetFormat(), GetLanguage());
         [ #  # ][ #  # ]
                 [ #  # ]
     395 [ #  # ][ #  # ]:          0 :     }
     396                 :            : }
     397                 :            : 
     398                 :          0 : rtl::OUString SwGetExpField::GetPar2() const
     399                 :            : {
     400         [ #  # ]:          0 :     return GetFormula();
     401                 :            : }
     402                 :            : 
     403                 :          0 : void SwGetExpField::SetPar2(const rtl::OUString& rStr)
     404                 :            : {
     405         [ #  # ]:          0 :     SetFormula(rStr);
     406                 :          0 : }
     407                 :            : 
     408                 :          3 : sal_uInt16 SwGetExpField::GetSubType() const
     409                 :            : {
     410                 :          3 :     return nSubType;
     411                 :            : }
     412                 :            : 
     413                 :          0 : void SwGetExpField::SetSubType(sal_uInt16 nType)
     414                 :            : {
     415                 :          0 :     nSubType = nType;
     416                 :          0 : }
     417                 :            : 
     418                 :         15 : void SwGetExpField::SetLanguage(sal_uInt16 nLng)
     419                 :            : {
     420         [ -  + ]:         15 :     if (nSubType & nsSwExtendedSubType::SUB_CMD)
     421                 :          0 :         SwField::SetLanguage(nLng);
     422                 :            :     else
     423                 :         15 :         SwValueField::SetLanguage(nLng);
     424                 :         15 : }
     425                 :            : 
     426                 :          9 : bool SwGetExpField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     427                 :            : {
     428   [ -  -  -  +  :          9 :     switch( nWhichId )
             +  -  +  - ]
     429                 :            :     {
     430                 :            :     case FIELD_PROP_DOUBLE:
     431         [ #  # ]:          0 :         rAny <<= GetValue();
     432                 :          0 :         break;
     433                 :            :     case FIELD_PROP_FORMAT:
     434         [ #  # ]:          0 :         rAny <<= (sal_Int32)GetFormat();
     435                 :          0 :         break;
     436                 :            :     case FIELD_PROP_USHORT1:
     437         [ #  # ]:          0 :          rAny <<= (sal_Int16)nSubType;
     438                 :          0 :         break;
     439                 :            :     case FIELD_PROP_PAR1:
     440 [ +  - ][ +  - ]:          3 :          rAny <<= OUString( GetFormula() );
     441                 :          3 :         break;
     442                 :            :     case FIELD_PROP_SUBTYPE:
     443                 :            :         {
     444         [ +  - ]:          3 :             sal_Int16 nRet = lcl_SubTypeToAPI(GetSubType() & 0xff);
     445         [ +  - ]:          3 :             rAny <<= nRet;
     446                 :            :         }
     447                 :          3 :         break;
     448                 :            :     case FIELD_PROP_BOOL2:
     449                 :            :         {
     450                 :          0 :             sal_Bool bTmp = 0 != (nSubType & nsSwExtendedSubType::SUB_CMD);
     451         [ #  # ]:          0 :             rAny.setValue(&bTmp, ::getBooleanCppuType());
     452                 :            :         }
     453                 :          0 :         break;
     454                 :            :     case FIELD_PROP_PAR4:
     455         [ +  - ]:          3 :         rAny <<= rtl::OUString(GetExpStr());
     456                 :          3 :         break;
     457                 :            :     default:
     458                 :          0 :         return SwField::QueryValue(rAny, nWhichId);
     459                 :            :     }
     460                 :          9 :     return true;
     461                 :            : }
     462                 :            : 
     463                 :          0 : bool SwGetExpField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     464                 :            : {
     465                 :          0 :     sal_Int32 nTmp = 0;
     466         [ #  # ]:          0 :     String sTmp;
     467   [ #  #  #  #  :          0 :     switch( nWhichId )
             #  #  #  # ]
     468                 :            :     {
     469                 :            :     case FIELD_PROP_DOUBLE:
     470         [ #  # ]:          0 :         SwValueField::SetValue(*(double*) rAny.getValue());
     471                 :          0 :         break;
     472                 :            :     case FIELD_PROP_FORMAT:
     473                 :          0 :         rAny >>= nTmp;
     474                 :          0 :         SetFormat(nTmp);
     475                 :          0 :         break;
     476                 :            :     case FIELD_PROP_USHORT1:
     477                 :          0 :          rAny >>= nTmp;
     478                 :          0 :          nSubType = static_cast<sal_uInt16>(nTmp);
     479                 :          0 :         break;
     480                 :            :     case FIELD_PROP_PAR1:
     481 [ #  # ][ #  # ]:          0 :          SetFormula( ::GetString( rAny, sTmp ));
     482                 :          0 :         break;
     483                 :            :     case FIELD_PROP_SUBTYPE:
     484                 :          0 :         nTmp = lcl_APIToSubType(rAny);
     485         [ #  # ]:          0 :         if( nTmp >=0 )
     486 [ #  # ][ #  # ]:          0 :             SetSubType( static_cast<sal_uInt16>((GetSubType() & 0xff00) | nTmp));
     487                 :          0 :         break;
     488                 :            :     case FIELD_PROP_BOOL2:
     489         [ #  # ]:          0 :         if(*(sal_Bool*) rAny.getValue())
     490                 :          0 :             nSubType |= nsSwExtendedSubType::SUB_CMD;
     491                 :            :         else
     492                 :          0 :             nSubType &= (~nsSwExtendedSubType::SUB_CMD);
     493                 :          0 :         break;
     494                 :            :     case FIELD_PROP_PAR4:
     495 [ #  # ][ #  # ]:          0 :         ChgExpStr(::GetString( rAny, sTmp ));
     496                 :          0 :         break;
     497                 :            :     default:
     498         [ #  # ]:          0 :         return SwField::PutValue(rAny, nWhichId);
     499                 :            :     }
     500         [ #  # ]:          0 :     return true;
     501                 :            : }
     502                 :            : 
     503                 :       6202 : SwSetExpFieldType::SwSetExpFieldType( SwDoc* pDc, const String& rName, sal_uInt16 nTyp )
     504                 :            :     : SwValueFieldType( pDc, RES_SETEXPFLD ),
     505                 :            :     sName( rName ),
     506                 :            :     pOutlChgNd( 0 ),
     507                 :            :     sDelim( rtl::OUString(".") ),
     508                 :            :     nType(nTyp), nLevel( UCHAR_MAX ),
     509 [ +  - ][ +  - ]:       6202 :     bDeleted( sal_False )
     510                 :            : {
     511         [ +  + ]:       6202 :     if( ( nsSwGetSetExpType::GSE_SEQ | nsSwGetSetExpType::GSE_STRING ) & nType )
     512                 :       6196 :         EnableFormat(sal_False);    // Numberformatter nicht einsetzen
     513                 :       6202 : }
     514                 :            : 
     515                 :          3 : SwFieldType* SwSetExpFieldType::Copy() const
     516                 :            : {
     517 [ +  - ][ +  - ]:          3 :     SwSetExpFieldType* pNew = new SwSetExpFieldType(GetDoc(), sName, nType);
     518                 :          3 :     pNew->bDeleted = bDeleted;
     519                 :          3 :     pNew->sDelim = sDelim;
     520                 :          3 :     pNew->nLevel = nLevel;
     521                 :            : 
     522                 :          3 :     return pNew;
     523                 :            : }
     524                 :            : 
     525                 :       2094 : const rtl::OUString& SwSetExpFieldType::GetName() const
     526                 :            : {
     527                 :       2094 :     return sName;
     528                 :            : }
     529                 :            : 
     530                 :          0 : void SwSetExpFieldType::Modify( const SfxPoolItem*, const SfxPoolItem* )
     531                 :            : {
     532                 :          0 :     return;     // nicht weiter expandieren
     533                 :            : }
     534                 :            : 
     535                 :          0 : void SwSetExpFieldType::SetSeqFormat(sal_uLong nFmt)
     536                 :            : {
     537         [ #  # ]:          0 :     SwIterator<SwFmtFld,SwFieldType> aIter(*this);
     538 [ #  # ][ #  # ]:          0 :     for( SwFmtFld* pFld = aIter.First(); pFld; pFld = aIter.Next() )
                 [ #  # ]
     539 [ #  # ][ #  # ]:          0 :         pFld->GetFld()->ChangeFormat( nFmt );
     540                 :          0 : }
     541                 :            : 
     542                 :          0 : sal_uLong SwSetExpFieldType::GetSeqFormat()
     543                 :            : {
     544         [ #  # ]:          0 :     if( !GetDepends() )
     545                 :          0 :         return SVX_NUM_ARABIC;
     546                 :            : 
     547         [ #  # ]:          0 :     SwField *pFld = ((SwFmtFld*)GetDepends())->GetFld();
     548                 :          0 :     return pFld->GetFormat();
     549                 :            : }
     550                 :            : 
     551                 :          0 : sal_uInt16 SwSetExpFieldType::SetSeqRefNo( SwSetExpField& rFld )
     552                 :            : {
     553 [ #  # ][ #  # ]:          0 :     if( !GetDepends() || !(nsSwGetSetExpType::GSE_SEQ & nType) )
                 [ #  # ]
     554                 :          0 :         return USHRT_MAX;
     555                 :            : 
     556                 :            : extern void InsertSort( std::vector<sal_uInt16>& rArr, sal_uInt16 nIdx, sal_uInt16* pInsPos = 0 );
     557         [ #  # ]:          0 :     std::vector<sal_uInt16> aArr;
     558                 :            : 
     559                 :            :     sal_uInt16 n;
     560                 :            : 
     561                 :            :     // dann testmal, ob die Nummer schon vergeben ist oder ob eine neue
     562                 :            :     // bestimmt werden muss.
     563         [ #  # ]:          0 :     SwIterator<SwFmtFld,SwFieldType> aIter( *this );
     564                 :            :     const SwTxtNode* pNd;
     565 [ #  # ][ #  # ]:          0 :     for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() )
                 [ #  # ]
     566         [ #  # ]:          0 :         if( pF->GetFld() != &rFld && pF->GetTxtFld() &&
           [ #  #  #  # ]
         [ #  # ][ #  # ]
     567                 :          0 :             0 != ( pNd = pF->GetTxtFld()->GetpTxtNode() ) &&
     568         [ #  # ]:          0 :             pNd->GetNodes().IsDocNodes() )
     569         [ #  # ]:          0 :             InsertSort( aArr, ((SwSetExpField*)pF->GetFld())->GetSeqNumber() );
     570                 :            : 
     571                 :            : 
     572                 :            :     // teste erstmal ob die Nummer schon vorhanden ist:
     573                 :          0 :     sal_uInt16 nNum = rFld.GetSeqNumber();
     574         [ #  # ]:          0 :     if( USHRT_MAX != nNum )
     575                 :            :     {
     576         [ #  # ]:          0 :         for( n = 0; n < aArr.size(); ++n )
     577 [ #  # ][ #  # ]:          0 :             if( aArr[ n ] > nNum )
     578                 :          0 :                 return nNum;            // nicht vorhanden -> also benutzen
     579 [ #  # ][ #  # ]:          0 :             else if( aArr[ n ] == nNum )
     580                 :          0 :                 break;                  // schon vorhanden -> neue erzeugen
     581                 :            : 
     582         [ #  # ]:          0 :         if( n == aArr.size() )
     583                 :          0 :             return nNum;            // nicht vorhanden -> also benutzen
     584                 :            :     }
     585                 :            : 
     586                 :            :     // alle Nummern entsprechend geflag, also bestimme die richtige Nummer
     587         [ #  # ]:          0 :     for( n = 0; n < aArr.size(); ++n )
     588 [ #  # ][ #  # ]:          0 :         if( n != aArr[ n ] )
     589                 :          0 :             break;
     590                 :            : 
     591                 :          0 :     rFld.SetSeqNumber( n );
     592         [ #  # ]:          0 :     return n;
     593                 :            : }
     594                 :            : 
     595                 :          0 : sal_uInt16 SwSetExpFieldType::GetSeqFldList( SwSeqFldList& rList )
     596                 :            : {
     597                 :          0 :     rList.Clear();
     598                 :            : 
     599         [ #  # ]:          0 :     SwIterator<SwFmtFld,SwFieldType> aIter( *this );
     600                 :            :     const SwTxtNode* pNd;
     601 [ #  # ][ #  # ]:          0 :     for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() )
                 [ #  # ]
     602   [ #  #  #  # ]:          0 :         if( pF->GetTxtFld() &&
         [ #  # ][ #  # ]
     603                 :          0 :             0 != ( pNd = pF->GetTxtFld()->GetpTxtNode() ) &&
     604         [ #  # ]:          0 :             pNd->GetNodes().IsDocNodes() )
     605                 :            :         {
     606                 :            :             _SeqFldLstElem* pNew = new _SeqFldLstElem(
     607                 :            :                     pNd->GetExpandTxt( 0, USHRT_MAX ),
     608 [ #  # ][ #  # ]:          0 :                     ((SwSetExpField*)pF->GetFld())->GetSeqNumber() );
         [ #  # ][ #  # ]
     609         [ #  # ]:          0 :             rList.InsertSort( pNew );
     610                 :            :         }
     611                 :            : 
     612         [ #  # ]:          0 :     return rList.Count();
     613                 :            : }
     614                 :            : 
     615                 :            : 
     616                 :          0 : void SwSetExpFieldType::SetChapter( SwSetExpField& rFld, const SwNode& rNd )
     617                 :            : {
     618                 :          0 :     const SwTxtNode* pTxtNd = rNd.FindOutlineNodeOfLevel( nLevel );
     619         [ #  # ]:          0 :     if( pTxtNd )
     620                 :            :     {
     621                 :          0 :         SwNumRule * pRule = pTxtNd->GetNumRule();
     622                 :            : 
     623         [ #  # ]:          0 :         if (pRule)
     624                 :            :         {
     625                 :            :             // --> OD 2005-11-02 #i51089 - TUNING#
     626         [ #  # ]:          0 :             if ( pTxtNd->GetNum() )
     627                 :            :             {
     628                 :          0 :                 const SwNodeNum & aNum = *(pTxtNd->GetNum());
     629                 :            : 
     630                 :            :                 // nur die Nummer besorgen, ohne Pre-/Post-fixstrings
     631         [ #  # ]:          0 :                 String sNumber( pRule->MakeNumString(aNum, sal_False ));
     632                 :            : 
     633         [ #  # ]:          0 :                 if( sNumber.Len() )
     634 [ #  # ][ #  # ]:          0 :                     rFld.ChgExpStr(  ( sNumber += sDelim ) += rFld.GetExpStr() );
         [ #  # ][ #  # ]
     635                 :            :             }
     636                 :            :             else
     637                 :            :             {
     638                 :            :                 OSL_FAIL( "<SwSetExpFieldType::SetChapter(..)> - text node with numbering rule, but without number. This is a serious defect -> inform OD" );
     639                 :            :             }
     640                 :            :         }
     641                 :            :     }
     642                 :          0 : }
     643                 :            : 
     644                 :        420 : bool SwSetExpFieldType::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     645                 :            : {
     646   [ +  -  +  - ]:        420 :     switch( nWhichId )
     647                 :            :     {
     648                 :            :     case FIELD_PROP_SUBTYPE:
     649                 :            :         {
     650                 :        336 :             sal_Int16 nRet = lcl_SubTypeToAPI(GetType());
     651         [ +  - ]:        336 :             rAny <<= nRet;
     652                 :            :         }
     653                 :        336 :         break;
     654                 :            :     case FIELD_PROP_PAR2:
     655         [ #  # ]:          0 :         rAny <<= OUString(GetDelimiter());
     656                 :          0 :         break;
     657                 :            :     case FIELD_PROP_SHORT1:
     658                 :            :         {
     659         [ -  + ]:         84 :             sal_Int8 nRet = nLevel < MAXLEVEL? nLevel : -1;
     660         [ +  - ]:         84 :             rAny <<= nRet;
     661                 :            :         }
     662                 :         84 :         break;
     663                 :            :     default:
     664                 :            :         OSL_FAIL("illegal property");
     665                 :            :     }
     666                 :        420 :     return true;
     667                 :            : }
     668                 :            : 
     669                 :        255 : bool SwSetExpFieldType::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     670                 :            : {
     671   [ +  -  +  - ]:        255 :     switch( nWhichId )
     672                 :            :     {
     673                 :            :     case FIELD_PROP_SUBTYPE:
     674                 :            :         {
     675                 :          3 :             sal_Int32 nSet = lcl_APIToSubType(rAny);
     676         [ +  - ]:          3 :             if(nSet >=0)
     677                 :          3 :                 SetType(static_cast<sal_uInt16>(nSet));
     678                 :            :         }
     679                 :          3 :         break;
     680                 :            :     case FIELD_PROP_PAR2:
     681                 :            :         {
     682         [ #  # ]:          0 :             String sTmp;
     683 [ #  # ][ #  # ]:          0 :             if( ::GetString( rAny, sTmp ).Len() )
     684         [ #  # ]:          0 :                 SetDelimiter( sTmp );
     685                 :            :             else
     686 [ #  # ][ #  # ]:          0 :                 SetDelimiter(rtl::OUString(" "));
         [ #  # ][ #  # ]
     687                 :            :         }
     688                 :          0 :         break;
     689                 :            :     case FIELD_PROP_SHORT1:
     690                 :            :         {
     691                 :        252 :             sal_Int8 nLvl = 0;
     692                 :        252 :             rAny >>= nLvl;
     693 [ #  # ][ -  + ]:        252 :             if(nLvl < 0 || nLvl >= MAXLEVEL)
     694                 :        252 :                 SetOutlineLvl(UCHAR_MAX);
     695                 :            :             else
     696                 :          0 :                 SetOutlineLvl(nLvl);
     697                 :            :         }
     698                 :        252 :         break;
     699                 :            :     default:
     700                 :            :         OSL_FAIL("illegal property");
     701                 :            :     }
     702                 :        255 :     return true;
     703                 :            : }
     704                 :            : 
     705                 :          0 : bool SwSeqFldList::InsertSort( _SeqFldLstElem* pNew )
     706                 :            : {
     707         [ #  # ]:          0 :     sal_Unicode* p = pNew->sDlgEntry.GetBufferAccess();
     708         [ #  # ]:          0 :     while( *p )
     709                 :            :     {
     710         [ #  # ]:          0 :         if( *p < 0x20 )
     711                 :          0 :             *p = 0x20;
     712                 :          0 :         ++p;
     713                 :            :     }
     714                 :            : 
     715                 :            :     sal_uInt16 nPos;
     716         [ #  # ]:          0 :     bool bRet = SeekEntry( *pNew, &nPos );
     717         [ #  # ]:          0 :     if( !bRet )
     718 [ #  # ][ #  # ]:          0 :         maData.insert( maData.begin() + nPos, pNew );
     719                 :          0 :     return bRet;
     720                 :            : }
     721                 :            : 
     722                 :          0 : bool SwSeqFldList::SeekEntry( const _SeqFldLstElem& rNew, sal_uInt16* pP ) const
     723                 :            : {
     724                 :          0 :     sal_uInt16 nO = maData.size(), nM, nU = 0;
     725         [ #  # ]:          0 :     if( nO > 0 )
     726                 :            :     {
     727         [ #  # ]:          0 :         CollatorWrapper & rCaseColl = ::GetAppCaseCollator(),
     728         [ #  # ]:          0 :                         & rColl = ::GetAppCollator();
     729         [ #  # ]:          0 :         const CharClass& rCC = GetAppCharClass();
     730                 :            : 
     731                 :            :         //#59900# Die Sortierung soll die Nummer korrekt einordnen
     732                 :            :         //also "10" nach "9" und nicht "10" nach "1"
     733                 :          0 :         const String& rTmp2 = rNew.sDlgEntry;
     734                 :          0 :         xub_StrLen nFndPos2 = 0;
     735         [ #  # ]:          0 :         String sNum2( rTmp2.GetToken( 0, ' ', nFndPos2 ));
     736         [ #  # ]:          0 :         sal_Bool bIsNum2IsNumeric = rCC.isAsciiNumeric( sNum2 );
     737 [ #  # ][ #  # ]:          0 :         sal_Int32 nNum2 = bIsNum2IsNumeric ? sNum2.ToInt32() : 0;
     738                 :            : 
     739                 :          0 :         nO--;
     740         [ #  # ]:          0 :         while( nU <= nO )
     741                 :            :         {
     742                 :          0 :             nM = nU + ( nO - nU ) / 2;
     743                 :            : 
     744                 :            :             //#59900# Die Sortierung soll die Nummer korrekt einordnen
     745                 :            :             //also "10" nach "9" und nicht "10" nach "1"
     746                 :          0 :             const String& rTmp1 = maData[nM]->sDlgEntry;
     747                 :          0 :             xub_StrLen nFndPos1 = 0;
     748         [ #  # ]:          0 :             String sNum1( rTmp1.GetToken( 0, ' ', nFndPos1 ));
     749                 :            :             sal_Int32 nCmp;
     750                 :            : 
     751 [ #  # ][ #  # ]:          0 :             if( bIsNum2IsNumeric && rCC.isNumeric( sNum1 ) )
         [ #  # ][ #  # ]
     752                 :            :             {
     753         [ #  # ]:          0 :                 sal_Int32 nNum1 = sNum1.ToInt32();
     754                 :          0 :                 nCmp = nNum2 - nNum1;
     755         [ #  # ]:          0 :                 if( 0 == nCmp )
     756                 :            :                     nCmp = rCaseColl.compareString( rTmp2.Copy( nFndPos2 ),
     757 [ #  # ][ #  # ]:          0 :                                                        rTmp1.Copy( nFndPos1 ));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     758                 :            :             }
     759                 :            :             else
     760 [ #  # ][ #  # ]:          0 :                 nCmp = rColl.compareString( rTmp2, rTmp1 );
                 [ #  # ]
     761                 :            : 
     762         [ #  # ]:          0 :             if( 0 == nCmp )
     763                 :            :             {
     764         [ #  # ]:          0 :                 if( pP ) *pP = nM;
     765                 :          0 :                 return true;
     766                 :            :             }
     767         [ #  # ]:          0 :             else if( 0 < nCmp )
     768                 :          0 :                 nU = nM + 1;
     769         [ #  # ]:          0 :             else if( nM == 0 )
     770                 :            :                 break;
     771                 :            :             else
     772                 :          0 :                 nO = nM - 1;
     773         [ #  # ]:          0 :         }
              [ #  #  # ]
         [ #  # ][ #  # ]
     774                 :            :     }
     775         [ #  # ]:          0 :     if( pP ) *pP = nU;
     776                 :          0 :     return false;
     777                 :            : }
     778                 :            : 
     779                 :            : /*--------------------------------------------------------------------
     780                 :            :     Beschreibung: SwSetExpField by JP
     781                 :            :  --------------------------------------------------------------------*/
     782                 :            : 
     783                 :         15 : SwSetExpField::SwSetExpField(SwSetExpFieldType* pTyp, const String& rFormel,
     784                 :            :                                         sal_uLong nFmt)
     785                 :            :     : SwFormulaField( pTyp, nFmt, 0.0 ), nSeqNo( USHRT_MAX ),
     786 [ +  - ][ +  - ]:         15 :     nSubType(0)
                 [ +  - ]
     787                 :            : {
     788         [ +  - ]:         15 :     SetFormula(rFormel);
     789                 :            :     // SubType ignorieren !!!
     790                 :         15 :     bInput = sal_False;
     791         [ -  + ]:         15 :     if( IsSequenceFld() )
     792                 :            :     {
     793         [ #  # ]:          0 :         SwValueField::SetValue(1.0);
     794         [ #  # ]:          0 :         if( !rFormel.Len() )
     795                 :            :         {
     796         [ #  # ]:          0 :             String sFormel(rFormel);
     797 [ #  # ][ #  # ]:          0 :             sFormel += pTyp->GetName();
     798         [ #  # ]:          0 :             sFormel += '+';
     799         [ #  # ]:          0 :             sFormel += '1';
     800 [ #  # ][ #  # ]:          0 :             SetFormula(sFormel);
     801                 :            :         }
     802                 :            :     }
     803                 :         15 : }
     804                 :            : 
     805                 :          6 : String SwSetExpField::Expand() const
     806                 :            : {
     807                 :          6 :     String aStr;
     808         [ -  + ]:          6 :     if (nSubType & nsSwExtendedSubType::SUB_CMD)
     809                 :            :     {   // Der CommandString ist gefragt
     810 [ #  # ][ #  # ]:          0 :         aStr = GetTyp()->GetName();
     811         [ #  # ]:          0 :         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " = " ));
     812 [ #  # ][ #  # ]:          0 :         aStr += GetFormula();
                 [ #  # ]
     813                 :            :     }
     814         [ -  + ]:          6 :     else if(!(nSubType & nsSwExtendedSubType::SUB_INVISIBLE))
     815                 :            :     {   // Der Wert ist sichtbar
     816         [ #  # ]:          0 :         aStr = sExpand;
     817                 :            :     }
     818                 :          6 :     return aStr;
     819                 :            : }
     820                 :            : 
     821                 :            : /*--------------------------------------------------------------------
     822                 :            :     @return the field name
     823                 :            :  --------------------------------------------------------------------*/
     824                 :            : 
     825                 :          0 : String SwSetExpField::GetFieldName() const
     826                 :            : {
     827                 :          0 :     SwFldTypesEnum const nStrType( (IsSequenceFld())
     828                 :            :                             ? TYP_SEQFLD
     829                 :            :                             : (bInput)
     830                 :            :                                 ? TYP_SETINPFLD
     831 [ #  # ][ #  # ]:          0 :                                 : TYP_SETFLD   );
     832                 :            : 
     833                 :          0 :     String aStr( SwFieldType::GetTypeStr( static_cast<sal_uInt16>(nStrType) ) );
     834         [ #  # ]:          0 :     aStr += ' ';
     835 [ #  # ][ #  # ]:          0 :     aStr += GetTyp()->GetName();
     836                 :            : 
     837                 :            :     // Sequence: without formula
     838         [ #  # ]:          0 :     if (TYP_SEQFLD != nStrType)
     839                 :            :     {
     840         [ #  # ]:          0 :         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " = " ) );
     841 [ #  # ][ #  # ]:          0 :         aStr += GetFormula();
                 [ #  # ]
     842                 :            :     }
     843                 :          0 :     return aStr;
     844                 :            : }
     845                 :            : 
     846                 :         12 : SwField* SwSetExpField::Copy() const
     847                 :            : {
     848                 :         12 :     SwSetExpField *pTmp = new SwSetExpField((SwSetExpFieldType*)GetTyp(),
     849 [ +  - ][ +  - ]:         12 :                                             GetFormula(), GetFormat());
     850         [ +  - ]:         12 :     pTmp->SwValueField::SetValue(GetValue());
     851                 :         12 :     pTmp->sExpand       = sExpand;
     852                 :         12 :     pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
     853                 :         12 :     pTmp->SetLanguage(GetLanguage());
     854                 :         12 :     pTmp->aPText        = aPText;
     855                 :         12 :     pTmp->bInput        = bInput;
     856                 :         12 :     pTmp->nSeqNo        = nSeqNo;
     857                 :         12 :     pTmp->SetSubType(GetSubType());
     858                 :            : 
     859                 :         12 :     return pTmp;
     860                 :            : }
     861                 :            : 
     862                 :         15 : void SwSetExpField::SetSubType(sal_uInt16 nSub)
     863                 :            : {
     864                 :         15 :     ((SwSetExpFieldType*)GetTyp())->SetType(nSub & 0xff);
     865                 :         15 :     nSubType = nSub & 0xff00;
     866                 :            : 
     867                 :            :     OSL_ENSURE( (nSub & 0xff) != 3, "SubType ist illegal!" );
     868                 :         15 : }
     869                 :            : 
     870                 :         18 : sal_uInt16 SwSetExpField::GetSubType() const
     871                 :            : {
     872                 :         18 :     return ((SwSetExpFieldType*)GetTyp())->GetType() | nSubType;
     873                 :            : }
     874                 :            : 
     875                 :          0 : void SwSetExpField::SetValue( const double& rAny )
     876                 :            : {
     877                 :          0 :     SwValueField::SetValue(rAny);
     878                 :            : 
     879         [ #  # ]:          0 :     if( IsSequenceFld() )
     880         [ #  # ]:          0 :         sExpand = FormatNumber( (sal_uInt32)GetValue(), GetFormat() );
     881                 :            :     else
     882                 :          0 :         sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue( rAny,
     883         [ #  # ]:          0 :                                                 GetFormat(), GetLanguage());
     884                 :          0 : }
     885                 :            : 
     886                 :          0 : void SwGetExpField::SetValue( const double& rAny )
     887                 :            : {
     888                 :          0 :     SwValueField::SetValue(rAny);
     889                 :          0 :     sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue( rAny, GetFormat(),
     890         [ #  # ]:          0 :                                                             GetLanguage());
     891                 :          0 : }
     892                 :            : /* --------------------------------------------------
     893                 :            :     Description: Find the index of the reference text
     894                 :            :     following the current field
     895                 :            :     nHint: search starting position after the current
     896                 :            :     field (or 0 if default)
     897                 :            :  --------------------------------------------------*/
     898                 :          0 : xub_StrLen SwGetExpField::GetReferenceTextPos( const SwFmtFld& rFmt, SwDoc& rDoc, unsigned nHint)
     899                 :            : {
     900                 :            :     //
     901                 :          0 :     const SwTxtFld* pTxtFld = rFmt.GetTxtFld();
     902                 :          0 :     const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode();
     903                 :            :     //
     904         [ #  # ]:          0 :     xub_StrLen nRet = nHint ? nHint : *pTxtFld->GetStart() + 1;
     905         [ #  # ]:          0 :     String sNodeText = rTxtNode.GetTxt();
     906         [ #  # ]:          0 :     sNodeText.Erase(0, nRet);
     907         [ #  # ]:          0 :     if(sNodeText.Len())
     908                 :            :     {
     909                 :            :         // now check if sNodeText starts with a non-alphanumeric character plus blanks
     910 [ #  # ][ #  # ]:          0 :         sal_uInt16 nSrcpt = pBreakIt->GetRealScriptOfText( sNodeText, 0 );
     911                 :            : 
     912                 :            :         static sal_uInt16 nIds[] =
     913                 :            :         {
     914                 :            :             RES_CHRATR_LANGUAGE, RES_CHRATR_LANGUAGE,
     915                 :            :             RES_CHRATR_FONT, RES_CHRATR_FONT,
     916                 :            :             RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_LANGUAGE,
     917                 :            :             RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONT,
     918                 :            :             RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_LANGUAGE,
     919                 :            :             RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONT,
     920                 :            :             0, 0
     921                 :            :         };
     922         [ #  # ]:          0 :         SwAttrSet aSet(rDoc.GetAttrPool(), nIds);
     923         [ #  # ]:          0 :         rTxtNode.GetAttr(aSet, nRet, nRet+1);
     924                 :            : 
     925         [ #  # ]:          0 :         if( RTL_TEXTENCODING_SYMBOL != ((SvxFontItem&)aSet.Get(
     926 [ #  # ][ #  # ]:          0 :                 GetWhichOfScript( RES_CHRATR_FONT, nSrcpt )) ).GetCharSet() )
     927                 :            :         {
     928                 :            :             LanguageType eLang = ((SvxLanguageItem&)aSet.Get(
     929 [ #  # ][ #  # ]:          0 :                 GetWhichOfScript( RES_CHRATR_LANGUAGE, nSrcpt )) ).GetLanguage();
     930 [ #  # ][ #  # ]:          0 :             CharClass aCC( SvxCreateLocale( eLang ));
     931                 :          0 :             sal_Unicode c0 = sNodeText.GetChar(0);
     932         [ #  # ]:          0 :             sal_Bool bIsAlphaNum = aCC.isAlphaNumeric( sNodeText, 0 );
     933 [ #  # ][ #  # ]:          0 :             if( !bIsAlphaNum ||
                 [ #  # ]
     934                 :            :                 (c0 == ' ' || c0 == '\t'))
     935                 :            :             {
     936                 :            :                 // ignoring blanks
     937                 :          0 :                 nRet++;
     938                 :          0 :                 unsigned i = 1;
     939   [ #  #  #  #  :          0 :                 while (i < sNodeText.Len() &&
           #  # ][ #  # ]
     940                 :          0 :                     (sNodeText.GetChar(i) == ' ' ||
     941                 :          0 :                      sNodeText.GetChar(i) == '\t')
     942                 :            :                 )
     943                 :          0 :                     nRet++, i++;
     944         [ #  # ]:          0 :             }
     945         [ #  # ]:          0 :         }
     946                 :            :     }
     947         [ #  # ]:          0 :     return nRet;
     948                 :            : }
     949                 :            : 
     950                 :            : 
     951                 :            : /*--------------------------------------------------------------------
     952                 :            :     Beschreibung: Parameter setzen
     953                 :            :  --------------------------------------------------------------------*/
     954                 :            : 
     955                 :          0 : const rtl::OUString& SwSetExpField::GetPar1() const
     956                 :            : {
     957                 :          0 :     return ((const SwSetExpFieldType*)GetTyp())->GetName();
     958                 :            : }
     959                 :            : 
     960                 :          0 : rtl::OUString SwSetExpField::GetPar2() const
     961                 :            : {
     962                 :          0 :     sal_uInt16 nType = ((SwSetExpFieldType*)GetTyp())->GetType();
     963                 :            : 
     964         [ #  # ]:          0 :     if (nType & nsSwGetSetExpType::GSE_STRING)
     965         [ #  # ]:          0 :         return GetFormula();
     966         [ #  # ]:          0 :     return GetExpandedFormula();
     967                 :            : }
     968                 :            : 
     969                 :          0 : void SwSetExpField::SetPar2(const rtl::OUString& rStr)
     970                 :            : {
     971                 :          0 :     sal_uInt16 nType = ((SwSetExpFieldType*)GetTyp())->GetType();
     972                 :            : 
     973 [ #  # ][ #  # ]:          0 :     if( !(nType & nsSwGetSetExpType::GSE_SEQ) || !rStr.isEmpty() )
                 [ #  # ]
     974                 :            :     {
     975         [ #  # ]:          0 :         if (nType & nsSwGetSetExpType::GSE_STRING)
     976         [ #  # ]:          0 :             SetFormula(rStr);
     977                 :            :         else
     978         [ #  # ]:          0 :             SetExpandedFormula(rStr);
     979                 :            :     }
     980                 :          0 : }
     981                 :            : 
     982                 :            : /*--------------------------------------------------------------------
     983                 :            :     Beschreibung: Eingabefeld Type
     984                 :            :  ---------------------------------------------------------------------*/
     985                 :            : 
     986                 :       1549 : SwInputFieldType::SwInputFieldType( SwDoc* pD )
     987                 :       1549 :     : SwFieldType( RES_INPUTFLD ), pDoc( pD )
     988                 :            : {
     989                 :       1549 : }
     990                 :            : 
     991                 :          0 : SwFieldType* SwInputFieldType::Copy() const
     992                 :            : {
     993         [ #  # ]:          0 :     SwInputFieldType* pType = new SwInputFieldType( pDoc );
     994                 :          0 :     return pType;
     995                 :            : }
     996                 :            : 
     997                 :            : /*--------------------------------------------------------------------
     998                 :            :     Beschreibung: Eingabefeld
     999                 :            :  --------------------------------------------------------------------*/
    1000                 :            : 
    1001                 :         14 : SwInputField::SwInputField(SwInputFieldType* pTyp, const String& rContent,
    1002                 :            :                            const String& rPrompt, sal_uInt16 nSub, sal_uLong nFmt) :
    1003 [ +  - ][ +  - ]:         14 :     SwField(pTyp, nFmt), aContent(rContent), aPText(rPrompt), nSubType(nSub)
         [ +  - ][ +  - ]
    1004                 :            : {
    1005                 :         14 : }
    1006                 :            : 
    1007                 :          0 : String SwInputField::GetFieldName() const
    1008                 :            : {
    1009                 :          0 :     String aStr(SwField::GetFieldName());
    1010         [ #  # ]:          0 :     if ((nSubType & 0x00ff) == INP_USR)
    1011                 :            :     {
    1012 [ #  # ][ #  # ]:          0 :         aStr += GetTyp()->GetName();
    1013         [ #  # ]:          0 :         aStr += ' ';
    1014         [ #  # ]:          0 :         aStr += aContent;
    1015                 :            :     }
    1016                 :          0 :     return aStr;
    1017                 :            : }
    1018                 :            : 
    1019                 :         12 : SwField* SwInputField::Copy() const
    1020                 :            : {
    1021                 :         12 :     SwInputField* pFld = new SwInputField((SwInputFieldType*)GetTyp(), aContent,
    1022 [ +  - ][ +  - ]:         12 :                                           aPText, GetSubType(), GetFormat());
                 [ +  - ]
    1023                 :            : 
    1024                 :         12 :     pFld->SetHelp(aHelp);
    1025                 :         12 :     pFld->SetToolTip(aToolTip);
    1026                 :            : 
    1027                 :         12 :     pFld->SetAutomaticLanguage(IsAutomaticLanguage());
    1028                 :         12 :     return pFld;
    1029                 :            : }
    1030                 :            : 
    1031                 :          8 : String SwInputField::Expand() const
    1032                 :            : {
    1033                 :          8 :     String sRet;
    1034         [ +  - ]:          8 :     if((nSubType & 0x00ff) == INP_TXT)
    1035         [ +  - ]:          8 :         sRet = aContent;
    1036                 :            : 
    1037         [ #  # ]:          0 :     else if( (nSubType & 0x00ff) == INP_USR )
    1038                 :            :     {
    1039                 :            :         SwUserFieldType* pUserTyp = (SwUserFieldType*)
    1040                 :          0 :                             ((SwInputFieldType*)GetTyp())->GetDoc()->
    1041 [ #  # ][ #  # ]:          0 :                             GetFldType( RES_USERFLD, aContent, false );
                 [ #  # ]
    1042         [ #  # ]:          0 :         if( pUserTyp )
    1043 [ #  # ][ #  # ]:          0 :             sRet = pUserTyp->GetContent();
                 [ #  # ]
    1044                 :            :     }
    1045                 :          8 :     return sRet;
    1046                 :            : }
    1047                 :            : 
    1048                 :          6 : bool SwInputField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
    1049                 :            : {
    1050   [ +  -  -  -  :          6 :     switch( nWhichId )
                      - ]
    1051                 :            :     {
    1052                 :            :     case FIELD_PROP_PAR1:
    1053         [ +  - ]:          6 :          rAny <<= OUString( aContent );
    1054                 :          6 :         break;
    1055                 :            :     case FIELD_PROP_PAR2:
    1056         [ #  # ]:          0 :         rAny <<= OUString( aPText );
    1057                 :          0 :         break;
    1058                 :            :     case FIELD_PROP_PAR3:
    1059         [ #  # ]:          0 :         rAny <<= OUString( aHelp );
    1060                 :          0 :         break;
    1061                 :            :     case FIELD_PROP_PAR4:
    1062         [ #  # ]:          0 :         rAny <<= OUString( aToolTip );
    1063                 :          0 :         break;
    1064                 :            :     default:
    1065                 :            :         OSL_FAIL("illegal property");
    1066                 :            :     }
    1067                 :          6 :     return true;
    1068                 :            : }
    1069                 :            : 
    1070                 :          2 : bool SwInputField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
    1071                 :            : {
    1072   [ +  -  -  -  :          2 :     switch( nWhichId )
                      - ]
    1073                 :            :     {
    1074                 :            :     case FIELD_PROP_PAR1:
    1075                 :          2 :          rAny >>= aContent;
    1076                 :          2 :         break;
    1077                 :            :     case FIELD_PROP_PAR2:
    1078                 :          0 :         ::GetString( rAny, aPText );
    1079                 :          0 :         break;
    1080                 :            :     case FIELD_PROP_PAR3:
    1081                 :          0 :         ::GetString( rAny, aHelp );
    1082                 :          0 :         break;
    1083                 :            :     case FIELD_PROP_PAR4:
    1084                 :          0 :         ::GetString( rAny, aToolTip );
    1085                 :          0 :         break;
    1086                 :            :     default:
    1087                 :            :         OSL_FAIL("illegal property");
    1088                 :            :     }
    1089                 :          2 :     return true;
    1090                 :            : }
    1091                 :            : /*--------------------------------------------------------------------
    1092                 :            :     Beschreibung: Bedingung setzen
    1093                 :            :  --------------------------------------------------------------------*/
    1094                 :            : 
    1095                 :          0 : void SwInputField::SetPar1(const rtl::OUString& rStr)
    1096                 :            : {
    1097                 :          0 :     aContent = rStr;
    1098                 :          0 : }
    1099                 :            : 
    1100                 :          0 : const rtl::OUString& SwInputField::GetPar1() const
    1101                 :            : {
    1102                 :          0 :     return aContent;
    1103                 :            : }
    1104                 :            : 
    1105                 :            : /*--------------------------------------------------------------------
    1106                 :            :     Beschreibung: True/False Text
    1107                 :            :  --------------------------------------------------------------------*/
    1108                 :            : 
    1109                 :          0 : void SwInputField::SetPar2(const rtl::OUString& rStr)
    1110                 :            : {
    1111                 :          0 :     aPText = rStr;
    1112                 :          0 : }
    1113                 :            : 
    1114                 :          0 : rtl::OUString SwInputField::GetPar2() const
    1115                 :            : {
    1116                 :          0 :     return aPText;
    1117                 :            : }
    1118                 :            : 
    1119                 :         14 : void SwInputField::SetHelp(const String & rStr)
    1120                 :            : {
    1121                 :         14 :     aHelp = rStr;
    1122                 :         14 : }
    1123                 :            : 
    1124                 :          0 : String SwInputField::GetHelp() const
    1125                 :            : {
    1126                 :          0 :     return aHelp;
    1127                 :            : }
    1128                 :            : 
    1129                 :         14 : void SwInputField::SetToolTip(const String & rStr)
    1130                 :            : {
    1131                 :         14 :     aToolTip = rStr;
    1132                 :         14 : }
    1133                 :            : 
    1134                 :          0 : String SwInputField::GetToolTip() const
    1135                 :            : {
    1136                 :          0 :     return aToolTip;
    1137                 :            : }
    1138                 :            : 
    1139                 :          0 : sal_Bool SwInputField::isFormField() const
    1140                 :            : {
    1141 [ #  # ][ #  # ]:          0 :     return aHelp.Len() > 0 || aToolTip.Len() > 0;
    1142                 :            : }
    1143                 :            : 
    1144                 :         12 : sal_uInt16 SwInputField::GetSubType() const
    1145                 :            : {
    1146                 :         12 :     return nSubType;
    1147                 :            : }
    1148                 :            : 
    1149                 :          0 : void SwInputField::SetSubType(sal_uInt16 nSub)
    1150                 :            : {
    1151                 :          0 :     nSubType = nSub;
    1152                 :          0 : }
    1153                 :            : 
    1154                 :          6 : bool SwSetExpField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
    1155                 :            : {
    1156   [ -  -  -  -  :          6 :     switch( nWhichId )
          -  +  -  +  -  
             -  -  -  - ]
    1157                 :            :     {
    1158                 :            :     case FIELD_PROP_BOOL2:
    1159                 :            :         {
    1160                 :          0 :             sal_Bool bVal = 0 == (nSubType & nsSwExtendedSubType::SUB_INVISIBLE);
    1161         [ #  # ]:          0 :             rAny.setValue(&bVal, ::getBooleanCppuType());
    1162                 :            :         }
    1163                 :          0 :         break;
    1164                 :            :     case FIELD_PROP_FORMAT:
    1165         [ #  # ]:          0 :         rAny <<= (sal_Int32)GetFormat();
    1166                 :          0 :         break;
    1167                 :            :     case FIELD_PROP_USHORT2:
    1168         [ #  # ]:          0 :         rAny <<= (sal_Int16)GetFormat();
    1169                 :          0 :         break;
    1170                 :            :     case FIELD_PROP_USHORT1:
    1171         [ #  # ]:          0 :         rAny <<= (sal_Int16)nSeqNo;
    1172                 :          0 :         break;
    1173                 :            :     case FIELD_PROP_PAR1:
    1174 [ #  # ][ #  # ]:          0 :         rAny <<= OUString ( SwStyleNameMapper::GetProgName(GetPar1(), nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ) );
                 [ #  # ]
    1175                 :          0 :         break;
    1176                 :            :     case FIELD_PROP_PAR2:
    1177                 :            :         {
    1178                 :            :             //I18N - if the formula contains only "TypeName+1"
    1179                 :            :             //and it's one of the initially created sequence fields
    1180                 :            :             //then the localized names has to be replaced by a programmatic name
    1181 [ +  - ][ +  - ]:          3 :             OUString sMyFormula = SwXFieldMaster::LocalizeFormula(*this, GetFormula(), sal_True);
         [ +  - ][ +  - ]
    1182         [ +  - ]:          3 :             rAny <<= OUString( sMyFormula );
    1183                 :            :         }
    1184                 :          3 :         break;
    1185                 :            :     case FIELD_PROP_DOUBLE:
    1186         [ #  # ]:          0 :         rAny <<= (double)GetValue();
    1187                 :          0 :         break;
    1188                 :            :     case FIELD_PROP_SUBTYPE:
    1189                 :            :         {
    1190                 :          3 :             sal_Int16 nRet = 0;
    1191         [ +  - ]:          3 :                 nRet = lcl_SubTypeToAPI(GetSubType() & 0xff);
    1192         [ +  - ]:          3 :             rAny <<= nRet;
    1193                 :            :         }
    1194                 :          3 :         break;
    1195                 :            :     case FIELD_PROP_PAR3:
    1196         [ #  # ]:          0 :         rAny <<= OUString( aPText );
    1197                 :          0 :         break;
    1198                 :            :     case FIELD_PROP_BOOL3:
    1199                 :            :         {
    1200                 :          0 :             sal_Bool bTmp = 0 != (nSubType & nsSwExtendedSubType::SUB_CMD);
    1201         [ #  # ]:          0 :             rAny.setValue(&bTmp, ::getBooleanCppuType());
    1202                 :            :         }
    1203                 :          0 :         break;
    1204                 :            :     case FIELD_PROP_BOOL1:
    1205                 :            :         {
    1206                 :          0 :             sal_Bool bTmp = GetInputFlag();
    1207         [ #  # ]:          0 :             rAny.setValue(&bTmp, ::getBooleanCppuType());
    1208                 :            :         }
    1209                 :          0 :         break;
    1210                 :            :     case FIELD_PROP_PAR4:
    1211         [ #  # ]:          0 :         rAny <<= rtl::OUString(GetExpStr());
    1212                 :          0 :         break;
    1213                 :            :     default:
    1214                 :          0 :         return SwField::QueryValue(rAny, nWhichId);
    1215                 :            :     }
    1216                 :          6 :     return true;
    1217                 :            : }
    1218                 :            : 
    1219                 :          0 : bool SwSetExpField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
    1220                 :            : {
    1221                 :          0 :     sal_Int32 nTmp32 = 0;
    1222                 :          0 :     sal_Int16 nTmp16 = 0;
    1223         [ #  # ]:          0 :     String sTmp;
    1224   [ #  #  #  #  :          0 :     switch( nWhichId )
          #  #  #  #  #  
             #  #  #  # ]
    1225                 :            :     {
    1226                 :            :     case FIELD_PROP_BOOL2:
    1227         [ #  # ]:          0 :         if(*(sal_Bool*)rAny.getValue())
    1228                 :          0 :             nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
    1229                 :            :         else
    1230                 :          0 :             nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
    1231                 :          0 :         break;
    1232                 :            :     case FIELD_PROP_FORMAT:
    1233                 :          0 :         rAny >>= nTmp32;
    1234                 :          0 :         SetFormat(nTmp32);
    1235                 :          0 :         break;
    1236                 :            :     case FIELD_PROP_USHORT2:
    1237                 :            :         {
    1238                 :          0 :             rAny >>= nTmp16;
    1239         [ #  # ]:          0 :             if(nTmp16 <= SVX_NUMBER_NONE )
    1240                 :          0 :                 SetFormat(nTmp16);
    1241                 :            :             else {
    1242                 :            :             }
    1243                 :            :         }
    1244                 :          0 :         break;
    1245                 :            :     case FIELD_PROP_USHORT1:
    1246                 :          0 :         rAny >>= nTmp16;
    1247                 :          0 :         nSeqNo = nTmp16;
    1248                 :          0 :         break;
    1249                 :            :     case FIELD_PROP_PAR1:
    1250                 :            :         SetPar1( SwStyleNameMapper::GetUIName(
    1251 [ #  # ][ #  # ]:          0 :                             ::GetString( rAny, sTmp ), nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ) );
         [ #  # ][ #  # ]
    1252                 :          0 :         break;
    1253                 :            :     case FIELD_PROP_PAR2:
    1254                 :            :         {
    1255                 :          0 :             OUString uTmp;
    1256                 :          0 :             rAny >>= uTmp;
    1257                 :            :             //I18N - if the formula contains only "TypeName+1"
    1258                 :            :             //and it's one of the initially created sequence fields
    1259                 :            :             //then the localized names has to be replaced by a programmatic name
    1260         [ #  # ]:          0 :             OUString sMyFormula = SwXFieldMaster::LocalizeFormula(*this, uTmp, sal_False);
    1261 [ #  # ][ #  # ]:          0 :             SetFormula( sMyFormula );
                 [ #  # ]
    1262                 :            :         }
    1263                 :          0 :         break;
    1264                 :            :     case FIELD_PROP_DOUBLE:
    1265                 :            :         {
    1266                 :          0 :              double fVal = 0.0;
    1267                 :          0 :              rAny >>= fVal;
    1268         [ #  # ]:          0 :              SetValue(fVal);
    1269                 :            :         }
    1270                 :          0 :         break;
    1271                 :            :     case FIELD_PROP_SUBTYPE:
    1272                 :          0 :         nTmp32 = lcl_APIToSubType(rAny);
    1273         [ #  # ]:          0 :         if(nTmp32 >= 0)
    1274 [ #  # ][ #  # ]:          0 :             SetSubType(static_cast<sal_uInt16>((GetSubType() & 0xff00) | nTmp32));
    1275                 :          0 :         break;
    1276                 :            :     case FIELD_PROP_PAR3:
    1277         [ #  # ]:          0 :         ::GetString( rAny, aPText );
    1278                 :          0 :         break;
    1279                 :            :     case FIELD_PROP_BOOL3:
    1280         [ #  # ]:          0 :         if(*(sal_Bool*) rAny.getValue())
    1281                 :          0 :             nSubType |= nsSwExtendedSubType::SUB_CMD;
    1282                 :            :         else
    1283                 :          0 :             nSubType &= (~nsSwExtendedSubType::SUB_CMD);
    1284                 :          0 :         break;
    1285                 :            :     case FIELD_PROP_BOOL1:
    1286                 :          0 :         SetInputFlag(*(sal_Bool*) rAny.getValue());
    1287                 :          0 :         break;
    1288                 :            :     case FIELD_PROP_PAR4:
    1289 [ #  # ][ #  # ]:          0 :         ChgExpStr( ::GetString( rAny, sTmp ));
    1290                 :          0 :         break;
    1291                 :            :     default:
    1292         [ #  # ]:          0 :         return SwField::PutValue(rAny, nWhichId);
    1293                 :            :     }
    1294         [ #  # ]:          0 :     return true;
    1295                 :            : }
    1296                 :            : 
    1297                 :            : 
    1298                 :            : 
    1299                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10