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