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