xref: /AOO41X/main/sd/source/ui/view/unmodpg.cxx (revision 79aad27f7f29270c03e208e3d687e8e3850af11d)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 
27 #ifndef _SVDLAYER
28 #include <svx/svdlayer.hxx>
29 #endif
30 #include <sfx2/dispatch.hxx>
31 #include <sfx2/viewfrm.hxx>
32 
33 
34 #include "strings.hrc"
35 #include "glob.hxx"
36 #include "glob.hrc"         // STR_BCKGRND, STR_BCKGRNDOBJ
37 #include "app.hrc"          // SID_SWITCHPAGE
38 
39 #include "unmodpg.hxx"
40 #include "sdpage.hxx"
41 #include "sdresid.hxx"
42 #include "drawdoc.hxx"
43 
44 
45 TYPEINIT1(ModifyPageUndoAction, SdUndoAction);
46 
47 
48 /*************************************************************************
49 |*
50 |* Konstruktor
51 |*
52 \************************************************************************/
53 
ModifyPageUndoAction(SdDrawDocument * pTheDoc,SdPage * pThePage,String aTheNewName,AutoLayout eTheNewAutoLayout,sal_Bool bTheNewBckgrndVisible,sal_Bool bTheNewBckgrndObjsVisible)54 ModifyPageUndoAction::ModifyPageUndoAction(
55     SdDrawDocument* pTheDoc,
56     SdPage* pThePage,
57     String aTheNewName,
58     AutoLayout  eTheNewAutoLayout,
59     sal_Bool bTheNewBckgrndVisible,
60     sal_Bool bTheNewBckgrndObjsVisible)
61 :   SdUndoAction(pTheDoc)
62 {
63     DBG_ASSERT(pThePage, "Undo ohne Seite ???");
64 
65     mpPage                  = pThePage;
66     maNewName               = aTheNewName;
67     meNewAutoLayout         = eTheNewAutoLayout;
68     mbNewBckgrndVisible     = bTheNewBckgrndVisible;
69     mbNewBckgrndObjsVisible = bTheNewBckgrndObjsVisible;
70 
71     meOldAutoLayout         = mpPage->GetAutoLayout();
72 
73     if (!mpPage->IsMasterPage())
74     {
75         maOldName = mpPage->GetName();
76         SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
77         sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
78         sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
79         SetOfByte aVisibleLayers = mpPage->TRG_GetMasterPageVisibleLayers();
80 
81         mbOldBckgrndVisible = aVisibleLayers.IsSet(aBckgrnd);
82         mbOldBckgrndObjsVisible = aVisibleLayers.IsSet(aBckgrndObj);
83     }
84 
85     maComment = String(SdResId(STR_UNDO_MODIFY_PAGE));
86 }
87 
88 /*************************************************************************
89 |*
90 |* Undo()
91 |*
92 \************************************************************************/
93 #include <svx/svdviter.hxx>
94 #include <svx/svdview.hxx>
Undo()95 void ModifyPageUndoAction::Undo()
96 {
97     // #94637# invalidate Selection, there could be objects deleted in tis UNDO
98     // which are no longer allowed to be selected then.
99     SdrViewIter aIter(mpPage);
100     SdrView* pView = aIter.FirstView();
101 
102     while(pView)
103     {
104         if(pView->AreObjectsMarked())
105             pView->UnmarkAll();
106         pView = aIter.NextView();
107     }
108 
109     mpPage->SetAutoLayout( meOldAutoLayout );
110 
111     if (!mpPage->IsMasterPage())
112     {
113         if (mpPage->GetName() != maOldName)
114         {
115             mpPage->SetName(maOldName);
116 
117             if (mpPage->GetPageKind() == PK_STANDARD)
118             {
119                 SdPage* pNotesPage = (SdPage*)mpDoc->GetPage(mpPage->GetPageNum() + 1);
120                 pNotesPage->SetName(maOldName);
121             }
122         }
123 
124         SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
125         sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
126         sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
127         SetOfByte aVisibleLayers;
128         aVisibleLayers.Set(aBckgrnd, mbOldBckgrndVisible);
129         aVisibleLayers.Set(aBckgrndObj, mbOldBckgrndObjsVisible);
130         mpPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
131     }
132 
133     // Redisplay
134     SfxViewFrame::Current()->GetDispatcher()->Execute(
135         SID_SWITCHPAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
136 }
137 
138 /*************************************************************************
139 |*
140 |* Redo()
141 |*
142 \************************************************************************/
143 
Redo()144 void ModifyPageUndoAction::Redo()
145 {
146     // #94637# invalidate Selection, there could be objects deleted in tis UNDO
147     // which are no longer allowed to be selected then.
148     SdrViewIter aIter(mpPage);
149     SdrView* pView = aIter.FirstView();
150 
151     while(pView)
152     {
153         if(pView->AreObjectsMarked())
154             pView->UnmarkAll();
155         pView = aIter.NextView();
156     }
157 
158     mpPage->meAutoLayout = meNewAutoLayout;
159 
160     if (!mpPage->IsMasterPage())
161     {
162         if (mpPage->GetName() != maNewName)
163         {
164             mpPage->SetName(maNewName);
165 
166             if (mpPage->GetPageKind() == PK_STANDARD)
167             {
168                 SdPage* pNotesPage = (SdPage*)mpDoc->GetPage(mpPage->GetPageNum() + 1);
169                 pNotesPage->SetName(maNewName);
170             }
171         }
172 
173         SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
174         sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
175         sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
176         SetOfByte aVisibleLayers;
177         aVisibleLayers.Set(aBckgrnd, mbNewBckgrndVisible);
178         aVisibleLayers.Set(aBckgrndObj, mbNewBckgrndObjsVisible);
179         mpPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
180     }
181 
182     // Redisplay
183     SfxViewFrame::Current()->GetDispatcher()->Execute(
184         SID_SWITCHPAGE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
185 }
186 
187 /*************************************************************************
188 |*
189 |* Destruktor
190 |*
191 \************************************************************************/
192 
~ModifyPageUndoAction()193 ModifyPageUndoAction::~ModifyPageUndoAction()
194 {
195 }
196 
197 /*************************************************************************
198 |*
199 |* Kommentar liefern
200 |*
201 \************************************************************************/
202 
GetComment() const203 String ModifyPageUndoAction::GetComment() const
204 {
205     return maComment;
206 }
207 
208 // --------------------------------------------------------------------
209 
RenameLayoutTemplateUndoAction(SdDrawDocument * pDocument,const String & rOldLayoutName,const String & rNewLayoutName)210 RenameLayoutTemplateUndoAction::RenameLayoutTemplateUndoAction( SdDrawDocument* pDocument, const String& rOldLayoutName, const String& rNewLayoutName )
211 : SdUndoAction(pDocument)
212 , maOldName( rOldLayoutName )
213 , maNewName( rNewLayoutName )
214 , maComment(SdResId(STR_TITLE_RENAMESLIDE))
215 {
216     sal_uInt16 nPos = maOldName.SearchAscii( SD_LT_SEPARATOR );
217     if( nPos != (sal_uInt16)-1 )
218         maOldName.Erase(nPos);
219 }
220 
Undo()221 void RenameLayoutTemplateUndoAction::Undo()
222 {
223     String aLayoutName( maNewName );
224     aLayoutName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ));
225     aLayoutName.Append( String(SdResId(STR_LAYOUT_OUTLINE))) ;
226 
227     mpDoc->RenameLayoutTemplate( aLayoutName, maOldName );
228 }
229 
Redo()230 void RenameLayoutTemplateUndoAction::Redo()
231 {
232     String aLayoutName( maOldName );
233     aLayoutName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ));
234     aLayoutName.Append( String(SdResId(STR_LAYOUT_OUTLINE))) ;
235 
236     mpDoc->RenameLayoutTemplate( aLayoutName, maNewName );
237 }
238 
GetComment() const239 String RenameLayoutTemplateUndoAction::GetComment() const
240 {
241     return  maComment;
242 }
243 
244