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