xref: /aoo42x/main/sd/source/ui/view/unmodpg.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sd.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #ifndef _SVDLAYER
32*cdf0e10cSrcweir #include <svx/svdlayer.hxx>
33*cdf0e10cSrcweir #endif
34*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
35*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir #include "strings.hrc"
39*cdf0e10cSrcweir #include "glob.hxx"
40*cdf0e10cSrcweir #include "glob.hrc"         // STR_BCKGRND, STR_BCKGRNDOBJ
41*cdf0e10cSrcweir #include "app.hrc"          // SID_SWITCHPAGE
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir #include "unmodpg.hxx"
44*cdf0e10cSrcweir #include "sdpage.hxx"
45*cdf0e10cSrcweir #include "sdresid.hxx"
46*cdf0e10cSrcweir #include "drawdoc.hxx"
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir TYPEINIT1(ModifyPageUndoAction, SdUndoAction);
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir /*************************************************************************
53*cdf0e10cSrcweir |*
54*cdf0e10cSrcweir |* Konstruktor
55*cdf0e10cSrcweir |*
56*cdf0e10cSrcweir \************************************************************************/
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir ModifyPageUndoAction::ModifyPageUndoAction(
59*cdf0e10cSrcweir 	SdDrawDocument* pTheDoc,
60*cdf0e10cSrcweir 	SdPage* pThePage,
61*cdf0e10cSrcweir 	String aTheNewName,
62*cdf0e10cSrcweir 	AutoLayout	eTheNewAutoLayout,
63*cdf0e10cSrcweir 	sal_Bool bTheNewBckgrndVisible,
64*cdf0e10cSrcweir 	sal_Bool bTheNewBckgrndObjsVisible)
65*cdf0e10cSrcweir :	SdUndoAction(pTheDoc)
66*cdf0e10cSrcweir {
67*cdf0e10cSrcweir 	DBG_ASSERT(pThePage, "Undo ohne Seite ???");
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir 	mpPage					= pThePage;
70*cdf0e10cSrcweir 	maNewName				= aTheNewName;
71*cdf0e10cSrcweir 	meNewAutoLayout			= eTheNewAutoLayout;
72*cdf0e10cSrcweir 	mbNewBckgrndVisible		= bTheNewBckgrndVisible;
73*cdf0e10cSrcweir 	mbNewBckgrndObjsVisible	= bTheNewBckgrndObjsVisible;
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir 	meOldAutoLayout			= mpPage->GetAutoLayout();
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir 	if (!mpPage->IsMasterPage())
78*cdf0e10cSrcweir 	{
79*cdf0e10cSrcweir 		maOldName = mpPage->GetName();
80*cdf0e10cSrcweir 		SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
81*cdf0e10cSrcweir 		sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
82*cdf0e10cSrcweir 		sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
83*cdf0e10cSrcweir 		SetOfByte aVisibleLayers = mpPage->TRG_GetMasterPageVisibleLayers();
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir 		mbOldBckgrndVisible = aVisibleLayers.IsSet(aBckgrnd);
86*cdf0e10cSrcweir 		mbOldBckgrndObjsVisible = aVisibleLayers.IsSet(aBckgrndObj);
87*cdf0e10cSrcweir 	}
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir 	maComment = String(SdResId(STR_UNDO_MODIFY_PAGE));
90*cdf0e10cSrcweir }
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir /*************************************************************************
93*cdf0e10cSrcweir |*
94*cdf0e10cSrcweir |* Undo()
95*cdf0e10cSrcweir |*
96*cdf0e10cSrcweir \************************************************************************/
97*cdf0e10cSrcweir #include <svx/svdviter.hxx>
98*cdf0e10cSrcweir #include <svx/svdview.hxx>
99*cdf0e10cSrcweir void ModifyPageUndoAction::Undo()
100*cdf0e10cSrcweir {
101*cdf0e10cSrcweir 	// #94637# invalidate Selection, there could be objects deleted in tis UNDO
102*cdf0e10cSrcweir 	// which are no longer allowed to be selected then.
103*cdf0e10cSrcweir   	SdrViewIter aIter(mpPage);
104*cdf0e10cSrcweir     SdrView* pView = aIter.FirstView();
105*cdf0e10cSrcweir 
106*cdf0e10cSrcweir 	while(pView)
107*cdf0e10cSrcweir 	{
108*cdf0e10cSrcweir 		if(pView->AreObjectsMarked())
109*cdf0e10cSrcweir 			pView->UnmarkAll();
110*cdf0e10cSrcweir 		pView = aIter.NextView();
111*cdf0e10cSrcweir     }
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir 	mpPage->SetAutoLayout( meOldAutoLayout );
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir 	if (!mpPage->IsMasterPage())
116*cdf0e10cSrcweir 	{
117*cdf0e10cSrcweir 		if (mpPage->GetName() != maOldName)
118*cdf0e10cSrcweir 		{
119*cdf0e10cSrcweir 			mpPage->SetName(maOldName);
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir 			if (mpPage->GetPageKind() == PK_STANDARD)
122*cdf0e10cSrcweir 			{
123*cdf0e10cSrcweir 				SdPage* pNotesPage = (SdPage*)mpDoc->GetPage(mpPage->GetPageNum() + 1);
124*cdf0e10cSrcweir 				pNotesPage->SetName(maOldName);
125*cdf0e10cSrcweir 			}
126*cdf0e10cSrcweir 		}
127*cdf0e10cSrcweir 
128*cdf0e10cSrcweir 		SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
129*cdf0e10cSrcweir 		sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
130*cdf0e10cSrcweir 		sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
131*cdf0e10cSrcweir 		SetOfByte aVisibleLayers;
132*cdf0e10cSrcweir 		aVisibleLayers.Set(aBckgrnd, mbOldBckgrndVisible);
133*cdf0e10cSrcweir 		aVisibleLayers.Set(aBckgrndObj, mbOldBckgrndObjsVisible);
134*cdf0e10cSrcweir 		mpPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
135*cdf0e10cSrcweir 	}
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir 	// Redisplay
138*cdf0e10cSrcweir 	SfxViewFrame::Current()->GetDispatcher()->Execute(
139*cdf0e10cSrcweir 		SID_SWITCHPAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
140*cdf0e10cSrcweir }
141*cdf0e10cSrcweir 
142*cdf0e10cSrcweir /*************************************************************************
143*cdf0e10cSrcweir |*
144*cdf0e10cSrcweir |* Redo()
145*cdf0e10cSrcweir |*
146*cdf0e10cSrcweir \************************************************************************/
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir void ModifyPageUndoAction::Redo()
149*cdf0e10cSrcweir {
150*cdf0e10cSrcweir 	// #94637# invalidate Selection, there could be objects deleted in tis UNDO
151*cdf0e10cSrcweir 	// which are no longer allowed to be selected then.
152*cdf0e10cSrcweir   	SdrViewIter aIter(mpPage);
153*cdf0e10cSrcweir     SdrView* pView = aIter.FirstView();
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir 	while(pView)
156*cdf0e10cSrcweir 	{
157*cdf0e10cSrcweir 		if(pView->AreObjectsMarked())
158*cdf0e10cSrcweir 			pView->UnmarkAll();
159*cdf0e10cSrcweir 		pView = aIter.NextView();
160*cdf0e10cSrcweir     }
161*cdf0e10cSrcweir 
162*cdf0e10cSrcweir 	mpPage->meAutoLayout = meNewAutoLayout;
163*cdf0e10cSrcweir 
164*cdf0e10cSrcweir 	if (!mpPage->IsMasterPage())
165*cdf0e10cSrcweir 	{
166*cdf0e10cSrcweir 		if (mpPage->GetName() != maNewName)
167*cdf0e10cSrcweir 		{
168*cdf0e10cSrcweir 			mpPage->SetName(maNewName);
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir 			if (mpPage->GetPageKind() == PK_STANDARD)
171*cdf0e10cSrcweir 			{
172*cdf0e10cSrcweir 				SdPage* pNotesPage = (SdPage*)mpDoc->GetPage(mpPage->GetPageNum() + 1);
173*cdf0e10cSrcweir 				pNotesPage->SetName(maNewName);
174*cdf0e10cSrcweir 			}
175*cdf0e10cSrcweir 		}
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir 		SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
178*cdf0e10cSrcweir 		sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
179*cdf0e10cSrcweir 		sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
180*cdf0e10cSrcweir 		SetOfByte aVisibleLayers;
181*cdf0e10cSrcweir 		aVisibleLayers.Set(aBckgrnd, mbNewBckgrndVisible);
182*cdf0e10cSrcweir 		aVisibleLayers.Set(aBckgrndObj, mbNewBckgrndObjsVisible);
183*cdf0e10cSrcweir 		mpPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
184*cdf0e10cSrcweir 	}
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir 	// Redisplay
187*cdf0e10cSrcweir 	SfxViewFrame::Current()->GetDispatcher()->Execute(
188*cdf0e10cSrcweir 		SID_SWITCHPAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
189*cdf0e10cSrcweir }
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir /*************************************************************************
192*cdf0e10cSrcweir |*
193*cdf0e10cSrcweir |* Destruktor
194*cdf0e10cSrcweir |*
195*cdf0e10cSrcweir \************************************************************************/
196*cdf0e10cSrcweir 
197*cdf0e10cSrcweir ModifyPageUndoAction::~ModifyPageUndoAction()
198*cdf0e10cSrcweir {
199*cdf0e10cSrcweir }
200*cdf0e10cSrcweir 
201*cdf0e10cSrcweir /*************************************************************************
202*cdf0e10cSrcweir |*
203*cdf0e10cSrcweir |* Kommentar liefern
204*cdf0e10cSrcweir |*
205*cdf0e10cSrcweir \************************************************************************/
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir String ModifyPageUndoAction::GetComment() const
208*cdf0e10cSrcweir {
209*cdf0e10cSrcweir 	return maComment;
210*cdf0e10cSrcweir }
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir // --------------------------------------------------------------------
213*cdf0e10cSrcweir 
214*cdf0e10cSrcweir RenameLayoutTemplateUndoAction::RenameLayoutTemplateUndoAction( SdDrawDocument* pDocument, const String& rOldLayoutName, const String& rNewLayoutName )
215*cdf0e10cSrcweir : SdUndoAction(pDocument)
216*cdf0e10cSrcweir , maOldName( rOldLayoutName )
217*cdf0e10cSrcweir , maNewName( rNewLayoutName )
218*cdf0e10cSrcweir , maComment(SdResId(STR_TITLE_RENAMESLIDE))
219*cdf0e10cSrcweir {
220*cdf0e10cSrcweir 	sal_uInt16 nPos = maOldName.SearchAscii( SD_LT_SEPARATOR );
221*cdf0e10cSrcweir 	if( nPos != (sal_uInt16)-1 )
222*cdf0e10cSrcweir 		maOldName.Erase(nPos);
223*cdf0e10cSrcweir }
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir void RenameLayoutTemplateUndoAction::Undo()
226*cdf0e10cSrcweir {
227*cdf0e10cSrcweir 	String aLayoutName( maNewName );
228*cdf0e10cSrcweir 	aLayoutName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ));
229*cdf0e10cSrcweir 	aLayoutName.Append( String(SdResId(STR_LAYOUT_OUTLINE))) ;
230*cdf0e10cSrcweir 
231*cdf0e10cSrcweir 	mpDoc->RenameLayoutTemplate( aLayoutName, maOldName );
232*cdf0e10cSrcweir }
233*cdf0e10cSrcweir 
234*cdf0e10cSrcweir void RenameLayoutTemplateUndoAction::Redo()
235*cdf0e10cSrcweir {
236*cdf0e10cSrcweir 	String aLayoutName( maOldName );
237*cdf0e10cSrcweir 	aLayoutName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ));
238*cdf0e10cSrcweir 	aLayoutName.Append( String(SdResId(STR_LAYOUT_OUTLINE))) ;
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir 	mpDoc->RenameLayoutTemplate( aLayoutName, maNewName );
241*cdf0e10cSrcweir }
242*cdf0e10cSrcweir 
243*cdf0e10cSrcweir String RenameLayoutTemplateUndoAction::GetComment() const
244*cdf0e10cSrcweir {
245*cdf0e10cSrcweir 	return 	maComment;
246*cdf0e10cSrcweir }
247*cdf0e10cSrcweir 
248