xref: /AOO41X/main/svx/source/svdraw/svdundo.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_svx.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <svx/svdundo.hxx>
32*cdf0e10cSrcweir #include "svx/svditext.hxx"
33*cdf0e10cSrcweir #include <svx/svdotext.hxx>
34*cdf0e10cSrcweir #include <svx/svdobj.hxx>
35*cdf0e10cSrcweir #include <svx/svdpage.hxx>
36*cdf0e10cSrcweir #include <svx/svdlayer.hxx>
37*cdf0e10cSrcweir #include <svx/svdmodel.hxx>
38*cdf0e10cSrcweir #include <svx/svdview.hxx>
39*cdf0e10cSrcweir #include "svx/svdstr.hrc"   // Namen aus der Resource
40*cdf0e10cSrcweir #include "svx/svdglob.hxx"  // StringCache
41*cdf0e10cSrcweir #include <svx/scene3d.hxx>
42*cdf0e10cSrcweir #include <editeng/outlobj.hxx>
43*cdf0e10cSrcweir #include <svx/svdogrp.hxx>
44*cdf0e10cSrcweir #include <svx/sdr/properties/itemsettools.hxx>
45*cdf0e10cSrcweir #include <svx/sdr/properties/properties.hxx>
46*cdf0e10cSrcweir #include <svx/svdocapt.hxx>
47*cdf0e10cSrcweir #include <svl/whiter.hxx>
48*cdf0e10cSrcweir #include <svx/e3dsceneupdater.hxx>
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir #include "svx/svdviter.hxx"
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir // iterates over all views and unmarks this SdrObject if it is marked
55*cdf0e10cSrcweir static void ImplUnmarkObject( SdrObject* pObj )
56*cdf0e10cSrcweir {
57*cdf0e10cSrcweir     SdrViewIter aIter( pObj );
58*cdf0e10cSrcweir     for ( SdrView* pView = aIter.FirstView(); pView; pView = aIter.NextView() )
59*cdf0e10cSrcweir 	{
60*cdf0e10cSrcweir 		pView->MarkObj( pObj, pView->GetSdrPageView(), sal_True );
61*cdf0e10cSrcweir 	}
62*cdf0e10cSrcweir }
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir TYPEINIT1(SdrUndoAction,SfxUndoAction);
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir sal_Bool SdrUndoAction::CanRepeat(SfxRepeatTarget& rView) const
69*cdf0e10cSrcweir {
70*cdf0e10cSrcweir 	SdrView* pV=PTR_CAST(SdrView,&rView);
71*cdf0e10cSrcweir 	if (pV!=NULL) return CanSdrRepeat(*pV);
72*cdf0e10cSrcweir 	return sal_False;
73*cdf0e10cSrcweir }
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir void SdrUndoAction::Repeat(SfxRepeatTarget& rView)
76*cdf0e10cSrcweir {
77*cdf0e10cSrcweir 	SdrView* pV=PTR_CAST(SdrView,&rView);
78*cdf0e10cSrcweir 	if (pV!=NULL) SdrRepeat(*pV);
79*cdf0e10cSrcweir 	DBG_ASSERT(pV!=NULL,"Repeat: Uebergebenes SfxRepeatTarget ist keine SdrView");
80*cdf0e10cSrcweir }
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir XubString SdrUndoAction::GetRepeatComment(SfxRepeatTarget& rView) const
83*cdf0e10cSrcweir {
84*cdf0e10cSrcweir 	SdrView* pV=PTR_CAST(SdrView,&rView);
85*cdf0e10cSrcweir 	if (pV!=NULL) return GetSdrRepeatComment(*pV);
86*cdf0e10cSrcweir 	return String();
87*cdf0e10cSrcweir }
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir bool SdrUndoAction::CanSdrRepeat(SdrView& /*rView*/) const
90*cdf0e10cSrcweir {
91*cdf0e10cSrcweir 	return sal_False;
92*cdf0e10cSrcweir }
93*cdf0e10cSrcweir 
94*cdf0e10cSrcweir void SdrUndoAction::SdrRepeat(SdrView& /*rView*/)
95*cdf0e10cSrcweir {
96*cdf0e10cSrcweir }
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir XubString SdrUndoAction::GetSdrRepeatComment(SdrView& /*rView*/) const
99*cdf0e10cSrcweir {
100*cdf0e10cSrcweir 	return String();
101*cdf0e10cSrcweir }
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir SdrUndoGroup::SdrUndoGroup(SdrModel& rNewMod)
106*cdf0e10cSrcweir :	SdrUndoAction(rNewMod),
107*cdf0e10cSrcweir 	aBuf(1024,32,32),
108*cdf0e10cSrcweir 	eFunction(SDRREPFUNC_OBJ_NONE)		/*#72642#*/
109*cdf0e10cSrcweir {}
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir SdrUndoGroup::SdrUndoGroup(SdrModel& rNewMod,const String& rStr)
112*cdf0e10cSrcweir :	SdrUndoAction(rNewMod),
113*cdf0e10cSrcweir 	aBuf(1024,32,32),
114*cdf0e10cSrcweir 	aComment(rStr),
115*cdf0e10cSrcweir 	eFunction(SDRREPFUNC_OBJ_NONE)
116*cdf0e10cSrcweir {}
117*cdf0e10cSrcweir 
118*cdf0e10cSrcweir SdrUndoGroup::~SdrUndoGroup()
119*cdf0e10cSrcweir {
120*cdf0e10cSrcweir 	Clear();
121*cdf0e10cSrcweir }
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir void SdrUndoGroup::Clear()
124*cdf0e10cSrcweir {
125*cdf0e10cSrcweir 	for (sal_uIntPtr nu=0; nu<GetActionCount(); nu++) {
126*cdf0e10cSrcweir 		SdrUndoAction* pAct=GetAction(nu);
127*cdf0e10cSrcweir 		delete pAct;
128*cdf0e10cSrcweir 	}
129*cdf0e10cSrcweir 	aBuf.Clear();
130*cdf0e10cSrcweir }
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir void SdrUndoGroup::AddAction(SdrUndoAction* pAct)
133*cdf0e10cSrcweir {
134*cdf0e10cSrcweir 	aBuf.Insert(pAct,CONTAINER_APPEND);
135*cdf0e10cSrcweir }
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir void SdrUndoGroup::push_front( SdrUndoAction* pAct )
138*cdf0e10cSrcweir {
139*cdf0e10cSrcweir 	aBuf.Insert(pAct, (sal_uIntPtr)0 );
140*cdf0e10cSrcweir }
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir void SdrUndoGroup::Undo()
143*cdf0e10cSrcweir {
144*cdf0e10cSrcweir 	for (sal_uIntPtr nu=GetActionCount(); nu>0;) {
145*cdf0e10cSrcweir 		nu--;
146*cdf0e10cSrcweir 		SdrUndoAction* pAct=GetAction(nu);
147*cdf0e10cSrcweir 		pAct->Undo();
148*cdf0e10cSrcweir 	}
149*cdf0e10cSrcweir }
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir void SdrUndoGroup::Redo()
152*cdf0e10cSrcweir {
153*cdf0e10cSrcweir 	for (sal_uIntPtr nu=0; nu<GetActionCount(); nu++) {
154*cdf0e10cSrcweir 		SdrUndoAction* pAct=GetAction(nu);
155*cdf0e10cSrcweir 		pAct->Redo();
156*cdf0e10cSrcweir 	}
157*cdf0e10cSrcweir }
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir XubString SdrUndoGroup::GetComment() const
160*cdf0e10cSrcweir {
161*cdf0e10cSrcweir 	XubString aRet(aComment);
162*cdf0e10cSrcweir 	sal_Char aSearchText[] = "%1";
163*cdf0e10cSrcweir 	String aSearchString(aSearchText, sizeof(aSearchText-1));
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir 	aRet.SearchAndReplace(aSearchString, aObjDescription);
166*cdf0e10cSrcweir 
167*cdf0e10cSrcweir 	return aRet;
168*cdf0e10cSrcweir }
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir bool SdrUndoGroup::CanSdrRepeat(SdrView& rView) const
171*cdf0e10cSrcweir {
172*cdf0e10cSrcweir 	switch (eFunction) {
173*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_NONE			:  return sal_False;
174*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_DELETE          :  return rView.AreObjectsMarked();
175*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_COMBINE_POLYPOLY:  return rView.IsCombinePossible(sal_False);
176*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_COMBINE_ONEPOLY :  return rView.IsCombinePossible(sal_True);
177*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_DISMANTLE_POLYS :  return rView.IsDismantlePossible(sal_False);
178*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_DISMANTLE_LINES :  return rView.IsDismantlePossible(sal_True);
179*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_CONVERTTOPOLY   :  return rView.IsConvertToPolyObjPossible(sal_False);
180*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_CONVERTTOPATH   :  return rView.IsConvertToPathObjPossible(sal_False);
181*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_GROUP           :  return rView.IsGroupPossible();
182*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_UNGROUP         :  return rView.IsUnGroupPossible();
183*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_PUTTOTOP        :  return rView.IsToTopPossible();
184*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_PUTTOBTM        :  return rView.IsToBtmPossible();
185*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_MOVTOTOP        :  return rView.IsToTopPossible();
186*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_MOVTOBTM        :  return rView.IsToBtmPossible();
187*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_REVORDER        :  return rView.IsReverseOrderPossible();
188*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_IMPORTMTF       :  return rView.IsImportMtfPossible();
189*cdf0e10cSrcweir 		default: break;
190*cdf0e10cSrcweir 	} // switch
191*cdf0e10cSrcweir 	return sal_False;
192*cdf0e10cSrcweir }
193*cdf0e10cSrcweir 
194*cdf0e10cSrcweir void SdrUndoGroup::SdrRepeat(SdrView& rView)
195*cdf0e10cSrcweir {
196*cdf0e10cSrcweir 	switch (eFunction) {
197*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_NONE			:  break;
198*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_DELETE          :  rView.DeleteMarked();                break;
199*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_COMBINE_POLYPOLY:  rView.CombineMarkedObjects(sal_False);   break;
200*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_COMBINE_ONEPOLY :  rView.CombineMarkedObjects(sal_True);    break;
201*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_DISMANTLE_POLYS :  rView.DismantleMarkedObjects(sal_False); break;
202*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_DISMANTLE_LINES :  rView.DismantleMarkedObjects(sal_True);  break;
203*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_CONVERTTOPOLY   :  rView.ConvertMarkedToPolyObj(sal_False); break;
204*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_CONVERTTOPATH   :  rView.ConvertMarkedToPathObj(sal_False); break;
205*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_GROUP           :  rView.GroupMarked();                 break;
206*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_UNGROUP         :  rView.UnGroupMarked();               break;
207*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_PUTTOTOP        :  rView.PutMarkedToTop();              break;
208*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_PUTTOBTM        :  rView.PutMarkedToBtm();              break;
209*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_MOVTOTOP        :  rView.MovMarkedToTop();              break;
210*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_MOVTOBTM        :  rView.MovMarkedToBtm();              break;
211*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_REVORDER        :  rView.ReverseOrderOfMarked();        break;
212*cdf0e10cSrcweir 		case SDRREPFUNC_OBJ_IMPORTMTF       :  rView.DoImportMarkedMtf();           break;
213*cdf0e10cSrcweir 		default: break;
214*cdf0e10cSrcweir 	} // switch
215*cdf0e10cSrcweir }
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir XubString SdrUndoGroup::GetSdrRepeatComment(SdrView& /*rView*/) const
218*cdf0e10cSrcweir {
219*cdf0e10cSrcweir 	XubString aRet(aComment);
220*cdf0e10cSrcweir 	sal_Char aSearchText[] = "%1";
221*cdf0e10cSrcweir 	String aSearchString(aSearchText, sizeof(aSearchText-1));
222*cdf0e10cSrcweir 
223*cdf0e10cSrcweir 	aRet.SearchAndReplace(aSearchString, ImpGetResStr(STR_ObjNameSingulPlural));
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir 	return aRet;
226*cdf0e10cSrcweir }
227*cdf0e10cSrcweir 
228*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
229*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
230*cdf0e10cSrcweir //
231*cdf0e10cSrcweir //   @@@@   @@@@@   @@@@@@  @@@@@   @@@@   @@@@@@   @@@@
232*cdf0e10cSrcweir //  @@  @@  @@  @@      @@  @@     @@  @@    @@    @@  @@
233*cdf0e10cSrcweir //  @@  @@  @@  @@      @@  @@     @@        @@    @@
234*cdf0e10cSrcweir //  @@  @@  @@@@@       @@  @@@@   @@        @@     @@@@
235*cdf0e10cSrcweir //  @@  @@  @@  @@      @@  @@     @@        @@        @@
236*cdf0e10cSrcweir //  @@  @@  @@  @@  @@  @@  @@     @@  @@    @@    @@  @@
237*cdf0e10cSrcweir //   @@@@   @@@@@    @@@@   @@@@@   @@@@     @@     @@@@
238*cdf0e10cSrcweir //
239*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
240*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
241*cdf0e10cSrcweir 
242*cdf0e10cSrcweir SdrUndoObj::SdrUndoObj(SdrObject& rNewObj):
243*cdf0e10cSrcweir 	SdrUndoAction(*rNewObj.GetModel()),
244*cdf0e10cSrcweir 	pObj(&rNewObj)
245*cdf0e10cSrcweir {
246*cdf0e10cSrcweir }
247*cdf0e10cSrcweir 
248*cdf0e10cSrcweir void SdrUndoObj::GetDescriptionStringForObject( const SdrObject& _rForObject, sal_uInt16 nStrCacheID, String& rStr, FASTBOOL bRepeat )
249*cdf0e10cSrcweir {
250*cdf0e10cSrcweir 	rStr = ImpGetResStr(nStrCacheID);
251*cdf0e10cSrcweir 	sal_Char aSearchText[] = "%1";
252*cdf0e10cSrcweir 	String aSearchString(aSearchText, sizeof(aSearchText-1));
253*cdf0e10cSrcweir 
254*cdf0e10cSrcweir 	xub_StrLen nPos = rStr.Search(aSearchString);
255*cdf0e10cSrcweir 
256*cdf0e10cSrcweir 	if(nPos != STRING_NOTFOUND)
257*cdf0e10cSrcweir 	{
258*cdf0e10cSrcweir 		rStr.Erase(nPos, 2);
259*cdf0e10cSrcweir 
260*cdf0e10cSrcweir 		if(bRepeat)
261*cdf0e10cSrcweir 		{
262*cdf0e10cSrcweir 			rStr.Insert(ImpGetResStr(STR_ObjNameSingulPlural), nPos);
263*cdf0e10cSrcweir 		}
264*cdf0e10cSrcweir 		else
265*cdf0e10cSrcweir 		{
266*cdf0e10cSrcweir 			XubString aStr;
267*cdf0e10cSrcweir 
268*cdf0e10cSrcweir 			_rForObject.TakeObjNameSingul(aStr);
269*cdf0e10cSrcweir 			rStr.Insert(aStr, nPos);
270*cdf0e10cSrcweir 		}
271*cdf0e10cSrcweir 	}
272*cdf0e10cSrcweir }
273*cdf0e10cSrcweir 
274*cdf0e10cSrcweir void SdrUndoObj::ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, XubString& rStr, FASTBOOL bRepeat) const
275*cdf0e10cSrcweir {
276*cdf0e10cSrcweir     if ( pObj )
277*cdf0e10cSrcweir         GetDescriptionStringForObject( *pObj, nStrCacheID, rStr, bRepeat );
278*cdf0e10cSrcweir }
279*cdf0e10cSrcweir 
280*cdf0e10cSrcweir // #94278# common call method for evtl. page change when UNDO/REDO
281*cdf0e10cSrcweir // is triggered
282*cdf0e10cSrcweir void SdrUndoObj::ImpShowPageOfThisObject()
283*cdf0e10cSrcweir {
284*cdf0e10cSrcweir 	if(pObj && pObj->IsInserted() && pObj->GetPage() && pObj->GetModel())
285*cdf0e10cSrcweir 	{
286*cdf0e10cSrcweir 		SdrHint aHint(HINT_SWITCHTOPAGE);
287*cdf0e10cSrcweir 
288*cdf0e10cSrcweir 		aHint.SetObject(pObj);
289*cdf0e10cSrcweir 		aHint.SetPage(pObj->GetPage());
290*cdf0e10cSrcweir 
291*cdf0e10cSrcweir 		pObj->GetModel()->Broadcast(aHint);
292*cdf0e10cSrcweir 	}
293*cdf0e10cSrcweir }
294*cdf0e10cSrcweir 
295*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
296*cdf0e10cSrcweir 
297*cdf0e10cSrcweir SdrUndoAttrObj::SdrUndoAttrObj(SdrObject& rNewObj, FASTBOOL bStyleSheet1, FASTBOOL bSaveText)
298*cdf0e10cSrcweir :	SdrUndoObj(rNewObj),
299*cdf0e10cSrcweir 	pUndoSet(NULL),
300*cdf0e10cSrcweir 	pRedoSet(NULL),
301*cdf0e10cSrcweir 	pRepeatSet(NULL),
302*cdf0e10cSrcweir 	pUndoStyleSheet(NULL),
303*cdf0e10cSrcweir 	pRedoStyleSheet(NULL),
304*cdf0e10cSrcweir 	pRepeatStyleSheet(NULL),
305*cdf0e10cSrcweir 	bHaveToTakeRedoSet(sal_True),
306*cdf0e10cSrcweir 	pTextUndo(NULL),
307*cdf0e10cSrcweir 
308*cdf0e10cSrcweir 	// #i8508#
309*cdf0e10cSrcweir 	pTextRedo(NULL),
310*cdf0e10cSrcweir 
311*cdf0e10cSrcweir 	pUndoGroup(NULL)
312*cdf0e10cSrcweir {
313*cdf0e10cSrcweir 	bStyleSheet = bStyleSheet1;
314*cdf0e10cSrcweir 
315*cdf0e10cSrcweir 	SdrObjList* pOL = rNewObj.GetSubList();
316*cdf0e10cSrcweir 	sal_Bool bIsGroup(pOL!=NULL && pOL->GetObjCount());
317*cdf0e10cSrcweir 	sal_Bool bIs3DScene(bIsGroup && pObj->ISA(E3dScene));
318*cdf0e10cSrcweir 
319*cdf0e10cSrcweir 	if(bIsGroup)
320*cdf0e10cSrcweir 	{
321*cdf0e10cSrcweir 		// Aha, Gruppenobjekt
322*cdf0e10cSrcweir 		pUndoGroup = new SdrUndoGroup(*pObj->GetModel());
323*cdf0e10cSrcweir 		sal_uInt32 nObjAnz(pOL->GetObjCount());
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir 		for(sal_uInt32 nObjNum(0); nObjNum < nObjAnz; nObjNum++)
326*cdf0e10cSrcweir 		{
327*cdf0e10cSrcweir 			pUndoGroup->AddAction(
328*cdf0e10cSrcweir 				new SdrUndoAttrObj(*pOL->GetObj(nObjNum), bStyleSheet1));
329*cdf0e10cSrcweir 		}
330*cdf0e10cSrcweir 	}
331*cdf0e10cSrcweir 
332*cdf0e10cSrcweir 	if(!bIsGroup || bIs3DScene)
333*cdf0e10cSrcweir 	{
334*cdf0e10cSrcweir 		if(pUndoSet)
335*cdf0e10cSrcweir 		{
336*cdf0e10cSrcweir 			delete pUndoSet;
337*cdf0e10cSrcweir 		}
338*cdf0e10cSrcweir 
339*cdf0e10cSrcweir 		pUndoSet = new SfxItemSet(pObj->GetMergedItemSet());
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir 		if(bStyleSheet)
342*cdf0e10cSrcweir 			pUndoStyleSheet = pObj->GetStyleSheet();
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir 		if(bSaveText)
345*cdf0e10cSrcweir 		{
346*cdf0e10cSrcweir 			pTextUndo = pObj->GetOutlinerParaObject();
347*cdf0e10cSrcweir 			if(pTextUndo)
348*cdf0e10cSrcweir 				pTextUndo = new OutlinerParaObject(*pTextUndo);
349*cdf0e10cSrcweir 		}
350*cdf0e10cSrcweir 	}
351*cdf0e10cSrcweir }
352*cdf0e10cSrcweir 
353*cdf0e10cSrcweir SdrUndoAttrObj::~SdrUndoAttrObj()
354*cdf0e10cSrcweir {
355*cdf0e10cSrcweir 	if(pUndoSet)
356*cdf0e10cSrcweir 		delete pUndoSet;
357*cdf0e10cSrcweir 	if(pRedoSet)
358*cdf0e10cSrcweir 		delete pRedoSet;
359*cdf0e10cSrcweir 	if(pRepeatSet)
360*cdf0e10cSrcweir 		delete pRepeatSet;
361*cdf0e10cSrcweir 	if(pUndoGroup)
362*cdf0e10cSrcweir 		delete pUndoGroup;
363*cdf0e10cSrcweir 	if(pTextUndo)
364*cdf0e10cSrcweir 		delete pTextUndo;
365*cdf0e10cSrcweir 
366*cdf0e10cSrcweir 	// #i8508#
367*cdf0e10cSrcweir 	if(pTextRedo)
368*cdf0e10cSrcweir 		delete pTextRedo;
369*cdf0e10cSrcweir }
370*cdf0e10cSrcweir 
371*cdf0e10cSrcweir void SdrUndoAttrObj::SetRepeatAttr(const SfxItemSet& rSet)
372*cdf0e10cSrcweir {
373*cdf0e10cSrcweir 	if(pRepeatSet)
374*cdf0e10cSrcweir 		delete pRepeatSet;
375*cdf0e10cSrcweir 
376*cdf0e10cSrcweir 	pRepeatSet = new SfxItemSet(rSet);
377*cdf0e10cSrcweir }
378*cdf0e10cSrcweir 
379*cdf0e10cSrcweir void SdrUndoAttrObj::Undo()
380*cdf0e10cSrcweir {
381*cdf0e10cSrcweir     E3DModifySceneSnapRectUpdater aUpdater(pObj);
382*cdf0e10cSrcweir 	sal_Bool bIs3DScene(pObj && pObj->ISA(E3dScene));
383*cdf0e10cSrcweir 
384*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
385*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
386*cdf0e10cSrcweir 
387*cdf0e10cSrcweir 	if(!pUndoGroup || bIs3DScene)
388*cdf0e10cSrcweir 	{
389*cdf0e10cSrcweir 		if(bHaveToTakeRedoSet)
390*cdf0e10cSrcweir 		{
391*cdf0e10cSrcweir 			bHaveToTakeRedoSet = sal_False;
392*cdf0e10cSrcweir 
393*cdf0e10cSrcweir 			if(pRedoSet)
394*cdf0e10cSrcweir 			{
395*cdf0e10cSrcweir 				delete pRedoSet;
396*cdf0e10cSrcweir 			}
397*cdf0e10cSrcweir 
398*cdf0e10cSrcweir 			pRedoSet = new SfxItemSet(pObj->GetMergedItemSet());
399*cdf0e10cSrcweir 
400*cdf0e10cSrcweir 			if(bStyleSheet)
401*cdf0e10cSrcweir 				pRedoStyleSheet=pObj->GetStyleSheet();
402*cdf0e10cSrcweir 
403*cdf0e10cSrcweir 			if(pTextUndo)
404*cdf0e10cSrcweir 			{
405*cdf0e10cSrcweir 				// #i8508#
406*cdf0e10cSrcweir 				pTextRedo = pObj->GetOutlinerParaObject();
407*cdf0e10cSrcweir 
408*cdf0e10cSrcweir 				if(pTextRedo)
409*cdf0e10cSrcweir 					pTextRedo = new OutlinerParaObject(*pTextRedo);
410*cdf0e10cSrcweir 			}
411*cdf0e10cSrcweir 		}
412*cdf0e10cSrcweir 
413*cdf0e10cSrcweir 		if(bStyleSheet)
414*cdf0e10cSrcweir 		{
415*cdf0e10cSrcweir 			pRedoStyleSheet = pObj->GetStyleSheet();
416*cdf0e10cSrcweir 			pObj->SetStyleSheet(pUndoStyleSheet, sal_True);
417*cdf0e10cSrcweir 		}
418*cdf0e10cSrcweir 
419*cdf0e10cSrcweir 		sdr::properties::ItemChangeBroadcaster aItemChange(*pObj);
420*cdf0e10cSrcweir 
421*cdf0e10cSrcweir 		// #105122# Since ClearItem sets back everything to normal
422*cdf0e10cSrcweir 		// it also sets fit-to-size text to non-fit-to-size text and
423*cdf0e10cSrcweir 		// switches on autogrowheight (the default). That may lead to
424*cdf0e10cSrcweir 		// loosing the geometry size info for the object when it is
425*cdf0e10cSrcweir 		// re-layouted from AdjustTextFrameWidthAndHeight(). This makes
426*cdf0e10cSrcweir 		// rescuing the size of the object necessary.
427*cdf0e10cSrcweir 		const Rectangle aSnapRect = pObj->GetSnapRect();
428*cdf0e10cSrcweir 
429*cdf0e10cSrcweir 		if(pUndoSet)
430*cdf0e10cSrcweir 		{
431*cdf0e10cSrcweir 			// #109587#
432*cdf0e10cSrcweir 			if(pObj->ISA(SdrCaptionObj))
433*cdf0e10cSrcweir 			{
434*cdf0e10cSrcweir 				// do a more smooth item deletion here, else the text
435*cdf0e10cSrcweir 				// rect will be reformatted, especially when information regarding
436*cdf0e10cSrcweir 				// vertical text is changed. When clearing only set items it's
437*cdf0e10cSrcweir 				// slower, but safer regarding such information (it's not changed
438*cdf0e10cSrcweir 				// usually)
439*cdf0e10cSrcweir 				SfxWhichIter aIter(*pUndoSet);
440*cdf0e10cSrcweir 				sal_uInt16 nWhich(aIter.FirstWhich());
441*cdf0e10cSrcweir 
442*cdf0e10cSrcweir 				while(nWhich)
443*cdf0e10cSrcweir 				{
444*cdf0e10cSrcweir 					if(SFX_ITEM_SET != pUndoSet->GetItemState(nWhich, sal_False))
445*cdf0e10cSrcweir 					{
446*cdf0e10cSrcweir 						pObj->ClearMergedItem(nWhich);
447*cdf0e10cSrcweir 					}
448*cdf0e10cSrcweir 
449*cdf0e10cSrcweir 					nWhich = aIter.NextWhich();
450*cdf0e10cSrcweir 				}
451*cdf0e10cSrcweir 			}
452*cdf0e10cSrcweir 			else
453*cdf0e10cSrcweir 			{
454*cdf0e10cSrcweir 				pObj->ClearMergedItem();
455*cdf0e10cSrcweir 			}
456*cdf0e10cSrcweir 
457*cdf0e10cSrcweir 			pObj->SetMergedItemSet(*pUndoSet);
458*cdf0e10cSrcweir 		}
459*cdf0e10cSrcweir 
460*cdf0e10cSrcweir 		// #105122# Restore prev size here when it was changed.
461*cdf0e10cSrcweir 		if(aSnapRect != pObj->GetSnapRect())
462*cdf0e10cSrcweir 		{
463*cdf0e10cSrcweir 			pObj->NbcSetSnapRect(aSnapRect);
464*cdf0e10cSrcweir 		}
465*cdf0e10cSrcweir 
466*cdf0e10cSrcweir 		pObj->GetProperties().BroadcastItemChange(aItemChange);
467*cdf0e10cSrcweir 
468*cdf0e10cSrcweir 		if(pTextUndo)
469*cdf0e10cSrcweir 		{
470*cdf0e10cSrcweir 			pObj->SetOutlinerParaObject(new OutlinerParaObject(*pTextUndo));
471*cdf0e10cSrcweir 		}
472*cdf0e10cSrcweir 	}
473*cdf0e10cSrcweir 
474*cdf0e10cSrcweir 	if(pUndoGroup)
475*cdf0e10cSrcweir 	{
476*cdf0e10cSrcweir 		pUndoGroup->Undo();
477*cdf0e10cSrcweir 	}
478*cdf0e10cSrcweir }
479*cdf0e10cSrcweir 
480*cdf0e10cSrcweir void SdrUndoAttrObj::Redo()
481*cdf0e10cSrcweir {
482*cdf0e10cSrcweir     E3DModifySceneSnapRectUpdater aUpdater(pObj);
483*cdf0e10cSrcweir 	sal_Bool bIs3DScene(pObj && pObj->ISA(E3dScene));
484*cdf0e10cSrcweir 
485*cdf0e10cSrcweir 	if(!pUndoGroup || bIs3DScene)
486*cdf0e10cSrcweir 	{
487*cdf0e10cSrcweir 		if(bStyleSheet)
488*cdf0e10cSrcweir 		{
489*cdf0e10cSrcweir 			pUndoStyleSheet = pObj->GetStyleSheet();
490*cdf0e10cSrcweir 			pObj->SetStyleSheet(pRedoStyleSheet, sal_True);
491*cdf0e10cSrcweir 		}
492*cdf0e10cSrcweir 
493*cdf0e10cSrcweir 		sdr::properties::ItemChangeBroadcaster aItemChange(*pObj);
494*cdf0e10cSrcweir 
495*cdf0e10cSrcweir 		// #105122#
496*cdf0e10cSrcweir 		const Rectangle aSnapRect = pObj->GetSnapRect();
497*cdf0e10cSrcweir 
498*cdf0e10cSrcweir 		if(pRedoSet)
499*cdf0e10cSrcweir 		{
500*cdf0e10cSrcweir 			// #109587#
501*cdf0e10cSrcweir 			if(pObj->ISA(SdrCaptionObj))
502*cdf0e10cSrcweir 			{
503*cdf0e10cSrcweir 				// do a more smooth item deletion here, else the text
504*cdf0e10cSrcweir 				// rect will be reformatted, especially when information regarding
505*cdf0e10cSrcweir 				// vertical text is changed. When clearing only set items it's
506*cdf0e10cSrcweir 				// slower, but safer regarding such information (it's not changed
507*cdf0e10cSrcweir 				// usually)
508*cdf0e10cSrcweir 				SfxWhichIter aIter(*pRedoSet);
509*cdf0e10cSrcweir 				sal_uInt16 nWhich(aIter.FirstWhich());
510*cdf0e10cSrcweir 
511*cdf0e10cSrcweir 				while(nWhich)
512*cdf0e10cSrcweir 				{
513*cdf0e10cSrcweir 					if(SFX_ITEM_SET != pRedoSet->GetItemState(nWhich, sal_False))
514*cdf0e10cSrcweir 					{
515*cdf0e10cSrcweir 						pObj->ClearMergedItem(nWhich);
516*cdf0e10cSrcweir 					}
517*cdf0e10cSrcweir 
518*cdf0e10cSrcweir 					nWhich = aIter.NextWhich();
519*cdf0e10cSrcweir 				}
520*cdf0e10cSrcweir 			}
521*cdf0e10cSrcweir 			else
522*cdf0e10cSrcweir 			{
523*cdf0e10cSrcweir 				pObj->ClearMergedItem();
524*cdf0e10cSrcweir 			}
525*cdf0e10cSrcweir 
526*cdf0e10cSrcweir 			pObj->SetMergedItemSet(*pRedoSet);
527*cdf0e10cSrcweir 		}
528*cdf0e10cSrcweir 
529*cdf0e10cSrcweir 		// #105122# Restore prev size here when it was changed.
530*cdf0e10cSrcweir 		if(aSnapRect != pObj->GetSnapRect())
531*cdf0e10cSrcweir 		{
532*cdf0e10cSrcweir 			pObj->NbcSetSnapRect(aSnapRect);
533*cdf0e10cSrcweir 		}
534*cdf0e10cSrcweir 
535*cdf0e10cSrcweir 		pObj->GetProperties().BroadcastItemChange(aItemChange);
536*cdf0e10cSrcweir 
537*cdf0e10cSrcweir 		// #i8508#
538*cdf0e10cSrcweir 		if(pTextRedo)
539*cdf0e10cSrcweir 		{
540*cdf0e10cSrcweir 			pObj->SetOutlinerParaObject(new OutlinerParaObject(*pTextRedo));
541*cdf0e10cSrcweir 		}
542*cdf0e10cSrcweir 	}
543*cdf0e10cSrcweir 
544*cdf0e10cSrcweir 	if(pUndoGroup)
545*cdf0e10cSrcweir 	{
546*cdf0e10cSrcweir 		pUndoGroup->Redo();
547*cdf0e10cSrcweir 	}
548*cdf0e10cSrcweir 
549*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
550*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
551*cdf0e10cSrcweir }
552*cdf0e10cSrcweir 
553*cdf0e10cSrcweir XubString SdrUndoAttrObj::GetComment() const
554*cdf0e10cSrcweir {
555*cdf0e10cSrcweir 	XubString aStr;
556*cdf0e10cSrcweir 
557*cdf0e10cSrcweir 	if(bStyleSheet)
558*cdf0e10cSrcweir 	{
559*cdf0e10cSrcweir 		ImpTakeDescriptionStr(STR_EditSetStylesheet, aStr);
560*cdf0e10cSrcweir 	}
561*cdf0e10cSrcweir 	else
562*cdf0e10cSrcweir 	{
563*cdf0e10cSrcweir 		ImpTakeDescriptionStr(STR_EditSetAttributes, aStr);
564*cdf0e10cSrcweir 	}
565*cdf0e10cSrcweir 
566*cdf0e10cSrcweir 	return aStr;
567*cdf0e10cSrcweir }
568*cdf0e10cSrcweir 
569*cdf0e10cSrcweir void SdrUndoAttrObj::SdrRepeat(SdrView& rView)
570*cdf0e10cSrcweir {
571*cdf0e10cSrcweir 	if(pRepeatSet)
572*cdf0e10cSrcweir 	{
573*cdf0e10cSrcweir 		rView.SetAttrToMarked(*pRepeatSet, sal_False);
574*cdf0e10cSrcweir 	}
575*cdf0e10cSrcweir }
576*cdf0e10cSrcweir 
577*cdf0e10cSrcweir bool SdrUndoAttrObj::CanSdrRepeat(SdrView& rView) const
578*cdf0e10cSrcweir {
579*cdf0e10cSrcweir 	return (pRepeatSet!=0L && rView.AreObjectsMarked());
580*cdf0e10cSrcweir }
581*cdf0e10cSrcweir 
582*cdf0e10cSrcweir XubString SdrUndoAttrObj::GetSdrRepeatComment(SdrView& /*rView*/) const
583*cdf0e10cSrcweir {
584*cdf0e10cSrcweir 	XubString aStr;
585*cdf0e10cSrcweir 
586*cdf0e10cSrcweir 	if(bStyleSheet)
587*cdf0e10cSrcweir 	{
588*cdf0e10cSrcweir 		ImpTakeDescriptionStr(STR_EditSetStylesheet, aStr, sal_True);
589*cdf0e10cSrcweir 	}
590*cdf0e10cSrcweir 	else
591*cdf0e10cSrcweir 	{
592*cdf0e10cSrcweir 		ImpTakeDescriptionStr(STR_EditSetAttributes, aStr, sal_True);
593*cdf0e10cSrcweir 	}
594*cdf0e10cSrcweir 
595*cdf0e10cSrcweir 	return aStr;
596*cdf0e10cSrcweir }
597*cdf0e10cSrcweir 
598*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
599*cdf0e10cSrcweir 
600*cdf0e10cSrcweir void SdrUndoMoveObj::Undo()
601*cdf0e10cSrcweir {
602*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
603*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
604*cdf0e10cSrcweir 
605*cdf0e10cSrcweir 	pObj->Move(Size(-aDistance.Width(),-aDistance.Height()));
606*cdf0e10cSrcweir }
607*cdf0e10cSrcweir 
608*cdf0e10cSrcweir void SdrUndoMoveObj::Redo()
609*cdf0e10cSrcweir {
610*cdf0e10cSrcweir 	pObj->Move(Size(aDistance.Width(),aDistance.Height()));
611*cdf0e10cSrcweir 
612*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
613*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
614*cdf0e10cSrcweir }
615*cdf0e10cSrcweir 
616*cdf0e10cSrcweir XubString SdrUndoMoveObj::GetComment() const
617*cdf0e10cSrcweir {
618*cdf0e10cSrcweir 	XubString aStr;
619*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_EditMove,aStr);
620*cdf0e10cSrcweir 	return aStr;
621*cdf0e10cSrcweir }
622*cdf0e10cSrcweir 
623*cdf0e10cSrcweir void SdrUndoMoveObj::SdrRepeat(SdrView& rView)
624*cdf0e10cSrcweir {
625*cdf0e10cSrcweir 	rView.MoveMarkedObj(aDistance);
626*cdf0e10cSrcweir }
627*cdf0e10cSrcweir 
628*cdf0e10cSrcweir bool SdrUndoMoveObj::CanSdrRepeat(SdrView& rView) const
629*cdf0e10cSrcweir {
630*cdf0e10cSrcweir 	return rView.AreObjectsMarked();
631*cdf0e10cSrcweir }
632*cdf0e10cSrcweir 
633*cdf0e10cSrcweir XubString SdrUndoMoveObj::GetSdrRepeatComment(SdrView& /*rView*/) const
634*cdf0e10cSrcweir {
635*cdf0e10cSrcweir 	XubString aStr;
636*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_EditMove,aStr,sal_True);
637*cdf0e10cSrcweir 	return aStr;
638*cdf0e10cSrcweir }
639*cdf0e10cSrcweir 
640*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
641*cdf0e10cSrcweir 
642*cdf0e10cSrcweir SdrUndoGeoObj::SdrUndoGeoObj(SdrObject& rNewObj):
643*cdf0e10cSrcweir 	SdrUndoObj(rNewObj),
644*cdf0e10cSrcweir 	pUndoGeo(NULL),
645*cdf0e10cSrcweir 	pRedoGeo(NULL),
646*cdf0e10cSrcweir 	pUndoGroup(NULL)
647*cdf0e10cSrcweir {
648*cdf0e10cSrcweir 	SdrObjList* pOL=rNewObj.GetSubList();
649*cdf0e10cSrcweir 	if (pOL!=NULL && pOL->GetObjCount() && !rNewObj.ISA(E3dScene))
650*cdf0e10cSrcweir 	{
651*cdf0e10cSrcweir 		// Aha, Gruppenobjekt
652*cdf0e10cSrcweir 		// AW: Aber keine 3D-Szene, dann nur fuer die Szene selbst den Undo anlegen
653*cdf0e10cSrcweir 		pUndoGroup=new SdrUndoGroup(*pObj->GetModel());
654*cdf0e10cSrcweir 		sal_uIntPtr nObjAnz=pOL->GetObjCount();
655*cdf0e10cSrcweir 		for (sal_uIntPtr nObjNum=0; nObjNum<nObjAnz; nObjNum++) {
656*cdf0e10cSrcweir 			pUndoGroup->AddAction(new SdrUndoGeoObj(*pOL->GetObj(nObjNum)));
657*cdf0e10cSrcweir 		}
658*cdf0e10cSrcweir 	} else {
659*cdf0e10cSrcweir 		pUndoGeo=pObj->GetGeoData();
660*cdf0e10cSrcweir 	}
661*cdf0e10cSrcweir }
662*cdf0e10cSrcweir 
663*cdf0e10cSrcweir SdrUndoGeoObj::~SdrUndoGeoObj()
664*cdf0e10cSrcweir {
665*cdf0e10cSrcweir 	if (pUndoGeo!=NULL) delete pUndoGeo;
666*cdf0e10cSrcweir 	if (pRedoGeo!=NULL) delete pRedoGeo;
667*cdf0e10cSrcweir 	if (pUndoGroup!=NULL) delete pUndoGroup;
668*cdf0e10cSrcweir }
669*cdf0e10cSrcweir 
670*cdf0e10cSrcweir void SdrUndoGeoObj::Undo()
671*cdf0e10cSrcweir {
672*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
673*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
674*cdf0e10cSrcweir 
675*cdf0e10cSrcweir 	if(pUndoGroup)
676*cdf0e10cSrcweir 	{
677*cdf0e10cSrcweir 		pUndoGroup->Undo();
678*cdf0e10cSrcweir 
679*cdf0e10cSrcweir 		// #97172#
680*cdf0e10cSrcweir 		// only repaint, no objectchange
681*cdf0e10cSrcweir 		pObj->ActionChanged();
682*cdf0e10cSrcweir 	}
683*cdf0e10cSrcweir 	else
684*cdf0e10cSrcweir 	{
685*cdf0e10cSrcweir 		if (pRedoGeo!=NULL) delete pRedoGeo;
686*cdf0e10cSrcweir 		pRedoGeo=pObj->GetGeoData();
687*cdf0e10cSrcweir 		pObj->SetGeoData(*pUndoGeo);
688*cdf0e10cSrcweir 	}
689*cdf0e10cSrcweir }
690*cdf0e10cSrcweir 
691*cdf0e10cSrcweir void SdrUndoGeoObj::Redo()
692*cdf0e10cSrcweir {
693*cdf0e10cSrcweir 	if(pUndoGroup)
694*cdf0e10cSrcweir 	{
695*cdf0e10cSrcweir 		pUndoGroup->Redo();
696*cdf0e10cSrcweir 
697*cdf0e10cSrcweir 		// #97172#
698*cdf0e10cSrcweir 		// only repaint, no objectchange
699*cdf0e10cSrcweir 		pObj->ActionChanged();
700*cdf0e10cSrcweir 	}
701*cdf0e10cSrcweir 	else
702*cdf0e10cSrcweir 	{
703*cdf0e10cSrcweir 		if (pUndoGeo!=NULL) delete pUndoGeo;
704*cdf0e10cSrcweir 		pUndoGeo=pObj->GetGeoData();
705*cdf0e10cSrcweir 		pObj->SetGeoData(*pRedoGeo);
706*cdf0e10cSrcweir 	}
707*cdf0e10cSrcweir 
708*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
709*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
710*cdf0e10cSrcweir }
711*cdf0e10cSrcweir 
712*cdf0e10cSrcweir XubString SdrUndoGeoObj::GetComment() const
713*cdf0e10cSrcweir {
714*cdf0e10cSrcweir 	XubString aStr;
715*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_DragMethObjOwn,aStr);
716*cdf0e10cSrcweir 	return aStr;
717*cdf0e10cSrcweir }
718*cdf0e10cSrcweir 
719*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
720*cdf0e10cSrcweir 
721*cdf0e10cSrcweir SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
722*cdf0e10cSrcweir :	SdrUndoObj(rNewObj),
723*cdf0e10cSrcweir 	bOwner(sal_False),
724*cdf0e10cSrcweir 	pView(NULL),
725*cdf0e10cSrcweir 	pPageView(NULL)
726*cdf0e10cSrcweir {
727*cdf0e10cSrcweir 	pObjList=pObj->GetObjList();
728*cdf0e10cSrcweir 	if (bOrdNumDirect) {
729*cdf0e10cSrcweir 		nOrdNum=pObj->GetOrdNumDirect();
730*cdf0e10cSrcweir 	} else {
731*cdf0e10cSrcweir 		nOrdNum=pObj->GetOrdNum();
732*cdf0e10cSrcweir 	}
733*cdf0e10cSrcweir }
734*cdf0e10cSrcweir 
735*cdf0e10cSrcweir SdrUndoObjList::~SdrUndoObjList()
736*cdf0e10cSrcweir {
737*cdf0e10cSrcweir 	if (pObj!=NULL && IsOwner())
738*cdf0e10cSrcweir 	{
739*cdf0e10cSrcweir 		// Attribute muessen wieder in den regulaeren Pool
740*cdf0e10cSrcweir 		SetOwner(sal_False);
741*cdf0e10cSrcweir 
742*cdf0e10cSrcweir 		// nun loeschen
743*cdf0e10cSrcweir 		SdrObject::Free( pObj );
744*cdf0e10cSrcweir 	}
745*cdf0e10cSrcweir }
746*cdf0e10cSrcweir 
747*cdf0e10cSrcweir void SdrUndoObjList::SetOwner(bool bNew)
748*cdf0e10cSrcweir {
749*cdf0e10cSrcweir 	bOwner = bNew;
750*cdf0e10cSrcweir }
751*cdf0e10cSrcweir 
752*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
753*cdf0e10cSrcweir 
754*cdf0e10cSrcweir void SdrUndoRemoveObj::Undo()
755*cdf0e10cSrcweir {
756*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
757*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
758*cdf0e10cSrcweir 
759*cdf0e10cSrcweir 	DBG_ASSERT(!pObj->IsInserted(),"UndoRemoveObj: pObj ist bereits Inserted");
760*cdf0e10cSrcweir 	if (!pObj->IsInserted())
761*cdf0e10cSrcweir 	{
762*cdf0e10cSrcweir 		// #i11426#
763*cdf0e10cSrcweir 		// For UNDOs in Calc/Writer it is necessary to adapt the anchor
764*cdf0e10cSrcweir 		// pos of the target object.
765*cdf0e10cSrcweir 		Point aOwnerAnchorPos(0, 0);
766*cdf0e10cSrcweir 
767*cdf0e10cSrcweir 		if(pObjList
768*cdf0e10cSrcweir 			&& pObjList->GetOwnerObj()
769*cdf0e10cSrcweir 			&& pObjList->GetOwnerObj()->ISA(SdrObjGroup))
770*cdf0e10cSrcweir 		{
771*cdf0e10cSrcweir 			aOwnerAnchorPos = pObjList->GetOwnerObj()->GetAnchorPos();
772*cdf0e10cSrcweir 		}
773*cdf0e10cSrcweir 
774*cdf0e10cSrcweir         E3DModifySceneSnapRectUpdater aUpdater(pObjList->GetOwnerObj());
775*cdf0e10cSrcweir 		SdrInsertReason aReason(SDRREASON_UNDO);
776*cdf0e10cSrcweir 		pObjList->InsertObject(pObj,nOrdNum,&aReason);
777*cdf0e10cSrcweir 
778*cdf0e10cSrcweir 		// #i11426#
779*cdf0e10cSrcweir 		if(aOwnerAnchorPos.X() || aOwnerAnchorPos.Y())
780*cdf0e10cSrcweir 		{
781*cdf0e10cSrcweir 			pObj->NbcSetAnchorPos(aOwnerAnchorPos);
782*cdf0e10cSrcweir 		}
783*cdf0e10cSrcweir 	}
784*cdf0e10cSrcweir }
785*cdf0e10cSrcweir 
786*cdf0e10cSrcweir void SdrUndoRemoveObj::Redo()
787*cdf0e10cSrcweir {
788*cdf0e10cSrcweir 	DBG_ASSERT(pObj->IsInserted(),"RedoRemoveObj: pObj ist nicht Inserted");
789*cdf0e10cSrcweir 	if (pObj->IsInserted())
790*cdf0e10cSrcweir 	{
791*cdf0e10cSrcweir 		ImplUnmarkObject( pObj );
792*cdf0e10cSrcweir         E3DModifySceneSnapRectUpdater aUpdater(pObj);
793*cdf0e10cSrcweir 		pObjList->RemoveObject(nOrdNum);
794*cdf0e10cSrcweir 	}
795*cdf0e10cSrcweir 
796*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
797*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
798*cdf0e10cSrcweir }
799*cdf0e10cSrcweir 
800*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
801*cdf0e10cSrcweir 
802*cdf0e10cSrcweir void SdrUndoInsertObj::Undo()
803*cdf0e10cSrcweir {
804*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
805*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
806*cdf0e10cSrcweir 
807*cdf0e10cSrcweir 	DBG_ASSERT(pObj->IsInserted(),"UndoInsertObj: pObj ist nicht Inserted");
808*cdf0e10cSrcweir 	if (pObj->IsInserted())
809*cdf0e10cSrcweir 	{
810*cdf0e10cSrcweir 		ImplUnmarkObject( pObj );
811*cdf0e10cSrcweir 
812*cdf0e10cSrcweir #ifdef DBG_UTIL
813*cdf0e10cSrcweir 		SdrObject* pChkObj=
814*cdf0e10cSrcweir #endif
815*cdf0e10cSrcweir 		pObjList->RemoveObject(nOrdNum);
816*cdf0e10cSrcweir 		DBG_ASSERT(pChkObj==pObj,"UndoInsertObj: RemoveObjNum!=pObj");
817*cdf0e10cSrcweir 	}
818*cdf0e10cSrcweir }
819*cdf0e10cSrcweir 
820*cdf0e10cSrcweir void SdrUndoInsertObj::Redo()
821*cdf0e10cSrcweir {
822*cdf0e10cSrcweir 	DBG_ASSERT(!pObj->IsInserted(),"RedoInsertObj: pObj ist bereits Inserted");
823*cdf0e10cSrcweir     if (!pObj->IsInserted())
824*cdf0e10cSrcweir     {
825*cdf0e10cSrcweir         // --> OD 2005-05-10 #i45952# - restore anchor position of an object,
826*cdf0e10cSrcweir         // which becomes a member of a group, because its cleared in method
827*cdf0e10cSrcweir         // <InsertObject(..)>. Needed for correct ReDo in Writer.
828*cdf0e10cSrcweir         Point aAnchorPos( 0, 0 );
829*cdf0e10cSrcweir         if ( pObjList &&
830*cdf0e10cSrcweir              pObjList->GetOwnerObj() &&
831*cdf0e10cSrcweir              pObjList->GetOwnerObj()->ISA(SdrObjGroup) )
832*cdf0e10cSrcweir         {
833*cdf0e10cSrcweir             aAnchorPos = pObj->GetAnchorPos();
834*cdf0e10cSrcweir         }
835*cdf0e10cSrcweir         // <--
836*cdf0e10cSrcweir 
837*cdf0e10cSrcweir 		SdrInsertReason aReason(SDRREASON_UNDO);
838*cdf0e10cSrcweir 		pObjList->InsertObject(pObj,nOrdNum,&aReason);
839*cdf0e10cSrcweir 
840*cdf0e10cSrcweir         // --> OD 2005-05-10 #i45952#
841*cdf0e10cSrcweir         if ( aAnchorPos.X() || aAnchorPos.Y() )
842*cdf0e10cSrcweir         {
843*cdf0e10cSrcweir             pObj->NbcSetAnchorPos( aAnchorPos );
844*cdf0e10cSrcweir         }
845*cdf0e10cSrcweir         // <--
846*cdf0e10cSrcweir 	}
847*cdf0e10cSrcweir 
848*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
849*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
850*cdf0e10cSrcweir }
851*cdf0e10cSrcweir 
852*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
853*cdf0e10cSrcweir 
854*cdf0e10cSrcweir void SdrUndoDelObj::Undo()
855*cdf0e10cSrcweir {
856*cdf0e10cSrcweir 	SdrUndoRemoveObj::Undo();
857*cdf0e10cSrcweir 	DBG_ASSERT(IsOwner(),"UndoDeleteObj: pObj gehoert nicht der UndoAction");
858*cdf0e10cSrcweir 	SetOwner(sal_False);
859*cdf0e10cSrcweir }
860*cdf0e10cSrcweir 
861*cdf0e10cSrcweir void SdrUndoDelObj::Redo()
862*cdf0e10cSrcweir {
863*cdf0e10cSrcweir 	SdrUndoRemoveObj::Redo();
864*cdf0e10cSrcweir 	DBG_ASSERT(!IsOwner(),"RedoDeleteObj: pObj gehoert bereits der UndoAction");
865*cdf0e10cSrcweir 	SetOwner(sal_True);
866*cdf0e10cSrcweir }
867*cdf0e10cSrcweir 
868*cdf0e10cSrcweir XubString SdrUndoDelObj::GetComment() const
869*cdf0e10cSrcweir {
870*cdf0e10cSrcweir 	XubString aStr;
871*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_EditDelete,aStr);
872*cdf0e10cSrcweir 	return aStr;
873*cdf0e10cSrcweir }
874*cdf0e10cSrcweir 
875*cdf0e10cSrcweir void SdrUndoDelObj::SdrRepeat(SdrView& rView)
876*cdf0e10cSrcweir {
877*cdf0e10cSrcweir 	rView.DeleteMarked();
878*cdf0e10cSrcweir }
879*cdf0e10cSrcweir 
880*cdf0e10cSrcweir bool SdrUndoDelObj::CanSdrRepeat(SdrView& rView) const
881*cdf0e10cSrcweir {
882*cdf0e10cSrcweir 	return rView.AreObjectsMarked();
883*cdf0e10cSrcweir }
884*cdf0e10cSrcweir 
885*cdf0e10cSrcweir XubString SdrUndoDelObj::GetSdrRepeatComment(SdrView& /*rView*/) const
886*cdf0e10cSrcweir {
887*cdf0e10cSrcweir 	XubString aStr;
888*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_EditDelete,aStr,sal_True);
889*cdf0e10cSrcweir 	return aStr;
890*cdf0e10cSrcweir }
891*cdf0e10cSrcweir 
892*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
893*cdf0e10cSrcweir 
894*cdf0e10cSrcweir void SdrUndoNewObj::Undo()
895*cdf0e10cSrcweir {
896*cdf0e10cSrcweir 	SdrUndoInsertObj::Undo();
897*cdf0e10cSrcweir 	DBG_ASSERT(!IsOwner(),"RedoNewObj: pObj gehoert bereits der UndoAction");
898*cdf0e10cSrcweir 	SetOwner(sal_True);
899*cdf0e10cSrcweir }
900*cdf0e10cSrcweir 
901*cdf0e10cSrcweir void SdrUndoNewObj::Redo()
902*cdf0e10cSrcweir {
903*cdf0e10cSrcweir 	SdrUndoInsertObj::Redo();
904*cdf0e10cSrcweir 	DBG_ASSERT(IsOwner(),"RedoNewObj: pObj gehoert nicht der UndoAction");
905*cdf0e10cSrcweir 	SetOwner(sal_False);
906*cdf0e10cSrcweir }
907*cdf0e10cSrcweir 
908*cdf0e10cSrcweir String SdrUndoNewObj::GetComment( const SdrObject& _rForObject )
909*cdf0e10cSrcweir {
910*cdf0e10cSrcweir     String sComment;
911*cdf0e10cSrcweir     GetDescriptionStringForObject( _rForObject, STR_UndoInsertObj, sComment );
912*cdf0e10cSrcweir     return sComment;
913*cdf0e10cSrcweir }
914*cdf0e10cSrcweir 
915*cdf0e10cSrcweir XubString SdrUndoNewObj::GetComment() const
916*cdf0e10cSrcweir {
917*cdf0e10cSrcweir 	XubString aStr;
918*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoInsertObj,aStr);
919*cdf0e10cSrcweir 	return aStr;
920*cdf0e10cSrcweir }
921*cdf0e10cSrcweir 
922*cdf0e10cSrcweir SdrUndoReplaceObj::SdrUndoReplaceObj(SdrObject& rOldObj1, SdrObject& rNewObj1, bool bOrdNumDirect)
923*cdf0e10cSrcweir :	SdrUndoObj(rOldObj1),
924*cdf0e10cSrcweir 	bOldOwner(sal_False),
925*cdf0e10cSrcweir 	bNewOwner(sal_False),
926*cdf0e10cSrcweir 	pNewObj(&rNewObj1)
927*cdf0e10cSrcweir {
928*cdf0e10cSrcweir 	SetOldOwner(sal_True);
929*cdf0e10cSrcweir 
930*cdf0e10cSrcweir 	pObjList=pObj->GetObjList();
931*cdf0e10cSrcweir 	if (bOrdNumDirect) {
932*cdf0e10cSrcweir 		nOrdNum=pObj->GetOrdNumDirect();
933*cdf0e10cSrcweir 	} else {
934*cdf0e10cSrcweir 		nOrdNum=pObj->GetOrdNum();
935*cdf0e10cSrcweir 	}
936*cdf0e10cSrcweir }
937*cdf0e10cSrcweir 
938*cdf0e10cSrcweir SdrUndoReplaceObj::~SdrUndoReplaceObj()
939*cdf0e10cSrcweir {
940*cdf0e10cSrcweir 	if (pObj!=NULL && IsOldOwner())
941*cdf0e10cSrcweir 	{
942*cdf0e10cSrcweir 		// Attribute muessen wieder in den regulaeren Pool
943*cdf0e10cSrcweir 		SetOldOwner(sal_False);
944*cdf0e10cSrcweir 
945*cdf0e10cSrcweir 		// nun loeschen
946*cdf0e10cSrcweir 		SdrObject::Free( pObj );
947*cdf0e10cSrcweir 	}
948*cdf0e10cSrcweir 	if (pNewObj!=NULL && IsNewOwner())
949*cdf0e10cSrcweir 	{
950*cdf0e10cSrcweir 		// Attribute muessen wieder in den regulaeren Pool
951*cdf0e10cSrcweir 		SetNewOwner(sal_False);
952*cdf0e10cSrcweir 
953*cdf0e10cSrcweir 		// nun loeschen
954*cdf0e10cSrcweir 		SdrObject::Free( pNewObj );
955*cdf0e10cSrcweir 	}
956*cdf0e10cSrcweir }
957*cdf0e10cSrcweir 
958*cdf0e10cSrcweir void SdrUndoReplaceObj::Undo()
959*cdf0e10cSrcweir {
960*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
961*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
962*cdf0e10cSrcweir 
963*cdf0e10cSrcweir 	if (IsOldOwner() && !IsNewOwner())
964*cdf0e10cSrcweir 	{
965*cdf0e10cSrcweir 		DBG_ASSERT(!pObj->IsInserted(),"SdrUndoReplaceObj::Undo(): Altes Objekt ist bereits inserted!");
966*cdf0e10cSrcweir 		DBG_ASSERT(pNewObj->IsInserted(),"SdrUndoReplaceObj::Undo(): Neues Objekt ist nicht inserted!");
967*cdf0e10cSrcweir 		SetOldOwner(sal_False);
968*cdf0e10cSrcweir 		SetNewOwner(sal_True);
969*cdf0e10cSrcweir 
970*cdf0e10cSrcweir 		ImplUnmarkObject( pNewObj );
971*cdf0e10cSrcweir 		pObjList->ReplaceObject(pObj,nOrdNum);
972*cdf0e10cSrcweir 	}
973*cdf0e10cSrcweir 	else
974*cdf0e10cSrcweir 	{
975*cdf0e10cSrcweir 		DBG_ERROR("SdrUndoReplaceObj::Undo(): IsMine-Flags stehen verkehrt. Doppelter Undo-Aufruf?");
976*cdf0e10cSrcweir 	}
977*cdf0e10cSrcweir }
978*cdf0e10cSrcweir 
979*cdf0e10cSrcweir void SdrUndoReplaceObj::Redo()
980*cdf0e10cSrcweir {
981*cdf0e10cSrcweir 	if (!IsOldOwner() && IsNewOwner())
982*cdf0e10cSrcweir 	{
983*cdf0e10cSrcweir 		DBG_ASSERT(!pNewObj->IsInserted(),"SdrUndoReplaceObj::Redo(): Neues Objekt ist bereits inserted!");
984*cdf0e10cSrcweir 		DBG_ASSERT(pObj->IsInserted(),"SdrUndoReplaceObj::Redo(): Altes Objekt ist nicht inserted!");
985*cdf0e10cSrcweir 		SetOldOwner(sal_True);
986*cdf0e10cSrcweir 		SetNewOwner(sal_False);
987*cdf0e10cSrcweir 
988*cdf0e10cSrcweir 		ImplUnmarkObject( pObj );
989*cdf0e10cSrcweir 		pObjList->ReplaceObject(pNewObj,nOrdNum);
990*cdf0e10cSrcweir 
991*cdf0e10cSrcweir 	}
992*cdf0e10cSrcweir 	else
993*cdf0e10cSrcweir 	{
994*cdf0e10cSrcweir 		DBG_ERROR("SdrUndoReplaceObj::Redo(): IsMine-Flags stehen verkehrt. Doppelter Redo-Aufruf?");
995*cdf0e10cSrcweir 	}
996*cdf0e10cSrcweir 
997*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
998*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
999*cdf0e10cSrcweir }
1000*cdf0e10cSrcweir 
1001*cdf0e10cSrcweir void SdrUndoReplaceObj::SetNewOwner(bool bNew)
1002*cdf0e10cSrcweir {
1003*cdf0e10cSrcweir 	bNewOwner = bNew;
1004*cdf0e10cSrcweir }
1005*cdf0e10cSrcweir 
1006*cdf0e10cSrcweir void SdrUndoReplaceObj::SetOldOwner(bool bNew)
1007*cdf0e10cSrcweir {
1008*cdf0e10cSrcweir 	bOldOwner = bNew;
1009*cdf0e10cSrcweir }
1010*cdf0e10cSrcweir 
1011*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1012*cdf0e10cSrcweir 
1013*cdf0e10cSrcweir XubString SdrUndoCopyObj::GetComment() const
1014*cdf0e10cSrcweir {
1015*cdf0e10cSrcweir 	XubString aStr;
1016*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoCopyObj,aStr);
1017*cdf0e10cSrcweir 	return aStr;
1018*cdf0e10cSrcweir }
1019*cdf0e10cSrcweir 
1020*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1021*cdf0e10cSrcweir // #i11702#
1022*cdf0e10cSrcweir 
1023*cdf0e10cSrcweir SdrUndoObjectLayerChange::SdrUndoObjectLayerChange(SdrObject& rObj, SdrLayerID aOldLayer, SdrLayerID aNewLayer)
1024*cdf0e10cSrcweir :	SdrUndoObj(rObj),
1025*cdf0e10cSrcweir 	maOldLayer(aOldLayer),
1026*cdf0e10cSrcweir 	maNewLayer(aNewLayer)
1027*cdf0e10cSrcweir {
1028*cdf0e10cSrcweir }
1029*cdf0e10cSrcweir 
1030*cdf0e10cSrcweir void SdrUndoObjectLayerChange::Undo()
1031*cdf0e10cSrcweir {
1032*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
1033*cdf0e10cSrcweir 	pObj->SetLayer(maOldLayer);
1034*cdf0e10cSrcweir }
1035*cdf0e10cSrcweir 
1036*cdf0e10cSrcweir void SdrUndoObjectLayerChange::Redo()
1037*cdf0e10cSrcweir {
1038*cdf0e10cSrcweir 	pObj->SetLayer(maNewLayer);
1039*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
1040*cdf0e10cSrcweir }
1041*cdf0e10cSrcweir 
1042*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1043*cdf0e10cSrcweir 
1044*cdf0e10cSrcweir SdrUndoObjOrdNum::SdrUndoObjOrdNum(SdrObject& rNewObj, sal_uInt32 nOldOrdNum1, sal_uInt32 nNewOrdNum1):
1045*cdf0e10cSrcweir 	SdrUndoObj(rNewObj),
1046*cdf0e10cSrcweir 	nOldOrdNum(nOldOrdNum1),
1047*cdf0e10cSrcweir 	nNewOrdNum(nNewOrdNum1)
1048*cdf0e10cSrcweir {
1049*cdf0e10cSrcweir }
1050*cdf0e10cSrcweir 
1051*cdf0e10cSrcweir void SdrUndoObjOrdNum::Undo()
1052*cdf0e10cSrcweir {
1053*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
1054*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
1055*cdf0e10cSrcweir 
1056*cdf0e10cSrcweir 	SdrObjList* pOL=pObj->GetObjList();
1057*cdf0e10cSrcweir 	if (pOL==NULL) {
1058*cdf0e10cSrcweir 		DBG_ERROR("UndoObjOrdNum: pObj hat keine ObjList");
1059*cdf0e10cSrcweir 		return;
1060*cdf0e10cSrcweir 	}
1061*cdf0e10cSrcweir 	pOL->SetObjectOrdNum(nNewOrdNum,nOldOrdNum);
1062*cdf0e10cSrcweir }
1063*cdf0e10cSrcweir 
1064*cdf0e10cSrcweir void SdrUndoObjOrdNum::Redo()
1065*cdf0e10cSrcweir {
1066*cdf0e10cSrcweir 	SdrObjList* pOL=pObj->GetObjList();
1067*cdf0e10cSrcweir 	if (pOL==NULL) {
1068*cdf0e10cSrcweir 		DBG_ERROR("RedoObjOrdNum: pObj hat keine ObjList");
1069*cdf0e10cSrcweir 		return;
1070*cdf0e10cSrcweir 	}
1071*cdf0e10cSrcweir 	pOL->SetObjectOrdNum(nOldOrdNum,nNewOrdNum);
1072*cdf0e10cSrcweir 
1073*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
1074*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
1075*cdf0e10cSrcweir }
1076*cdf0e10cSrcweir 
1077*cdf0e10cSrcweir XubString SdrUndoObjOrdNum::GetComment() const
1078*cdf0e10cSrcweir {
1079*cdf0e10cSrcweir 	XubString aStr;
1080*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoObjOrdNum,aStr);
1081*cdf0e10cSrcweir 	return aStr;
1082*cdf0e10cSrcweir }
1083*cdf0e10cSrcweir 
1084*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1085*cdf0e10cSrcweir 
1086*cdf0e10cSrcweir SdrUndoObjSetText::SdrUndoObjSetText(SdrObject& rNewObj, sal_Int32 nText)
1087*cdf0e10cSrcweir : SdrUndoObj(rNewObj)
1088*cdf0e10cSrcweir , pOldText(NULL)
1089*cdf0e10cSrcweir , pNewText(NULL)
1090*cdf0e10cSrcweir , bNewTextAvailable(sal_False)
1091*cdf0e10cSrcweir , bEmptyPresObj(sal_False)
1092*cdf0e10cSrcweir , mnText(nText)
1093*cdf0e10cSrcweir {
1094*cdf0e10cSrcweir 	SdrText* pText = static_cast< SdrTextObj*>( &rNewObj )->getText(mnText);
1095*cdf0e10cSrcweir 	if( pText && pText->GetOutlinerParaObject() )
1096*cdf0e10cSrcweir 		pOldText = new OutlinerParaObject(*pText->GetOutlinerParaObject());
1097*cdf0e10cSrcweir 
1098*cdf0e10cSrcweir 	bEmptyPresObj = rNewObj.IsEmptyPresObj();
1099*cdf0e10cSrcweir }
1100*cdf0e10cSrcweir 
1101*cdf0e10cSrcweir SdrUndoObjSetText::~SdrUndoObjSetText()
1102*cdf0e10cSrcweir {
1103*cdf0e10cSrcweir 	if ( pOldText )
1104*cdf0e10cSrcweir 		delete pOldText;
1105*cdf0e10cSrcweir 	if ( pNewText )
1106*cdf0e10cSrcweir 		delete pNewText;
1107*cdf0e10cSrcweir }
1108*cdf0e10cSrcweir 
1109*cdf0e10cSrcweir void SdrUndoObjSetText::AfterSetText()
1110*cdf0e10cSrcweir {
1111*cdf0e10cSrcweir 	if (!bNewTextAvailable)
1112*cdf0e10cSrcweir 	{
1113*cdf0e10cSrcweir 		SdrText* pText = static_cast< SdrTextObj*>( pObj )->getText(mnText);
1114*cdf0e10cSrcweir 		if( pText && pText->GetOutlinerParaObject() )
1115*cdf0e10cSrcweir 			pNewText = new OutlinerParaObject(*pText->GetOutlinerParaObject());
1116*cdf0e10cSrcweir 		bNewTextAvailable=sal_True;
1117*cdf0e10cSrcweir 	}
1118*cdf0e10cSrcweir }
1119*cdf0e10cSrcweir 
1120*cdf0e10cSrcweir void SdrUndoObjSetText::Undo()
1121*cdf0e10cSrcweir {
1122*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
1123*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
1124*cdf0e10cSrcweir 
1125*cdf0e10cSrcweir 	// alten Text sichern fuer Redo
1126*cdf0e10cSrcweir 	if (!bNewTextAvailable)
1127*cdf0e10cSrcweir 		AfterSetText();
1128*cdf0e10cSrcweir 
1129*cdf0e10cSrcweir 	// Text fuer Undo kopieren, denn SetOutlinerParaObject() ist Eigentumsuebereignung
1130*cdf0e10cSrcweir 	OutlinerParaObject* pText1 = pOldText;
1131*cdf0e10cSrcweir 	if(pText1)
1132*cdf0e10cSrcweir 		pText1 = new OutlinerParaObject(*pText1);
1133*cdf0e10cSrcweir 
1134*cdf0e10cSrcweir 	SdrText* pText = static_cast< SdrTextObj*>( pObj )->getText(mnText);
1135*cdf0e10cSrcweir 	if( pText )
1136*cdf0e10cSrcweir 		pText->SetOutlinerParaObject(pText1);
1137*cdf0e10cSrcweir 
1138*cdf0e10cSrcweir 	pObj->SetEmptyPresObj( bEmptyPresObj );
1139*cdf0e10cSrcweir 	pObj->ActionChanged();
1140*cdf0e10cSrcweir }
1141*cdf0e10cSrcweir 
1142*cdf0e10cSrcweir void SdrUndoObjSetText::Redo()
1143*cdf0e10cSrcweir {
1144*cdf0e10cSrcweir 	// Text fuer Undo kopieren, denn SetOutlinerParaObject() ist Eigentumsuebereignung
1145*cdf0e10cSrcweir 	OutlinerParaObject* pText1 = pNewText;
1146*cdf0e10cSrcweir 
1147*cdf0e10cSrcweir 	if(pText1)
1148*cdf0e10cSrcweir 		pText1 = new OutlinerParaObject(*pText1);
1149*cdf0e10cSrcweir 
1150*cdf0e10cSrcweir 	SdrText* pText = static_cast< SdrTextObj*>( pObj )->getText(mnText);
1151*cdf0e10cSrcweir 	if( pText )
1152*cdf0e10cSrcweir 		static_cast< SdrTextObj* >( pObj )->NbcSetOutlinerParaObjectForText( pText1, pText );
1153*cdf0e10cSrcweir 
1154*cdf0e10cSrcweir 	pObj->ActionChanged();
1155*cdf0e10cSrcweir 
1156*cdf0e10cSrcweir 	// #94278# Trigger PageChangeCall
1157*cdf0e10cSrcweir 	ImpShowPageOfThisObject();
1158*cdf0e10cSrcweir }
1159*cdf0e10cSrcweir 
1160*cdf0e10cSrcweir XubString SdrUndoObjSetText::GetComment() const
1161*cdf0e10cSrcweir {
1162*cdf0e10cSrcweir 	XubString aStr;
1163*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoObjSetText,aStr);
1164*cdf0e10cSrcweir 	return aStr;
1165*cdf0e10cSrcweir }
1166*cdf0e10cSrcweir 
1167*cdf0e10cSrcweir XubString SdrUndoObjSetText::GetSdrRepeatComment(SdrView& /*rView*/) const
1168*cdf0e10cSrcweir {
1169*cdf0e10cSrcweir 	XubString aStr;
1170*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoObjSetText,aStr);
1171*cdf0e10cSrcweir 	return aStr;
1172*cdf0e10cSrcweir }
1173*cdf0e10cSrcweir 
1174*cdf0e10cSrcweir void SdrUndoObjSetText::SdrRepeat(SdrView& rView)
1175*cdf0e10cSrcweir {
1176*cdf0e10cSrcweir 	if (bNewTextAvailable && rView.AreObjectsMarked())
1177*cdf0e10cSrcweir 	{
1178*cdf0e10cSrcweir 		const SdrMarkList& rML=rView.GetMarkedObjectList();
1179*cdf0e10cSrcweir 
1180*cdf0e10cSrcweir 		const bool bUndo = rView.IsUndoEnabled();
1181*cdf0e10cSrcweir 		if( bUndo )
1182*cdf0e10cSrcweir 		{
1183*cdf0e10cSrcweir 			XubString aStr;
1184*cdf0e10cSrcweir 			ImpTakeDescriptionStr(STR_UndoObjSetText,aStr);
1185*cdf0e10cSrcweir 			rView.BegUndo(aStr);
1186*cdf0e10cSrcweir 		}
1187*cdf0e10cSrcweir 
1188*cdf0e10cSrcweir 		sal_uIntPtr nAnz=rML.GetMarkCount();
1189*cdf0e10cSrcweir 		for (sal_uIntPtr nm=0; nm<nAnz; nm++)
1190*cdf0e10cSrcweir 		{
1191*cdf0e10cSrcweir 			SdrObject* pObj2=rML.GetMark(nm)->GetMarkedSdrObj();
1192*cdf0e10cSrcweir 			SdrTextObj* pTextObj=PTR_CAST(SdrTextObj,pObj2);
1193*cdf0e10cSrcweir 			if (pTextObj!=NULL)
1194*cdf0e10cSrcweir 			{
1195*cdf0e10cSrcweir 				if( bUndo )
1196*cdf0e10cSrcweir 					rView.AddUndo(new SdrUndoObjSetText(*pTextObj,0));
1197*cdf0e10cSrcweir 
1198*cdf0e10cSrcweir 				OutlinerParaObject* pText1=pNewText;
1199*cdf0e10cSrcweir 				if (pText1!=NULL)
1200*cdf0e10cSrcweir 					pText1 = new OutlinerParaObject(*pText1);
1201*cdf0e10cSrcweir 				pTextObj->SetOutlinerParaObject(pText1);
1202*cdf0e10cSrcweir 			}
1203*cdf0e10cSrcweir 		}
1204*cdf0e10cSrcweir 
1205*cdf0e10cSrcweir 		if( bUndo )
1206*cdf0e10cSrcweir 			rView.EndUndo();
1207*cdf0e10cSrcweir 	}
1208*cdf0e10cSrcweir }
1209*cdf0e10cSrcweir 
1210*cdf0e10cSrcweir bool SdrUndoObjSetText::CanSdrRepeat(SdrView& rView) const
1211*cdf0e10cSrcweir {
1212*cdf0e10cSrcweir 	bool bOk=sal_False;
1213*cdf0e10cSrcweir 	if (bNewTextAvailable && rView.AreObjectsMarked()) {
1214*cdf0e10cSrcweir 		bOk=sal_True;
1215*cdf0e10cSrcweir 	}
1216*cdf0e10cSrcweir 	return bOk;
1217*cdf0e10cSrcweir }
1218*cdf0e10cSrcweir 
1219*cdf0e10cSrcweir // --> OD 2009-07-09 #i73249#
1220*cdf0e10cSrcweir SdrUndoObjStrAttr::SdrUndoObjStrAttr( SdrObject& rNewObj,
1221*cdf0e10cSrcweir                                       const ObjStrAttrType eObjStrAttr,
1222*cdf0e10cSrcweir                                       const String& sOldStr,
1223*cdf0e10cSrcweir                                       const String& sNewStr)
1224*cdf0e10cSrcweir     : SdrUndoObj( rNewObj ),
1225*cdf0e10cSrcweir       meObjStrAttr( eObjStrAttr ),
1226*cdf0e10cSrcweir       msOldStr( sOldStr ),
1227*cdf0e10cSrcweir       msNewStr( sNewStr )
1228*cdf0e10cSrcweir {
1229*cdf0e10cSrcweir }
1230*cdf0e10cSrcweir 
1231*cdf0e10cSrcweir void SdrUndoObjStrAttr::Undo()
1232*cdf0e10cSrcweir {
1233*cdf0e10cSrcweir     ImpShowPageOfThisObject();
1234*cdf0e10cSrcweir 
1235*cdf0e10cSrcweir     switch ( meObjStrAttr )
1236*cdf0e10cSrcweir     {
1237*cdf0e10cSrcweir         case OBJ_NAME:
1238*cdf0e10cSrcweir         {
1239*cdf0e10cSrcweir             pObj->SetName( msOldStr );
1240*cdf0e10cSrcweir         }
1241*cdf0e10cSrcweir         break;
1242*cdf0e10cSrcweir         case OBJ_TITLE:
1243*cdf0e10cSrcweir         {
1244*cdf0e10cSrcweir             pObj->SetTitle( msOldStr );
1245*cdf0e10cSrcweir         }
1246*cdf0e10cSrcweir         break;
1247*cdf0e10cSrcweir         case OBJ_DESCRIPTION:
1248*cdf0e10cSrcweir         {
1249*cdf0e10cSrcweir             pObj->SetDescription( msOldStr );
1250*cdf0e10cSrcweir         }
1251*cdf0e10cSrcweir         break;
1252*cdf0e10cSrcweir     }
1253*cdf0e10cSrcweir }
1254*cdf0e10cSrcweir 
1255*cdf0e10cSrcweir void SdrUndoObjStrAttr::Redo()
1256*cdf0e10cSrcweir {
1257*cdf0e10cSrcweir     switch ( meObjStrAttr )
1258*cdf0e10cSrcweir     {
1259*cdf0e10cSrcweir         case OBJ_NAME:
1260*cdf0e10cSrcweir         {
1261*cdf0e10cSrcweir             pObj->SetName( msNewStr );
1262*cdf0e10cSrcweir         }
1263*cdf0e10cSrcweir         break;
1264*cdf0e10cSrcweir         case OBJ_TITLE:
1265*cdf0e10cSrcweir         {
1266*cdf0e10cSrcweir             pObj->SetTitle( msNewStr );
1267*cdf0e10cSrcweir         }
1268*cdf0e10cSrcweir         break;
1269*cdf0e10cSrcweir         case OBJ_DESCRIPTION:
1270*cdf0e10cSrcweir         {
1271*cdf0e10cSrcweir             pObj->SetDescription( msNewStr );
1272*cdf0e10cSrcweir         }
1273*cdf0e10cSrcweir         break;
1274*cdf0e10cSrcweir     }
1275*cdf0e10cSrcweir 
1276*cdf0e10cSrcweir     ImpShowPageOfThisObject();
1277*cdf0e10cSrcweir }
1278*cdf0e10cSrcweir 
1279*cdf0e10cSrcweir String SdrUndoObjStrAttr::GetComment() const
1280*cdf0e10cSrcweir {
1281*cdf0e10cSrcweir     String aStr;
1282*cdf0e10cSrcweir     switch ( meObjStrAttr )
1283*cdf0e10cSrcweir     {
1284*cdf0e10cSrcweir         case OBJ_NAME:
1285*cdf0e10cSrcweir         {
1286*cdf0e10cSrcweir             ImpTakeDescriptionStr( STR_UndoObjName, aStr );
1287*cdf0e10cSrcweir             aStr += sal_Unicode(' ');
1288*cdf0e10cSrcweir             aStr += sal_Unicode('\'');
1289*cdf0e10cSrcweir             aStr += msNewStr;
1290*cdf0e10cSrcweir             aStr += sal_Unicode('\'');
1291*cdf0e10cSrcweir         }
1292*cdf0e10cSrcweir         break;
1293*cdf0e10cSrcweir         case OBJ_TITLE:
1294*cdf0e10cSrcweir         {
1295*cdf0e10cSrcweir             ImpTakeDescriptionStr( STR_UndoObjTitle, aStr );
1296*cdf0e10cSrcweir         }
1297*cdf0e10cSrcweir         break;
1298*cdf0e10cSrcweir         case OBJ_DESCRIPTION:
1299*cdf0e10cSrcweir         {
1300*cdf0e10cSrcweir             ImpTakeDescriptionStr( STR_UndoObjDescription, aStr );
1301*cdf0e10cSrcweir         }
1302*cdf0e10cSrcweir         break;
1303*cdf0e10cSrcweir     }
1304*cdf0e10cSrcweir 
1305*cdf0e10cSrcweir     return aStr;
1306*cdf0e10cSrcweir }
1307*cdf0e10cSrcweir 
1308*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1309*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1310*cdf0e10cSrcweir //
1311*cdf0e10cSrcweir //  @@      @@@@   @@  @@  @@@@@  @@@@@
1312*cdf0e10cSrcweir //  @@     @@  @@  @@  @@  @@     @@  @@
1313*cdf0e10cSrcweir //  @@     @@  @@  @@  @@  @@     @@  @@
1314*cdf0e10cSrcweir //  @@     @@@@@@   @@@@   @@@@   @@@@@
1315*cdf0e10cSrcweir //  @@     @@  @@    @@    @@     @@  @@
1316*cdf0e10cSrcweir //  @@     @@  @@    @@    @@     @@  @@
1317*cdf0e10cSrcweir //  @@@@@  @@  @@    @@    @@@@@  @@  @@
1318*cdf0e10cSrcweir //
1319*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1320*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1321*cdf0e10cSrcweir 
1322*cdf0e10cSrcweir SdrUndoLayer::SdrUndoLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel):
1323*cdf0e10cSrcweir 	SdrUndoAction(rNewModel),
1324*cdf0e10cSrcweir 	pLayer(rNewLayerAdmin.GetLayer(nLayerNum)),
1325*cdf0e10cSrcweir 	pLayerAdmin(&rNewLayerAdmin),
1326*cdf0e10cSrcweir 	nNum(nLayerNum),
1327*cdf0e10cSrcweir 	bItsMine(sal_False)
1328*cdf0e10cSrcweir {
1329*cdf0e10cSrcweir }
1330*cdf0e10cSrcweir 
1331*cdf0e10cSrcweir SdrUndoLayer::~SdrUndoLayer()
1332*cdf0e10cSrcweir {
1333*cdf0e10cSrcweir 	if (bItsMine) {
1334*cdf0e10cSrcweir 		delete pLayer;
1335*cdf0e10cSrcweir 	}
1336*cdf0e10cSrcweir }
1337*cdf0e10cSrcweir 
1338*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1339*cdf0e10cSrcweir 
1340*cdf0e10cSrcweir void SdrUndoNewLayer::Undo()
1341*cdf0e10cSrcweir {
1342*cdf0e10cSrcweir 	DBG_ASSERT(!bItsMine,"SdrUndoNewLayer::Undo(): Layer gehoert bereits der UndoAction");
1343*cdf0e10cSrcweir 	bItsMine=sal_True;
1344*cdf0e10cSrcweir #ifdef DBG_UTIL
1345*cdf0e10cSrcweir 	SdrLayer* pCmpLayer=
1346*cdf0e10cSrcweir #endif
1347*cdf0e10cSrcweir 	pLayerAdmin->RemoveLayer(nNum);
1348*cdf0e10cSrcweir 	DBG_ASSERT(pCmpLayer==pLayer,"SdrUndoNewLayer::Undo(): Removter Layer ist != pLayer");
1349*cdf0e10cSrcweir }
1350*cdf0e10cSrcweir 
1351*cdf0e10cSrcweir void SdrUndoNewLayer::Redo()
1352*cdf0e10cSrcweir {
1353*cdf0e10cSrcweir 	DBG_ASSERT(bItsMine,"SdrUndoNewLayer::Undo(): Layer gehoert nicht der UndoAction");
1354*cdf0e10cSrcweir 	bItsMine=sal_False;
1355*cdf0e10cSrcweir 	pLayerAdmin->InsertLayer(pLayer,nNum);
1356*cdf0e10cSrcweir }
1357*cdf0e10cSrcweir 
1358*cdf0e10cSrcweir XubString SdrUndoNewLayer::GetComment() const
1359*cdf0e10cSrcweir {
1360*cdf0e10cSrcweir 	return ImpGetResStr(STR_UndoNewLayer);
1361*cdf0e10cSrcweir }
1362*cdf0e10cSrcweir 
1363*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1364*cdf0e10cSrcweir 
1365*cdf0e10cSrcweir void SdrUndoDelLayer::Undo()
1366*cdf0e10cSrcweir {
1367*cdf0e10cSrcweir 	DBG_ASSERT(bItsMine,"SdrUndoDelLayer::Undo(): Layer gehoert nicht der UndoAction");
1368*cdf0e10cSrcweir 	bItsMine=sal_False;
1369*cdf0e10cSrcweir 	pLayerAdmin->InsertLayer(pLayer,nNum);
1370*cdf0e10cSrcweir }
1371*cdf0e10cSrcweir 
1372*cdf0e10cSrcweir void SdrUndoDelLayer::Redo()
1373*cdf0e10cSrcweir {
1374*cdf0e10cSrcweir 	DBG_ASSERT(!bItsMine,"SdrUndoDelLayer::Undo(): Layer gehoert bereits der UndoAction");
1375*cdf0e10cSrcweir 	bItsMine=sal_True;
1376*cdf0e10cSrcweir #ifdef DBG_UTIL
1377*cdf0e10cSrcweir 	SdrLayer* pCmpLayer=
1378*cdf0e10cSrcweir #endif
1379*cdf0e10cSrcweir 	pLayerAdmin->RemoveLayer(nNum);
1380*cdf0e10cSrcweir 	DBG_ASSERT(pCmpLayer==pLayer,"SdrUndoDelLayer::Redo(): Removter Layer ist != pLayer");
1381*cdf0e10cSrcweir }
1382*cdf0e10cSrcweir 
1383*cdf0e10cSrcweir XubString SdrUndoDelLayer::GetComment() const
1384*cdf0e10cSrcweir {
1385*cdf0e10cSrcweir 	return ImpGetResStr(STR_UndoDelLayer);
1386*cdf0e10cSrcweir }
1387*cdf0e10cSrcweir 
1388*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1389*cdf0e10cSrcweir 
1390*cdf0e10cSrcweir void SdrUndoMoveLayer::Undo()
1391*cdf0e10cSrcweir {
1392*cdf0e10cSrcweir #ifdef DBG_UTIL
1393*cdf0e10cSrcweir 	SdrLayer* pCmpLayer=
1394*cdf0e10cSrcweir #endif
1395*cdf0e10cSrcweir 	pLayerAdmin->RemoveLayer(nNeuPos);
1396*cdf0e10cSrcweir 	DBG_ASSERT(pCmpLayer==pLayer,"SdrUndoMoveLayer::Undo(): Removter Layer ist != pLayer");
1397*cdf0e10cSrcweir 	pLayerAdmin->InsertLayer(pLayer,nNum);
1398*cdf0e10cSrcweir }
1399*cdf0e10cSrcweir 
1400*cdf0e10cSrcweir void SdrUndoMoveLayer::Redo()
1401*cdf0e10cSrcweir {
1402*cdf0e10cSrcweir #ifdef DBG_UTIL
1403*cdf0e10cSrcweir 	SdrLayer* pCmpLayer=
1404*cdf0e10cSrcweir #endif
1405*cdf0e10cSrcweir 	pLayerAdmin->RemoveLayer(nNum);
1406*cdf0e10cSrcweir 	DBG_ASSERT(pCmpLayer==pLayer,"SdrUndoMoveLayer::Redo(): Removter Layer ist != pLayer");
1407*cdf0e10cSrcweir 	pLayerAdmin->InsertLayer(pLayer,nNeuPos);
1408*cdf0e10cSrcweir }
1409*cdf0e10cSrcweir 
1410*cdf0e10cSrcweir XubString SdrUndoMoveLayer::GetComment() const
1411*cdf0e10cSrcweir {
1412*cdf0e10cSrcweir 	return ImpGetResStr(STR_UndoMovLayer);
1413*cdf0e10cSrcweir }
1414*cdf0e10cSrcweir 
1415*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1416*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1417*cdf0e10cSrcweir //
1418*cdf0e10cSrcweir //  @@@@@    @@@@    @@@@   @@@@@   @@@@
1419*cdf0e10cSrcweir //  @@  @@  @@  @@  @@  @@  @@     @@  @@
1420*cdf0e10cSrcweir //  @@  @@  @@  @@  @@      @@     @@
1421*cdf0e10cSrcweir //  @@@@@   @@@@@@  @@ @@@  @@@@    @@@@
1422*cdf0e10cSrcweir //  @@      @@  @@  @@  @@  @@         @@
1423*cdf0e10cSrcweir //  @@      @@  @@  @@  @@  @@     @@  @@
1424*cdf0e10cSrcweir //  @@      @@  @@   @@@@@  @@@@@   @@@@
1425*cdf0e10cSrcweir //
1426*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1427*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1428*cdf0e10cSrcweir 
1429*cdf0e10cSrcweir SdrUndoPage::SdrUndoPage(SdrPage& rNewPg)
1430*cdf0e10cSrcweir :	SdrUndoAction(*rNewPg.GetModel()),
1431*cdf0e10cSrcweir 	mrPage(rNewPg)
1432*cdf0e10cSrcweir {
1433*cdf0e10cSrcweir }
1434*cdf0e10cSrcweir 
1435*cdf0e10cSrcweir void SdrUndoPage::ImpInsertPage(sal_uInt16 nNum)
1436*cdf0e10cSrcweir {
1437*cdf0e10cSrcweir 	DBG_ASSERT(!mrPage.IsInserted(),"SdrUndoPage::ImpInsertPage(): mrPage ist bereits Inserted");
1438*cdf0e10cSrcweir 	if (!mrPage.IsInserted()) {
1439*cdf0e10cSrcweir 		if (mrPage.IsMasterPage()) {
1440*cdf0e10cSrcweir 			rMod.InsertMasterPage(&mrPage,nNum);
1441*cdf0e10cSrcweir 		} else {
1442*cdf0e10cSrcweir 			rMod.InsertPage(&mrPage,nNum);
1443*cdf0e10cSrcweir 		}
1444*cdf0e10cSrcweir 	}
1445*cdf0e10cSrcweir }
1446*cdf0e10cSrcweir 
1447*cdf0e10cSrcweir void SdrUndoPage::ImpRemovePage(sal_uInt16 nNum)
1448*cdf0e10cSrcweir {
1449*cdf0e10cSrcweir 	DBG_ASSERT(mrPage.IsInserted(),"SdrUndoPage::ImpRemovePage(): mrPage ist nicht Inserted");
1450*cdf0e10cSrcweir 	if (mrPage.IsInserted()) {
1451*cdf0e10cSrcweir 		SdrPage* pChkPg=NULL;
1452*cdf0e10cSrcweir 		if (mrPage.IsMasterPage()) {
1453*cdf0e10cSrcweir 			pChkPg=rMod.RemoveMasterPage(nNum);
1454*cdf0e10cSrcweir 		} else {
1455*cdf0e10cSrcweir 			pChkPg=rMod.RemovePage(nNum);
1456*cdf0e10cSrcweir 		}
1457*cdf0e10cSrcweir 		DBG_ASSERT(pChkPg==&mrPage,"SdrUndoPage::ImpRemovePage(): RemovePage!=&mrPage");
1458*cdf0e10cSrcweir 	}
1459*cdf0e10cSrcweir }
1460*cdf0e10cSrcweir 
1461*cdf0e10cSrcweir void SdrUndoPage::ImpMovePage(sal_uInt16 nOldNum, sal_uInt16 nNewNum)
1462*cdf0e10cSrcweir {
1463*cdf0e10cSrcweir 	DBG_ASSERT(mrPage.IsInserted(),"SdrUndoPage::ImpMovePage(): mrPage ist nicht Inserted");
1464*cdf0e10cSrcweir 	if (mrPage.IsInserted()) {
1465*cdf0e10cSrcweir 		if (mrPage.IsMasterPage()) {
1466*cdf0e10cSrcweir 			rMod.MoveMasterPage(nOldNum,nNewNum);
1467*cdf0e10cSrcweir 		} else {
1468*cdf0e10cSrcweir 			rMod.MovePage(nOldNum,nNewNum);
1469*cdf0e10cSrcweir 		}
1470*cdf0e10cSrcweir 	}
1471*cdf0e10cSrcweir }
1472*cdf0e10cSrcweir 
1473*cdf0e10cSrcweir void SdrUndoPage::ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, XubString& rStr, sal_uInt16 /*n*/, FASTBOOL /*bRepeat*/) const
1474*cdf0e10cSrcweir {
1475*cdf0e10cSrcweir 	rStr=ImpGetResStr(nStrCacheID);
1476*cdf0e10cSrcweir }
1477*cdf0e10cSrcweir 
1478*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1479*cdf0e10cSrcweir 
1480*cdf0e10cSrcweir SdrUndoPageList::SdrUndoPageList(SdrPage& rNewPg):
1481*cdf0e10cSrcweir 	SdrUndoPage(rNewPg),
1482*cdf0e10cSrcweir 	bItsMine(sal_False)
1483*cdf0e10cSrcweir {
1484*cdf0e10cSrcweir 	nPageNum=rNewPg.GetPageNum();
1485*cdf0e10cSrcweir }
1486*cdf0e10cSrcweir 
1487*cdf0e10cSrcweir SdrUndoPageList::~SdrUndoPageList()
1488*cdf0e10cSrcweir {
1489*cdf0e10cSrcweir 	if(bItsMine)
1490*cdf0e10cSrcweir 	{
1491*cdf0e10cSrcweir 		delete (&mrPage);
1492*cdf0e10cSrcweir 	}
1493*cdf0e10cSrcweir }
1494*cdf0e10cSrcweir 
1495*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1496*cdf0e10cSrcweir 
1497*cdf0e10cSrcweir SdrUndoDelPage::SdrUndoDelPage(SdrPage& rNewPg):
1498*cdf0e10cSrcweir 	SdrUndoPageList(rNewPg),
1499*cdf0e10cSrcweir 	pUndoGroup(NULL)
1500*cdf0e10cSrcweir {
1501*cdf0e10cSrcweir 	bItsMine = sal_True;
1502*cdf0e10cSrcweir 
1503*cdf0e10cSrcweir 	// Und nun ggf. die MasterPage-Beziehungen merken
1504*cdf0e10cSrcweir 	if(mrPage.IsMasterPage())
1505*cdf0e10cSrcweir 	{
1506*cdf0e10cSrcweir 		sal_uInt16 nPageAnz(rMod.GetPageCount());
1507*cdf0e10cSrcweir 
1508*cdf0e10cSrcweir 		for(sal_uInt16 nPageNum2(0); nPageNum2 < nPageAnz; nPageNum2++)
1509*cdf0e10cSrcweir 		{
1510*cdf0e10cSrcweir 			SdrPage* pDrawPage = rMod.GetPage(nPageNum2);
1511*cdf0e10cSrcweir 
1512*cdf0e10cSrcweir 			if(pDrawPage->TRG_HasMasterPage())
1513*cdf0e10cSrcweir 			{
1514*cdf0e10cSrcweir 				SdrPage& rMasterPage = pDrawPage->TRG_GetMasterPage();
1515*cdf0e10cSrcweir 
1516*cdf0e10cSrcweir 				if(&mrPage == &rMasterPage)
1517*cdf0e10cSrcweir 				{
1518*cdf0e10cSrcweir 					if(!pUndoGroup)
1519*cdf0e10cSrcweir 					{
1520*cdf0e10cSrcweir 						pUndoGroup = new SdrUndoGroup(rMod);
1521*cdf0e10cSrcweir 					}
1522*cdf0e10cSrcweir 
1523*cdf0e10cSrcweir 					pUndoGroup->AddAction(rMod.GetSdrUndoFactory().CreateUndoPageRemoveMasterPage(*pDrawPage));
1524*cdf0e10cSrcweir 				}
1525*cdf0e10cSrcweir 			}
1526*cdf0e10cSrcweir 		}
1527*cdf0e10cSrcweir 	}
1528*cdf0e10cSrcweir }
1529*cdf0e10cSrcweir 
1530*cdf0e10cSrcweir SdrUndoDelPage::~SdrUndoDelPage()
1531*cdf0e10cSrcweir {
1532*cdf0e10cSrcweir 	if (pUndoGroup!=NULL) {
1533*cdf0e10cSrcweir 		delete pUndoGroup;
1534*cdf0e10cSrcweir 	}
1535*cdf0e10cSrcweir }
1536*cdf0e10cSrcweir 
1537*cdf0e10cSrcweir void SdrUndoDelPage::Undo()
1538*cdf0e10cSrcweir {
1539*cdf0e10cSrcweir 	ImpInsertPage(nPageNum);
1540*cdf0e10cSrcweir 	if (pUndoGroup!=NULL) { // MasterPage-Beziehungen wiederherstellen
1541*cdf0e10cSrcweir 		pUndoGroup->Undo();
1542*cdf0e10cSrcweir 	}
1543*cdf0e10cSrcweir 	DBG_ASSERT(bItsMine,"UndoDeletePage: mrPage gehoert nicht der UndoAction");
1544*cdf0e10cSrcweir 	bItsMine=sal_False;
1545*cdf0e10cSrcweir }
1546*cdf0e10cSrcweir 
1547*cdf0e10cSrcweir void SdrUndoDelPage::Redo()
1548*cdf0e10cSrcweir {
1549*cdf0e10cSrcweir 	ImpRemovePage(nPageNum);
1550*cdf0e10cSrcweir 	// Die MasterPage-Beziehungen werden ggf. von selbst geloesst
1551*cdf0e10cSrcweir 	DBG_ASSERT(!bItsMine,"RedoDeletePage: mrPage gehoert bereits der UndoAction");
1552*cdf0e10cSrcweir 	bItsMine=sal_True;
1553*cdf0e10cSrcweir }
1554*cdf0e10cSrcweir 
1555*cdf0e10cSrcweir XubString SdrUndoDelPage::GetComment() const
1556*cdf0e10cSrcweir {
1557*cdf0e10cSrcweir 	XubString aStr;
1558*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoDelPage,aStr,0,sal_False);
1559*cdf0e10cSrcweir 	return aStr;
1560*cdf0e10cSrcweir }
1561*cdf0e10cSrcweir 
1562*cdf0e10cSrcweir XubString SdrUndoDelPage::GetSdrRepeatComment(SdrView& /*rView*/) const
1563*cdf0e10cSrcweir {
1564*cdf0e10cSrcweir 	XubString aStr;
1565*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoDelPage,aStr,0,sal_False);
1566*cdf0e10cSrcweir 	return aStr;
1567*cdf0e10cSrcweir }
1568*cdf0e10cSrcweir 
1569*cdf0e10cSrcweir void SdrUndoDelPage::SdrRepeat(SdrView& /*rView*/)
1570*cdf0e10cSrcweir {
1571*cdf0e10cSrcweir }
1572*cdf0e10cSrcweir 
1573*cdf0e10cSrcweir bool SdrUndoDelPage::CanSdrRepeat(SdrView& /*rView*/) const
1574*cdf0e10cSrcweir {
1575*cdf0e10cSrcweir 	return sal_False;
1576*cdf0e10cSrcweir }
1577*cdf0e10cSrcweir 
1578*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1579*cdf0e10cSrcweir 
1580*cdf0e10cSrcweir void SdrUndoNewPage::Undo()
1581*cdf0e10cSrcweir {
1582*cdf0e10cSrcweir 	ImpRemovePage(nPageNum);
1583*cdf0e10cSrcweir 	DBG_ASSERT(!bItsMine,"UndoNewPage: mrPage gehoert bereits der UndoAction");
1584*cdf0e10cSrcweir 	bItsMine=sal_True;
1585*cdf0e10cSrcweir }
1586*cdf0e10cSrcweir 
1587*cdf0e10cSrcweir void SdrUndoNewPage::Redo()
1588*cdf0e10cSrcweir {
1589*cdf0e10cSrcweir 	ImpInsertPage(nPageNum);
1590*cdf0e10cSrcweir 	DBG_ASSERT(bItsMine,"RedoNewPage: mrPage gehoert nicht der UndoAction");
1591*cdf0e10cSrcweir 	bItsMine=sal_False;
1592*cdf0e10cSrcweir }
1593*cdf0e10cSrcweir 
1594*cdf0e10cSrcweir XubString SdrUndoNewPage::GetComment() const
1595*cdf0e10cSrcweir {
1596*cdf0e10cSrcweir 	XubString aStr;
1597*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoNewPage,aStr,0,sal_False);
1598*cdf0e10cSrcweir 	return aStr;
1599*cdf0e10cSrcweir }
1600*cdf0e10cSrcweir 
1601*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1602*cdf0e10cSrcweir 
1603*cdf0e10cSrcweir XubString SdrUndoCopyPage::GetComment() const
1604*cdf0e10cSrcweir {
1605*cdf0e10cSrcweir 	XubString aStr;
1606*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoCopPage,aStr,0,sal_False);
1607*cdf0e10cSrcweir 	return aStr;
1608*cdf0e10cSrcweir }
1609*cdf0e10cSrcweir 
1610*cdf0e10cSrcweir XubString SdrUndoCopyPage::GetSdrRepeatComment(SdrView& /*rView*/) const
1611*cdf0e10cSrcweir {
1612*cdf0e10cSrcweir 	XubString aStr;
1613*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoCopPage,aStr,0,sal_False);
1614*cdf0e10cSrcweir 	return aStr;
1615*cdf0e10cSrcweir }
1616*cdf0e10cSrcweir 
1617*cdf0e10cSrcweir void SdrUndoCopyPage::SdrRepeat(SdrView& /*rView*/)
1618*cdf0e10cSrcweir {
1619*cdf0e10cSrcweir 
1620*cdf0e10cSrcweir }
1621*cdf0e10cSrcweir 
1622*cdf0e10cSrcweir bool SdrUndoCopyPage::CanSdrRepeat(SdrView& /*rView*/) const
1623*cdf0e10cSrcweir {
1624*cdf0e10cSrcweir 	return sal_False;
1625*cdf0e10cSrcweir }
1626*cdf0e10cSrcweir 
1627*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1628*cdf0e10cSrcweir 
1629*cdf0e10cSrcweir void SdrUndoSetPageNum::Undo()
1630*cdf0e10cSrcweir {
1631*cdf0e10cSrcweir 	ImpMovePage(nNewPageNum,nOldPageNum);
1632*cdf0e10cSrcweir }
1633*cdf0e10cSrcweir 
1634*cdf0e10cSrcweir void SdrUndoSetPageNum::Redo()
1635*cdf0e10cSrcweir {
1636*cdf0e10cSrcweir 	ImpMovePage(nOldPageNum,nNewPageNum);
1637*cdf0e10cSrcweir }
1638*cdf0e10cSrcweir 
1639*cdf0e10cSrcweir XubString SdrUndoSetPageNum::GetComment() const
1640*cdf0e10cSrcweir {
1641*cdf0e10cSrcweir 	XubString aStr;
1642*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoMovPage,aStr,0,sal_False);
1643*cdf0e10cSrcweir 	return aStr;
1644*cdf0e10cSrcweir }
1645*cdf0e10cSrcweir 
1646*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1647*cdf0e10cSrcweir //
1648*cdf0e10cSrcweir //  @@   @@  @@@@   @@@@  @@@@@@ @@@@@ @@@@@   @@@@@   @@@@   @@@@  @@@@@  @@@@
1649*cdf0e10cSrcweir //  @@@ @@@ @@  @@ @@  @@   @@   @@    @@  @@  @@  @@ @@  @@ @@  @@ @@    @@  @@
1650*cdf0e10cSrcweir //  @@@@@@@ @@  @@ @@       @@   @@    @@  @@  @@  @@ @@  @@ @@     @@    @@
1651*cdf0e10cSrcweir //  @@@@@@@ @@@@@@  @@@@    @@   @@@@  @@@@@   @@@@@  @@@@@@ @@ @@@ @@@@   @@@@
1652*cdf0e10cSrcweir //  @@ @ @@ @@  @@     @@   @@   @@    @@  @@  @@     @@  @@ @@  @@ @@        @@
1653*cdf0e10cSrcweir //  @@   @@ @@  @@ @@  @@   @@   @@    @@  @@  @@     @@  @@ @@  @@ @@    @@  @@
1654*cdf0e10cSrcweir //  @@   @@ @@  @@  @@@@    @@   @@@@@ @@  @@  @@     @@  @@  @@@@@ @@@@@  @@@@
1655*cdf0e10cSrcweir //
1656*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1657*cdf0e10cSrcweir 
1658*cdf0e10cSrcweir SdrUndoPageMasterPage::SdrUndoPageMasterPage(SdrPage& rChangedPage)
1659*cdf0e10cSrcweir :	SdrUndoPage(rChangedPage),
1660*cdf0e10cSrcweir 	mbOldHadMasterPage(mrPage.TRG_HasMasterPage())
1661*cdf0e10cSrcweir {
1662*cdf0e10cSrcweir 	// get current state from page
1663*cdf0e10cSrcweir 	if(mbOldHadMasterPage)
1664*cdf0e10cSrcweir 	{
1665*cdf0e10cSrcweir 		maOldSet = mrPage.TRG_GetMasterPageVisibleLayers();
1666*cdf0e10cSrcweir 		maOldMasterPageNumber = mrPage.TRG_GetMasterPage().GetPageNum();
1667*cdf0e10cSrcweir 	}
1668*cdf0e10cSrcweir }
1669*cdf0e10cSrcweir 
1670*cdf0e10cSrcweir SdrUndoPageMasterPage::~SdrUndoPageMasterPage()
1671*cdf0e10cSrcweir {
1672*cdf0e10cSrcweir }
1673*cdf0e10cSrcweir 
1674*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1675*cdf0e10cSrcweir 
1676*cdf0e10cSrcweir SdrUndoPageRemoveMasterPage::SdrUndoPageRemoveMasterPage(SdrPage& rChangedPage)
1677*cdf0e10cSrcweir :	SdrUndoPageMasterPage(rChangedPage)
1678*cdf0e10cSrcweir {
1679*cdf0e10cSrcweir }
1680*cdf0e10cSrcweir 
1681*cdf0e10cSrcweir void SdrUndoPageRemoveMasterPage::Undo()
1682*cdf0e10cSrcweir {
1683*cdf0e10cSrcweir 	if(mbOldHadMasterPage)
1684*cdf0e10cSrcweir 	{
1685*cdf0e10cSrcweir 		mrPage.TRG_SetMasterPage(*mrPage.GetModel()->GetMasterPage(maOldMasterPageNumber));
1686*cdf0e10cSrcweir 		mrPage.TRG_SetMasterPageVisibleLayers(maOldSet);
1687*cdf0e10cSrcweir 	}
1688*cdf0e10cSrcweir }
1689*cdf0e10cSrcweir 
1690*cdf0e10cSrcweir void SdrUndoPageRemoveMasterPage::Redo()
1691*cdf0e10cSrcweir {
1692*cdf0e10cSrcweir 	mrPage.TRG_ClearMasterPage();
1693*cdf0e10cSrcweir }
1694*cdf0e10cSrcweir 
1695*cdf0e10cSrcweir XubString SdrUndoPageRemoveMasterPage::GetComment() const
1696*cdf0e10cSrcweir {
1697*cdf0e10cSrcweir 	XubString aStr;
1698*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoDelPageMasterDscr,aStr,0,sal_False);
1699*cdf0e10cSrcweir 	return aStr;
1700*cdf0e10cSrcweir }
1701*cdf0e10cSrcweir 
1702*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
1703*cdf0e10cSrcweir 
1704*cdf0e10cSrcweir SdrUndoPageChangeMasterPage::SdrUndoPageChangeMasterPage(SdrPage& rChangedPage)
1705*cdf0e10cSrcweir :	SdrUndoPageMasterPage(rChangedPage),
1706*cdf0e10cSrcweir 	mbNewHadMasterPage(sal_False)
1707*cdf0e10cSrcweir {
1708*cdf0e10cSrcweir }
1709*cdf0e10cSrcweir 
1710*cdf0e10cSrcweir void SdrUndoPageChangeMasterPage::Undo()
1711*cdf0e10cSrcweir {
1712*cdf0e10cSrcweir 	// remember values from new page
1713*cdf0e10cSrcweir 	if(mrPage.TRG_HasMasterPage())
1714*cdf0e10cSrcweir 	{
1715*cdf0e10cSrcweir 		mbNewHadMasterPage = sal_True;
1716*cdf0e10cSrcweir 		maNewSet = mrPage.TRG_GetMasterPageVisibleLayers();
1717*cdf0e10cSrcweir 		maNewMasterPageNumber = mrPage.TRG_GetMasterPage().GetPageNum();
1718*cdf0e10cSrcweir 	}
1719*cdf0e10cSrcweir 
1720*cdf0e10cSrcweir 	// restore old values
1721*cdf0e10cSrcweir 	if(mbOldHadMasterPage)
1722*cdf0e10cSrcweir 	{
1723*cdf0e10cSrcweir 		mrPage.TRG_ClearMasterPage();
1724*cdf0e10cSrcweir 		mrPage.TRG_SetMasterPage(*mrPage.GetModel()->GetMasterPage(maOldMasterPageNumber));
1725*cdf0e10cSrcweir 		mrPage.TRG_SetMasterPageVisibleLayers(maOldSet);
1726*cdf0e10cSrcweir 	}
1727*cdf0e10cSrcweir }
1728*cdf0e10cSrcweir 
1729*cdf0e10cSrcweir void SdrUndoPageChangeMasterPage::Redo()
1730*cdf0e10cSrcweir {
1731*cdf0e10cSrcweir 	// restore new values
1732*cdf0e10cSrcweir 	if(mbNewHadMasterPage)
1733*cdf0e10cSrcweir 	{
1734*cdf0e10cSrcweir 		mrPage.TRG_ClearMasterPage();
1735*cdf0e10cSrcweir 		mrPage.TRG_SetMasterPage(*mrPage.GetModel()->GetMasterPage(maNewMasterPageNumber));
1736*cdf0e10cSrcweir 		mrPage.TRG_SetMasterPageVisibleLayers(maNewSet);
1737*cdf0e10cSrcweir 	}
1738*cdf0e10cSrcweir }
1739*cdf0e10cSrcweir 
1740*cdf0e10cSrcweir XubString SdrUndoPageChangeMasterPage::GetComment() const
1741*cdf0e10cSrcweir {
1742*cdf0e10cSrcweir 	XubString aStr;
1743*cdf0e10cSrcweir 	ImpTakeDescriptionStr(STR_UndoChgPageMasterDscr,aStr,0,sal_False);
1744*cdf0e10cSrcweir 	return aStr;
1745*cdf0e10cSrcweir }
1746*cdf0e10cSrcweir 
1747*cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
1748*cdf0e10cSrcweir SdrUndoFactory::~SdrUndoFactory(){}
1749*cdf0e10cSrcweir // shapes
1750*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoMoveObject( SdrObject& rObject )
1751*cdf0e10cSrcweir {
1752*cdf0e10cSrcweir 	return new SdrUndoMoveObj( rObject );
1753*cdf0e10cSrcweir }
1754*cdf0e10cSrcweir 
1755*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoMoveObject( SdrObject& rObject, const Size& rDist )
1756*cdf0e10cSrcweir {
1757*cdf0e10cSrcweir 	return new SdrUndoMoveObj( rObject, rDist );
1758*cdf0e10cSrcweir }
1759*cdf0e10cSrcweir 
1760*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoGeoObject( SdrObject& rObject )
1761*cdf0e10cSrcweir {
1762*cdf0e10cSrcweir 	return new SdrUndoGeoObj( rObject );
1763*cdf0e10cSrcweir }
1764*cdf0e10cSrcweir 
1765*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoAttrObject( SdrObject& rObject, bool bStyleSheet1, bool bSaveText )
1766*cdf0e10cSrcweir {
1767*cdf0e10cSrcweir 	return new SdrUndoAttrObj( rObject, bStyleSheet1 ? sal_True : sal_False, bSaveText ? sal_True : sal_False );
1768*cdf0e10cSrcweir }
1769*cdf0e10cSrcweir 
1770*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoRemoveObject( SdrObject& rObject, bool bOrdNumDirect )
1771*cdf0e10cSrcweir {
1772*cdf0e10cSrcweir 	return new SdrUndoRemoveObj( rObject, bOrdNumDirect ? sal_True : sal_False );
1773*cdf0e10cSrcweir }
1774*cdf0e10cSrcweir 
1775*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoInsertObject( SdrObject& rObject, bool bOrdNumDirect )
1776*cdf0e10cSrcweir {
1777*cdf0e10cSrcweir 	return new SdrUndoInsertObj( rObject, bOrdNumDirect ? sal_True : sal_False );
1778*cdf0e10cSrcweir }
1779*cdf0e10cSrcweir 
1780*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoDeleteObject( SdrObject& rObject, bool bOrdNumDirect )
1781*cdf0e10cSrcweir {
1782*cdf0e10cSrcweir 	return new SdrUndoDelObj( rObject, bOrdNumDirect ? sal_True : sal_False );
1783*cdf0e10cSrcweir }
1784*cdf0e10cSrcweir 
1785*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoNewObject( SdrObject& rObject, bool bOrdNumDirect )
1786*cdf0e10cSrcweir {
1787*cdf0e10cSrcweir 	return new SdrUndoNewObj( rObject, bOrdNumDirect ? sal_True : sal_False );
1788*cdf0e10cSrcweir }
1789*cdf0e10cSrcweir 
1790*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoCopyObject( SdrObject& rObject, bool bOrdNumDirect )
1791*cdf0e10cSrcweir {
1792*cdf0e10cSrcweir 	return new SdrUndoCopyObj( rObject, bOrdNumDirect ? sal_True : sal_False );
1793*cdf0e10cSrcweir }
1794*cdf0e10cSrcweir 
1795*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoObjectOrdNum( SdrObject& rObject, sal_uInt32 nOldOrdNum1, sal_uInt32 nNewOrdNum1)
1796*cdf0e10cSrcweir {
1797*cdf0e10cSrcweir 	return new SdrUndoObjOrdNum( rObject, nOldOrdNum1, nNewOrdNum1 );
1798*cdf0e10cSrcweir }
1799*cdf0e10cSrcweir 
1800*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoReplaceObject( SdrObject& rOldObject, SdrObject& rNewObject, bool bOrdNumDirect )
1801*cdf0e10cSrcweir {
1802*cdf0e10cSrcweir 	return new SdrUndoReplaceObj( rOldObject, rNewObject, bOrdNumDirect ? sal_True : sal_False );
1803*cdf0e10cSrcweir }
1804*cdf0e10cSrcweir 
1805*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoObjectLayerChange( SdrObject& rObject, SdrLayerID aOldLayer, SdrLayerID aNewLayer )
1806*cdf0e10cSrcweir {
1807*cdf0e10cSrcweir 	return new SdrUndoObjectLayerChange( rObject, aOldLayer, aNewLayer );
1808*cdf0e10cSrcweir }
1809*cdf0e10cSrcweir 
1810*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoObjectSetText( SdrObject& rNewObj, sal_Int32 nText )
1811*cdf0e10cSrcweir {
1812*cdf0e10cSrcweir 	return new SdrUndoObjSetText( rNewObj, nText );
1813*cdf0e10cSrcweir }
1814*cdf0e10cSrcweir 
1815*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoObjectStrAttr( SdrObject& rObject,
1816*cdf0e10cSrcweir                                                         SdrUndoObjStrAttr::ObjStrAttrType eObjStrAttrType,
1817*cdf0e10cSrcweir                                                         String sOldStr,
1818*cdf0e10cSrcweir                                                         String sNewStr )
1819*cdf0e10cSrcweir {
1820*cdf0e10cSrcweir     return new SdrUndoObjStrAttr( rObject, eObjStrAttrType, sOldStr, sNewStr );
1821*cdf0e10cSrcweir }
1822*cdf0e10cSrcweir 
1823*cdf0e10cSrcweir 
1824*cdf0e10cSrcweir // layer
1825*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
1826*cdf0e10cSrcweir {
1827*cdf0e10cSrcweir 	return new SdrUndoNewLayer( nLayerNum, rNewLayerAdmin, rNewModel );
1828*cdf0e10cSrcweir }
1829*cdf0e10cSrcweir 
1830*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
1831*cdf0e10cSrcweir {
1832*cdf0e10cSrcweir 	return new SdrUndoDelLayer( nLayerNum, rNewLayerAdmin, rNewModel );
1833*cdf0e10cSrcweir }
1834*cdf0e10cSrcweir 
1835*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1)
1836*cdf0e10cSrcweir {
1837*cdf0e10cSrcweir 	return new SdrUndoMoveLayer( nLayerNum, rNewLayerAdmin, rNewModel, nNeuPos1 );
1838*cdf0e10cSrcweir }
1839*cdf0e10cSrcweir 
1840*cdf0e10cSrcweir // page
1841*cdf0e10cSrcweir SdrUndoAction*	SdrUndoFactory::CreateUndoDeletePage(SdrPage& rPage)
1842*cdf0e10cSrcweir {
1843*cdf0e10cSrcweir 	return new SdrUndoDelPage( rPage );
1844*cdf0e10cSrcweir }
1845*cdf0e10cSrcweir 
1846*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoNewPage(SdrPage& rPage)
1847*cdf0e10cSrcweir {
1848*cdf0e10cSrcweir 	return new SdrUndoNewPage( rPage );
1849*cdf0e10cSrcweir }
1850*cdf0e10cSrcweir 
1851*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoCopyPage(SdrPage& rPage)
1852*cdf0e10cSrcweir {
1853*cdf0e10cSrcweir 	return new SdrUndoCopyPage( rPage );
1854*cdf0e10cSrcweir }
1855*cdf0e10cSrcweir 
1856*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1)
1857*cdf0e10cSrcweir {
1858*cdf0e10cSrcweir 	return new SdrUndoSetPageNum( rNewPg, nOldPageNum1, nNewPageNum1 );
1859*cdf0e10cSrcweir }
1860*cdf0e10cSrcweir 	// master page
1861*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoPageRemoveMasterPage(SdrPage& rChangedPage)
1862*cdf0e10cSrcweir {
1863*cdf0e10cSrcweir 	return new SdrUndoPageRemoveMasterPage( rChangedPage );
1864*cdf0e10cSrcweir }
1865*cdf0e10cSrcweir 
1866*cdf0e10cSrcweir SdrUndoAction* SdrUndoFactory::CreateUndoPageChangeMasterPage(SdrPage& rChangedPage)
1867*cdf0e10cSrcweir {
1868*cdf0e10cSrcweir 	return new SdrUndoPageChangeMasterPage(rChangedPage);
1869*cdf0e10cSrcweir }
1870*cdf0e10cSrcweir 
1871*cdf0e10cSrcweir // eof
1872