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