summaryrefslogtreecommitdiff
path: root/sw/inc/rolbck.hxx
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 16:15:01 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 16:15:01 +0000
commit7b0b5cdfeed656b279bc32cd929630d5fc25878b (patch)
tree5b89fb8497d7329d26c43f109bb014c54ffb0e8c /sw/inc/rolbck.hxx
parentd791366863cf9659a01b171ce0e727bfe2f28cdf (diff)
initial import
Diffstat (limited to 'sw/inc/rolbck.hxx')
-rw-r--r--sw/inc/rolbck.hxx433
1 files changed, 433 insertions, 0 deletions
diff --git a/sw/inc/rolbck.hxx b/sw/inc/rolbck.hxx
new file mode 100644
index 000000000000..434d3edc0462
--- /dev/null
+++ b/sw/inc/rolbck.hxx
@@ -0,0 +1,433 @@
+/*************************************************************************
+ *
+ * $RCSfile: rolbck.hxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:14:27 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef _ROLBCK_HXX
+#define _ROLBCK_HXX
+
+#ifndef _SOLAR_H
+#include <tools/solar.h>
+#endif
+#ifndef _SVSTDARR_HXX
+#define _SVSTDARR_USHORTS
+#define _SVSTDARR_USHORTSSORT
+#include <svtools/svstdarr.hxx>
+#endif
+
+#ifndef _SFXITEMSET_HXX
+#include <svtools/itemset.hxx>
+#endif
+
+//Nur die History anziehen, um das docnew.cxx gegen die CLOOK's zu behaupten.
+
+class SwDoc;
+class SwFmt;
+class SwFmtColl;
+class SwHstryHint;
+class SwBookmark;
+class SwTxtAttr;
+class SfxPoolItem;
+class SwTxtNode;
+class SwCntntNode;
+class SwUndoSaveSection;
+class SwTxtFtn;
+class SwTxtFlyCnt;
+class SwUndoDelLayFmt;
+class SwFlyFrmFmt;
+class SwFmtFld;
+class SwTxtFld;
+class SwFieldType;
+class SwTxtTOXMark;
+class SwTxtRefMark;
+class SwFrmFmt;
+class SwNodeIndex;
+class SwpHints;
+class SwFmtChain;
+class SwNode;
+
+#ifndef ROLBCK_HISTORY_ONLY
+
+#ifndef _TOX_HXX
+#include <tox.hxx>
+#endif
+
+#ifndef PRODUCT
+class Writer;
+#define OUT_HSTR_HINT( name ) \
+ friend Writer& OutUndo_Hstr_ ## name( Writer&, const SwHstryHint& );
+#else
+#define OUT_HSTR_HINT( name )
+#endif
+
+enum HISTORY_HINT {
+ HSTRY_SETFMTHNT,
+ HSTRY_RESETFMTHNT,
+ HSTRY_SETTXTHNT,
+ HSTRY_SETTXTFLDHNT,
+ HSTRY_SETREFMARKHNT,
+ HSTRY_SETTOXMARKHNT,
+ HSTRY_RESETTXTHNT,
+ HSTRY_SETFTNHNT,
+ HSTRY_CHGFMTCOLL,
+ HSTRY_FLYCNT,
+ HSTRY_BOOKMARK,
+ HSTRY_SETATTRSET,
+ HSTRY_RESETATTRSET,
+ HSTRY_CHGFLYANCHOR,
+ HSTRY_CHGFLYCHAIN,
+ HSTRY_END
+};
+class SwHstryHint
+{
+ HISTORY_HINT eWhichId;
+public:
+ SwHstryHint( HISTORY_HINT eWh ) : eWhichId( eWh ) {}
+ virtual ~SwHstryHint() {} // jetzt inline
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet ) = 0;
+ HISTORY_HINT Which() const { return eWhichId; }
+};
+
+class SwSetFmtHint : public SwHstryHint
+{
+ SfxPoolItem* pAttr;
+ ULONG nNode;
+ USHORT nSetStt;
+ BYTE nNumLvl;
+ BOOL bNumStt;
+public:
+ SwSetFmtHint( const SfxPoolItem* pFmtHt, ULONG nNode );
+ virtual ~SwSetFmtHint();
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(SetFmtHnt)
+};
+
+class SwResetFmtHint : public SwHstryHint
+{
+ ULONG nNode;
+ USHORT nWhich;
+public:
+ SwResetFmtHint( const SfxPoolItem* pFmtHt, ULONG nNode );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(ResetFmtHnt)
+};
+
+class SwSetTxtHint : public SwHstryHint
+{
+ SfxPoolItem *pAttr;
+ ULONG nNode;
+ xub_StrLen nStart, nEnd;
+public:
+ SwSetTxtHint( /*const*/ SwTxtAttr* pTxtHt, ULONG nNode );
+ virtual ~SwSetTxtHint();
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(SetTxtHnt)
+};
+
+class SwSetTxtFldHint : public SwHstryHint
+{
+ SwFmtFld* pFld;
+ SwFieldType* pFldType;
+ ULONG nNode;
+ xub_StrLen nPos;
+ USHORT nFldWhich;
+public:
+ SwSetTxtFldHint( SwTxtFld* pTxtFld, ULONG nNode );
+ virtual ~SwSetTxtFldHint();
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(SetTxtFldHnt)
+};
+
+class SwSetRefMarkHint : public SwHstryHint
+{
+ String aRefName;
+ ULONG nNode;
+ xub_StrLen nStart, nEnd;
+public:
+ SwSetRefMarkHint( SwTxtRefMark* pTxtHt, ULONG nNode );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(SetRefMarkHnt)
+};
+
+class SwSetTOXMarkHint : public SwHstryHint
+{
+ String aTOXName;
+ TOXTypes eTOXTypes;
+ SwTOXMark aTOXMark;
+ ULONG nNode;
+ xub_StrLen nStart, nEnd;
+public:
+ SwSetTOXMarkHint( SwTxtTOXMark* pTxtHt, ULONG nNode );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ int IsEqual( const SwTOXMark& rCmp ) const;
+ OUT_HSTR_HINT(SetToxMarkHnt)
+};
+
+class SwResetTxtHint : public SwHstryHint
+{
+ ULONG nNode;
+ xub_StrLen nStart, nEnd;
+ USHORT nAttr;
+public:
+ SwResetTxtHint( USHORT nWhich, xub_StrLen nStt, xub_StrLen nEnd, ULONG nNode );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+
+ USHORT GetWhich() const { return nAttr; }
+ ULONG GetNode() const { return nNode; }
+ xub_StrLen GetCntnt() const { return nStart; }
+ OUT_HSTR_HINT(ResetTxtHnt)
+};
+
+class SwSetFtnHint : public SwHstryHint
+{
+ String aFtnStr;
+ SwUndoSaveSection* pUndo;
+ ULONG nNode;
+ xub_StrLen nStart;
+ BOOL bEndNote;
+public:
+ SwSetFtnHint( SwTxtFtn* pTxtFtn, ULONG nNode );
+ SwSetFtnHint( const SwTxtFtn& );
+ ~SwSetFtnHint();
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+
+ const SwUndoSaveSection* GetUndoObj() const { return pUndo; }
+ SwUndoSaveSection* GetUndoObj() { return pUndo; }
+ OUT_HSTR_HINT(SetFtnHnt)
+};
+
+class SwChgFmtColl : public SwHstryHint
+{
+ const SwFmtColl* pColl;
+ ULONG nNode;
+ USHORT nSetStt;
+ BYTE nNdWhich, nNumLvl;
+ BOOL bNumStt;
+public:
+ SwChgFmtColl( const SwFmtColl* pColl, ULONG nNode, BYTE nNodeWhich );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(ChgFmtColl)
+};
+
+class SwHstryTxtFlyCnt : public SwHstryHint
+{
+ SwUndoDelLayFmt* pUndo;
+public:
+ SwHstryTxtFlyCnt( SwTxtFlyCnt* pTxtFly ); // fuer Zeichengebundene
+ SwHstryTxtFlyCnt( SwFlyFrmFmt* pFlyFmt ); // fuer Absatzgebundene
+ ~SwHstryTxtFlyCnt();
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ SwUndoDelLayFmt* GetUDelLFmt() { return pUndo; }
+ OUT_HSTR_HINT(FlyCnt)
+};
+
+class SwHstryBookmark : public SwHstryHint
+{
+ String aName, aShortName;
+ ULONG nNode1, nNode2;
+ xub_StrLen nCntnt1, nCntnt2;
+ USHORT nKeyCode;
+ BYTE nTyp;
+public:
+ enum { BKMK_POS = 1, BKMK_OTHERPOS = 2 };
+ SwHstryBookmark( const SwBookmark&, BYTE nTyp );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(Bookmark)
+
+ BOOL IsEqualBookmark( const SwBookmark& );
+};
+
+class SwHstrySetAttrSet : public SwHstryHint
+{
+ SfxItemSet aOldSet;
+ SvUShorts aResetArr;
+ ULONG nNode;
+ USHORT nSetStt;
+ BYTE nNumLvl;
+ BOOL bNumStt;
+public:
+ SwHstrySetAttrSet( const SfxItemSet& rSet, ULONG nNode,
+ const SvUShortsSort& rSetArr );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+ OUT_HSTR_HINT(SetAttrSet)
+};
+
+
+class SwHstryResetAttrSet : public SwHstryHint
+{
+ ULONG nNode;
+ xub_StrLen nStart, nEnd;
+ SvUShorts aArr;
+public:
+ SwHstryResetAttrSet( const SfxItemSet& rSet, ULONG nNode,
+ xub_StrLen nStt = STRING_MAXLEN,
+ xub_StrLen nEnd = STRING_MAXLEN );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+
+ const SvUShorts& GetArr() const { return aArr; }
+ ULONG GetNode() const { return nNode; }
+ xub_StrLen GetCntnt() const { return nStart; }
+ OUT_HSTR_HINT(ResetAttrSet)
+};
+
+class SwHstryChgFlyAnchor : public SwHstryHint
+{
+ SwFrmFmt* pFmt;
+ ULONG nOldPos;
+ xub_StrLen nOldCnt;
+public:
+ SwHstryChgFlyAnchor( const SwFrmFmt& rFmt );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+};
+
+class SwHstryChgFlyChain : public SwHstryHint
+{
+ SwFlyFrmFmt *pPrevFmt, *pNextFmt, *pFlyFmt;
+public:
+ SwHstryChgFlyChain( const SwFlyFrmFmt& rFmt, const SwFmtChain& rAttr );
+ virtual void SetInDoc( SwDoc* pDoc, BOOL bTmpSet );
+};
+
+
+#endif
+
+typedef SwHstryHint* SwHstryHintPtr;
+SV_DECL_PTRARR_DEL( SwpHstry, SwHstryHintPtr, 0, 2 )
+class SwHistory : private SwpHstry
+{
+ friend class SwDoc; // eig. darf nur SwDoc::DelUndoObj zugreifen
+ friend class SwUndoWriter; // fuer den Undo/Redo-Writer
+ friend class SwRegHistory; // fuer Insert, von Histoy-Attributen
+
+ USHORT nEndDiff;
+public:
+ SwHistory( USHORT nInitSz = 0, USHORT nGrowSz = 2 );
+ ~SwHistory();
+ // loesche die History ab Start bis zum Ende
+ void Delete( USHORT nStart = 0 );
+ // alle Objecte zwischen nStart und Array-Ende aufrufen und loeschen
+ BOOL Rollback( SwDoc* pDoc, USHORT nStart = 0 );
+ // alle Objecte zwischen nStart und temporaeren Ende aufrufen und
+ // den Start als temporaeres Ende speichern
+ BOOL TmpRollback( SwDoc* pDoc, USHORT nStart, BOOL ToFirst = TRUE );
+
+ void Add( const SfxPoolItem* pOldValue, const SfxPoolItem* pNewValue,
+ ULONG nNodeIdx );
+ void Add( const SwTxtAttr* pTxtHt, ULONG nNodeIdx,
+ BOOL bNewAttr = TRUE );
+ void Add( const SwFmtColl*, ULONG nNodeIdx, BYTE nWhichNd );
+ void Add( const SwFmt*, ULONG nNodeIdx, BYTE nWhichNd );
+ void Add( const SwBookmark&, BYTE );
+ void Add( const SwFrmFmt& rFmt );
+ void Add( const SwFlyFrmFmt&, USHORT& rSetPos );
+ void Add( const SwTxtFtn& );
+
+ USHORT Count() const { return SwpHstry::Count(); }
+ USHORT GetTmpEnd() const { return SwpHstry::Count() - nEndDiff; }
+ USHORT SetTmpEnd( USHORT nTmpEnd ); // returne alten Wert
+ SwHstryHint* operator[]( USHORT nPos ) const { return SwpHstry::operator[](nPos); }
+
+ // fuer SwUndoDelete::Undo/Redo
+ void Move( USHORT nPos, SwHistory *pIns,
+ USHORT nStart = 0, USHORT nEnd = USHRT_MAX )
+ {
+ SwpHstry::Insert( pIns, nPos, nStart, nEnd );
+ SwpHstry* pDel = pIns;
+ pDel->Remove( nStart, nEnd == USHRT_MAX
+ ? pDel->Count() - nStart
+ : nEnd );
+ }
+
+ // Hilfs-Methoden zum Sichern von Attributen in der History.
+ // Wird von UndoKlasse benutzt (Delete/Overwrite/Inserts)
+ void CopyAttr( const SwpHints* pHts, ULONG nNodeIdx, xub_StrLen nStt,
+ xub_StrLen nEnd, BOOL bFields );
+ void CopyFmtAttr( const SfxItemSet& rSet, ULONG nNodeIdx );
+};
+
+#ifndef ROLBCK_HISTORY_ONLY
+
+class SwRegHistory : public SwClient
+{
+ SvUShortsSort aSetWhichIds;
+ SwHistory* pHstry;
+ const SwCntntNode * pNode;
+ ULONG nNodeIdx;
+
+ void _MakeSetWhichIds();
+public:
+ SwRegHistory( SwHistory* pHst );
+ SwRegHistory( SwTxtNode* pTxtNd, SwTxtAttr* pTxtHt,
+ USHORT nFlags, SwHistory* pHst );
+ SwRegHistory( SwTxtNode* pTxtNode, const SfxItemSet& rSet,
+ xub_StrLen nStart, xub_StrLen nEnd, USHORT nFlags,
+ SwHistory* pHst );
+ SwRegHistory( const SwNode& rNd, SwHistory* pHst );
+ SwRegHistory( SwModify* pRegIn, const SwNode& rNd, SwHistory* pHst );
+
+ virtual void Modify( SfxPoolItem* pOld, SfxPoolItem* pNew );
+ void Add( SwTxtAttr* pHt, const BOOL bNew = FALSE );
+
+ void RegisterInModify( SwModify* pRegIn, const SwNode& rNd );
+};
+
+#endif
+
+
+#endif // _ROLBCK_HXX
+