blob: 04185dd87860b3a50cdde9465ad9b7707f6ee2cb [file] [log] [blame]
/**************************************************************
*
* 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 SW_UNDO_TABLE_HXX
#define SW_UNDO_TABLE_HXX
#include <undobj.hxx>
#ifndef _SVSTDARR_HXX
#define _SVSTDARR_USHORTS
#define _SVSTDARR_ULONGS
#define _SVSTDARR_BOOLS
#define _SVSTDARR_BYTES
#define _SVSTDARR_USHORTSSORT
#include <svl/svstdarr.hxx>
#endif
#include <swtypes.hxx>
#include <itabenum.hxx>
class SfxItemSet;
struct SwSaveRowSpan;
class _SaveTable;
class SwDDEFieldType;
class SwUndoSaveSections;
class SwUndoMoves;
class SwUndoDelete;
class SwSelBoxes;
class SwTblToTxtSaves;
class SwTable;
class SwTableBox;
class SwStartNode;
class SwTableNode;
class SwTableAutoFmt;
class SwTableSortBoxes;
class SwUndoInsTbl : public SwUndo
{
String sTblNm;
SwInsertTableOptions aInsTblOpts;
SwDDEFieldType* pDDEFldType;
SvUShorts* pColWidth;
SwRedlineData* pRedlData;
SwTableAutoFmt* pAutoFmt;
sal_uLong nSttNode;
sal_uInt16 nRows, nCols;
sal_uInt16 nAdjust;
public:
SwUndoInsTbl( const SwPosition&, sal_uInt16 nCols, sal_uInt16 nRows,
sal_uInt16 eAdjust, const SwInsertTableOptions& rInsTblOpts,
const SwTableAutoFmt* pTAFmt, const SvUShorts* pColArr,
const String & rName);
virtual ~SwUndoInsTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
virtual void RepeatImpl( ::sw::RepeatContext & );
virtual SwRewriter GetRewriter() const;
};
class SwUndoTxtToTbl : public SwUndo, public SwUndRng
{
String sTblNm;
SwInsertTableOptions aInsTblOpts;
SvULongs* pDelBoxes;
SwTableAutoFmt* pAutoFmt;
SwHistory* pHistory;
sal_Unicode cTrenner;
sal_uInt16 nAdjust;
sal_Bool bSplitEnd : 1;
public:
SwUndoTxtToTbl( const SwPaM&, const SwInsertTableOptions&, sal_Unicode,
sal_uInt16,
const SwTableAutoFmt* pAFmt );
virtual ~SwUndoTxtToTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
virtual void RepeatImpl( ::sw::RepeatContext & );
SwHistory& GetHistory(); // will be created if necessary
void AddFillBox( const SwTableBox& rBox );
};
class SwUndoTblToTxt : public SwUndo
{
String sTblNm;
SwDDEFieldType* pDDEFldType;
_SaveTable* pTblSave;
SwTblToTxtSaves* pBoxSaves;
SwHistory* pHistory;
sal_uLong nSttNd, nEndNd;
sal_uInt16 nAdjust;
sal_Unicode cTrenner;
sal_uInt16 nHdlnRpt;
sal_Bool bCheckNumFmt : 1;
public:
SwUndoTblToTxt( const SwTable& rTbl, sal_Unicode cCh );
virtual ~SwUndoTblToTxt();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
virtual void RepeatImpl( ::sw::RepeatContext & );
void SetRange( const SwNodeRange& );
void AddBoxPos( SwDoc& rDoc, sal_uLong nNdIdx, sal_uLong nEndIdx,
xub_StrLen nCntntIdx = STRING_MAXLEN);
};
class SwUndoAttrTbl : public SwUndo
{
sal_uLong nSttNode;
_SaveTable* pSaveTbl;
sal_Bool bClearTabCol : 1;
public:
SwUndoAttrTbl( const SwTableNode& rTblNd, sal_Bool bClearTabCols = sal_False );
virtual ~SwUndoAttrTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
};
class SwUndoTblNumFmt;
class SwUndoTblAutoFmt : public SwUndo
{
sal_uLong nSttNode;
_SaveTable* pSaveTbl;
::std::vector< ::boost::shared_ptr<SwUndoTblNumFmt> > m_Undos;
sal_Bool bSaveCntntAttr;
void UndoRedo(bool const bUndo, ::sw::UndoRedoContext & rContext);
public:
SwUndoTblAutoFmt( const SwTableNode& rTblNd, const SwTableAutoFmt& );
virtual ~SwUndoTblAutoFmt();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
void SaveBoxCntnt( const SwTableBox& rBox );
};
class SwUndoTblNdsChg : public SwUndo
{
_SaveTable* pSaveTbl;
SvULongs aBoxes;
union {
SvULongs* pNewSttNds;
SwUndoSaveSections* pDelSects;
} Ptrs;
SvBools aMvBoxes; // for SplitRow (split Nodes of Box)
long nMin, nMax; // for redo of delete column
sal_uLong nSttNode, nCurrBox;
sal_uInt16 nCount, nRelDiff, nAbsDiff, nSetColType;
sal_Bool bFlag;
sal_Bool bSameHeight; // only used for SplitRow
public:
SwUndoTblNdsChg( SwUndoId UndoId,
const SwSelBoxes& rBoxes,
const SwTableNode& rTblNd,
long nMn, long nMx,
sal_uInt16 nCnt, sal_Bool bFlg, sal_Bool bSameHeight );
// for SetColWidth
SwUndoTblNdsChg( SwUndoId UndoId, const SwSelBoxes& rBoxes,
const SwTableNode& rTblNd );
virtual ~SwUndoTblNdsChg();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
void SaveNewBoxes( const SwTableNode& rTblNd, const SwTableSortBoxes& rOld );
void SaveNewBoxes( const SwTableNode& rTblNd, const SwTableSortBoxes& rOld,
const SwSelBoxes& rBoxes, const SvULongs& rNodeCnts );
void SaveSection( SwStartNode* pSttNd );
void ReNewBoxes( const SwSelBoxes& rBoxes );
void SetColWidthParam( sal_uLong nBoxIdx, sal_uInt16 nMode, sal_uInt16 nType,
SwTwips nAbsDif, SwTwips nRelDif )
{
nCurrBox = nBoxIdx;
nCount = nMode;
nSetColType = nType;
nAbsDiff = (sal_uInt16)nAbsDif;
nRelDiff = (sal_uInt16)nRelDif;
}
};
class SwUndoTblMerge : public SwUndo, private SwUndRng
{
sal_uLong nTblNode;
_SaveTable* pSaveTbl;
SvULongs aBoxes, aNewSttNds;
SwUndoMoves* pMoves;
SwHistory* pHistory;
public:
SwUndoTblMerge( const SwPaM& rTblSel );
virtual ~SwUndoTblMerge();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
void MoveBoxCntnt( SwDoc* pDoc, SwNodeRange& rRg, SwNodeIndex& rPos );
void SetSelBoxes( const SwSelBoxes& rBoxes );
void AddNewBox( sal_uLong nSttNdIdx )
{ aNewSttNds.Insert( nSttNdIdx, aNewSttNds.Count() ); }
void SaveCollection( const SwTableBox& rBox );
};
class SwUndoTblNumFmt : public SwUndo
{
SfxItemSet *pBoxSet;
SwHistory* pHistory;
String aStr, aNewFml;
sal_uLong nFmtIdx, nNewFmtIdx;
double fNum, fNewNum;
sal_uLong nNode;
sal_uLong nNdPos;
sal_Bool bNewFmt : 1;
sal_Bool bNewFml : 1;
sal_Bool bNewValue : 1;
public:
SwUndoTblNumFmt( const SwTableBox& rBox, const SfxItemSet* pNewSet = 0 );
virtual ~SwUndoTblNumFmt();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
void SetNumFmt( sal_uLong nNewNumFmtIdx, const double& rNewNumber )
{ nFmtIdx = nNewNumFmtIdx; fNum = rNewNumber; }
void SetBox( const SwTableBox& rBox );
};
class _UndoTblCpyTbl_Entries;
class SwUndoTblCpyTbl : public SwUndo
{
_UndoTblCpyTbl_Entries* pArr;
SwUndoTblNdsChg* pInsRowUndo;
//b6341295: When redlining is active, PrepareRedline has to create the
//redlining attributes for the new and the old table cell content
SwUndo* PrepareRedline( SwDoc* pDoc, const SwTableBox& rBox,
const SwPosition& rPos, bool& rJoin, bool bRedo );
public:
SwUndoTblCpyTbl();
virtual ~SwUndoTblCpyTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
void AddBoxBefore( const SwTableBox& rBox, sal_Bool bDelCntnt );
void AddBoxAfter( const SwTableBox& rBox, const SwNodeIndex& rIdx,
sal_Bool bDelCntnt );
sal_Bool IsEmpty() const;
sal_Bool InsertRow( SwTable& rTbl, const SwSelBoxes& rBoxes, sal_uInt16 nCnt );
};
class SwUndoCpyTbl : public SwUndo
{
SwUndoDelete* pDel;
sal_uLong nTblNode;
public:
SwUndoCpyTbl();
virtual ~SwUndoCpyTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
void SetTableSttIdx( sal_uLong nIdx ) { nTblNode = nIdx; }
};
class SwUndoSplitTbl : public SwUndo
{
sal_uLong nTblNode, nOffset;
SwSaveRowSpan* mpSaveRowSpan; // stores row span values at the splitting row
_SaveTable* pSavTbl;
SwHistory* pHistory;
sal_uInt16 nMode, nFmlEnd;
sal_Bool bCalcNewSize;
public:
SwUndoSplitTbl( const SwTableNode& rTblNd, SwSaveRowSpan* pRowSp,
sal_uInt16 nMode, sal_Bool bCalcNewSize );
virtual ~SwUndoSplitTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
virtual void RepeatImpl( ::sw::RepeatContext & );
void SetTblNodeOffset( sal_uLong nIdx ) { nOffset = nIdx - nTblNode; }
SwHistory* GetHistory() { return pHistory; }
void SaveFormula( SwHistory& rHistory );
};
class SwUndoMergeTbl : public SwUndo
{
String aName;
sal_uLong nTblNode;
_SaveTable* pSavTbl, *pSavHdl;
SwHistory* pHistory;
sal_uInt16 nMode;
sal_Bool bWithPrev;
public:
SwUndoMergeTbl( const SwTableNode& rTblNd, const SwTableNode& rDelTblNd,
sal_Bool bWithPrev, sal_uInt16 nMode );
virtual ~SwUndoMergeTbl();
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
virtual void RepeatImpl( ::sw::RepeatContext & );
void SaveFormula( SwHistory& rHistory );
};
//--------------------------------------------------------------------
class SwUndoTblHeadline : public SwUndo
{
sal_uLong nTblNd;
sal_uInt16 nOldHeadline;
sal_uInt16 nNewHeadline;
public:
SwUndoTblHeadline( const SwTable&, sal_uInt16 nOldHdl, sal_uInt16 nNewHdl );
virtual void UndoImpl( ::sw::UndoRedoContext & );
virtual void RedoImpl( ::sw::UndoRedoContext & );
virtual void RepeatImpl( ::sw::RepeatContext & );
};
#endif // SW_UNDO_TABLE_HXX