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
28 #include "fupage.hxx"
29
30 #include <sfx2/viewfrm.hxx>
31
32 // Seite einrichten Tab-Page
33
34 #include <svx/svxids.hrc>
35 #include <svx/dialogs.hrc>
36 #include <svl/itempool.hxx>
37 #include <vcl/msgbox.hxx>
38 #include <sfx2/request.hxx>
39 #include <svl/stritem.hxx>
40 #include <vcl/prntypes.hxx>
41 #include <svl/style.hxx>
42 #include <stlsheet.hxx>
43 #include <svx/svdorect.hxx>
44 #include <svx/svdundo.hxx>
45 #include <editeng/eeitem.hxx>
46 #include <editeng/frmdiritem.hxx>
47 #include <svx/xbtmpit.hxx>
48 #include <svx/xsetit.hxx>
49 #include <svl/itempool.hxx>
50 #include <editeng/ulspitem.hxx>
51 #include <editeng/lrspitem.hxx>
52 #include <svx/sdr/properties/properties.hxx>
53
54 #include "glob.hrc"
55 #include <editeng/shaditem.hxx>
56 #include <editeng/boxitem.hxx>
57 #include <editeng/sizeitem.hxx>
58 #include <editeng/ulspitem.hxx>
59 #include <editeng/lrspitem.hxx>
60 #include <editeng/pbinitem.hxx>
61 #include <sfx2/app.hxx>
62 #include <sfx2/opengrf.hxx>
63
64 #include "strings.hrc"
65 #include "sdpage.hxx"
66 #include "View.hxx"
67 #include "Window.hxx"
68 #include "pres.hxx"
69 #include "drawdoc.hxx"
70 #include "DrawDocShell.hxx"
71 #include "ViewShell.hxx"
72 #include "DrawViewShell.hxx"
73 #include "app.hrc"
74 #include "unchss.hxx"
75 #include "undoback.hxx"
76 #include "sdabstdlg.hxx"
77 #include "sdresid.hxx"
78 #include "sdundogr.hxx"
79 #include "helpids.h"
80
81 namespace sd {
82
83 class Window;
84
85 // 50 cm 28350
86 // erstmal vom Writer uebernommen
87 #define MAXHEIGHT 28350
88 #define MAXWIDTH 28350
89
90
91 TYPEINIT1( FuPage, FuPoor );
92
mergeItemSetsImpl(SfxItemSet & rTarget,const SfxItemSet & rSource)93 void mergeItemSetsImpl( SfxItemSet& rTarget, const SfxItemSet& rSource )
94 {
95 const sal_uInt16* pPtr = rSource.GetRanges();
96 sal_uInt16 p1, p2;
97 while( *pPtr )
98 {
99 p1 = pPtr[0];
100 p2 = pPtr[1];
101
102 // make ranges discret
103 while(pPtr[2] && (pPtr[2] - p2 == 1))
104 {
105 p2 = pPtr[3];
106 pPtr += 2;
107 }
108 rTarget.MergeRange( p1, p2 );
109 pPtr += 2;
110 }
111
112 rTarget.Put(rSource);
113 }
114
115 /*************************************************************************
116 |*
117 |* Konstruktor
118 |*
119 \************************************************************************/
120
FuPage(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)121 FuPage::FuPage( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView,
122 SdDrawDocument* pDoc, SfxRequest& rReq )
123 : FuPoor(pViewSh, pWin, pView, pDoc, rReq),
124 mrReq(rReq),
125 mpArgs( rReq.GetArgs() ),
126 mpBackgroundObjUndoAction( 0 ),
127 mbPageBckgrdDeleted( false ),
128 mbMasterPage( false ),
129 mbDisplayBackgroundTabPage( true ),
130 mpPage(0)
131 {
132 }
133
Create(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)134 FunctionReference FuPage::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
135 {
136 FunctionReference xFunc( new FuPage( pViewSh, pWin, pView, pDoc, rReq ) );
137 xFunc->DoExecute(rReq);
138 return xFunc;
139 }
140
DoExecute(SfxRequest &)141 void FuPage::DoExecute( SfxRequest& )
142 {
143 mpDrawViewShell = dynamic_cast<DrawViewShell*>(mpViewShell);
144 DBG_ASSERT( mpDrawViewShell, "sd::FuPage::FuPage(), called without a current DrawViewShell!" );
145 if( mpDrawViewShell )
146 {
147 mbMasterPage = mpDrawViewShell->GetEditMode() == EM_MASTERPAGE;
148 mbDisplayBackgroundTabPage = (mpDrawViewShell->GetPageKind() == PK_STANDARD);
149 mpPage = mpDrawViewShell->getCurrentPage();
150 }
151
152 if( mpPage )
153 {
154 // if there are no arguments given, open the dialog
155 if( !mpArgs )
156 {
157 mpView->SdrEndTextEdit();
158 mpArgs = ExecuteDialog(mpWindow);
159 }
160
161 // if we now have arguments, apply them to current page
162 if( mpArgs )
163 ApplyItemSet( mpArgs );
164 }
165 }
166
~FuPage()167 FuPage::~FuPage()
168 {
169 delete mpBackgroundObjUndoAction;
170 }
171
Activate()172 void FuPage::Activate()
173 {
174 }
175
Deactivate()176 void FuPage::Deactivate()
177 {
178 }
179
ExecuteDialog(Window * pParent)180 const SfxItemSet* FuPage::ExecuteDialog( Window* pParent )
181 {
182 PageKind ePageKind = mpDrawViewShell->GetPageKind();
183
184 SfxItemSet aNewAttr(mpDoc->GetPool(),
185 mpDoc->GetPool().GetWhich(SID_ATTR_LRSPACE),
186 mpDoc->GetPool().GetWhich(SID_ATTR_ULSPACE),
187 SID_ATTR_PAGE, SID_ATTR_PAGE_BSP,
188 SID_ATTR_BORDER_OUTER, SID_ATTR_BORDER_OUTER,
189 SID_ATTR_BORDER_SHADOW, SID_ATTR_BORDER_SHADOW,
190 XATTR_FILL_FIRST, XATTR_FILL_LAST,
191 EE_PARA_WRITINGDIR, EE_PARA_WRITINGDIR,
192 0);
193
194 ///////////////////////////////////////////////////////////////////////
195 // Retrieve additional data for dialog
196
197 SvxShadowItem aShadowItem(SID_ATTR_BORDER_SHADOW);
198 aNewAttr.Put( aShadowItem );
199 SvxBoxItem aBoxItem( SID_ATTR_BORDER_OUTER );
200 aNewAttr.Put( aBoxItem );
201
202 aNewAttr.Put( SvxFrameDirectionItem(
203 mpDoc->GetDefaultWritingMode() == ::com::sun::star::text::WritingMode_RL_TB ? FRMDIR_HORI_RIGHT_TOP : FRMDIR_HORI_LEFT_TOP,
204 EE_PARA_WRITINGDIR ) );
205
206 ///////////////////////////////////////////////////////////////////////
207 // Retrieve page-data for dialog
208
209 SvxPageItem aPageItem( SID_ATTR_PAGE );
210 aPageItem.SetDescName( mpPage->GetName() );
211 aPageItem.SetPageUsage( (SvxPageUsage) SVX_PAGE_ALL );
212 aPageItem.SetLandscape( mpPage->GetOrientation() == ORIENTATION_LANDSCAPE ? sal_True: sal_False );
213 aPageItem.SetNumType( mpDoc->GetPageNumType() );
214 aNewAttr.Put( aPageItem );
215
216 // size
217 maSize = mpPage->GetSize();
218 SvxSizeItem aSizeItem( SID_ATTR_PAGE_SIZE, maSize );
219 aNewAttr.Put( aSizeItem );
220
221 // Max size
222 SvxSizeItem aMaxSizeItem( SID_ATTR_PAGE_MAXSIZE, Size( MAXWIDTH, MAXHEIGHT ) );
223 aNewAttr.Put( aMaxSizeItem );
224
225 // paperbin
226 SvxPaperBinItem aPaperBinItem( SID_ATTR_PAGE_PAPERBIN, (const sal_uInt8)mpPage->GetPaperBin() );
227 aNewAttr.Put( aPaperBinItem );
228
229 SvxLRSpaceItem aLRSpaceItem( (sal_uInt16)mpPage->GetLftBorder(), (sal_uInt16)mpPage->GetRgtBorder(), 0, 0, mpDoc->GetPool().GetWhich(SID_ATTR_LRSPACE));
230 aNewAttr.Put( aLRSpaceItem );
231
232 SvxULSpaceItem aULSpaceItem( (sal_uInt16)mpPage->GetUppBorder(), (sal_uInt16)mpPage->GetLwrBorder(), mpDoc->GetPool().GetWhich(SID_ATTR_ULSPACE));
233 aNewAttr.Put( aULSpaceItem );
234
235 // Applikation
236 bool bScale = mpDoc->GetDocumentType() != DOCUMENT_TYPE_DRAW;
237 aNewAttr.Put( SfxBoolItem( SID_ATTR_PAGE_EXT1, bScale ? sal_True : sal_False ) );
238
239 sal_Bool bFullSize = mpPage->IsMasterPage() ?
240 mpPage->IsBackgroundFullSize() : ((SdPage&)mpPage->TRG_GetMasterPage()).IsBackgroundFullSize();
241
242 aNewAttr.Put( SfxBoolItem( SID_ATTR_PAGE_EXT2, bFullSize ) );
243
244 ///////////////////////////////////////////////////////////////////////
245 // Merge ItemSet for dialog
246
247 const sal_uInt16* pPtr = aNewAttr.GetRanges();
248 sal_uInt16 p1 = pPtr[0], p2 = pPtr[1];
249 while(pPtr[2] && (pPtr[2] - p2 == 1))
250 {
251 p2 = pPtr[3];
252 pPtr += 2;
253 }
254 pPtr += 2;
255 SfxItemSet aMergedAttr( *aNewAttr.GetPool(), p1, p2 );
256
257 mergeItemSetsImpl( aMergedAttr, aNewAttr );
258
259 SdStyleSheet* pStyleSheet = mpPage->getPresentationStyle(HID_PSEUDOSHEET_BACKGROUND);
260
261 // merge page background filling to the dialogs input set
262 if( mbDisplayBackgroundTabPage )
263 {
264 if( mbMasterPage )
265 {
266 if(pStyleSheet)
267 mergeItemSetsImpl( aMergedAttr, pStyleSheet->GetItemSet() );
268 }
269 else
270 {
271 // Only this page, get attributes for background fill
272 const SfxItemSet& rBackgroundAttributes = mpPage->getSdrPageProperties().GetItemSet();
273
274 if(XFILL_NONE != ((const XFillStyleItem&)rBackgroundAttributes.Get(XATTR_FILLSTYLE)).GetValue())
275 {
276 // page attributes are used, take them
277 aMergedAttr.Put(rBackgroundAttributes);
278 }
279 else
280 {
281 if(pStyleSheet
282 && XFILL_NONE != ((const XFillStyleItem&)pStyleSheet->GetItemSet().Get(XATTR_FILLSTYLE)).GetValue())
283 {
284 // if the page has no fill style, use the settings from the
285 // background stylesheet (if used)
286 mergeItemSetsImpl(aMergedAttr, pStyleSheet->GetItemSet());
287 }
288 else
289 {
290 // no fill style from page, start with no fill style
291 aMergedAttr.Put(XFillStyleItem(XFILL_NONE));
292 }
293 }
294 }
295 }
296
297 std::auto_ptr< SfxItemSet > pTempSet;
298
299 if( GetSlotID() == SID_SELECT_BACKGROUND )
300 {
301 SvxOpenGraphicDialog aDlg(SdResId(STR_SET_BACKGROUND_PICTURE));
302
303 if( aDlg.Execute() == GRFILTER_OK )
304 {
305 Graphic aGraphic;
306 int nError = aDlg.GetGraphic(aGraphic);
307 if( nError == GRFILTER_OK )
308 {
309 pTempSet.reset( new SfxItemSet( mpDoc->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST, 0) );
310
311 pTempSet->Put( XFillStyleItem( XFILL_BITMAP ) );
312
313 // MigrateItemSet makes sure the XFillBitmapItem will have a unique name
314 SfxItemSet aMigrateSet( mpDoc->GetPool(), XATTR_FILLBITMAP, XATTR_FILLBITMAP );
315 aMigrateSet.Put(XFillBitmapItem(String(RTL_CONSTASCII_USTRINGPARAM("background")), aGraphic));
316 mpDoc->MigrateItemSet( &aMigrateSet, pTempSet.get(), NULL );
317
318 pTempSet->Put( XFillBmpStretchItem( sal_True ));
319 pTempSet->Put( XFillBmpTileItem( sal_False ));
320 }
321 }
322 }
323 else
324 {
325 // create the dialog
326 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
327 std::auto_ptr<SfxAbstractTabDialog> pDlg( pFact ? pFact->CreateSdTabPageDialog(NULL, &aMergedAttr, mpDocSh, mbDisplayBackgroundTabPage ) : 0 );
328 if( pDlg.get() && pDlg->Execute() == RET_OK )
329 pTempSet.reset( new SfxItemSet(*pDlg->GetOutputItemSet()) );
330 }
331
332 if( pTempSet.get() )
333 {
334 pStyleSheet->AdjustToFontHeight(*pTempSet);
335
336 if( mbDisplayBackgroundTabPage )
337 {
338 // if some fillstyle-items are not set in the dialog, then
339 // try to use the items before
340 sal_Bool bChanges = sal_False;
341 for( sal_uInt16 i=XATTR_FILL_FIRST; i<XATTR_FILL_LAST; i++ )
342 {
343 if( aMergedAttr.GetItemState( i ) != SFX_ITEM_DEFAULT )
344 {
345 if( pTempSet->GetItemState( i ) == SFX_ITEM_DEFAULT )
346 pTempSet->Put( aMergedAttr.Get( i ) );
347 else
348 if( aMergedAttr.GetItem( i ) != pTempSet->GetItem( i ) )
349 bChanges = sal_True;
350 }
351 }
352
353 // if the background for this page was set to invisible, the background-object has to be deleted, too.
354 if( ( ( (XFillStyleItem*) pTempSet->GetItem( XATTR_FILLSTYLE ) )->GetValue() == XFILL_NONE ) ||
355 ( ( pTempSet->GetItemState( XATTR_FILLSTYLE ) == SFX_ITEM_DEFAULT ) &&
356 ( ( (XFillStyleItem*) aMergedAttr.GetItem( XATTR_FILLSTYLE ) )->GetValue() == XFILL_NONE ) ) )
357 mbPageBckgrdDeleted = sal_True;
358
359 bool bSetToAllPages = false;
360
361 // Ask, wether the setting are for the background-page or for the current page
362 if( !mbMasterPage && bChanges )
363 {
364 // But don't ask in notice-view, because we can't change the background of
365 // notice-masterpage (at the moment)
366 if( ePageKind != PK_NOTES )
367 {
368 String aTit(SdResId( STR_PAGE_BACKGROUND_TITLE ));
369 String aTxt(SdResId( STR_PAGE_BACKGROUND_TXT ));
370 MessBox aQuestionBox (
371 pParent,
372 WB_YES_NO | WB_DEF_YES,
373 aTit,
374 aTxt );
375 aQuestionBox.SetImage( QueryBox::GetStandardImage() );
376 bSetToAllPages = ( RET_YES == aQuestionBox.Execute() );
377 }
378
379 if( mbPageBckgrdDeleted )
380 {
381 mpBackgroundObjUndoAction = new SdBackgroundObjUndoAction(
382 *mpDoc, *mpPage, mpPage->getSdrPageProperties().GetItemSet());
383
384 if(!mpPage->IsMasterPage())
385 {
386 // on normal pages, switch off fill attribute usage
387 SdrPageProperties& rPageProperties = mpPage->getSdrPageProperties();
388 rPageProperties.ClearItem( XATTR_FILLBITMAP );
389 rPageProperties.ClearItem( XATTR_FILLGRADIENT );
390 rPageProperties.ClearItem( XATTR_FILLHATCH );
391 rPageProperties.PutItem(XFillStyleItem(XFILL_NONE));
392 }
393 }
394 }
395
396 // Sonderbehandlung: die INVALIDS auf NULL-Pointer
397 // zurueckgesetzen (sonst landen INVALIDs oder
398 // Pointer auf die DefaultItems in der Vorlage;
399 // beides wuerde die Attribut-Vererbung unterbinden)
400 pTempSet->ClearInvalidItems();
401
402 if( mbMasterPage )
403 {
404 StyleSheetUndoAction* pAction = new StyleSheetUndoAction(mpDoc, (SfxStyleSheet*)pStyleSheet, &(*pTempSet.get()));
405 mpDocSh->GetUndoManager()->AddUndoAction(pAction);
406 pStyleSheet->GetItemSet().Put( *(pTempSet.get()) );
407 sdr::properties::CleanupFillProperties( pStyleSheet->GetItemSet() );
408 pStyleSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
409 }
410 else if( bSetToAllPages )
411 {
412 String aComment(SdResId(STR_UNDO_CHANGE_PAGEFORMAT));
413 ::svl::IUndoManager* pUndoMgr = mpDocSh->GetUndoManager();
414 pUndoMgr->EnterListAction(aComment, aComment);
415 SdUndoGroup* pUndoGroup = new SdUndoGroup(mpDoc);
416 pUndoGroup->SetComment(aComment);
417
418 //Set background on all master pages
419 sal_uInt16 nMasterPageCount = mpDoc->GetMasterSdPageCount(ePageKind);
420 for (sal_uInt16 i = 0; i < nMasterPageCount; ++i)
421 {
422 SdPage *pMasterPage = mpDoc->GetMasterSdPage(i, ePageKind);
423 SdStyleSheet *pStyle =
424 pMasterPage->getPresentationStyle(HID_PSEUDOSHEET_BACKGROUND);
425 StyleSheetUndoAction* pAction =
426 new StyleSheetUndoAction(mpDoc, (SfxStyleSheet*)pStyle, &(*pTempSet.get()));
427 pUndoGroup->AddAction(pAction);
428 pStyle->GetItemSet().Put( *(pTempSet.get()) );
429 sdr::properties::CleanupFillProperties( pStyleSheet->GetItemSet() );
430 pStyle->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
431 }
432
433 //Remove background from all pages to reset to the master bg
434 sal_uInt16 nPageCount(mpDoc->GetSdPageCount(ePageKind));
435 for(sal_uInt16 i=0; i<nPageCount; ++i)
436 {
437 SdPage *pPage = mpDoc->GetSdPage(i, ePageKind);
438
439 const SfxItemSet& rFillAttributes = pPage->getSdrPageProperties().GetItemSet();
440 if(XFILL_NONE != ((const XFillStyleItem&)rFillAttributes.Get(XATTR_FILLSTYLE)).GetValue())
441 {
442 SdBackgroundObjUndoAction *pBackgroundObjUndoAction = new SdBackgroundObjUndoAction(*mpDoc, *pPage, rFillAttributes);
443 pUndoGroup->AddAction(pBackgroundObjUndoAction);
444
445 SdrPageProperties& rPageProperties = pPage->getSdrPageProperties();
446 rPageProperties.ClearItem( XATTR_FILLBITMAP );
447 rPageProperties.ClearItem( XATTR_FILLGRADIENT );
448 rPageProperties.ClearItem( XATTR_FILLHATCH );
449 rPageProperties.PutItem(XFillStyleItem(XFILL_NONE));
450
451 pPage->ActionChanged();
452 }
453 }
454
455 pUndoMgr->AddUndoAction(pUndoGroup);
456 pUndoMgr->LeaveListAction();
457
458 }
459
460 // if background filling is set to master pages then clear from page set
461 if( mbMasterPage || bSetToAllPages )
462 {
463 for( sal_uInt16 nWhich = XATTR_FILL_FIRST; nWhich <= XATTR_FILL_LAST; nWhich++ )
464 {
465 pTempSet->ClearItem( nWhich );
466 }
467 pTempSet->Put(XFillStyleItem(XFILL_NONE));
468 }
469
470 const SfxPoolItem *pItem;
471 if( SFX_ITEM_SET == pTempSet->GetItemState( EE_PARA_WRITINGDIR, sal_False, &pItem ) )
472 {
473 sal_uInt32 nVal = ((SvxFrameDirectionItem*)pItem)->GetValue();
474 mpDoc->SetDefaultWritingMode( nVal == FRMDIR_HORI_RIGHT_TOP ? ::com::sun::star::text::WritingMode_RL_TB : ::com::sun::star::text::WritingMode_LR_TB );
475 }
476
477 mpDoc->SetChanged(sal_True);
478
479 // BackgroundFill of Masterpage: no hard attributes allowed
480 SdrPage& rUsedMasterPage = mpPage->IsMasterPage() ? *mpPage : mpPage->TRG_GetMasterPage();
481 OSL_ENSURE(rUsedMasterPage.IsMasterPage(), "No MasterPage (!)");
482 rUsedMasterPage.getSdrPageProperties().ClearItem();
483 OSL_ENSURE(0 != rUsedMasterPage.getSdrPageProperties().GetStyleSheet(),
484 "MasterPage without StyleSheet detected (!)");
485 }
486
487 aNewAttr.Put(*(pTempSet.get()));
488 mrReq.Done( aNewAttr );
489
490 return mrReq.GetArgs();
491 }
492 else
493 {
494 return 0;
495 }
496 }
497
ApplyItemSet(const SfxItemSet * pArgs)498 void FuPage::ApplyItemSet( const SfxItemSet* pArgs )
499 {
500 if( !pArgs )
501 return;
502
503 ///////////////////////////////////////////////////////////////////////////
504 // Set new page-attributes
505 PageKind ePageKind = mpDrawViewShell->GetPageKind();
506 const SfxPoolItem* pPoolItem;
507 sal_Bool bSetPageSizeAndBorder = sal_False;
508 Size aNewSize(maSize);
509 sal_Int32 nLeft = -1, nRight = -1, nUpper = -1, nLower = -1;
510 sal_Bool bScaleAll = sal_True;
511 Orientation eOrientation = mpPage->GetOrientation();
512 SdPage* pMasterPage = mpPage->IsMasterPage() ? mpPage : &(SdPage&)(mpPage->TRG_GetMasterPage());
513 sal_Bool bFullSize = pMasterPage->IsBackgroundFullSize();
514 sal_uInt16 nPaperBin = mpPage->GetPaperBin();
515
516 if( pArgs->GetItemState(SID_ATTR_PAGE, sal_True, &pPoolItem) == SFX_ITEM_SET )
517 {
518 mpDoc->SetPageNumType(((const SvxPageItem*) pPoolItem)->GetNumType());
519
520 eOrientation = (((const SvxPageItem*) pPoolItem)->IsLandscape() == ORIENTATION_LANDSCAPE) ?
521 ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT;
522
523 if( mpPage->GetOrientation() != eOrientation )
524 bSetPageSizeAndBorder = sal_True;
525
526 mpDrawViewShell->ResetActualPage();
527 }
528
529 if( pArgs->GetItemState(SID_ATTR_PAGE_SIZE, sal_True, &pPoolItem) == SFX_ITEM_SET )
530 {
531 aNewSize = ((const SvxSizeItem*) pPoolItem)->GetSize();
532
533 if( mpPage->GetSize() != aNewSize )
534 bSetPageSizeAndBorder = sal_True;
535 }
536
537 if( pArgs->GetItemState(mpDoc->GetPool().GetWhich(SID_ATTR_LRSPACE),
538 sal_True, &pPoolItem) == SFX_ITEM_SET )
539 {
540 nLeft = ((const SvxLRSpaceItem*) pPoolItem)->GetLeft();
541 nRight = ((const SvxLRSpaceItem*) pPoolItem)->GetRight();
542
543 if( mpPage->GetLftBorder() != nLeft || mpPage->GetRgtBorder() != nRight )
544 bSetPageSizeAndBorder = sal_True;
545
546 }
547
548 if( pArgs->GetItemState(mpDoc->GetPool().GetWhich(SID_ATTR_ULSPACE),
549 sal_True, &pPoolItem) == SFX_ITEM_SET )
550 {
551 nUpper = ((const SvxULSpaceItem*) pPoolItem)->GetUpper();
552 nLower = ((const SvxULSpaceItem*) pPoolItem)->GetLower();
553
554 if( mpPage->GetUppBorder() != nUpper || mpPage->GetLwrBorder() != nLower )
555 bSetPageSizeAndBorder = sal_True;
556 }
557
558 if( pArgs->GetItemState(mpDoc->GetPool().GetWhich(SID_ATTR_PAGE_EXT1), sal_True, &pPoolItem) == SFX_ITEM_SET )
559 {
560 bScaleAll = ((const SfxBoolItem*) pPoolItem)->GetValue();
561 }
562
563 if( pArgs->GetItemState(mpDoc->GetPool().GetWhich(SID_ATTR_PAGE_EXT2), sal_True, &pPoolItem) == SFX_ITEM_SET )
564 {
565 bFullSize = ((const SfxBoolItem*) pPoolItem)->GetValue();
566
567 if(pMasterPage->IsBackgroundFullSize() != bFullSize )
568 bSetPageSizeAndBorder = sal_True;
569 }
570
571 // Papierschacht (PaperBin)
572 if( pArgs->GetItemState(mpDoc->GetPool().GetWhich(SID_ATTR_PAGE_PAPERBIN), sal_True, &pPoolItem) == SFX_ITEM_SET )
573 {
574 nPaperBin = ((const SvxPaperBinItem*) pPoolItem)->GetValue();
575
576 if( mpPage->GetPaperBin() != nPaperBin )
577 bSetPageSizeAndBorder = sal_True;
578 }
579
580 if (nLeft == -1 && nUpper != -1)
581 {
582 bSetPageSizeAndBorder = sal_True;
583 nLeft = mpPage->GetLftBorder();
584 nRight = mpPage->GetRgtBorder();
585 }
586 else if (nLeft != -1 && nUpper == -1)
587 {
588 bSetPageSizeAndBorder = sal_True;
589 nUpper = mpPage->GetUppBorder();
590 nLower = mpPage->GetLwrBorder();
591 }
592
593 if( bSetPageSizeAndBorder || !mbMasterPage )
594 mpDrawViewShell->SetPageSizeAndBorder(ePageKind, aNewSize, nLeft, nRight, nUpper, nLower, bScaleAll, eOrientation, nPaperBin, bFullSize );
595
596 ////////////////////////////////////////////////////////////////////////////////
597 //
598 // if bMasterPage==sal_False then create a background-object for this page with the
599 // properties set in the dialog before, but if mbPageBckgrdDeleted==sal_True then
600 // the background of this page was set to invisible, so it would be a mistake
601 // to create a new background-object for this page !
602 //
603
604 if( mbDisplayBackgroundTabPage )
605 {
606 if( !mbMasterPage && !mbPageBckgrdDeleted )
607 {
608 // Only this page
609 delete mpBackgroundObjUndoAction;
610 mpBackgroundObjUndoAction = new SdBackgroundObjUndoAction(
611 *mpDoc, *mpPage, mpPage->getSdrPageProperties().GetItemSet());
612 SfxItemSet aSet( *pArgs );
613 sdr::properties::CleanupFillProperties(aSet);
614 mpPage->getSdrPageProperties().ClearItem();
615 mpPage->getSdrPageProperties().PutItemSet(aSet);
616 }
617 }
618
619 // add undo action for background object
620 if( mpBackgroundObjUndoAction )
621 {
622 // set merge flag, because a SdUndoGroupAction could have been inserted before
623 mpDocSh->GetUndoManager()->AddUndoAction( mpBackgroundObjUndoAction, sal_True );
624 mpBackgroundObjUndoAction = 0;
625 }
626
627 ///////////////////////////////////////////////////////////////////////////
628 //
629 // Objekte koennen max. so gross wie die ViewSize werden
630 //
631 Size aPageSize = mpDoc->GetSdPage(0, ePageKind)->GetSize();
632 Size aViewSize = Size(aPageSize.Width() * 3, aPageSize.Height() * 2);
633 mpDoc->SetMaxObjSize(aViewSize);
634
635 ///////////////////////////////////////////////////////////////////////////
636 //
637 // ggfs. Preview den neuen Kontext mitteilen
638 //
639 mpDrawViewShell->UpdatePreview( mpDrawViewShell->GetActualPage() );
640 }
641
642 } // end of namespace sd
643