1*190118d0SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*190118d0SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*190118d0SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*190118d0SAndrew Rist  * distributed with this work for additional information
6*190118d0SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*190118d0SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*190118d0SAndrew Rist  * "License"); you may not use this file except in compliance
9*190118d0SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*190118d0SAndrew Rist  *
11*190118d0SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*190118d0SAndrew Rist  *
13*190118d0SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*190118d0SAndrew Rist  * software distributed under the License is distributed on an
15*190118d0SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*190118d0SAndrew Rist  * KIND, either express or implied.  See the License for the
17*190118d0SAndrew Rist  * specific language governing permissions and limitations
18*190118d0SAndrew Rist  * under the License.
19*190118d0SAndrew Rist  *
20*190118d0SAndrew Rist  *************************************************************/
21*190118d0SAndrew Rist 
22*190118d0SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_editeng.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <svl/intitem.hxx>
28cdf0e10cSrcweir #include <editeng/editeng.hxx>
29cdf0e10cSrcweir #include <editeng/editview.hxx>
30cdf0e10cSrcweir #include <editeng/editdata.hxx>
31cdf0e10cSrcweir #include <editeng/eerdll.hxx>
32cdf0e10cSrcweir #include <editeng/lrspitem.hxx>
33cdf0e10cSrcweir #include <editeng/fhgtitem.hxx>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #define _OUTLINER_CXX
36cdf0e10cSrcweir #include <editeng/outliner.hxx>
37cdf0e10cSrcweir #include <outlundo.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir 
OutlinerUndoBase(sal_uInt16 _nId,Outliner * pOutliner)40cdf0e10cSrcweir OutlinerUndoBase::OutlinerUndoBase( sal_uInt16 _nId, Outliner* pOutliner )
41cdf0e10cSrcweir 	: EditUndo( _nId, NULL )
42cdf0e10cSrcweir {
43cdf0e10cSrcweir 	DBG_ASSERT( pOutliner, "Undo: Outliner?!" );
44cdf0e10cSrcweir 	mpOutliner = pOutliner;
45cdf0e10cSrcweir }
46cdf0e10cSrcweir 
OutlinerUndoChangeParaFlags(Outliner * pOutliner,sal_uInt16 nPara,sal_uInt16 nOldFlags,sal_uInt16 nNewFlags)47cdf0e10cSrcweir OutlinerUndoChangeParaFlags::OutlinerUndoChangeParaFlags( Outliner* pOutliner, sal_uInt16 nPara, sal_uInt16 nOldFlags, sal_uInt16 nNewFlags )
48cdf0e10cSrcweir : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner )
49cdf0e10cSrcweir {
50cdf0e10cSrcweir 	mnPara = nPara;
51cdf0e10cSrcweir 	mnOldFlags = nOldFlags;
52cdf0e10cSrcweir 	mnNewFlags = nNewFlags;
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
Undo()55cdf0e10cSrcweir void OutlinerUndoChangeParaFlags::Undo()
56cdf0e10cSrcweir {
57cdf0e10cSrcweir 	ImplChangeFlags( mnOldFlags );
58cdf0e10cSrcweir }
59cdf0e10cSrcweir 
Redo()60cdf0e10cSrcweir void OutlinerUndoChangeParaFlags::Redo()
61cdf0e10cSrcweir {
62cdf0e10cSrcweir 	ImplChangeFlags( mnNewFlags );
63cdf0e10cSrcweir }
64cdf0e10cSrcweir 
ImplChangeFlags(sal_uInt16 nFlags)65cdf0e10cSrcweir void OutlinerUndoChangeParaFlags::ImplChangeFlags( sal_uInt16 nFlags )
66cdf0e10cSrcweir {
67cdf0e10cSrcweir 	Outliner* pOutliner = GetOutliner();
68cdf0e10cSrcweir 	Paragraph* pPara = pOutliner->GetParagraph( mnPara );
69cdf0e10cSrcweir 	if( pPara )
70cdf0e10cSrcweir 	{
71cdf0e10cSrcweir 		pOutliner->nDepthChangedHdlPrevDepth = pPara->GetDepth();
72cdf0e10cSrcweir 		pOutliner->mnDepthChangeHdlPrevFlags = pPara->nFlags;
73cdf0e10cSrcweir 		pOutliner->pHdlParagraph = pPara;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 		pPara->nFlags = nFlags;
76cdf0e10cSrcweir 		pOutliner->DepthChangedHdl();
77cdf0e10cSrcweir 	}
78cdf0e10cSrcweir }
79cdf0e10cSrcweir 
OutlinerUndoChangeParaNumberingRestart(Outliner * pOutliner,sal_uInt16 nPara,sal_Int16 nOldNumberingStartValue,sal_Int16 nNewNumberingStartValue,sal_Bool bOldParaIsNumberingRestart,sal_Bool bNewParaIsNumberingRestart)80cdf0e10cSrcweir OutlinerUndoChangeParaNumberingRestart::OutlinerUndoChangeParaNumberingRestart( Outliner* pOutliner, sal_uInt16 nPara,
81cdf0e10cSrcweir         sal_Int16 nOldNumberingStartValue, sal_Int16 nNewNumberingStartValue,
82cdf0e10cSrcweir         sal_Bool  bOldParaIsNumberingRestart, sal_Bool bNewParaIsNumberingRestart )
83cdf0e10cSrcweir : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner )
84cdf0e10cSrcweir {
85cdf0e10cSrcweir 	mnPara = nPara;
86cdf0e10cSrcweir 
87cdf0e10cSrcweir     maUndoData.mnNumberingStartValue = nOldNumberingStartValue;
88cdf0e10cSrcweir     maUndoData.mbParaIsNumberingRestart = bOldParaIsNumberingRestart;
89cdf0e10cSrcweir     maRedoData.mnNumberingStartValue = nNewNumberingStartValue;
90cdf0e10cSrcweir     maRedoData.mbParaIsNumberingRestart = bNewParaIsNumberingRestart;
91cdf0e10cSrcweir }
92cdf0e10cSrcweir 
Undo()93cdf0e10cSrcweir void OutlinerUndoChangeParaNumberingRestart::Undo()
94cdf0e10cSrcweir {
95cdf0e10cSrcweir 	ImplApplyData( maUndoData );
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
Redo()98cdf0e10cSrcweir void OutlinerUndoChangeParaNumberingRestart::Redo()
99cdf0e10cSrcweir {
100cdf0e10cSrcweir 	ImplApplyData( maRedoData );
101cdf0e10cSrcweir }
102cdf0e10cSrcweir 
ImplApplyData(const ParaRestartData & rData)103cdf0e10cSrcweir void OutlinerUndoChangeParaNumberingRestart::ImplApplyData( const ParaRestartData& rData )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir 	Outliner* pOutliner = GetOutliner();
106cdf0e10cSrcweir     pOutliner->SetNumberingStartValue( mnPara, rData.mnNumberingStartValue );
107cdf0e10cSrcweir     pOutliner->SetParaIsNumberingRestart( mnPara, rData.mbParaIsNumberingRestart );
108cdf0e10cSrcweir }
109cdf0e10cSrcweir 
OutlinerUndoChangeDepth(Outliner * pOutliner,sal_uInt16 nPara,sal_Int16 nOldDepth,sal_Int16 nNewDepth)110cdf0e10cSrcweir OutlinerUndoChangeDepth::OutlinerUndoChangeDepth( Outliner* pOutliner, sal_uInt16 nPara, sal_Int16 nOldDepth, sal_Int16 nNewDepth )
111cdf0e10cSrcweir 	: OutlinerUndoBase( OLUNDO_DEPTH, pOutliner )
112cdf0e10cSrcweir {
113cdf0e10cSrcweir 	mnPara = nPara;
114cdf0e10cSrcweir 	mnOldDepth = nOldDepth;
115cdf0e10cSrcweir 	mnNewDepth = nNewDepth;
116cdf0e10cSrcweir }
117cdf0e10cSrcweir 
Undo()118cdf0e10cSrcweir void OutlinerUndoChangeDepth::Undo()
119cdf0e10cSrcweir {
120cdf0e10cSrcweir 	GetOutliner()->ImplInitDepth( mnPara, mnOldDepth, sal_False );
121cdf0e10cSrcweir }
122cdf0e10cSrcweir 
Redo()123cdf0e10cSrcweir void OutlinerUndoChangeDepth::Redo()
124cdf0e10cSrcweir {
125cdf0e10cSrcweir 	GetOutliner()->ImplInitDepth( mnPara, mnNewDepth, sal_False );
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
Repeat()128cdf0e10cSrcweir void OutlinerUndoChangeDepth::Repeat()
129cdf0e10cSrcweir {
130cdf0e10cSrcweir 	DBG_ERROR( "Repeat not implemented!" );
131cdf0e10cSrcweir }
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 
OutlinerUndoCheckPara(Outliner * pOutliner,sal_uInt16 nPara)134cdf0e10cSrcweir OutlinerUndoCheckPara::OutlinerUndoCheckPara( Outliner* pOutliner, sal_uInt16 nPara )
135cdf0e10cSrcweir 	: OutlinerUndoBase( OLUNDO_DEPTH, pOutliner )
136cdf0e10cSrcweir {
137cdf0e10cSrcweir 	mnPara = nPara;
138cdf0e10cSrcweir }
139cdf0e10cSrcweir 
Undo()140cdf0e10cSrcweir void OutlinerUndoCheckPara::Undo()
141cdf0e10cSrcweir {
142cdf0e10cSrcweir 	Paragraph* pPara = GetOutliner()->GetParagraph( mnPara );
143cdf0e10cSrcweir 	pPara->Invalidate();
144cdf0e10cSrcweir 	GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False );
145cdf0e10cSrcweir }
146cdf0e10cSrcweir 
Redo()147cdf0e10cSrcweir void OutlinerUndoCheckPara::Redo()
148cdf0e10cSrcweir {
149cdf0e10cSrcweir 	Paragraph* pPara = GetOutliner()->GetParagraph( mnPara );
150cdf0e10cSrcweir 	pPara->Invalidate();
151cdf0e10cSrcweir 	GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False );
152cdf0e10cSrcweir }
153cdf0e10cSrcweir 
Repeat()154cdf0e10cSrcweir void OutlinerUndoCheckPara::Repeat()
155cdf0e10cSrcweir {
156cdf0e10cSrcweir 	DBG_ERROR( "Repeat not implemented!" );
157cdf0e10cSrcweir }
158cdf0e10cSrcweir 
159cdf0e10cSrcweir DBG_NAME(OLUndoExpand);
160cdf0e10cSrcweir 
OLUndoExpand(Outliner * pOut,sal_uInt16 _nId)161cdf0e10cSrcweir OLUndoExpand::OLUndoExpand(Outliner* pOut, sal_uInt16 _nId )
162cdf0e10cSrcweir 	: EditUndo( _nId, 0 )
163cdf0e10cSrcweir {
164cdf0e10cSrcweir 	DBG_CTOR(OLUndoExpand,0);
165cdf0e10cSrcweir 	DBG_ASSERT(pOut,"Undo:No Outliner");
166cdf0e10cSrcweir 	pOutliner = pOut;
167cdf0e10cSrcweir 	nCount = 0;
168cdf0e10cSrcweir 	pParas = 0;
169cdf0e10cSrcweir }
170cdf0e10cSrcweir 
171cdf0e10cSrcweir 
~OLUndoExpand()172cdf0e10cSrcweir OLUndoExpand::~OLUndoExpand()
173cdf0e10cSrcweir {
174cdf0e10cSrcweir 	DBG_DTOR(OLUndoExpand,0);
175cdf0e10cSrcweir 	delete pParas;
176cdf0e10cSrcweir }
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 
Restore(sal_Bool bUndo)179cdf0e10cSrcweir void OLUndoExpand::Restore( sal_Bool bUndo )
180cdf0e10cSrcweir {
181cdf0e10cSrcweir 	DBG_CHKTHIS(OLUndoExpand,0);
182cdf0e10cSrcweir 	DBG_ASSERT(pOutliner,"Undo:No Outliner");
183cdf0e10cSrcweir 	DBG_ASSERT(pOutliner->pEditEngine,"Outliner already deleted");
184cdf0e10cSrcweir 	Paragraph* pPara;
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 	sal_Bool bExpand = sal_False;
187cdf0e10cSrcweir 	sal_uInt16 _nId = GetId();
188cdf0e10cSrcweir 	if((_nId == OLUNDO_EXPAND && !bUndo) || (_nId == OLUNDO_COLLAPSE && bUndo))
189cdf0e10cSrcweir 		bExpand = sal_True;
190cdf0e10cSrcweir 	if( !pParas )
191cdf0e10cSrcweir 	{
192cdf0e10cSrcweir 		pPara = pOutliner->GetParagraph( (sal_uLong)nCount );
193cdf0e10cSrcweir 		if( bExpand )
194cdf0e10cSrcweir 			pOutliner->Expand( pPara );
195cdf0e10cSrcweir 		else
196cdf0e10cSrcweir 			pOutliner->Collapse( pPara );
197cdf0e10cSrcweir 	}
198cdf0e10cSrcweir 	else
199cdf0e10cSrcweir 	{
200cdf0e10cSrcweir 		for( sal_uInt16 nIdx = 0; nIdx < nCount; nIdx++ )
201cdf0e10cSrcweir 		{
202cdf0e10cSrcweir 			pPara = pOutliner->GetParagraph( (sal_uLong)(pParas[nIdx]) );
203cdf0e10cSrcweir 			if( bExpand )
204cdf0e10cSrcweir 				pOutliner->Expand( pPara );
205cdf0e10cSrcweir 			else
206cdf0e10cSrcweir 				pOutliner->Collapse( pPara );
207cdf0e10cSrcweir 		}
208cdf0e10cSrcweir 	}
209cdf0e10cSrcweir }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 
Undo()212cdf0e10cSrcweir void OLUndoExpand::Undo()
213cdf0e10cSrcweir {
214cdf0e10cSrcweir 	DBG_CHKTHIS(OLUndoExpand,0);
215cdf0e10cSrcweir 	Restore( sal_True );
216cdf0e10cSrcweir }
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 
Redo()219cdf0e10cSrcweir void OLUndoExpand::Redo()
220cdf0e10cSrcweir {
221cdf0e10cSrcweir 	DBG_CHKTHIS(OLUndoExpand,0);
222cdf0e10cSrcweir 	Restore( sal_False );
223cdf0e10cSrcweir }
224cdf0e10cSrcweir 
225cdf0e10cSrcweir 
Repeat()226cdf0e10cSrcweir void OLUndoExpand::Repeat()
227cdf0e10cSrcweir {
228cdf0e10cSrcweir 	DBG_CHKTHIS(OLUndoExpand,0);
229cdf0e10cSrcweir 	DBG_ERROR("Not implemented");
230cdf0e10cSrcweir }
231