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 #include "precompiled_sw.hxx"
25
26 #include "PagePropertyPanel.hxx"
27 #include "PagePropertyPanel.hrc"
28
29 #include "PropertyPanel.hrc"
30
31 #include <svx/sidebar/PopupContainer.hxx>
32 #include "PageOrientationControl.hxx"
33 #include "PageMarginControl.hxx"
34 #include "PageSizeControl.hxx"
35 #include "PageColumnControl.hxx"
36
37 #include <swtypes.hxx>
38 #include <cmdid.h>
39 #include <errhdl.hxx>
40
41 #include <svl/intitem.hxx>
42 #include <editeng/sizeitem.hxx>
43 #include <editeng/paperinf.hxx>
44 #include <svx/svxids.hrc>
45 #include <svx/dlgutil.hxx>
46 #include <svx/rulritem.hxx>
47
48 #include <sfx2/sidebar/ControlFactory.hxx>
49 #include <sfx2/sidebar/Layouter.hxx>
50 #include <sfx2/sidebar/ResourceDefinitions.hrc>
51 #include <sfx2/dispatch.hxx>
52 #include <sfx2/bindings.hxx>
53 #include <sfx2/viewsh.hxx>
54 #include <sfx2/objsh.hxx>
55
56 #include <boost/bind.hpp>
57
58 #include <com/sun/star/frame/XController.hpp>
59 #include <com/sun/star/frame/XModel.hpp>
60 #include <com/sun/star/document/XUndoManagerSupplier.hpp>
61
62 using namespace ::sfx2::sidebar;
63
64 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
65
66 #define SetFldVal(rField, lValue) (rField).SetValue((rField).Normalize(lValue), FUNIT_TWIP)
67
68 namespace {
getUndoManager(const cssu::Reference<css::frame::XFrame> & rxFrame)69 const cssu::Reference< css::document::XUndoManager > getUndoManager( const cssu::Reference< css::frame::XFrame >& rxFrame )
70 {
71 const cssu::Reference< css::frame::XController >& xController = rxFrame->getController();
72 if ( xController.is() )
73 {
74 const cssu::Reference< css::frame::XModel >& xModel = xController->getModel();
75 if ( xModel.is() )
76 {
77 const cssu::Reference< css::document::XUndoManagerSupplier > xSuppUndo( xModel, cssu::UNO_QUERY_THROW );
78 if ( xSuppUndo.is() )
79 {
80 const cssu::Reference< css::document::XUndoManager > xUndoManager( xSuppUndo->getUndoManager(), cssu::UNO_QUERY_THROW );
81 return xUndoManager;
82 }
83 }
84 }
85
86 return cssu::Reference< css::document::XUndoManager > ();
87 }
88 }
89
90
91 namespace sw { namespace sidebar {
92
Create(Window * pParent,const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & rxFrame,SfxBindings * pBindings)93 PagePropertyPanel* PagePropertyPanel::Create (
94 Window* pParent,
95 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame,
96 SfxBindings* pBindings)
97 {
98 if (pParent == NULL)
99 throw ::com::sun::star::lang::IllegalArgumentException(A2S("no parent Window given to PagePropertyPanel::Create"), NULL, 0);
100 if ( ! rxFrame.is())
101 throw ::com::sun::star::lang::IllegalArgumentException(A2S("no XFrame given to PagePropertyPanel::Create"), NULL, 1);
102 if (pBindings == NULL)
103 throw ::com::sun::star::lang::IllegalArgumentException(A2S("no SfxBindings given to PagePropertyPanel::Create"), NULL, 2);
104
105 return new PagePropertyPanel(
106 pParent,
107 rxFrame,
108 pBindings);
109 }
110
PagePropertyPanel(Window * pParent,const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & rxFrame,SfxBindings * pBindings)111 PagePropertyPanel::PagePropertyPanel(
112 Window* pParent,
113 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame,
114 SfxBindings* pBindings)
115 : Control(pParent, SW_RES(RID_PROPERTYPANEL_SWPAGE))
116 , mpBindings(pBindings)
117 // visible controls
118 , maFtOrientation( this, SW_RES(FT_ORIENTATION) )
119 , mpToolBoxOrientationBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) )
120 , mpToolBoxOrientation( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxOrientationBackground.get(), SW_RES(TB_ORIENTATION)) )
121 , maFtMargin( this, SW_RES(FT_MARGIN) )
122 , mpToolBoxMarginBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) )
123 , mpToolBoxMargin( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxMarginBackground.get(), SW_RES(TB_MARGIN)) )
124 , maFtSize( this, SW_RES(FT_SIZE) )
125 , mpToolBoxSizeBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) )
126 , mpToolBoxSize( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxSizeBackground.get(), SW_RES(TB_SIZE)) )
127 , maFtColumn( this, SW_RES(FT_COLUMN) )
128 , mpToolBoxColumnBackground( ::sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this) )
129 , mpToolBoxColumn( ::sfx2::sidebar::ControlFactory::CreateToolBox( mpToolBoxColumnBackground.get(), SW_RES(TB_COLUMN)) )
130 // image resources
131 , maImgSize (NULL)
132 , maImgSize_L (NULL)
133 , mImgPortrait (SW_RES(IMG_PAGE_PORTRAIT))
134 , mImgLandscape (SW_RES(IMG_PAGE_LANDSCAPE))
135 , mImgNarrow (SW_RES(IMG_PAGE_NARROW))
136 , mImgNormal (SW_RES(IMG_PAGE_NORMAL))
137 , mImgWide (SW_RES(IMG_PAGE_WIDE))
138 , mImgMirrored (SW_RES(IMG_PAGE_MIRRORED))
139 , mImgMarginCustom (SW_RES(IMG_PAGE_MARGIN_CUSTOM))
140 , mImgNarrow_L (SW_RES(IMG_PAGE_NARROW_L))
141 , mImgNormal_L (SW_RES(IMG_PAGE_NORMAL_L))
142 , mImgWide_L (SW_RES(IMG_PAGE_WIDE_L))
143 , mImgMirrored_L (SW_RES(IMG_PAGE_MIRRORED_L))
144 , mImgMarginCustom_L (SW_RES(IMG_PAGE_MARGIN_CUSTOM_L))
145 , mImgA3 (SW_RES(IMG_PAGE_A3))
146 , mImgA4 (SW_RES(IMG_PAGE_A4))
147 , mImgA5 (SW_RES(IMG_PAGE_A5))
148 , mImgB4 (SW_RES(IMG_PAGE_B4))
149 , mImgB5 (SW_RES(IMG_PAGE_B5))
150 , mImgC5 (SW_RES(IMG_PAGE_C5))
151 , mImgLetter (SW_RES(IMG_PAGE_LETTER))
152 , mImgLegal (SW_RES(IMG_PAGE_LEGAL))
153 , mImgSizeNone (SW_RES(IMG_PAGE_SIZE_NONE))
154 , mImgA3_L (SW_RES(IMG_PAGE_A3_L))
155 , mImgA4_L (SW_RES(IMG_PAGE_A4_L))
156 , mImgA5_L (SW_RES(IMG_PAGE_A5_L))
157 , mImgB4_L (SW_RES(IMG_PAGE_B4_L))
158 , mImgB5_L (SW_RES(IMG_PAGE_B5_L))
159 , mImgC5_L (SW_RES(IMG_PAGE_C5_L))
160 , mImgLetter_L (SW_RES(IMG_PAGE_LETTER_L))
161 , mImgLegal_L (SW_RES(IMG_PAGE_LEGAL_L))
162 , mImgSizeNone_L (SW_RES(IMG_PAGE_SIZE_NONE_L))
163 , mImgColumn1 (SW_RES(IMG_PAGE_COLUMN_1))
164 , mImgColumn2 (SW_RES(IMG_PAGE_COLUMN_2))
165 , mImgColumn3 (SW_RES(IMG_PAGE_COLUMN_3))
166 , mImgLeft (SW_RES(IMG_PAGE_COLUMN_LEFT))
167 , mImgRight (SW_RES(IMG_PAGE_COLUMN_RIGHT))
168 , mImgColumnNone (SW_RES(IMG_PAGE_COLUMN_NONE))
169 , mImgColumn1_L (SW_RES(IMG_PAGE_COLUMN_1_L))
170 , mImgColumn2_L (SW_RES(IMG_PAGE_COLUMN_2_L))
171 , mImgColumn3_L (SW_RES(IMG_PAGE_COLUMN_3_L))
172 , mImgLeft_L (SW_RES(IMG_PAGE_COLUMN_LEFT_L))
173 , mImgRight_L (SW_RES(IMG_PAGE_COLUMN_RIGHT_L))
174 , mImgColumnNone_L (SW_RES(IMG_PAGE_COLUMN_NONE_L))
175
176 , mpPageItem( new SvxPageItem(SID_ATTR_PAGE) )
177 , mpPageLRMarginItem( new SvxLongLRSpaceItem( 0, 0, SID_ATTR_PAGE_LRSPACE ) )
178 , mpPageULMarginItem( new SvxLongULSpaceItem( 0, 0, SID_ATTR_PAGE_ULSPACE ) )
179 , mpPageSizeItem( new SvxSizeItem(SID_ATTR_PAGE_SIZE) )
180 , mePaper( PAPER_USER )
181 , mpPageColumnTypeItem( new SfxInt16Item(SID_ATTR_PAGE_COLUMN) )
182
183 , meFUnit()
184 , meUnit()
185
186 , m_aSwPagePgULControl(SID_ATTR_PAGE_ULSPACE, *pBindings, *this)
187 , m_aSwPagePgLRControl(SID_ATTR_PAGE_LRSPACE, *pBindings, *this)
188 , m_aSwPagePgSizeControl(SID_ATTR_PAGE_SIZE, *pBindings, *this)
189 , m_aSwPagePgControl(SID_ATTR_PAGE, *pBindings, *this)
190 , m_aSwPageColControl(SID_ATTR_PAGE_COLUMN, *pBindings, *this)
191 , m_aSwPagePgMetricControl(SID_ATTR_METRIC, *pBindings, *this)
192
193 , maOrientationPopup( this,
194 ::boost::bind( &PagePropertyPanel::CreatePageOrientationControl, this, _1 ),
195 A2S("Page orientation") )
196 , maMarginPopup( this,
197 ::boost::bind( &PagePropertyPanel::CreatePageMarginControl, this, _1 ),
198 A2S("Page margins") )
199 , maSizePopup( this,
200 ::boost::bind( &PagePropertyPanel::CreatePageSizeControl, this, _1 ),
201 A2S("Page size") )
202 , maColumnPopup( this,
203 ::boost::bind( &PagePropertyPanel::CreatePageColumnControl, this, _1 ),
204 A2S("Page columns") )
205
206 , mxUndoManager( getUndoManager( rxFrame ) )
207
208 , mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify( false ),
209 maLayouter(*this)
210 {
211 Initialize();
212 mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify = true;
213 FreeResource();
214
215 // Setup the grid layouter.
216 maLayouter.GetCell(0,0).SetControl(maFtOrientation).SetGridWidth(2);
217 maLayouter.GetCell(1,0).SetControl(*mpToolBoxOrientationBackground).SetFixedWidth();
218
219 maLayouter.GetCell(0,3).SetControl(maFtMargin).SetGridWidth(2);
220 maLayouter.GetCell(1,3).SetControl(*mpToolBoxMarginBackground).SetFixedWidth();
221
222 maLayouter.GetCell(2,0).SetControl(maFtSize).SetGridWidth(2);
223 maLayouter.GetCell(3,0).SetControl(*mpToolBoxSizeBackground).SetFixedWidth();
224
225 maLayouter.GetCell(2,3).SetControl(maFtColumn).SetGridWidth(2);
226 maLayouter.GetCell(3,3).SetControl(*mpToolBoxColumnBackground).SetFixedWidth();
227
228 maLayouter.GetColumn(0)
229 .SetWeight(0)
230 .SetLeftPadding(Layouter::MapWidth(*this,SECTIONPAGE_MARGIN_HORIZONTAL));
231 maLayouter.GetColumn(1)
232 .SetWeight(1)
233 .SetMinimumWidth(Layouter::MapWidth(*this,MBOX_WIDTH/2));
234 maLayouter.GetColumn(2)
235 .SetWeight(0)
236 .SetMinimumWidth(Layouter::MapWidth(*this, CONTROL_SPACING_HORIZONTAL));
237 maLayouter.GetColumn(3)
238 .SetWeight(0);
239 maLayouter.GetColumn(4)
240 .SetWeight(1)
241 .SetRightPadding(Layouter::MapWidth(*this,SECTIONPAGE_MARGIN_HORIZONTAL))
242 .SetMinimumWidth(Layouter::MapWidth(*this,MBOX_WIDTH/2));
243
244 // Make controls that display text handle short widths more
245 // graceful.
246 Layouter::PrepareForLayouting(maFtOrientation);
247 Layouter::PrepareForLayouting(maFtMargin);
248 Layouter::PrepareForLayouting(maFtSize);
249 Layouter::PrepareForLayouting(maFtColumn);
250 }
251
252
253
254
~PagePropertyPanel()255 PagePropertyPanel::~PagePropertyPanel()
256 {
257 delete[] maImgSize;
258 delete[] maImgSize_L;
259
260 // destroy the toolbox windows.
261 mpToolBoxOrientation.reset();
262 mpToolBoxMargin.reset();
263 mpToolBoxSize.reset();
264 mpToolBoxColumn.reset();
265
266 // destroy the background windows of the toolboxes.
267 mpToolBoxOrientationBackground.reset();
268 mpToolBoxMarginBackground.reset();
269 mpToolBoxSizeBackground.reset();
270 mpToolBoxColumnBackground.reset();
271 }
272
Initialize()273 void PagePropertyPanel::Initialize()
274 {
275 maFtOrientation.SetBackground(Wallpaper());
276 maFtMargin.SetBackground(Wallpaper());
277 maFtSize.SetBackground(Wallpaper());
278 maFtColumn.SetBackground(Wallpaper());
279
280 // popup for page orientation
281 Link aLink = LINK( this, PagePropertyPanel, ClickOrientationHdl );
282 mpToolBoxOrientation->SetDropdownClickHdl( aLink );
283 mpToolBoxOrientation->SetSelectHdl( aLink );
284 mpToolBoxOrientation->SetItemImage( TBI_ORIENTATION, mImgPortrait);
285 mpToolBoxOrientation->SetItemBits( TBI_ORIENTATION, mpToolBoxOrientation->GetItemBits( TBI_ORIENTATION ) | TIB_DROPDOWNONLY );
286 mpToolBoxOrientation->SetQuickHelpText(TBI_ORIENTATION,String(SW_RES(STR_QHELP_TB_ORIENTATION)));
287 mpToolBoxOrientation->SetOutputSizePixel( mpToolBoxOrientation->CalcWindowSizePixel() );
288 mpToolBoxOrientation->SetBackground( Wallpaper() );
289 mpToolBoxOrientation->SetPaintTransparent( sal_True );
290
291 // popup for page margins
292 aLink = LINK( this, PagePropertyPanel, ClickMarginHdl );
293 mpToolBoxMargin->SetDropdownClickHdl( aLink );
294 mpToolBoxMargin->SetSelectHdl( aLink );
295 mpToolBoxMargin->SetItemImage(TBI_MARGIN, mImgNormal);
296 mpToolBoxMargin->SetItemBits( TBI_MARGIN, mpToolBoxMargin->GetItemBits( TBI_MARGIN ) | TIB_DROPDOWNONLY );
297 mpToolBoxMargin->SetQuickHelpText(TBI_MARGIN,String(SW_RES(STR_QHELP_TB_MARGIN)));
298 mpToolBoxMargin->SetOutputSizePixel( mpToolBoxMargin->CalcWindowSizePixel() );
299 mpToolBoxMargin->SetBackground(Wallpaper());
300 mpToolBoxMargin->SetPaintTransparent( sal_True );
301
302 // popup for page size
303 aLink = LINK( this, PagePropertyPanel, ClickSizeHdl );
304 mpToolBoxSize->SetDropdownClickHdl( aLink );
305 mpToolBoxSize->SetSelectHdl( aLink );
306 mpToolBoxSize->SetItemImage(TBI_SIZE, mImgLetter);
307 mpToolBoxSize->SetItemBits( TBI_SIZE, mpToolBoxSize->GetItemBits( TBI_SIZE ) | TIB_DROPDOWNONLY );
308 mpToolBoxSize->SetQuickHelpText(TBI_SIZE,String(SW_RES(STR_QHELP_TB_SIZE)));
309 mpToolBoxSize->SetOutputSizePixel( mpToolBoxSize->CalcWindowSizePixel() );
310 mpToolBoxSize->SetBackground(Wallpaper());
311 mpToolBoxSize->SetPaintTransparent( sal_True );
312 maImgSize = new Image[8];
313 maImgSize[0] = mImgA3;
314 maImgSize[1] = mImgA4;
315 maImgSize[2] = mImgA5;
316 maImgSize[3] = mImgB4;
317 maImgSize[4] = mImgB5;
318 maImgSize[5] = mImgC5;
319 maImgSize[6] = mImgLetter;
320 maImgSize[7] = mImgLegal;
321 maImgSize_L = new Image[8];
322 maImgSize_L[0] = mImgA3_L;
323 maImgSize_L[1] = mImgA4_L;
324 maImgSize_L[2] = mImgA5_L;
325 maImgSize_L[3] = mImgB4_L;
326 maImgSize_L[4] = mImgB5_L;
327 maImgSize_L[5] = mImgC5_L;
328 maImgSize_L[6] = mImgLetter_L;
329 maImgSize_L[7] = mImgLegal_L;
330
331 // popup for page column property
332 aLink = LINK( this, PagePropertyPanel, ClickColumnHdl );
333 mpToolBoxColumn->SetDropdownClickHdl( aLink );
334 mpToolBoxColumn->SetSelectHdl( aLink );
335 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn1);
336 mpToolBoxColumn->SetItemBits( TBI_COLUMN, mpToolBoxColumn->GetItemBits( TBI_COLUMN ) | TIB_DROPDOWNONLY );
337 mpToolBoxColumn->SetQuickHelpText(TBI_COLUMN,String(SW_RES(STR_QHELP_TB_COLUMN)));
338 mpToolBoxColumn->SetOutputSizePixel( mpToolBoxColumn->CalcWindowSizePixel() );
339 mpToolBoxColumn->SetBackground(Wallpaper());
340 mpToolBoxColumn->SetPaintTransparent( sal_True );
341
342 meFUnit = GetModuleFieldUnit();
343 meUnit = m_aSwPagePgSizeControl.GetCoreMetric();
344
345 // 'pull' for page style's attribute values
346 mpBindings->Update( SID_ATTR_PAGE_LRSPACE );
347 mpBindings->Update( SID_ATTR_PAGE_ULSPACE );
348 mpBindings->Update( SID_ATTR_PAGE );
349 mpBindings->Update( SID_ATTR_PAGE_SIZE );
350 }
351
352
CreatePageOrientationControl(::svx::sidebar::PopupContainer * pParent)353 ::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageOrientationControl( ::svx::sidebar::PopupContainer* pParent )
354 {
355 return new PageOrientationControl( pParent, *this , mpPageItem->IsLandscape() );
356 }
357
358
IMPL_LINK(PagePropertyPanel,ClickOrientationHdl,ToolBox *,pToolBox)359 IMPL_LINK( PagePropertyPanel, ClickOrientationHdl, ToolBox*, pToolBox )
360 {
361 maOrientationPopup.Show( *pToolBox );
362
363 return 0L;
364 }
365
366
ExecuteOrientationChange(const sal_Bool bLandscape)367 void PagePropertyPanel::ExecuteOrientationChange( const sal_Bool bLandscape )
368 {
369 StartUndo();
370
371 {
372 // set new page orientation
373 mpPageItem->SetLandscape( bLandscape );
374
375 // swap the width and height of the page size
376 mpPageSizeItem->SetSize( Size( mpPageSizeItem->GetSize().Height(), mpPageSizeItem->GetSize().Width() ) );
377
378 // apply changed attributes
379 GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_SIZE, SFX_CALLMODE_RECORD, mpPageSizeItem.get(), mpPageItem.get(), 0L );
380 }
381
382 // check, if margin values still fit to the changed page size.
383 // if not, adjust margin values
384 {
385 const long nML = mpPageLRMarginItem->GetLeft();
386 const long nMR = mpPageLRMarginItem->GetRight();
387 const long nTmpPW = nML + nMR + MINBODY;
388
389 const long nPW = mpPageSizeItem->GetSize().Width();
390
391 if ( nTmpPW > nPW )
392 {
393 if ( nML <= nMR )
394 {
395 ExecuteMarginLRChange( mpPageLRMarginItem->GetLeft(), nMR - (nTmpPW - nPW ) );
396 }
397 else
398 {
399 ExecuteMarginLRChange( nML - (nTmpPW - nPW ), mpPageLRMarginItem->GetRight() );
400 }
401 }
402
403 const long nMT = mpPageULMarginItem->GetUpper();
404 const long nMB = mpPageULMarginItem->GetLower();
405 const long nTmpPH = nMT + nMB + MINBODY;
406
407 const long nPH = mpPageSizeItem->GetSize().Height();
408
409 if ( nTmpPH > nPH )
410 {
411 if ( nMT <= nMB )
412 {
413 ExecuteMarginULChange( mpPageULMarginItem->GetUpper(), nMB - ( nTmpPH - nPH ) );
414 }
415 else
416 {
417 ExecuteMarginULChange( nMT - ( nTmpPH - nPH ), mpPageULMarginItem->GetLower() );
418 }
419 }
420 }
421
422 EndUndo();
423 }
424
425
ClosePageOrientationPopup()426 void PagePropertyPanel::ClosePageOrientationPopup()
427 {
428 maOrientationPopup.Hide();
429 }
430
431
432
433
CreatePageMarginControl(::svx::sidebar::PopupContainer * pParent)434 ::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageMarginControl( ::svx::sidebar::PopupContainer* pParent )
435 {
436 return new PageMarginControl(
437 pParent,
438 *this,
439 *mpPageLRMarginItem.get(),
440 *mpPageULMarginItem.get(),
441 mpPageItem->GetPageUsage() == SVX_PAGE_MIRROR,
442 mpPageSizeItem->GetSize(),
443 mpPageItem->IsLandscape(),
444 meFUnit,
445 meUnit );
446 }
447
448
ExecuteMarginLRChange(const long nPageLeftMargin,const long nPageRightMargin)449 void PagePropertyPanel::ExecuteMarginLRChange(
450 const long nPageLeftMargin,
451 const long nPageRightMargin )
452 {
453 mpPageLRMarginItem->SetLeft( nPageLeftMargin );
454 mpPageLRMarginItem->SetRight( nPageRightMargin );
455 GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_LRSPACE, SFX_CALLMODE_RECORD, mpPageLRMarginItem.get(), 0L );
456 }
457
ExecuteMarginULChange(const long nPageTopMargin,const long nPageBottomMargin)458 void PagePropertyPanel::ExecuteMarginULChange(
459 const long nPageTopMargin,
460 const long nPageBottomMargin )
461 {
462 mpPageULMarginItem->SetUpper( nPageTopMargin );
463 mpPageULMarginItem->SetLower( nPageBottomMargin );
464 GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_ULSPACE, SFX_CALLMODE_RECORD, mpPageULMarginItem.get(), 0L );
465 }
466
467
ExecutePageLayoutChange(const bool bMirrored)468 void PagePropertyPanel::ExecutePageLayoutChange( const bool bMirrored )
469 {
470 mpPageItem->SetPageUsage( bMirrored ? SVX_PAGE_MIRROR : SVX_PAGE_ALL );
471 GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE, SFX_CALLMODE_RECORD, mpPageItem.get(), 0L );
472 }
473
474
IMPL_LINK(PagePropertyPanel,ClickMarginHdl,ToolBox *,pToolBox)475 IMPL_LINK( PagePropertyPanel, ClickMarginHdl, ToolBox*, pToolBox )
476 {
477 maMarginPopup.Show( *pToolBox );
478
479 return 0L;
480 }
481
482
ClosePageMarginPopup()483 void PagePropertyPanel::ClosePageMarginPopup()
484 {
485 maMarginPopup.Hide();
486 }
487
488
489
490
CreatePageSizeControl(::svx::sidebar::PopupContainer * pParent)491 ::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageSizeControl( ::svx::sidebar::PopupContainer* pParent )
492 {
493 return new PageSizeControl(
494 pParent,
495 *this,
496 mePaper,
497 mpPageItem->IsLandscape(),
498 meFUnit );
499 }
500
501
ExecuteSizeChange(const Paper ePaper)502 void PagePropertyPanel::ExecuteSizeChange( const Paper ePaper )
503 {
504 Size aPageSize = SvxPaperInfo::GetPaperSize( ePaper, (MapUnit)(meUnit) );
505 if ( mpPageItem->IsLandscape() )
506 {
507 Swap( aPageSize );
508 }
509 mpPageSizeItem->SetSize( aPageSize );
510
511 mpBindings->GetDispatcher()->Execute(SID_ATTR_PAGE_SIZE, SFX_CALLMODE_RECORD, mpPageSizeItem.get(), 0L );
512 }
513
514
IMPL_LINK(PagePropertyPanel,ClickSizeHdl,ToolBox *,pToolBox)515 IMPL_LINK( PagePropertyPanel, ClickSizeHdl, ToolBox*, pToolBox )
516 {
517 maSizePopup.Show( *pToolBox );
518
519 return 0L;
520 }
521
522
ClosePageSizePopup()523 void PagePropertyPanel::ClosePageSizePopup()
524 {
525 maSizePopup.Hide();
526 }
527
528
529
530
CreatePageColumnControl(::svx::sidebar::PopupContainer * pParent)531 ::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageColumnControl( ::svx::sidebar::PopupContainer* pParent )
532 {
533 return new PageColumnControl(
534 pParent,
535 *this,
536 mpPageColumnTypeItem->GetValue(),
537 mpPageItem->IsLandscape() );
538 }
539
540
ExecuteColumnChange(const sal_uInt16 nColumnType)541 void PagePropertyPanel::ExecuteColumnChange( const sal_uInt16 nColumnType )
542 {
543 mpPageColumnTypeItem->SetValue( nColumnType );
544 mpBindings->GetDispatcher()->Execute(SID_ATTR_PAGE_COLUMN, SFX_CALLMODE_RECORD, mpPageColumnTypeItem.get(), 0L );
545 }
546
547
IMPL_LINK(PagePropertyPanel,ClickColumnHdl,ToolBox *,pToolBox)548 IMPL_LINK( PagePropertyPanel, ClickColumnHdl, ToolBox*, pToolBox )
549 {
550 maColumnPopup.Show( *pToolBox );
551
552 return 0L;
553 }
554
555
ClosePageColumnPopup()556 void PagePropertyPanel::ClosePageColumnPopup()
557 {
558 maColumnPopup.Hide();
559 }
560
561
562
563
NotifyItemUpdate(const sal_uInt16 nSId,const SfxItemState eState,const SfxPoolItem * pState,const bool bIsEnabled)564 void PagePropertyPanel::NotifyItemUpdate(
565 const sal_uInt16 nSId,
566 const SfxItemState eState,
567 const SfxPoolItem* pState,
568 const bool bIsEnabled)
569 {
570 (void)bIsEnabled;
571
572 switch( nSId )
573 {
574 case SID_ATTR_PAGE_COLUMN:
575 {
576 if ( eState >= SFX_ITEM_AVAILABLE &&
577 pState && pState->ISA(SfxInt16Item) )
578 {
579 mpPageColumnTypeItem.reset( static_cast<SfxInt16Item*>(pState->Clone()) );
580 ChangeColumnImage( mpPageColumnTypeItem->GetValue() );
581 }
582 }
583 break;
584 case SID_ATTR_PAGE_LRSPACE:
585 if ( eState >= SFX_ITEM_AVAILABLE &&
586 pState && pState->ISA(SvxLongLRSpaceItem) )
587 {
588 mpPageLRMarginItem.reset( static_cast<SvxLongLRSpaceItem*>(pState->Clone()) );
589 ChangeMarginImage();
590 }
591 break;
592
593 case SID_ATTR_PAGE_ULSPACE:
594 if ( eState >= SFX_ITEM_AVAILABLE &&
595 pState && pState->ISA(SvxLongULSpaceItem) )
596 {
597 mpPageULMarginItem.reset( static_cast<SvxLongULSpaceItem*>(pState->Clone()) );
598 ChangeMarginImage();
599 }
600 break;
601
602 case SID_ATTR_PAGE:
603 if ( eState >= SFX_ITEM_AVAILABLE &&
604 pState && pState->ISA(SvxPageItem) )
605 {
606 mpPageItem.reset( static_cast<SvxPageItem*>(pState->Clone()) );
607 if ( mpPageItem->IsLandscape() )
608 {
609 mpToolBoxOrientation->SetItemImage(TBI_ORIENTATION, mImgLandscape);
610 }
611 else
612 {
613 mpToolBoxOrientation->SetItemImage(TBI_ORIENTATION, mImgPortrait);
614 }
615 ChangeMarginImage();
616 ChangeSizeImage();
617 ChangeColumnImage( mpPageColumnTypeItem->GetValue() );
618 }
619 break;
620
621 case SID_ATTR_PAGE_SIZE:
622 if ( mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify )
623 {
624 mpBindings->Invalidate( SID_ATTR_PAGE, sal_True, sal_False );
625 }
626 if ( eState >= SFX_ITEM_AVAILABLE &&
627 pState && pState->ISA(SvxSizeItem) )
628 {
629 mpPageSizeItem.reset( static_cast<SvxSizeItem*>(pState->Clone()) );
630 ChangeSizeImage();
631 }
632 break;
633 case SID_ATTR_METRIC:
634 MetricState( eState, pState );
635 break;
636 }
637 }
638
639
MetricState(SfxItemState eState,const SfxPoolItem * pState)640 void PagePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState )
641 {
642 meFUnit = FUNIT_NONE;
643 if ( pState && eState >= SFX_ITEM_DEFAULT )
644 {
645 meFUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue();
646 }
647 else
648 {
649 SfxViewFrame* pFrame = SfxViewFrame::Current();
650 SfxObjectShell* pSh = NULL;
651 if ( pFrame )
652 pSh = pFrame->GetObjectShell();
653 if ( pSh )
654 {
655 SfxModule* pModule = pSh->GetModule();
656 if ( pModule )
657 {
658 const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC );
659 if ( pItem )
660 meFUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue();
661 }
662 else
663 {
664 DBG_ERRORFILE( "<PagePropertyPanel::MetricState(..)>: no module found" );
665 }
666 }
667 }
668 }
669
670
671
672
ChangeMarginImage()673 void PagePropertyPanel::ChangeMarginImage()
674 {
675 if ( mpPageLRMarginItem.get() == 0 ||
676 mpPageULMarginItem.get() == 0 ||
677 mpPageItem.get() == 0 )
678 {
679 return;
680 }
681
682 const long cTolerance = 5;
683
684 if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_NARROW_VALUE) <= cTolerance &&
685 abs(mpPageLRMarginItem->GetRight() - SWPAGE_NARROW_VALUE) <= cTolerance &&
686 abs(mpPageULMarginItem->GetUpper() - SWPAGE_NARROW_VALUE) <= cTolerance &&
687 abs(mpPageULMarginItem->GetLower() - SWPAGE_NARROW_VALUE) <= cTolerance &&
688 mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR )
689 mpToolBoxMargin->SetItemImage( TBI_MARGIN, mpPageItem->IsLandscape() ? mImgNarrow_L : mImgNarrow );
690
691 else if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_NORMAL_VALUE) <= cTolerance &&
692 abs(mpPageLRMarginItem->GetRight() - SWPAGE_NORMAL_VALUE) <= cTolerance &&
693 abs(mpPageULMarginItem->GetUpper() - SWPAGE_NORMAL_VALUE) <= cTolerance &&
694 abs(mpPageULMarginItem->GetLower() - SWPAGE_NORMAL_VALUE) <= cTolerance &&
695 mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR )
696 mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgNormal_L : mImgNormal );
697
698 else if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_WIDE_VALUE2) <= cTolerance &&
699 abs(mpPageLRMarginItem->GetRight() - SWPAGE_WIDE_VALUE2) <= cTolerance &&
700 abs(mpPageULMarginItem->GetUpper() - SWPAGE_WIDE_VALUE1) <= cTolerance &&
701 abs(mpPageULMarginItem->GetLower() - SWPAGE_WIDE_VALUE1) <= cTolerance &&
702 mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR )
703 mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgWide_L : mImgWide );
704
705 else if( abs(mpPageLRMarginItem->GetLeft() - SWPAGE_WIDE_VALUE3) <= cTolerance &&
706 abs(mpPageLRMarginItem->GetRight() - SWPAGE_WIDE_VALUE1) <= cTolerance &&
707 abs(mpPageULMarginItem->GetUpper() - SWPAGE_WIDE_VALUE1) <= cTolerance &&
708 abs(mpPageULMarginItem->GetLower() - SWPAGE_WIDE_VALUE1) <= cTolerance &&
709 mpPageItem->GetPageUsage() == SVX_PAGE_MIRROR )
710 mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgMirrored_L : mImgMirrored );
711
712 else
713 mpToolBoxMargin->SetItemImage(TBI_MARGIN, mpPageItem->IsLandscape() ? mImgMarginCustom_L : mImgMarginCustom );
714 }
715
716
ChangeSizeImage()717 void PagePropertyPanel::ChangeSizeImage()
718 {
719 if ( mpPageSizeItem.get() == 0 ||
720 mpPageItem.get() == 0 )
721 {
722 return;
723 }
724
725 Size aTmpPaperSize = mpPageSizeItem->GetSize();
726 if ( mpPageItem->IsLandscape() )
727 {
728 Swap( aTmpPaperSize ); // Swap(..) defined in editeng/paperinf.hxx
729 }
730
731 mePaper = SvxPaperInfo::GetSvxPaper( aTmpPaperSize, static_cast<MapUnit>(meUnit), sal_True );
732
733 sal_uInt16 nImageIdx = 0;
734 switch ( mePaper )
735 {
736 case PAPER_A3:
737 nImageIdx = 1;
738 break;
739 case PAPER_A4:
740 nImageIdx = 2;
741 break;
742 case PAPER_A5:
743 nImageIdx = 3;
744 break;
745 case PAPER_B4_ISO:
746 nImageIdx = 4;
747 break;
748 case PAPER_B5_ISO:
749 nImageIdx = 5;
750 break;
751 case PAPER_ENV_C5:
752 nImageIdx = 6;
753 break;
754 case PAPER_LETTER:
755 nImageIdx = 7;
756 break;
757 case PAPER_LEGAL:
758 nImageIdx = 8;
759 break;
760 default:
761 nImageIdx = 0;
762 mePaper = PAPER_USER;
763 break;
764 }
765
766 if ( nImageIdx == 0 )
767 {
768 mpToolBoxSize->SetItemImage( TBI_SIZE,
769 ( mpPageItem->IsLandscape() ? mImgSizeNone_L : mImgSizeNone ) );
770 }
771 else
772 {
773 mpToolBoxSize->SetItemImage( TBI_SIZE,
774 ( mpPageItem->IsLandscape() ? maImgSize_L[nImageIdx-1] : maImgSize[nImageIdx-1] ) );
775 }
776 }
777
778
ChangeColumnImage(const sal_uInt16 nColumnType)779 void PagePropertyPanel::ChangeColumnImage( const sal_uInt16 nColumnType )
780 {
781 if ( mpPageItem.get() == 0 )
782 {
783 return;
784 }
785
786 if ( !mpPageItem->IsLandscape() )
787 {
788 switch( nColumnType )
789 {
790 case 1:
791 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn1);
792 break;
793 case 2:
794 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn2);
795 break;
796 case 3:
797 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn3);
798 break;
799 case 4:
800 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgLeft);
801 break;
802 case 5:
803 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgRight);
804 break;
805 default:
806 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumnNone);
807 }
808 }
809 else
810 {
811 switch( nColumnType )
812 {
813 case 1:
814 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn1_L);
815 break;
816 case 2:
817 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn2_L);
818 break;
819 case 3:
820 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumn3_L);
821 break;
822 case 4:
823 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgLeft_L);
824 break;
825 case 5:
826 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgRight_L);
827 break;
828 default:
829 mpToolBoxColumn->SetItemImage(TBI_COLUMN, mImgColumnNone_L);
830 }
831 }
832 }
833
834
StartUndo()835 void PagePropertyPanel::StartUndo()
836 {
837 if ( mxUndoManager.is() )
838 {
839 mxUndoManager->enterUndoContext( A2S("") );
840 }
841 }
842
843
EndUndo()844 void PagePropertyPanel::EndUndo()
845 {
846 if ( mxUndoManager.is() )
847 {
848 mxUndoManager->leaveUndoContext();
849 }
850 }
851
852
853
854
Resize(void)855 void PagePropertyPanel::Resize (void)
856 {
857 maLayouter.Layout();
858 }
859
860
861
862
863
864 } } // end of namespace ::sw::sidebar
865
866 /* vim: set noet sw=4 ts=4: */
867