/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _DOCFLD_HXX #define _DOCFLD_HXX #include // fuer SwHash class SwTxtFld; class SwIndex; class SwNodeIndex; class SwCntntNode; class SwCntntFrm; class SwSectionNode; class SwSection; class SwTxtTOXMark; class SwTableBox; class SwTxtINetFmt; class SwFlyFrmFmt; class SwDoc; class SwNode; struct SwPosition; // Update an den Expression Feldern class _SetGetExpFld { sal_uLong nNode; xub_StrLen nCntnt; union { const SwTxtFld* pTxtFld; const SwSection* pSection; const SwPosition* pPos; const SwTxtTOXMark* pTxtTOX; const SwTableBox* pTBox; const SwTxtINetFmt* pTxtINet; const SwFlyFrmFmt* pFlyFmt; } CNTNT; enum _SetGetExpFldType { TEXTFIELD, TEXTTOXMARK, SECTIONNODE, CRSRPOS, TABLEBOX, TEXTINET, FLYFRAME } eSetGetExpFldType; public: _SetGetExpFld( const SwNodeIndex& rNdIdx, const SwTxtFld* pFld = 0, const SwIndex* pIdx = 0 ); _SetGetExpFld( const SwNodeIndex& rNdIdx, const SwTxtINetFmt& rINet, const SwIndex* pIdx = 0 ); _SetGetExpFld( const SwSectionNode& rSectNode, const SwPosition* pPos = 0 ); _SetGetExpFld( const SwTableBox& rTableBox, const SwPosition* pPos = 0 ); _SetGetExpFld( const SwNodeIndex& rNdIdx, const SwTxtTOXMark& rTOX, const SwIndex* pIdx ); _SetGetExpFld( const SwPosition& rPos ); _SetGetExpFld( const SwFlyFrmFmt& rFlyFmt, const SwPosition* pPos = 0 ); sal_Bool operator==( const _SetGetExpFld& rFld ) const; sal_Bool operator<( const _SetGetExpFld& rFld ) const; const SwTxtFld* GetTxtFld() const { return TEXTFIELD == eSetGetExpFldType ? CNTNT.pTxtFld : 0; } const SwTxtTOXMark* GetTOX() const { return TEXTTOXMARK == eSetGetExpFldType ? CNTNT.pTxtTOX : 0; } const SwSection* GetSection() const { return SECTIONNODE == eSetGetExpFldType ? CNTNT.pSection : 0; } const SwTableBox* GetTableBox() const { return TABLEBOX == eSetGetExpFldType ? CNTNT.pTBox : 0; } const SwTxtINetFmt* GetINetFmt() const { return TEXTINET == eSetGetExpFldType ? CNTNT.pTxtINet : 0; } const SwFlyFrmFmt* GetFlyFmt() const { return FLYFRAME == eSetGetExpFldType ? CNTNT.pFlyFmt : 0; } sal_uLong GetNode() const { return nNode; } xub_StrLen GetCntnt() const { return nCntnt; } const void* GetPointer() const { return CNTNT.pTxtFld; } void GetPos( SwPosition& rPos ) const; void GetPosOfContent( SwPosition& rPos ) const; const SwNode* GetNodeFromCntnt() const; xub_StrLen GetCntPosFromCntnt() const; void SetBodyPos( const SwCntntFrm& rFrm ); }; typedef _SetGetExpFld* _SetGetExpFldPtr; SV_DECL_PTRARR_SORT_DEL( _SetGetExpFlds, _SetGetExpFldPtr, 0, 10 ) // Struktur zum Speichern der Strings aus SetExp-String-Feldern struct _HashStr : public SwHash { String aSetStr; _HashStr( const String& rName, const String& rText, _HashStr* = 0 ); }; struct SwCalcFldType : public SwHash { const SwFieldType* pFldType; SwCalcFldType( const String& rStr, const SwFieldType* pFldTyp ) : SwHash( rStr ), pFldType( pFldTyp ) {} }; // Suche nach dem String, der unter dem Namen in der HashTabelle abgelegt // wurde void LookString( SwHash** ppTbl, sal_uInt16 nSize, const String& rName, String& rRet, sal_uInt16* pPos = 0 ); // -------- const int GETFLD_ALL = 3; // veroderte Flags !! const int GETFLD_CALC = 1; const int GETFLD_EXPAND = 2; class SwDocUpdtFld { _SetGetExpFlds* pFldSortLst; // akt. Field-Liste zum Calculieren SwCalcFldType* aFldTypeTable[ TBLSZ ]; // noch eine weitere Optimierung - wird z.Z. nicht angesprochen! long nFldUpdtPos; // ab dieser Position mit Update starten SwCntntNode* pCNode; // der TxtNode zur UpdatePos. sal_uLong nNodes; // sollte die NodesAnzahl unterschiedlich sein sal_uInt8 nFldLstGetMode; sal_Bool bInUpdateFlds : 1; // zur Zeit laeuft ein UpdateFlds, sal_Bool bFldsDirty : 1; // irgendwelche Felder sind ungueltig void _MakeFldList( SwDoc& pDoc, int eGetMode ); void GetBodyNode( const SwTxtFld& , sal_uInt16 nFldWhich ); void GetBodyNode( const SwSectionNode&); public: SwDocUpdtFld(); ~SwDocUpdtFld(); const _SetGetExpFlds* GetSortLst() const { return pFldSortLst; } void MakeFldList( SwDoc& rDoc, int bAll, int eGetMode ); void InsDelFldInFldLst( sal_Bool bIns, const SwTxtFld& rFld ); void InsertFldType( const SwFieldType& rType ); void RemoveFldType( const SwFieldType& rType ); sal_Bool IsInUpdateFlds() const { return bInUpdateFlds; } void SetInUpdateFlds( sal_Bool b ) { bInUpdateFlds = b; } sal_Bool IsFieldsDirty() const { return bFldsDirty; } void SetFieldsDirty( sal_Bool b ) { bFldsDirty = b; } SwHash** GetFldTypeTable() const { return (SwHash**)aFldTypeTable; } }; #endif // _DOCFLD_HXX