1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _DOCFLD_HXX 24*b1cdbd2cSJim Jagielski #define _DOCFLD_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <calc.hxx> // fuer SwHash 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski class SwTxtFld; 29*b1cdbd2cSJim Jagielski class SwIndex; 30*b1cdbd2cSJim Jagielski class SwNodeIndex; 31*b1cdbd2cSJim Jagielski class SwCntntNode; 32*b1cdbd2cSJim Jagielski class SwCntntFrm; 33*b1cdbd2cSJim Jagielski class SwSectionNode; 34*b1cdbd2cSJim Jagielski class SwSection; 35*b1cdbd2cSJim Jagielski class SwTxtTOXMark; 36*b1cdbd2cSJim Jagielski class SwTableBox; 37*b1cdbd2cSJim Jagielski class SwTxtINetFmt; 38*b1cdbd2cSJim Jagielski class SwFlyFrmFmt; 39*b1cdbd2cSJim Jagielski class SwDoc; 40*b1cdbd2cSJim Jagielski class SwNode; 41*b1cdbd2cSJim Jagielski struct SwPosition; 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski // Update an den Expression Feldern 44*b1cdbd2cSJim Jagielski class _SetGetExpFld 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski sal_uLong nNode; 47*b1cdbd2cSJim Jagielski xub_StrLen nCntnt; 48*b1cdbd2cSJim Jagielski union { 49*b1cdbd2cSJim Jagielski const SwTxtFld* pTxtFld; 50*b1cdbd2cSJim Jagielski const SwSection* pSection; 51*b1cdbd2cSJim Jagielski const SwPosition* pPos; 52*b1cdbd2cSJim Jagielski const SwTxtTOXMark* pTxtTOX; 53*b1cdbd2cSJim Jagielski const SwTableBox* pTBox; 54*b1cdbd2cSJim Jagielski const SwTxtINetFmt* pTxtINet; 55*b1cdbd2cSJim Jagielski const SwFlyFrmFmt* pFlyFmt; 56*b1cdbd2cSJim Jagielski } CNTNT; 57*b1cdbd2cSJim Jagielski enum _SetGetExpFldType 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski TEXTFIELD, TEXTTOXMARK, SECTIONNODE, CRSRPOS, TABLEBOX, 60*b1cdbd2cSJim Jagielski TEXTINET, FLYFRAME 61*b1cdbd2cSJim Jagielski } eSetGetExpFldType; 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski public: 64*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwNodeIndex& rNdIdx, const SwTxtFld* pFld = 0, 65*b1cdbd2cSJim Jagielski const SwIndex* pIdx = 0 ); 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwNodeIndex& rNdIdx, const SwTxtINetFmt& rINet, 68*b1cdbd2cSJim Jagielski const SwIndex* pIdx = 0 ); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwSectionNode& rSectNode, 71*b1cdbd2cSJim Jagielski const SwPosition* pPos = 0 ); 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwTableBox& rTableBox, 74*b1cdbd2cSJim Jagielski const SwPosition* pPos = 0 ); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwNodeIndex& rNdIdx, const SwTxtTOXMark& rTOX, 77*b1cdbd2cSJim Jagielski const SwIndex* pIdx ); 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwPosition& rPos ); 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski _SetGetExpFld( const SwFlyFrmFmt& rFlyFmt, const SwPosition* pPos = 0 ); 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski sal_Bool operator==( const _SetGetExpFld& rFld ) const; 84*b1cdbd2cSJim Jagielski sal_Bool operator<( const _SetGetExpFld& rFld ) const; 85*b1cdbd2cSJim Jagielski GetTxtFld() const86*b1cdbd2cSJim Jagielski const SwTxtFld* GetTxtFld() const 87*b1cdbd2cSJim Jagielski { return TEXTFIELD == eSetGetExpFldType ? CNTNT.pTxtFld : 0; } GetTOX() const88*b1cdbd2cSJim Jagielski const SwTxtTOXMark* GetTOX() const 89*b1cdbd2cSJim Jagielski { return TEXTTOXMARK == eSetGetExpFldType ? CNTNT.pTxtTOX : 0; } GetSection() const90*b1cdbd2cSJim Jagielski const SwSection* GetSection() const 91*b1cdbd2cSJim Jagielski { return SECTIONNODE == eSetGetExpFldType ? CNTNT.pSection : 0; } GetTableBox() const92*b1cdbd2cSJim Jagielski const SwTableBox* GetTableBox() const 93*b1cdbd2cSJim Jagielski { return TABLEBOX == eSetGetExpFldType ? CNTNT.pTBox : 0; } GetINetFmt() const94*b1cdbd2cSJim Jagielski const SwTxtINetFmt* GetINetFmt() const 95*b1cdbd2cSJim Jagielski { return TEXTINET == eSetGetExpFldType ? CNTNT.pTxtINet : 0; } GetFlyFmt() const96*b1cdbd2cSJim Jagielski const SwFlyFrmFmt* GetFlyFmt() const 97*b1cdbd2cSJim Jagielski { return FLYFRAME == eSetGetExpFldType ? CNTNT.pFlyFmt : 0; } 98*b1cdbd2cSJim Jagielski GetNode() const99*b1cdbd2cSJim Jagielski sal_uLong GetNode() const { return nNode; } GetCntnt() const100*b1cdbd2cSJim Jagielski xub_StrLen GetCntnt() const { return nCntnt; } GetPointer() const101*b1cdbd2cSJim Jagielski const void* GetPointer() const { return CNTNT.pTxtFld; } 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski void GetPos( SwPosition& rPos ) const; 104*b1cdbd2cSJim Jagielski void GetPosOfContent( SwPosition& rPos ) const; 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski const SwNode* GetNodeFromCntnt() const; 107*b1cdbd2cSJim Jagielski xub_StrLen GetCntPosFromCntnt() const; 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski void SetBodyPos( const SwCntntFrm& rFrm ); 110*b1cdbd2cSJim Jagielski }; 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski typedef _SetGetExpFld* _SetGetExpFldPtr; 113*b1cdbd2cSJim Jagielski SV_DECL_PTRARR_SORT_DEL( _SetGetExpFlds, _SetGetExpFldPtr, 0, 10 ) 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski // Struktur zum Speichern der Strings aus SetExp-String-Feldern 117*b1cdbd2cSJim Jagielski struct _HashStr : public SwHash 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski String aSetStr; 120*b1cdbd2cSJim Jagielski _HashStr( const String& rName, const String& rText, _HashStr* = 0 ); 121*b1cdbd2cSJim Jagielski }; 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski struct SwCalcFldType : public SwHash 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski const SwFieldType* pFldType; 126*b1cdbd2cSJim Jagielski SwCalcFldTypeSwCalcFldType127*b1cdbd2cSJim Jagielski SwCalcFldType( const String& rStr, const SwFieldType* pFldTyp ) 128*b1cdbd2cSJim Jagielski : SwHash( rStr ), pFldType( pFldTyp ) 129*b1cdbd2cSJim Jagielski {} 130*b1cdbd2cSJim Jagielski }; 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski // Suche nach dem String, der unter dem Namen in der HashTabelle abgelegt 133*b1cdbd2cSJim Jagielski // wurde 134*b1cdbd2cSJim Jagielski void LookString( SwHash** ppTbl, sal_uInt16 nSize, const String& rName, 135*b1cdbd2cSJim Jagielski String& rRet, sal_uInt16* pPos = 0 ); 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // -------- 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski const int GETFLD_ALL = 3; // veroderte Flags !! 141*b1cdbd2cSJim Jagielski const int GETFLD_CALC = 1; 142*b1cdbd2cSJim Jagielski const int GETFLD_EXPAND = 2; 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski class SwDocUpdtFld 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski _SetGetExpFlds* pFldSortLst; // akt. Field-Liste zum Calculieren 147*b1cdbd2cSJim Jagielski SwCalcFldType* aFldTypeTable[ TBLSZ ]; 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski // noch eine weitere Optimierung - wird z.Z. nicht angesprochen! 150*b1cdbd2cSJim Jagielski long nFldUpdtPos; // ab dieser Position mit Update starten 151*b1cdbd2cSJim Jagielski SwCntntNode* pCNode; // der TxtNode zur UpdatePos. 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski sal_uLong nNodes; // sollte die NodesAnzahl unterschiedlich sein 154*b1cdbd2cSJim Jagielski sal_uInt8 nFldLstGetMode; 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski sal_Bool bInUpdateFlds : 1; // zur Zeit laeuft ein UpdateFlds, 157*b1cdbd2cSJim Jagielski sal_Bool bFldsDirty : 1; // irgendwelche Felder sind ungueltig 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski void _MakeFldList( SwDoc& pDoc, int eGetMode ); 160*b1cdbd2cSJim Jagielski void GetBodyNode( const SwTxtFld& , sal_uInt16 nFldWhich ); 161*b1cdbd2cSJim Jagielski void GetBodyNode( const SwSectionNode&); 162*b1cdbd2cSJim Jagielski public: 163*b1cdbd2cSJim Jagielski SwDocUpdtFld(); 164*b1cdbd2cSJim Jagielski ~SwDocUpdtFld(); 165*b1cdbd2cSJim Jagielski GetSortLst() const166*b1cdbd2cSJim Jagielski const _SetGetExpFlds* GetSortLst() const { return pFldSortLst; } 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski void MakeFldList( SwDoc& rDoc, int bAll, int eGetMode ); 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski void InsDelFldInFldLst( sal_Bool bIns, const SwTxtFld& rFld ); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski void InsertFldType( const SwFieldType& rType ); 173*b1cdbd2cSJim Jagielski void RemoveFldType( const SwFieldType& rType ); 174*b1cdbd2cSJim Jagielski IsInUpdateFlds() const175*b1cdbd2cSJim Jagielski sal_Bool IsInUpdateFlds() const { return bInUpdateFlds; } SetInUpdateFlds(sal_Bool b)176*b1cdbd2cSJim Jagielski void SetInUpdateFlds( sal_Bool b ) { bInUpdateFlds = b; } 177*b1cdbd2cSJim Jagielski IsFieldsDirty() const178*b1cdbd2cSJim Jagielski sal_Bool IsFieldsDirty() const { return bFldsDirty; } SetFieldsDirty(sal_Bool b)179*b1cdbd2cSJim Jagielski void SetFieldsDirty( sal_Bool b ) { bFldsDirty = b; } 180*b1cdbd2cSJim Jagielski GetFldTypeTable() const181*b1cdbd2cSJim Jagielski SwHash** GetFldTypeTable() const { return (SwHash**)aFldTypeTable; } 182*b1cdbd2cSJim Jagielski }; 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski #endif // _DOCFLD_HXX 186*b1cdbd2cSJim Jagielski 187