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