1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20 #include <memory>
21 #include <sal/config.h>
22
23 #include <cstdlib>
24
25 #include "PageMarginControl.hxx"
26 #include <strings.hrc>
27
28 #include <editeng/sizeitem.hxx>
29 #include <sfx2/app.hxx>
30 #include <sfx2/dispatch.hxx>
31 #include <sfx2/module.hxx>
32 #include <sfx2/viewfrm.hxx>
33 #include <svx/svxids.hrc>
34 #include <svx/pageitem.hxx>
35 #include <svx/rulritem.hxx>
36 #include <svl/itempool.hxx>
37 #include <svl/intitem.hxx>
38 #include <svtools/unitconv.hxx>
39 #include <unotools/viewoptions.hxx>
40
41 #include <swtypes.hxx>
42 #include <cmdid.h>
43
44 #include <com/sun/star/document/XUndoManagerSupplier.hpp>
45 #include <com/sun/star/beans/NamedValue.hpp>
46 #include <com/sun/star/frame/XFrame.hpp>
47
48 #include <vcl/settings.hxx>
49
50 #define SWPAGE_LEFT_GVALUE "Sw_Page_Left"
51 #define SWPAGE_RIGHT_GVALUE "Sw_Page_Right"
52 #define SWPAGE_TOP_GVALUE "Sw_Page_Top"
53 #define SWPAGE_DOWN_GVALUE "Sw_Page_Down"
54 #define SWPAGE_MIRROR_GVALUE "Sw_Page_Mirrored"
55
56 namespace
57 {
lcl_GetFieldUnit()58 FieldUnit lcl_GetFieldUnit()
59 {
60 FieldUnit eUnit = FieldUnit::INCH;
61 const SfxPoolItem* pItem = nullptr;
62 SfxItemState eState = SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState( SID_ATTR_METRIC, pItem );
63 if ( pItem && eState >= SfxItemState::DEFAULT )
64 {
65 eUnit = static_cast<FieldUnit>(static_cast<const SfxUInt16Item*>( pItem )->GetValue());
66 }
67 else
68 {
69 return SfxModule::GetCurrentFieldUnit();
70 }
71
72 return eUnit;
73 }
74
lcl_GetUnit()75 MapUnit lcl_GetUnit()
76 {
77 SfxItemPool &rPool = SfxGetpApp()->GetPool();
78 sal_uInt16 nWhich = rPool.GetWhich( SID_ATTR_PAGE_SIZE );
79 return rPool.GetMetric( nWhich );
80 }
81
getUndoManager(const css::uno::Reference<css::frame::XFrame> & rxFrame)82 css::uno::Reference< css::document::XUndoManager > getUndoManager( const css::uno::Reference< css::frame::XFrame >& rxFrame )
83 {
84 const css::uno::Reference< css::frame::XController >& xController = rxFrame->getController();
85 if ( xController.is() )
86 {
87 const css::uno::Reference< css::frame::XModel >& xModel = xController->getModel();
88 if ( xModel.is() )
89 {
90 const css::uno::Reference< css::document::XUndoManagerSupplier > xSuppUndo( xModel, css::uno::UNO_QUERY_THROW );
91 return css::uno::Reference< css::document::XUndoManager >( xSuppUndo->getUndoManager(), css::uno::UNO_SET_THROW );
92 }
93 }
94
95 return css::uno::Reference< css::document::XUndoManager > ();
96 }
97 }
98
99 namespace sw { namespace sidebar {
100
PageMarginControl(sal_uInt16 nId,vcl::Window * pParent)101 PageMarginControl::PageMarginControl( sal_uInt16 nId, vcl::Window* pParent )
102 : SfxPopupWindow( nId, pParent, "PageMarginControl", "modules/swriter/ui/pagemargincontrol.ui" )
103 , m_nPageLeftMargin(0)
104 , m_nPageRightMargin(0)
105 , m_nPageTopMargin(0)
106 , m_nPageBottomMargin(0)
107 , m_bMirrored(false)
108 , m_eUnit( lcl_GetUnit() )
109 , m_bUserCustomValuesAvailable( false )
110 , m_nUserCustomPageLeftMargin( 0 )
111 , m_nUserCustomPageRightMargin( 0 )
112 , m_nUserCustomPageTopMargin( 0 )
113 , m_nUserCustomPageBottomMargin( 0 )
114 , m_bUserCustomMirrored( false )
115 , m_bCustomValuesUsed( false )
116 {
117 bool bLandscape = false;
118 const SfxPoolItem* pItem;
119 const SvxSizeItem* pSize = nullptr;
120 const SvxLongLRSpaceItem* pLRItem = nullptr;
121 const SvxLongULSpaceItem* pULItem = nullptr;
122 if ( SfxViewFrame::Current() )
123 {
124 SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState( SID_ATTR_PAGE, pItem );
125 bLandscape = static_cast<const SvxPageItem*>( pItem )->IsLandscape();
126 m_bMirrored = static_cast<const SvxPageItem*>( pItem )->GetPageUsage() == SvxPageUsage::Mirror;
127 SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState( SID_ATTR_PAGE_SIZE, pItem );
128 pSize = static_cast<const SvxSizeItem*>( pItem );
129 SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState( SID_ATTR_PAGE_LRSPACE, pItem );
130 pLRItem = static_cast<const SvxLongLRSpaceItem*>( pItem );
131 SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState( SID_ATTR_PAGE_ULSPACE, pItem );
132 pULItem = static_cast<const SvxLongULSpaceItem*>( pItem );
133 }
134
135 if ( pLRItem )
136 {
137 m_nPageLeftMargin = pLRItem->GetLeft();
138 m_nPageRightMargin = pLRItem->GetRight();
139 }
140
141 if ( pULItem )
142 {
143 m_nPageTopMargin = pULItem->GetUpper();
144 m_nPageBottomMargin = pULItem->GetLower();
145 }
146
147 if ( bLandscape )
148 {
149 get( m_pNarrow, "narrowL" );
150 get( m_pNormal, "normalL" );
151 get( m_pWide, "wideL" );
152 get( m_pMirrored, "mirroredL" );
153 get( m_pLast, "lastL" );
154 }
155 else
156 {
157 get( m_pNarrow, "narrow" );
158 get( m_pNormal, "normal" );
159 get( m_pWide, "wide" );
160 get( m_pMirrored, "mirrored" );
161 get( m_pLast, "last" );
162 }
163
164 m_pNarrow->Show();
165 m_pNormal->Show();
166 m_pWide->Show();
167 m_pMirrored->Show();
168 m_pLast->Show();
169
170 m_pNarrow->SetClickHdl( LINK( this, PageMarginControl, SelectMarginHdl ) );
171 m_pNormal->SetClickHdl( LINK( this, PageMarginControl, SelectMarginHdl ) );
172 m_pWide->SetClickHdl( LINK( this, PageMarginControl, SelectMarginHdl ) );
173 m_pMirrored->SetClickHdl( LINK( this, PageMarginControl, SelectMarginHdl ) );
174 m_pLast->SetClickHdl( LINK( this, PageMarginControl, SelectMarginHdl ) );
175
176 get( m_pContainer, "container" );
177 m_pWidthHeightField = VclPtr<MetricField>::Create( m_pContainer.get(), WinBits(0) );
178 m_pWidthHeightField->Hide();
179 m_pWidthHeightField->SetUnit( FieldUnit::CM );
180 m_pWidthHeightField->SetMax( 9999 );
181 m_pWidthHeightField->SetDecimalDigits( 2 );
182 m_pWidthHeightField->SetSpinSize( 10 );
183 m_pWidthHeightField->SetLast( 9999 );
184 SetFieldUnit( *m_pWidthHeightField.get(), lcl_GetFieldUnit() );
185
186 m_bUserCustomValuesAvailable = GetUserCustomValues();
187
188 FillHelpText( m_bUserCustomValuesAvailable );
189
190 get( m_pLeftMarginEdit, "left" );
191 get( m_pRightMarginEdit, "right" );
192 get( m_pTopMarginEdit, "top" );
193 get( m_pBottomMarginEdit, "bottom" );
194
195 Link<Edit&,void> aLinkLR = LINK( this, PageMarginControl, ModifyLRMarginHdl );
196 m_pLeftMarginEdit->SetModifyHdl( aLinkLR );
197 SetMetricValue( *m_pLeftMarginEdit.get(), m_nPageLeftMargin, m_eUnit );
198 SetFieldUnit( *m_pLeftMarginEdit.get(), lcl_GetFieldUnit() );
199
200 m_pRightMarginEdit->SetModifyHdl( aLinkLR );
201 SetMetricValue( *m_pRightMarginEdit.get(), m_nPageRightMargin, m_eUnit );
202 SetFieldUnit( *m_pRightMarginEdit.get(), lcl_GetFieldUnit() );
203
204 Link<Edit&,void> aLinkUL = LINK( this, PageMarginControl, ModifyULMarginHdl );
205 m_pTopMarginEdit->SetModifyHdl( aLinkUL );
206 SetMetricValue( *m_pTopMarginEdit.get(), m_nPageTopMargin, m_eUnit );
207 SetFieldUnit( *m_pTopMarginEdit.get(), lcl_GetFieldUnit() );
208
209 m_pBottomMarginEdit->SetModifyHdl( aLinkUL );
210 SetMetricValue( *m_pBottomMarginEdit.get(), m_nPageBottomMargin, m_eUnit );
211 SetFieldUnit( *m_pBottomMarginEdit.get(), lcl_GetFieldUnit() );
212
213 m_aPageSize = pSize->GetSize();
214 SetMetricFieldMaxValues( m_aPageSize );
215
216 get( m_pLeft, "leftLabel" );
217 get( m_pRight, "rightLabel" );
218 get( m_pInner, "innerLabel" );
219 get( m_pOuter, "outerLabel" );
220
221 if ( m_bMirrored )
222 {
223 m_pLeft->Hide();
224 m_pRight->Hide();
225 m_pInner->Show();
226 m_pOuter->Show();
227 }
228 else
229 {
230 m_pLeft->Show();
231 m_pRight->Show();
232 m_pInner->Hide();
233 m_pOuter->Hide();
234 }
235 }
236
~PageMarginControl()237 PageMarginControl::~PageMarginControl()
238 {
239 disposeOnce();
240 }
241
dispose()242 void PageMarginControl::dispose()
243 {
244 StoreUserCustomValues();
245
246 m_pLeft.disposeAndClear();
247 m_pRight.disposeAndClear();
248 m_pInner.disposeAndClear();
249 m_pOuter.disposeAndClear();
250 m_pLeftMarginEdit.disposeAndClear();
251 m_pRightMarginEdit.disposeAndClear();
252 m_pTopMarginEdit.disposeAndClear();
253 m_pBottomMarginEdit.disposeAndClear();
254 m_pNarrow.disposeAndClear();
255 m_pNormal.disposeAndClear();
256 m_pWide.disposeAndClear();
257 m_pMirrored.disposeAndClear();
258 m_pLast.disposeAndClear();
259
260 m_pWidthHeightField.disposeAndClear();
261 m_pContainer.disposeAndClear();
262
263 SfxPopupWindow::dispose();
264 }
265
SetMetricFieldMaxValues(const Size & rPageSize)266 void PageMarginControl::SetMetricFieldMaxValues( const Size& rPageSize )
267 {
268 const long nML = m_pLeftMarginEdit->Denormalize( m_pLeftMarginEdit->GetValue( FieldUnit::TWIP ) );
269 const long nMR = m_pRightMarginEdit->Denormalize( m_pRightMarginEdit->GetValue( FieldUnit::TWIP ) );
270 const long nMT = m_pTopMarginEdit->Denormalize( m_pTopMarginEdit->GetValue( FieldUnit::TWIP ) );
271 const long nMB = m_pBottomMarginEdit->Denormalize( m_pBottomMarginEdit->GetValue( FieldUnit::TWIP ) );
272
273 const long nPH = LogicToLogic( rPageSize.Height(), m_eUnit, MapUnit::MapTwip );
274 const long nPW = LogicToLogic( rPageSize.Width(), m_eUnit, MapUnit::MapTwip );
275
276 // Left
277 long nMax = nPW - nMR - MINBODY;
278 m_pLeftMarginEdit->SetMax( m_pLeftMarginEdit->Normalize( nMax ), FieldUnit::TWIP );
279
280 // Right
281 nMax = nPW - nML - MINBODY;
282 m_pRightMarginEdit->SetMax( m_pRightMarginEdit->Normalize( nMax ), FieldUnit::TWIP );
283
284 //Top
285 nMax = nPH - nMB - MINBODY;
286 m_pTopMarginEdit->SetMax( m_pTopMarginEdit->Normalize( nMax ), FieldUnit::TWIP );
287
288 //Bottom
289 nMax = nPH - nMT - MINBODY;
290 m_pBottomMarginEdit->SetMax( m_pTopMarginEdit->Normalize( nMax ), FieldUnit::TWIP );
291 }
292
FillHelpText(const bool bUserCustomValuesAvailable)293 void PageMarginControl::FillHelpText( const bool bUserCustomValuesAvailable )
294 {
295 const OUString aLeft = SwResId( STR_MARGIN_TOOLTIP_LEFT );
296 const OUString aRight = SwResId( STR_MARGIN_TOOLTIP_RIGHT );
297 const OUString aTop = SwResId( STR_MARGIN_TOOLTIP_TOP );
298 const OUString aBottom = SwResId( STR_MARGIN_TOOLTIP_BOT );
299
300 SetMetricValue( *m_pWidthHeightField.get(), SWPAGE_NARROW_VALUE, m_eUnit );
301 const OUString aNarrowValText = m_pWidthHeightField->GetText();
302 OUString aHelpText = aLeft +
303 aNarrowValText +
304 aRight +
305 aNarrowValText +
306 aTop +
307 aNarrowValText +
308 aBottom +
309 aNarrowValText;
310 m_pNarrow->SetQuickHelpText( aHelpText );
311
312 SetMetricValue( *m_pWidthHeightField.get(), SWPAGE_NORMAL_VALUE, m_eUnit );
313 const OUString aNormalValText = m_pWidthHeightField->GetText();
314 aHelpText = aLeft +
315 aNormalValText +
316 aRight +
317 aNormalValText +
318 aTop +
319 aNormalValText +
320 aBottom +
321 aNormalValText;
322 m_pNormal->SetQuickHelpText( aHelpText );
323
324 SetMetricValue( *m_pWidthHeightField.get(), SWPAGE_WIDE_VALUE1, m_eUnit );
325 const OUString aWide1ValText = m_pWidthHeightField->GetText();
326 SetMetricValue( *m_pWidthHeightField.get(), SWPAGE_WIDE_VALUE2, m_eUnit );
327 const OUString aWide2ValText = m_pWidthHeightField->GetText();
328 aHelpText = aLeft +
329 aWide2ValText +
330 aRight +
331 aWide2ValText +
332 aTop +
333 aWide1ValText +
334 aBottom +
335 aWide1ValText;
336 m_pWide->SetQuickHelpText( aHelpText );
337
338 const OUString aInner = SwResId( STR_MARGIN_TOOLTIP_INNER );
339 const OUString aOuter = SwResId( STR_MARGIN_TOOLTIP_OUTER );
340
341 SetMetricValue( *m_pWidthHeightField.get(), SWPAGE_WIDE_VALUE3, m_eUnit );
342 const OUString aWide3ValText = m_pWidthHeightField->GetText();
343 aHelpText = aInner +
344 aWide3ValText +
345 aOuter +
346 aWide1ValText +
347 aTop +
348 aWide1ValText +
349 aBottom +
350 aWide1ValText;
351 m_pMirrored->SetQuickHelpText( aHelpText );
352
353 if ( bUserCustomValuesAvailable )
354 {
355 aHelpText = m_bUserCustomMirrored ? aInner : aLeft;
356 SetMetricValue( *m_pWidthHeightField.get(), m_nUserCustomPageLeftMargin, m_eUnit );
357 aHelpText += m_pWidthHeightField->GetText();
358 aHelpText += m_bUserCustomMirrored ? aOuter : aRight;
359 SetMetricValue( *m_pWidthHeightField.get(), m_nUserCustomPageRightMargin, m_eUnit );
360 aHelpText += m_pWidthHeightField->GetText();
361 aHelpText += aTop;
362 SetMetricValue( *m_pWidthHeightField.get(), m_nUserCustomPageTopMargin, m_eUnit );
363 aHelpText += m_pWidthHeightField->GetText();
364 aHelpText += aBottom;
365 SetMetricValue( *m_pWidthHeightField.get(), m_nUserCustomPageBottomMargin, m_eUnit );
366 aHelpText += m_pWidthHeightField->GetText();
367 }
368 else
369 {
370 aHelpText.clear();
371 }
372 m_pLast->SetQuickHelpText( aHelpText );
373 }
374
IMPL_LINK(PageMarginControl,SelectMarginHdl,Button *,pControl,void)375 IMPL_LINK( PageMarginControl, SelectMarginHdl, Button*, pControl, void )
376 {
377 bool bMirrored = false;
378 bool bApplyNewPageMargins = true;
379 if( pControl == m_pNarrow.get() )
380 {
381 m_nPageLeftMargin = SWPAGE_NARROW_VALUE;
382 m_nPageRightMargin = SWPAGE_NARROW_VALUE;
383 m_nPageTopMargin = SWPAGE_NARROW_VALUE;
384 m_nPageBottomMargin = SWPAGE_NARROW_VALUE;
385 bMirrored = false;
386 }
387 if( pControl == m_pNormal.get() )
388 {
389 m_nPageLeftMargin = SWPAGE_NORMAL_VALUE;
390 m_nPageRightMargin = SWPAGE_NORMAL_VALUE;
391 m_nPageTopMargin = SWPAGE_NORMAL_VALUE;
392 m_nPageBottomMargin = SWPAGE_NORMAL_VALUE;
393 bMirrored = false;
394 }
395 if( pControl == m_pWide.get() )
396 {
397 m_nPageLeftMargin = SWPAGE_WIDE_VALUE2;
398 m_nPageRightMargin = SWPAGE_WIDE_VALUE2;
399 m_nPageTopMargin = SWPAGE_WIDE_VALUE1;
400 m_nPageBottomMargin = SWPAGE_WIDE_VALUE1;
401 bMirrored = false;
402 }
403 if( pControl == m_pMirrored.get() )
404 {
405 m_nPageLeftMargin = SWPAGE_WIDE_VALUE3;
406 m_nPageRightMargin = SWPAGE_WIDE_VALUE1;
407 m_nPageTopMargin = SWPAGE_WIDE_VALUE1;
408 m_nPageBottomMargin = SWPAGE_WIDE_VALUE1;
409 bMirrored = true;
410 }
411 if( pControl == m_pLast.get() )
412 {
413 if ( m_bUserCustomValuesAvailable )
414 {
415 m_nPageLeftMargin = m_nUserCustomPageLeftMargin;
416 m_nPageRightMargin = m_nUserCustomPageRightMargin;
417 m_nPageTopMargin = m_nUserCustomPageTopMargin;
418 m_nPageBottomMargin = m_nUserCustomPageBottomMargin;
419 bMirrored = m_bUserCustomMirrored;
420 }
421 else
422 {
423 bApplyNewPageMargins = false;
424 }
425 }
426
427 if ( bApplyNewPageMargins )
428 {
429 const css::uno::Reference< css::document::XUndoManager > xUndoManager( getUndoManager( SfxViewFrame::Current()->GetFrame().GetFrameInterface() ) );
430 if ( xUndoManager.is() )
431 xUndoManager->enterUndoContext( "" );
432
433 ExecuteMarginLRChange( m_nPageLeftMargin, m_nPageRightMargin );
434 ExecuteMarginULChange( m_nPageTopMargin, m_nPageBottomMargin );
435 if ( m_bMirrored != bMirrored )
436 {
437 m_bMirrored = bMirrored;
438 ExecutePageLayoutChange( m_bMirrored );
439 }
440
441 if ( xUndoManager.is() )
442 xUndoManager->leaveUndoContext();
443
444 m_bCustomValuesUsed = false;
445 EndPopupMode();
446 }
447 }
448
ExecuteMarginLRChange(const long nPageLeftMargin,const long nPageRightMargin)449 void PageMarginControl::ExecuteMarginLRChange(
450 const long nPageLeftMargin,
451 const long nPageRightMargin )
452 {
453 if ( SfxViewFrame::Current() )
454 {
455 std::unique_ptr<SvxLongLRSpaceItem> pPageLRMarginItem( new SvxLongLRSpaceItem( 0, 0, SID_ATTR_PAGE_LRSPACE ) );
456 pPageLRMarginItem->SetLeft( nPageLeftMargin );
457 pPageLRMarginItem->SetRight( nPageRightMargin );
458 SfxViewFrame::Current()->GetBindings().GetDispatcher()->ExecuteList( SID_ATTR_PAGE_LRSPACE,
459 SfxCallMode::RECORD, { pPageLRMarginItem.get() } );
460 pPageLRMarginItem.reset();
461 }
462 }
463
ExecuteMarginULChange(const long nPageTopMargin,const long nPageBottomMargin)464 void PageMarginControl::ExecuteMarginULChange(
465 const long nPageTopMargin,
466 const long nPageBottomMargin )
467 {
468 if ( SfxViewFrame::Current() )
469 {
470 std::unique_ptr<SvxLongULSpaceItem> pPageULMarginItem( new SvxLongULSpaceItem( 0, 0, SID_ATTR_PAGE_ULSPACE ) );
471 pPageULMarginItem->SetUpper( nPageTopMargin );
472 pPageULMarginItem->SetLower( nPageBottomMargin );
473 SfxViewFrame::Current()->GetBindings().GetDispatcher()->ExecuteList( SID_ATTR_PAGE_ULSPACE,
474 SfxCallMode::RECORD, { pPageULMarginItem.get() } );
475 pPageULMarginItem.reset();
476 }
477 }
478
ExecutePageLayoutChange(const bool bMirrored)479 void PageMarginControl::ExecutePageLayoutChange( const bool bMirrored )
480 {
481 if ( SfxViewFrame::Current() )
482 {
483 std::unique_ptr<SvxPageItem> pPageItem( new SvxPageItem( SID_ATTR_PAGE ) );
484 pPageItem->SetPageUsage( bMirrored ? SvxPageUsage::Mirror : SvxPageUsage::All );
485 SfxViewFrame::Current()->GetBindings().GetDispatcher()->ExecuteList( SID_ATTR_PAGE,
486 SfxCallMode::RECORD, { pPageItem.get() } );
487 pPageItem.reset();
488 }
489 }
490
IMPL_LINK_NOARG(PageMarginControl,ModifyLRMarginHdl,Edit &,void)491 IMPL_LINK_NOARG( PageMarginControl, ModifyLRMarginHdl, Edit&, void )
492 {
493 m_nPageLeftMargin = GetCoreValue( *m_pLeftMarginEdit.get(), m_eUnit );
494 m_nPageRightMargin = GetCoreValue( *m_pRightMarginEdit.get(), m_eUnit );
495 ExecuteMarginLRChange( m_nPageLeftMargin, m_nPageRightMargin );
496 SetMetricFieldMaxValues( m_aPageSize );
497 m_bCustomValuesUsed = true;
498 }
499
IMPL_LINK_NOARG(PageMarginControl,ModifyULMarginHdl,Edit &,void)500 IMPL_LINK_NOARG( PageMarginControl, ModifyULMarginHdl, Edit&, void )
501 {
502 m_nPageTopMargin = GetCoreValue( *m_pTopMarginEdit.get(), m_eUnit );
503 m_nPageBottomMargin = GetCoreValue( *m_pBottomMarginEdit.get(), m_eUnit );
504 ExecuteMarginULChange( m_nPageTopMargin, m_nPageBottomMargin );
505 SetMetricFieldMaxValues( m_aPageSize );
506 m_bCustomValuesUsed = true;
507 }
508
GetUserCustomValues()509 bool PageMarginControl::GetUserCustomValues()
510 {
511 bool bUserCustomValuesAvailable = false;
512
513 SvtViewOptions aWinOpt( EViewType::Window, SWPAGE_LEFT_GVALUE );
514 if ( aWinOpt.Exists() )
515 {
516 css::uno::Sequence < css::beans::NamedValue > aSeq = aWinOpt.GetUserData();
517 OUString aTmp;
518 if ( aSeq.hasElements())
519 aSeq[0].Value >>= aTmp;
520 OUString aWinData( aTmp );
521 m_nUserCustomPageLeftMargin = aWinData.toInt32();
522 bUserCustomValuesAvailable = true;
523 }
524
525 SvtViewOptions aWinOpt2( EViewType::Window, SWPAGE_RIGHT_GVALUE );
526 if ( aWinOpt2.Exists() )
527 {
528 css::uno::Sequence < css::beans::NamedValue > aSeq = aWinOpt2.GetUserData();
529 OUString aTmp;
530 if ( aSeq.hasElements())
531 aSeq[0].Value >>= aTmp;
532 OUString aWinData( aTmp );
533 m_nUserCustomPageRightMargin = aWinData.toInt32();
534 bUserCustomValuesAvailable = true;
535 }
536
537 SvtViewOptions aWinOpt3( EViewType::Window, SWPAGE_TOP_GVALUE );
538 if ( aWinOpt3.Exists() )
539 {
540 css::uno::Sequence < css::beans::NamedValue > aSeq = aWinOpt3.GetUserData();
541 OUString aTmp;
542 if ( aSeq.hasElements() )
543 aSeq[0].Value >>= aTmp;
544 OUString aWinData( aTmp );
545 m_nUserCustomPageTopMargin = aWinData.toInt32();
546 bUserCustomValuesAvailable = true;
547 }
548
549 SvtViewOptions aWinOpt4( EViewType::Window, SWPAGE_DOWN_GVALUE );
550 if ( aWinOpt4.Exists() )
551 {
552 css::uno::Sequence < css::beans::NamedValue > aSeq = aWinOpt4.GetUserData();
553 OUString aTmp;
554 if ( aSeq.hasElements())
555 aSeq[0].Value >>= aTmp;
556 OUString aWinData( aTmp );
557 m_nUserCustomPageBottomMargin = aWinData.toInt32();
558 bUserCustomValuesAvailable = true;
559 }
560
561 SvtViewOptions aWinOpt5( EViewType::Window, SWPAGE_MIRROR_GVALUE );
562 if ( aWinOpt5.Exists() )
563 {
564 css::uno::Sequence < css::beans::NamedValue > aSeq = aWinOpt5.GetUserData();
565 OUString aTmp;
566 if ( aSeq.hasElements())
567 aSeq[0].Value >>= aTmp;
568 OUString aWinData( aTmp );
569 m_bUserCustomMirrored = aWinData.toInt32() != 0;
570 bUserCustomValuesAvailable = true;
571 }
572
573 return bUserCustomValuesAvailable;
574 }
575
StoreUserCustomValues()576 void PageMarginControl::StoreUserCustomValues()
577 {
578 if ( !m_bCustomValuesUsed )
579 {
580 return;
581 }
582
583 css::uno::Sequence < css::beans::NamedValue > aSeq( 1 );
584 SvtViewOptions aWinOpt( EViewType::Window, SWPAGE_LEFT_GVALUE );
585
586 aSeq[0].Name = "mnPageLeftMargin";
587 aSeq[0].Value <<= OUString::number( m_nPageLeftMargin );
588 aWinOpt.SetUserData( aSeq );
589
590 SvtViewOptions aWinOpt2( EViewType::Window, SWPAGE_RIGHT_GVALUE );
591 aSeq[0].Name = "mnPageRightMargin";
592 aSeq[0].Value <<= OUString::number( m_nPageRightMargin );
593 aWinOpt2.SetUserData( aSeq );
594
595 SvtViewOptions aWinOpt3( EViewType::Window, SWPAGE_TOP_GVALUE );
596 aSeq[0].Name = "mnPageTopMargin";
597 aSeq[0].Value <<= OUString::number( m_nPageTopMargin );
598 aWinOpt3.SetUserData( aSeq );
599
600 SvtViewOptions aWinOpt4( EViewType::Window, SWPAGE_DOWN_GVALUE );
601 aSeq[0].Name = "mnPageBottomMargin";
602 aSeq[0].Value <<= OUString::number( m_nPageBottomMargin );
603 aWinOpt4.SetUserData( aSeq );
604
605 SvtViewOptions aWinOpt5( EViewType::Window, SWPAGE_MIRROR_GVALUE );
606 aSeq[0].Name = "mbMirrored";
607 aSeq[0].Value <<= OUString::number( (m_bMirrored ? 1 : 0) );
608 aWinOpt5.SetUserData( aSeq );
609 }
610
611 } } // end of namespace sw::sidebar
612
613 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
614