Line data Source code
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 <svl/itemiter.hxx>
21 : #include <sfx2/app.hxx>
22 : #include <sfx2/objsh.hxx>
23 : #include <sfx2/module.hxx>
24 : #include <vcl/msgbox.hxx>
25 : #include <vcl/graph.hxx>
26 : #include <sfx2/sfxsids.hrc>
27 : #include <svx/svxids.hrc>
28 : #include <svx/dialogs.hrc>
29 :
30 : #include <svl/intitem.hxx>
31 :
32 : #include <svx/hdft.hxx>
33 : #include <svx/pageitem.hxx>
34 :
35 : #include "svx/dlgutil.hxx"
36 : #include <svx/dialmgr.hxx>
37 : #include <sfx2/htmlmode.hxx>
38 :
39 : #include <editeng/brushitem.hxx>
40 : #include <editeng/lrspitem.hxx>
41 : #include <editeng/ulspitem.hxx>
42 : #include <editeng/shaditem.hxx>
43 : #include <editeng/sizeitem.hxx>
44 : #include <editeng/boxitem.hxx>
45 :
46 : #include <svx/svxdlg.hxx>
47 : #include <boost/scoped_ptr.hpp>
48 :
49 : //UUUU
50 : #include <svx/xdef.hxx>
51 : #include <svx/xenum.hxx>
52 : #include <svx/xfillit0.hxx>
53 : #include <svx/unobrushitemhelper.hxx>
54 : #include <sfx2/request.hxx>
55 :
56 : using namespace com::sun::star;
57 :
58 : // Word 97 incompatibility (#i19922#)
59 : static const long MINBODY = 56; // 1mm in twips rounded
60 :
61 : // default distance to Header or footer
62 : static const long DEF_DIST_WRITER = 500; // 5mm (Writer)
63 : static const long DEF_DIST_CALC = 250; // 2.5mm (Calc)
64 :
65 : static const sal_uInt16 pRanges[] =
66 : {
67 : SID_ATTR_BRUSH, SID_ATTR_BRUSH,
68 :
69 : //UUUU Support DrawingLayer FillStyles (no real call to below GetRanges()
70 : // detected, still do the complete transition)
71 : XATTR_FILL_FIRST, XATTR_FILL_LAST,
72 :
73 : SID_ATTR_BORDER_OUTER, SID_ATTR_BORDER_OUTER,
74 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
75 : SID_ATTR_BORDER_SHADOW, SID_ATTR_BORDER_SHADOW,
76 : SID_ATTR_LRSPACE, SID_ATTR_LRSPACE,
77 : SID_ATTR_ULSPACE, SID_ATTR_ULSPACE,
78 : SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
79 : SID_ATTR_PAGE_HEADERSET, SID_ATTR_PAGE_HEADERSET,
80 : SID_ATTR_PAGE_FOOTERSET, SID_ATTR_PAGE_FOOTERSET,
81 : SID_ATTR_PAGE_ON, SID_ATTR_PAGE_ON,
82 : SID_ATTR_PAGE_DYNAMIC, SID_ATTR_PAGE_DYNAMIC,
83 : SID_ATTR_PAGE_SHARED, SID_ATTR_PAGE_SHARED,
84 : SID_ATTR_PAGE_SHARED_FIRST, SID_ATTR_PAGE_SHARED_FIRST,
85 : SID_ATTR_HDFT_DYNAMIC_SPACING, SID_ATTR_HDFT_DYNAMIC_SPACING,
86 : 0
87 : };
88 :
89 : namespace svx {
90 :
91 0 : bool ShowBorderBackgroundDlg( vcl::Window* pParent, SfxItemSet* pBBSet,
92 : bool bEnableBackgroundSelector )
93 : {
94 0 : bool bRes = false;
95 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
96 0 : if(pFact)
97 : {
98 0 : boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSvxBorderBackgroundDlg( pParent, *pBBSet, bEnableBackgroundSelector ));
99 : DBG_ASSERT(pDlg, "Dialog creation failed!");
100 0 : if ( pDlg->Execute() == RET_OK && pDlg->GetOutputItemSet() )
101 : {
102 0 : SfxItemIter aIter( *pDlg->GetOutputItemSet() );
103 0 : const SfxPoolItem* pItem = aIter.FirstItem();
104 :
105 0 : while ( pItem )
106 : {
107 0 : if ( !IsInvalidItem( pItem ) )
108 0 : pBBSet->Put( *pItem );
109 0 : pItem = aIter.NextItem();
110 : }
111 0 : bRes = true;
112 0 : }
113 : }
114 0 : return bRes;
115 : }
116 : }
117 :
118 : // returns the Which values to the range
119 :
120 :
121 0 : const sal_uInt16* SvxHeaderPage::GetRanges()
122 : {
123 0 : return pRanges;
124 : }
125 :
126 :
127 :
128 0 : SfxTabPage* SvxHeaderPage::Create( vcl::Window* pParent, const SfxItemSet* rSet )
129 : {
130 0 : return new SvxHeaderPage( pParent, *rSet );
131 : }
132 :
133 :
134 :
135 0 : const sal_uInt16* SvxFooterPage::GetRanges()
136 : {
137 0 : return pRanges;
138 : }
139 :
140 :
141 :
142 0 : SfxTabPage* SvxFooterPage::Create( vcl::Window* pParent, const SfxItemSet* rSet )
143 : {
144 0 : return new SvxFooterPage( pParent, *rSet );
145 : }
146 :
147 :
148 :
149 0 : SvxHeaderPage::SvxHeaderPage( vcl::Window* pParent, const SfxItemSet& rAttr ) :
150 :
151 0 : SvxHFPage( pParent, rAttr, SID_ATTR_PAGE_HEADERSET )
152 :
153 : {
154 0 : }
155 :
156 :
157 :
158 0 : SvxFooterPage::SvxFooterPage( vcl::Window* pParent, const SfxItemSet& rAttr ) :
159 :
160 0 : SvxHFPage( pParent, rAttr, SID_ATTR_PAGE_FOOTERSET )
161 :
162 : {
163 0 : }
164 :
165 :
166 0 : SvxHFPage::SvxHFPage( vcl::Window* pParent, const SfxItemSet& rSet, sal_uInt16 nSetId ) :
167 : SfxTabPage(pParent, "HFFormatPage", "svx/ui/headfootformatpage.ui", &rSet),
168 : nId(nSetId),
169 : pBBSet(NULL),
170 : // bitfield
171 : mbDisableQueryBox(false),
172 : mbEnableBackgroundSelector(true),
173 0 : mbEnableDrawingLayerFillStyles(false)
174 : {
175 0 : get(m_pCntSharedBox,"checkSameLR");
176 0 : get(m_pCntSharedFirstBox,"checkSameFP");
177 0 : get(m_pLMEdit,"spinMargLeft");
178 0 : get(m_pLMLbl,"labelLeftMarg");
179 0 : get(m_pRMEdit,"spinMargRight");
180 0 : get(m_pRMLbl,"labelRightMarg");
181 0 : get(m_pDistEdit,"spinSpacing");
182 0 : get(m_pDistFT,"labelSpacing");
183 0 : get(m_pDynSpacingCB,"checkDynSpacing");
184 0 : get(m_pHeightFT,"labelHeight");
185 0 : get(m_pHeightEdit,"spinHeight");
186 0 : get(m_pHeightDynBtn,"checkAutofit");
187 0 : get(m_pBspWin,"drawingareaPageHF");
188 0 : get(m_pBackgroundBtn,"buttonMore");
189 :
190 : //swap header <-> footer in UI
191 0 : if(nId == SID_ATTR_PAGE_FOOTERSET)
192 : {
193 0 : get(m_pPageLbl,"labelFooterFormat");
194 0 : get(m_pTurnOnBox, "checkFooterOn");
195 : }
196 : else //Header
197 : {
198 0 : get(m_pPageLbl,"labelHeaderFormat");
199 0 : get(m_pTurnOnBox, "checkHeaderOn");
200 : }
201 0 : m_pTurnOnBox->Show();
202 0 : m_pPageLbl->Show();
203 :
204 0 : InitHandler();
205 0 : m_pBspWin->EnableRTL( false );
206 :
207 : // This Page needs ExchangeSupport
208 0 : SetExchangeSupport();
209 :
210 :
211 : // Set metrics
212 0 : FieldUnit eFUnit = GetModuleFieldUnit( rSet );
213 0 : SetFieldUnit( *m_pDistEdit, eFUnit );
214 0 : SetFieldUnit( *m_pHeightEdit, eFUnit );
215 0 : SetFieldUnit( *m_pLMEdit, eFUnit );
216 0 : SetFieldUnit( *m_pRMEdit, eFUnit );
217 0 : }
218 :
219 :
220 :
221 0 : SvxHFPage::~SvxHFPage()
222 : {
223 0 : delete pBBSet;
224 0 : }
225 :
226 :
227 :
228 0 : bool SvxHFPage::FillItemSet( SfxItemSet* rSet )
229 : {
230 0 : const sal_uInt16 nWSize = GetWhich(SID_ATTR_PAGE_SIZE);
231 0 : const sal_uInt16 nWLRSpace = GetWhich(SID_ATTR_LRSPACE);
232 0 : const sal_uInt16 nWULSpace = GetWhich(SID_ATTR_ULSPACE);
233 0 : const sal_uInt16 nWOn = GetWhich(SID_ATTR_PAGE_ON);
234 0 : const sal_uInt16 nWDynamic = GetWhich(SID_ATTR_PAGE_DYNAMIC);
235 0 : const sal_uInt16 nWDynSpacing = GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING);
236 0 : const sal_uInt16 nWShared = GetWhich(SID_ATTR_PAGE_SHARED);
237 0 : const sal_uInt16 nWSharedFirst = GetWhich( SID_ATTR_PAGE_SHARED_FIRST );
238 0 : const sal_uInt16 nWBrush = GetWhich(SID_ATTR_BRUSH);
239 0 : const sal_uInt16 nWBox = GetWhich(SID_ATTR_BORDER_OUTER);
240 0 : const sal_uInt16 nWBoxInfo = GetWhich(SID_ATTR_BORDER_INNER);
241 0 : const sal_uInt16 nWShadow = GetWhich(SID_ATTR_BORDER_SHADOW);
242 :
243 : const sal_uInt16 aWhichTab[] = {
244 : nWSize, nWSize,
245 : nWLRSpace, nWLRSpace,
246 : nWULSpace, nWULSpace,
247 : nWOn, nWOn,
248 : nWDynamic, nWDynamic,
249 : nWShared, nWShared,
250 : nWSharedFirst, nWSharedFirst,
251 : nWBrush, nWBrush,
252 : nWBoxInfo, nWBoxInfo,
253 : nWBox, nWBox,
254 : nWShadow, nWShadow,
255 : nWDynSpacing, nWDynSpacing,
256 :
257 : //UUUU take over DrawingLayer FillStyles
258 : XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014
259 :
260 0 : 0, 0};
261 :
262 0 : const SfxItemSet& rOldSet = GetItemSet();
263 0 : SfxItemPool* pPool = rOldSet.GetPool();
264 : DBG_ASSERT(pPool,"no pool :-(");
265 0 : SfxMapUnit eUnit = pPool->GetMetric(nWSize);
266 0 : SfxItemSet aSet(*pPool,aWhichTab);
267 :
268 0 : if(mbEnableDrawingLayerFillStyles)
269 : {
270 : //UUUU When using the XATTR_FILLSTYLE DrawingLayer FillStyle definition
271 : // extra action has to be done here since the pool default is drawing::FillStyle_SOLID
272 : // instead of drawing::FillStyle_NONE (to have the default blue fill color at start).
273 0 : aSet.Put(XFillStyleItem(drawing::FillStyle_NONE));
274 : }
275 :
276 0 : aSet.Put( SfxBoolItem( nWOn, m_pTurnOnBox->IsChecked() ) );
277 0 : aSet.Put( SfxBoolItem( nWDynamic, m_pHeightDynBtn->IsChecked() ) );
278 0 : aSet.Put( SfxBoolItem( nWShared, m_pCntSharedBox->IsChecked() ) );
279 0 : if(m_pCntSharedFirstBox->IsVisible())
280 0 : aSet.Put( SfxBoolItem( nWSharedFirst, m_pCntSharedFirstBox->IsChecked() ) );
281 0 : if(m_pDynSpacingCB->IsVisible() && SFX_WHICH_MAX > nWDynSpacing)
282 : {
283 0 : boost::scoped_ptr<SfxBoolItem> pBoolItem(static_cast<SfxBoolItem*>(pPool->GetDefaultItem(nWDynSpacing).Clone()));
284 0 : pBoolItem->SetValue(m_pDynSpacingCB->IsChecked());
285 0 : aSet.Put(*pBoolItem);
286 : }
287 :
288 : // Size
289 0 : SvxSizeItem aSizeItem( const_cast<SvxSizeItem&>( static_cast<const SvxSizeItem&>(rOldSet.Get( nWSize )) ));
290 0 : Size aSize( aSizeItem.GetSize() );
291 0 : long nDist = GetCoreValue( *m_pDistEdit, eUnit );
292 0 : long nH = GetCoreValue( *m_pHeightEdit, eUnit );
293 :
294 0 : nH += nDist; // add distance
295 0 : aSize.Height() = nH;
296 0 : aSizeItem.SetSize( aSize );
297 0 : aSet.Put( aSizeItem );
298 :
299 : // Margins
300 0 : SvxLRSpaceItem aLR( nWLRSpace );
301 0 : aLR.SetLeft( (sal_uInt16)GetCoreValue( *m_pLMEdit, eUnit ) );
302 0 : aLR.SetRight( (sal_uInt16)GetCoreValue( *m_pRMEdit, eUnit ) );
303 0 : aSet.Put( aLR );
304 :
305 0 : SvxULSpaceItem aUL( nWULSpace );
306 0 : if ( nId == SID_ATTR_PAGE_HEADERSET )
307 0 : aUL.SetLower( (sal_uInt16)nDist );
308 : else
309 0 : aUL.SetUpper( (sal_uInt16)nDist );
310 0 : aSet.Put( aUL );
311 :
312 : // Background and border?
313 0 : if (pBBSet)
314 : {
315 0 : aSet.Put(*pBBSet);
316 : }
317 : else
318 : {
319 : const SfxPoolItem* pItem;
320 :
321 0 : if(SfxItemState::SET == GetItemSet().GetItemState(GetWhich(nId), false, &pItem))
322 : {
323 0 : const SfxItemSet* _pSet = &(static_cast< const SvxSetItem* >(pItem)->GetItemSet());
324 :
325 0 : if(_pSet->GetItemState(nWBrush) == SfxItemState::SET)
326 : {
327 0 : aSet.Put(_pSet->Get(nWBrush));
328 : }
329 :
330 0 : if(_pSet->GetItemState(nWBoxInfo) == SfxItemState::SET)
331 : {
332 0 : aSet.Put(_pSet->Get(nWBoxInfo));
333 : }
334 :
335 0 : if(_pSet->GetItemState(nWBox) == SfxItemState::SET)
336 : {
337 0 : aSet.Put(_pSet->Get(nWBox));
338 : }
339 :
340 0 : if(_pSet->GetItemState(nWShadow) == SfxItemState::SET)
341 : {
342 0 : aSet.Put(_pSet->Get(nWShadow));
343 : }
344 :
345 : //UUUU take care of [XATTR_XATTR_FILL_FIRST .. XATTR_FILL_LAST]
346 0 : for(sal_uInt16 nFillStyleId(XATTR_FILL_FIRST); nFillStyleId <= XATTR_FILL_LAST; nFillStyleId++)
347 : {
348 0 : if(_pSet->GetItemState(nFillStyleId) == SfxItemState::SET)
349 : {
350 0 : aSet.Put(_pSet->Get(nFillStyleId));
351 : }
352 : }
353 : }
354 : }
355 :
356 : // Flush the SetItem
357 0 : SvxSetItem aSetItem( GetWhich( nId ), aSet );
358 0 : rSet->Put( aSetItem );
359 :
360 0 : return true;
361 : }
362 :
363 :
364 0 : void SvxHFPage::Reset( const SfxItemSet* rSet )
365 : {
366 0 : ActivatePage( *rSet );
367 0 : ResetBackground_Impl( *rSet );
368 :
369 0 : SfxItemPool* pPool = GetItemSet().GetPool();
370 : DBG_ASSERT( pPool, "Where is the pool" );
371 0 : SfxMapUnit eUnit = pPool->GetMetric( GetWhich( SID_ATTR_PAGE_SIZE ) );
372 :
373 : //hide "same content on first page when this is calc
374 0 : bool bIsCalc = false;
375 0 : const SfxPoolItem* pExt1 = GetItem(*rSet, SID_ATTR_PAGE_EXT1);
376 0 : const SfxPoolItem* pExt2 = GetItem(*rSet, SID_ATTR_PAGE_EXT2);
377 0 : if (pExt1 && pExt1->ISA(SfxBoolItem) && pExt2 && pExt2->ISA(SfxBoolItem))
378 0 : bIsCalc = true;
379 0 : m_pCntSharedFirstBox->Show(!bIsCalc);
380 :
381 : // Evaluate header-/footer- attributes
382 0 : const SvxSetItem* pSetItem = 0;
383 :
384 0 : if ( SfxItemState::SET == rSet->GetItemState( GetWhich(nId), false,
385 0 : (const SfxPoolItem**)&pSetItem ) )
386 : {
387 0 : const SfxItemSet& rHeaderSet = pSetItem->GetItemSet();
388 : const SfxBoolItem& rHeaderOn =
389 0 : static_cast<const SfxBoolItem&>(rHeaderSet.Get(GetWhich(SID_ATTR_PAGE_ON)));
390 :
391 0 : m_pTurnOnBox->Check(rHeaderOn.GetValue());
392 :
393 0 : if ( rHeaderOn.GetValue() )
394 : {
395 : const SfxBoolItem& rDynamic =
396 0 : static_cast<const SfxBoolItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_DYNAMIC ) ));
397 : const SfxBoolItem& rShared =
398 0 : static_cast<const SfxBoolItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SHARED ) ));
399 0 : const SfxBoolItem* pSharedFirst = 0;
400 0 : if (rHeaderSet.HasItem(GetWhich(SID_ATTR_PAGE_SHARED_FIRST)))
401 0 : pSharedFirst = static_cast<const SfxBoolItem*>(&rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SHARED_FIRST ) ));
402 : const SvxSizeItem& rSize =
403 0 : static_cast<const SvxSizeItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ));
404 : const SvxULSpaceItem& rUL =
405 0 : static_cast<const SvxULSpaceItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_ULSPACE ) ));
406 : const SvxLRSpaceItem& rLR =
407 0 : static_cast<const SvxLRSpaceItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ));
408 0 : if(m_pDynSpacingCB->IsVisible())
409 : {
410 : const SfxBoolItem& rDynSpacing =
411 0 : static_cast<const SfxBoolItem&>(rHeaderSet.Get(GetWhich(SID_ATTR_HDFT_DYNAMIC_SPACING)));
412 0 : m_pDynSpacingCB->Check(rDynSpacing.GetValue());
413 : }
414 :
415 :
416 0 : if ( nId == SID_ATTR_PAGE_HEADERSET )
417 : { // Header
418 0 : SetMetricValue( *m_pDistEdit, rUL.GetLower(), eUnit );
419 0 : SetMetricValue( *m_pHeightEdit, rSize.GetSize().Height() - rUL.GetLower(), eUnit );
420 : }
421 : else
422 : { // Footer
423 0 : SetMetricValue( *m_pDistEdit, rUL.GetUpper(), eUnit );
424 0 : SetMetricValue( *m_pHeightEdit, rSize.GetSize().Height() - rUL.GetUpper(), eUnit );
425 : }
426 :
427 0 : m_pHeightDynBtn->Check(rDynamic.GetValue());
428 0 : SetMetricValue( *m_pLMEdit, rLR.GetLeft(), eUnit );
429 0 : SetMetricValue( *m_pRMEdit, rLR.GetRight(), eUnit );
430 0 : m_pCntSharedBox->Check(rShared.GetValue());
431 0 : if (pSharedFirst)
432 0 : m_pCntSharedFirstBox->Check(pSharedFirst->GetValue());
433 : else
434 0 : m_pCntSharedFirstBox->Hide();
435 : }
436 : else
437 0 : pSetItem = 0;
438 : }
439 : else
440 : {
441 : // defaults for distance and height
442 0 : long nDefaultDist = bIsCalc ? DEF_DIST_CALC : DEF_DIST_WRITER;
443 0 : SetMetricValue( *m_pDistEdit, nDefaultDist, SFX_MAPUNIT_100TH_MM );
444 0 : SetMetricValue( *m_pHeightEdit, 500, SFX_MAPUNIT_100TH_MM );
445 : }
446 :
447 0 : if ( !pSetItem )
448 : {
449 0 : m_pTurnOnBox->Check( false );
450 0 : m_pHeightDynBtn->Check( true );
451 0 : m_pCntSharedBox->Check( true );
452 0 : m_pCntSharedFirstBox->Check( true );
453 : }
454 :
455 0 : TurnOnHdl(0);
456 :
457 0 : m_pTurnOnBox->SaveValue();
458 0 : m_pDistEdit->SaveValue();
459 0 : m_pHeightEdit->SaveValue();
460 0 : m_pHeightDynBtn->SaveValue();
461 0 : m_pLMEdit->SaveValue();
462 0 : m_pRMEdit->SaveValue();
463 0 : m_pCntSharedBox->SaveValue();
464 0 : RangeHdl( 0 );
465 :
466 0 : const SfxPoolItem* pItem = 0;
467 : SfxObjectShell* pShell;
468 0 : if(SfxItemState::SET == rSet->GetItemState(SID_HTML_MODE, false, &pItem) ||
469 0 : ( 0 != (pShell = SfxObjectShell::Current()) &&
470 0 : 0 != (pItem = pShell->GetItem(SID_HTML_MODE))))
471 : {
472 0 : sal_uInt16 nHtmlMode = 0;
473 0 : nHtmlMode = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
474 0 : if(nHtmlMode & HTMLMODE_ON)
475 : {
476 0 : m_pCntSharedBox->Hide();
477 0 : m_pBackgroundBtn->Hide();
478 : }
479 : }
480 :
481 0 : }
482 :
483 0 : void SvxHFPage::InitHandler()
484 : {
485 0 : m_pTurnOnBox->SetClickHdl(LINK(this, SvxHFPage, TurnOnHdl));
486 0 : m_pDistEdit->SetModifyHdl(LINK(this, SvxHFPage, DistModify));
487 0 : m_pDistEdit->SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl));
488 :
489 0 : m_pHeightEdit->SetModifyHdl(LINK(this, SvxHFPage, HeightModify));
490 0 : m_pHeightEdit->SetLoseFocusHdl(LINK(this,SvxHFPage,RangeHdl));
491 :
492 0 : m_pLMEdit->SetModifyHdl(LINK(this, SvxHFPage, BorderModify));
493 0 : m_pLMEdit->SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl));
494 0 : m_pRMEdit->SetModifyHdl(LINK(this, SvxHFPage, BorderModify));
495 0 : m_pRMEdit->SetLoseFocusHdl(LINK(this, SvxHFPage, RangeHdl));
496 0 : m_pBackgroundBtn->SetClickHdl(LINK(this,SvxHFPage, BackgroundHdl));
497 0 : }
498 :
499 0 : IMPL_LINK( SvxHFPage, TurnOnHdl, CheckBox *, pBox )
500 : {
501 0 : if ( m_pTurnOnBox->IsChecked() )
502 : {
503 0 : m_pDistFT->Enable();
504 0 : m_pDistEdit->Enable();
505 0 : m_pDynSpacingCB->Enable();
506 0 : m_pHeightFT->Enable();
507 0 : m_pHeightEdit->Enable();
508 0 : m_pHeightDynBtn->Enable();
509 0 : m_pLMLbl->Enable();
510 0 : m_pLMEdit->Enable();
511 0 : m_pRMLbl->Enable();
512 0 : m_pRMEdit->Enable();
513 :
514 0 : sal_uInt16 nUsage = m_pBspWin->GetUsage();
515 :
516 0 : if( nUsage == SVX_PAGE_RIGHT || nUsage == SVX_PAGE_LEFT )
517 0 : m_pCntSharedBox->Disable();
518 : else
519 : {
520 0 : m_pCntSharedBox->Enable();
521 0 : m_pCntSharedFirstBox->Enable();
522 : }
523 0 : m_pBackgroundBtn->Enable();
524 : }
525 : else
526 : {
527 0 : bool bDelete = true;
528 :
529 0 : if ( !mbDisableQueryBox && pBox && m_pTurnOnBox->GetSavedValue() == sal_True )
530 : {
531 : short nResult;
532 0 : if (nId == SID_ATTR_PAGE_HEADERSET)
533 0 : nResult = DeleteHeaderDialog(this).Execute();
534 : else
535 0 : nResult = DeleteFooterDialog(this).Execute();
536 0 : bDelete = nResult == RET_YES;
537 : }
538 :
539 0 : if ( bDelete )
540 : {
541 0 : m_pDistFT->Disable();
542 0 : m_pDistEdit->Disable();
543 0 : m_pDynSpacingCB->Enable(false);
544 0 : m_pHeightFT->Disable();
545 0 : m_pHeightEdit->Disable();
546 0 : m_pHeightDynBtn->Disable();
547 :
548 0 : m_pLMLbl->Disable();
549 0 : m_pLMEdit->Disable();
550 0 : m_pRMLbl->Disable();
551 0 : m_pRMEdit->Disable();
552 :
553 0 : m_pCntSharedBox->Disable();
554 0 : m_pBackgroundBtn->Disable();
555 0 : m_pCntSharedFirstBox->Disable();
556 : }
557 : else
558 0 : m_pTurnOnBox->Check();
559 : }
560 0 : UpdateExample();
561 0 : return 0;
562 : }
563 :
564 0 : IMPL_LINK_NOARG_INLINE_START(SvxHFPage, DistModify)
565 : {
566 0 : UpdateExample();
567 0 : return 0;
568 : }
569 0 : IMPL_LINK_NOARG_INLINE_END(SvxHFPage, DistModify)
570 :
571 0 : IMPL_LINK_NOARG_INLINE_START(SvxHFPage, HeightModify)
572 : {
573 0 : UpdateExample();
574 :
575 0 : return 0;
576 : }
577 0 : IMPL_LINK_NOARG_INLINE_END(SvxHFPage, HeightModify)
578 :
579 0 : IMPL_LINK_NOARG_INLINE_START(SvxHFPage, BorderModify)
580 : {
581 0 : UpdateExample();
582 0 : return 0;
583 : }
584 0 : IMPL_LINK_NOARG_INLINE_END(SvxHFPage, BorderModify)
585 :
586 0 : IMPL_LINK_NOARG(SvxHFPage, BackgroundHdl)
587 : {
588 0 : if(!pBBSet)
589 : {
590 : // Use only the necessary items for border and background
591 0 : const sal_uInt16 nOuter(GetWhich(SID_ATTR_BORDER_OUTER));
592 0 : const sal_uInt16 nInner(GetWhich(SID_ATTR_BORDER_INNER, false));
593 0 : const sal_uInt16 nShadow(GetWhich(SID_ATTR_BORDER_SHADOW));
594 :
595 0 : if(mbEnableDrawingLayerFillStyles)
596 : {
597 : pBBSet = new SfxItemSet(
598 0 : *GetItemSet().GetPool(),
599 : XATTR_FILL_FIRST, XATTR_FILL_LAST, // DrawingLayer FillStyle definitions
600 : SID_COLOR_TABLE, SID_BITMAP_LIST, // XPropertyLists for Color, Gradient, Hatch and Graphic fills
601 : nOuter, nOuter,
602 : nInner, nInner,
603 : nShadow, nShadow,
604 0 : 0, 0);
605 :
606 : //UUUU copy items for XPropertyList entries from the DrawModel so that
607 : // the Area TabPage can access them
608 : static const sal_uInt16 nCopyFlags[] = {
609 : SID_COLOR_TABLE,
610 : SID_GRADIENT_LIST,
611 : SID_HATCH_LIST,
612 : SID_BITMAP_LIST,
613 : 0
614 : };
615 :
616 0 : for(sal_uInt16 a(0); nCopyFlags[a]; a++)
617 : {
618 0 : const SfxPoolItem* pItem = GetItemSet().GetItem(nCopyFlags[a]);
619 :
620 0 : if(pItem)
621 : {
622 0 : pBBSet->Put(*pItem);
623 : }
624 : else
625 : {
626 : OSL_ENSURE(false, "XPropertyList missing (!)");
627 : }
628 : }
629 : }
630 : else
631 : {
632 0 : const sal_uInt16 nBrush(GetWhich(SID_ATTR_BRUSH));
633 :
634 : pBBSet = new SfxItemSet(
635 0 : *GetItemSet().GetPool(),
636 : nBrush, nBrush,
637 : nOuter, nOuter,
638 : nInner, nInner,
639 : nShadow, nShadow,
640 0 : 0, 0);
641 : }
642 :
643 : const SfxPoolItem* pItem;
644 :
645 0 : if(SfxItemState::SET == GetItemSet().GetItemState(GetWhich(nId), false, &pItem))
646 : {
647 : // If a SfxItemSet from the SetItem for SID_ATTR_PAGE_HEADERSET or
648 : // SID_ATTR_PAGE_FOOTERSET exists, use it's content
649 0 : pBBSet->Put(static_cast<const SvxSetItem*>(pItem)->GetItemSet());
650 : }
651 : else
652 : {
653 0 : if(mbEnableDrawingLayerFillStyles)
654 : {
655 : //UUUU The style for header/footer is not yet created, need to reset
656 : // XFillStyleItem to drawing::FillStyle_NONE which is the same as in the style
657 : // initialization. This needs to be done since the pool default for
658 : // XFillStyleItem is drawing::FillStyle_SOLID
659 0 : pBBSet->Put(XFillStyleItem(drawing::FillStyle_NONE));
660 : }
661 : }
662 :
663 0 : if(SfxItemState::SET == GetItemSet().GetItemState(nInner, false, &pItem))
664 : {
665 : // The set InfoItem is always required
666 0 : pBBSet->Put(*pItem);
667 : }
668 : }
669 :
670 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
671 :
672 0 : if(pFact)
673 : {
674 : //UUUU
675 : SfxAbstractTabDialog* pDlg = pFact->CreateSvxBorderBackgroundDlg(
676 : this,
677 : *pBBSet,
678 : mbEnableBackgroundSelector,
679 0 : mbEnableDrawingLayerFillStyles);
680 :
681 : DBG_ASSERT(pDlg,"Dialog creation failed!");
682 0 : if(RET_OK == pDlg->Execute() && pDlg->GetOutputItemSet())
683 : {
684 0 : SfxItemIter aIter(*pDlg->GetOutputItemSet());
685 0 : const SfxPoolItem* pItem = aIter.FirstItem();
686 :
687 0 : while(pItem)
688 : {
689 0 : if(!IsInvalidItem(pItem))
690 : {
691 0 : pBBSet->Put(*pItem);
692 : }
693 :
694 0 : pItem = aIter.NextItem();
695 : }
696 :
697 : {
698 0 : drawinglayer::attribute::SdrAllFillAttributesHelperPtr aFillAttributes;
699 :
700 0 : if(mbEnableDrawingLayerFillStyles)
701 : {
702 : //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
703 0 : aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(*pBBSet));
704 : }
705 : else
706 : {
707 0 : const sal_uInt16 nWhich = GetWhich(SID_ATTR_BRUSH);
708 :
709 0 : if(pBBSet->GetItemState(nWhich) == SfxItemState::SET)
710 : {
711 : //UUUU create FillAttributes from SvxBrushItem
712 0 : const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(pBBSet->Get(nWhich));
713 0 : SfxItemSet aTempSet(*pBBSet->GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
714 :
715 0 : setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
716 0 : aFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
717 : }
718 : }
719 :
720 0 : if(SID_ATTR_PAGE_HEADERSET == nId)
721 : {
722 : //m_pBspWin->SetHdColor(rItem.GetColor());
723 0 : m_pBspWin->setHeaderFillAttributes(aFillAttributes);
724 : }
725 : else
726 : {
727 : //m_pBspWin->SetFtColor(rItem.GetColor());
728 0 : m_pBspWin->setFooterFillAttributes(aFillAttributes);
729 0 : }
730 : }
731 :
732 : {
733 0 : const sal_uInt16 nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
734 :
735 0 : if(pBBSet->GetItemState(nWhich) == SfxItemState::SET)
736 : {
737 0 : const SvxBoxItem& rItem = static_cast<const SvxBoxItem&>(pBBSet->Get(nWhich));
738 :
739 0 : if(nId == SID_ATTR_PAGE_HEADERSET)
740 0 : m_pBspWin->SetHdBorder(rItem);
741 : else
742 0 : m_pBspWin->SetFtBorder(rItem);
743 : }
744 0 : }
745 :
746 : }
747 :
748 0 : UpdateExample();
749 : }
750 :
751 0 : return 0;
752 : }
753 :
754 0 : void SvxHFPage::UpdateExample()
755 : {
756 0 : if ( nId == SID_ATTR_PAGE_HEADERSET )
757 : {
758 0 : m_pBspWin->SetHeader( m_pTurnOnBox->IsChecked() );
759 0 : m_pBspWin->SetHdHeight( GetCoreValue( *m_pHeightEdit, SFX_MAPUNIT_TWIP ) );
760 0 : m_pBspWin->SetHdDist( GetCoreValue( *m_pDistEdit, SFX_MAPUNIT_TWIP ) );
761 0 : m_pBspWin->SetHdLeft( GetCoreValue( *m_pLMEdit, SFX_MAPUNIT_TWIP ) );
762 0 : m_pBspWin->SetHdRight( GetCoreValue( *m_pRMEdit, SFX_MAPUNIT_TWIP ) );
763 : }
764 : else
765 : {
766 0 : m_pBspWin->SetFooter( m_pTurnOnBox->IsChecked() );
767 0 : m_pBspWin->SetFtHeight( GetCoreValue( *m_pHeightEdit, SFX_MAPUNIT_TWIP ) );
768 0 : m_pBspWin->SetFtDist( GetCoreValue( *m_pDistEdit, SFX_MAPUNIT_TWIP ) );
769 0 : m_pBspWin->SetFtLeft( GetCoreValue( *m_pLMEdit, SFX_MAPUNIT_TWIP ) );
770 0 : m_pBspWin->SetFtRight( GetCoreValue( *m_pRMEdit, SFX_MAPUNIT_TWIP ) );
771 : }
772 0 : m_pBspWin->Invalidate();
773 0 : }
774 :
775 0 : void SvxHFPage::ResetBackground_Impl( const SfxItemSet& rSet )
776 : {
777 0 : sal_uInt16 nWhich(GetWhich(SID_ATTR_PAGE_HEADERSET));
778 :
779 0 : if (SfxItemState::SET == rSet.GetItemState(nWhich, false))
780 : {
781 0 : const SvxSetItem& rSetItem = static_cast< const SvxSetItem& >(rSet.Get(nWhich, false));
782 0 : const SfxItemSet& rTmpSet = rSetItem.GetItemSet();
783 0 : const SfxBoolItem& rOn = static_cast< const SfxBoolItem& >(rTmpSet.Get(GetWhich(SID_ATTR_PAGE_ON)));
784 :
785 0 : if(rOn.GetValue())
786 : {
787 0 : drawinglayer::attribute::SdrAllFillAttributesHelperPtr aHeaderFillAttributes;
788 :
789 0 : if(mbEnableDrawingLayerFillStyles)
790 : {
791 : //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
792 0 : aHeaderFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rTmpSet));
793 : }
794 : else
795 : {
796 0 : nWhich = GetWhich(SID_ATTR_BRUSH);
797 :
798 0 : if(SfxItemState::SET == rTmpSet.GetItemState(nWhich))
799 : {
800 : //UUUU create FillAttributes from SvxBrushItem
801 0 : const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rTmpSet.Get(nWhich));
802 0 : SfxItemSet aTempSet(*rTmpSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
803 :
804 0 : setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
805 0 : aHeaderFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
806 : }
807 : }
808 :
809 0 : m_pBspWin->setHeaderFillAttributes(aHeaderFillAttributes);
810 0 : nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
811 :
812 0 : if(rTmpSet.GetItemState(nWhich) == SfxItemState::SET)
813 : {
814 : const SvxBoxItem& rItem =
815 0 : static_cast<const SvxBoxItem&>(rTmpSet.Get(nWhich));
816 0 : m_pBspWin->SetHdBorder(rItem);
817 0 : }
818 : }
819 : }
820 :
821 0 : nWhich = GetWhich(SID_ATTR_PAGE_FOOTERSET);
822 :
823 0 : if (SfxItemState::SET == rSet.GetItemState(nWhich, false))
824 : {
825 0 : const SvxSetItem& rSetItem = static_cast< const SvxSetItem& >(rSet.Get(nWhich, false));
826 0 : const SfxItemSet& rTmpSet = rSetItem.GetItemSet();
827 0 : const SfxBoolItem& rOn = static_cast< const SfxBoolItem& >(rTmpSet.Get(GetWhich(SID_ATTR_PAGE_ON)));
828 :
829 0 : if(rOn.GetValue())
830 : {
831 0 : drawinglayer::attribute::SdrAllFillAttributesHelperPtr aFooterFillAttributes;
832 :
833 0 : if(mbEnableDrawingLayerFillStyles)
834 : {
835 : //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
836 0 : aFooterFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rTmpSet));
837 : }
838 : else
839 : {
840 0 : nWhich = GetWhich(SID_ATTR_BRUSH);
841 :
842 0 : if(SfxItemState::SET == rTmpSet.GetItemState(nWhich))
843 : {
844 : //UUUU create FillAttributes from SvxBrushItem
845 0 : const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rTmpSet.Get(nWhich));
846 0 : SfxItemSet aTempSet(*rTmpSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
847 :
848 0 : setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
849 0 : aFooterFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
850 : }
851 : }
852 :
853 0 : m_pBspWin->setFooterFillAttributes(aFooterFillAttributes);
854 0 : nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
855 :
856 0 : if(rTmpSet.GetItemState(nWhich) == SfxItemState::SET)
857 : {
858 0 : const SvxBoxItem& rItem = static_cast< const SvxBoxItem& >(rTmpSet.Get(nWhich));
859 0 : m_pBspWin->SetFtBorder(rItem);
860 0 : }
861 : }
862 : }
863 :
864 0 : drawinglayer::attribute::SdrAllFillAttributesHelperPtr aPageFillAttributes;
865 :
866 0 : if(mbEnableDrawingLayerFillStyles)
867 : {
868 : //UUUU create FillAttributes directly from DrawingLayer FillStyle entries
869 0 : aPageFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(rSet));
870 : }
871 : else
872 : {
873 0 : nWhich = GetWhich(SID_ATTR_BRUSH);
874 :
875 0 : if(rSet.GetItemState(nWhich) >= SfxItemState::DEFAULT)
876 : {
877 : //UUUU create FillAttributes from SvxBrushItem
878 0 : const SvxBrushItem& rItem = static_cast< const SvxBrushItem& >(rSet.Get(nWhich));
879 0 : SfxItemSet aTempSet(*rSet.GetPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
880 :
881 0 : setSvxBrushItemAsFillAttributesToTargetSet(rItem, aTempSet);
882 0 : aPageFillAttributes.reset(new drawinglayer::attribute::SdrAllFillAttributesHelper(aTempSet));
883 : }
884 : }
885 :
886 0 : m_pBspWin->setPageFillAttributes(aPageFillAttributes);
887 0 : nWhich = GetWhich(SID_ATTR_BORDER_OUTER);
888 :
889 0 : if(rSet.GetItemState(nWhich) >= SfxItemState::DEFAULT)
890 : {
891 0 : const SvxBoxItem& rItem = static_cast< const SvxBoxItem& >(rSet.Get(nWhich));
892 0 : m_pBspWin->SetBorder(rItem);
893 0 : }
894 0 : }
895 :
896 0 : void SvxHFPage::ActivatePage( const SfxItemSet& rSet )
897 : {
898 0 : const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_LRSPACE );
899 :
900 0 : if ( pItem )
901 : {
902 : // Set left and right margins
903 0 : const SvxLRSpaceItem& rLRSpace = static_cast<const SvxLRSpaceItem&>(*pItem);
904 :
905 0 : m_pBspWin->SetLeft( rLRSpace.GetLeft() );
906 0 : m_pBspWin->SetRight( rLRSpace.GetRight() );
907 : }
908 : else
909 : {
910 0 : m_pBspWin->SetLeft( 0 );
911 0 : m_pBspWin->SetRight( 0 );
912 : }
913 :
914 0 : pItem = GetItem( rSet, SID_ATTR_ULSPACE );
915 :
916 0 : if ( pItem )
917 : {
918 : // Set top and bottom margins
919 0 : const SvxULSpaceItem& rULSpace = static_cast<const SvxULSpaceItem&>(*pItem);
920 :
921 0 : m_pBspWin->SetTop( rULSpace.GetUpper() );
922 0 : m_pBspWin->SetBottom( rULSpace.GetLower() );
923 : }
924 : else
925 : {
926 0 : m_pBspWin->SetTop( 0 );
927 0 : m_pBspWin->SetBottom( 0 );
928 : }
929 :
930 0 : sal_uInt16 nUsage = SVX_PAGE_ALL;
931 0 : pItem = GetItem( rSet, SID_ATTR_PAGE );
932 :
933 0 : if ( pItem )
934 0 : nUsage = static_cast<const SvxPageItem*>(pItem)->GetPageUsage();
935 :
936 0 : m_pBspWin->SetUsage( nUsage );
937 :
938 0 : if ( SVX_PAGE_RIGHT == nUsage || SVX_PAGE_LEFT == nUsage )
939 0 : m_pCntSharedBox->Disable();
940 : else
941 : {
942 0 : m_pCntSharedBox->Enable();
943 0 : m_pCntSharedFirstBox->Enable();
944 : }
945 0 : pItem = GetItem( rSet, SID_ATTR_PAGE_SIZE );
946 :
947 0 : if ( pItem )
948 : {
949 : // Orientation and Size from the PageItem
950 0 : const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(*pItem);
951 : // if the size is already swapped (Landscape)
952 0 : m_pBspWin->SetSize( rSize.GetSize() );
953 : }
954 :
955 : // Evaluate Header attribute
956 0 : const SvxSetItem* pSetItem = 0;
957 :
958 0 : if ( SfxItemState::SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_HEADERSET ),
959 : false,
960 0 : (const SfxPoolItem**)&pSetItem ) )
961 : {
962 0 : const SfxItemSet& rHeaderSet = pSetItem->GetItemSet();
963 : const SfxBoolItem& rHeaderOn =
964 0 : static_cast<const SfxBoolItem&>(rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ));
965 :
966 0 : if ( rHeaderOn.GetValue() )
967 : {
968 : const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(
969 0 : rHeaderSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ));
970 : const SvxULSpaceItem& rUL = static_cast<const SvxULSpaceItem&>(
971 0 : rHeaderSet.Get( GetWhich(SID_ATTR_ULSPACE ) ));
972 : const SvxLRSpaceItem& rLR = static_cast<const SvxLRSpaceItem&>(
973 0 : rHeaderSet.Get( GetWhich( SID_ATTR_LRSPACE ) ));
974 0 : long nDist = rUL.GetLower();
975 :
976 0 : m_pBspWin->SetHdHeight( rSize.GetSize().Height() - nDist );
977 0 : m_pBspWin->SetHdDist( nDist );
978 0 : m_pBspWin->SetHdLeft( rLR.GetLeft() );
979 0 : m_pBspWin->SetHdRight( rLR.GetRight() );
980 0 : m_pBspWin->SetHeader( true );
981 : }
982 : else
983 0 : pSetItem = 0;
984 : }
985 :
986 0 : if ( !pSetItem )
987 : {
988 0 : m_pBspWin->SetHeader( false );
989 :
990 0 : if ( SID_ATTR_PAGE_HEADERSET == nId )
991 : {
992 0 : m_pCntSharedBox->Disable();
993 0 : m_pCntSharedFirstBox->Disable();
994 : }
995 : }
996 0 : pSetItem = 0;
997 :
998 0 : if ( SfxItemState::SET == rSet.GetItemState( GetWhich( SID_ATTR_PAGE_FOOTERSET ),
999 : false,
1000 0 : (const SfxPoolItem**)&pSetItem ) )
1001 : {
1002 0 : const SfxItemSet& rFooterSet = pSetItem->GetItemSet();
1003 : const SfxBoolItem& rFooterOn =
1004 0 : static_cast<const SfxBoolItem&>(rFooterSet.Get( GetWhich( SID_ATTR_PAGE_ON ) ));
1005 :
1006 0 : if ( rFooterOn.GetValue() )
1007 : {
1008 : const SvxSizeItem& rSize = static_cast<const SvxSizeItem&>(
1009 0 : rFooterSet.Get( GetWhich( SID_ATTR_PAGE_SIZE ) ));
1010 : const SvxULSpaceItem& rUL = static_cast<const SvxULSpaceItem&>(
1011 0 : rFooterSet.Get( GetWhich( SID_ATTR_ULSPACE ) ));
1012 : const SvxLRSpaceItem& rLR = static_cast<const SvxLRSpaceItem&>(
1013 0 : rFooterSet.Get( GetWhich( SID_ATTR_LRSPACE ) ));
1014 0 : long nDist = rUL.GetUpper();
1015 :
1016 0 : m_pBspWin->SetFtHeight( rSize.GetSize().Height() - nDist );
1017 0 : m_pBspWin->SetFtDist( nDist );
1018 0 : m_pBspWin->SetFtLeft( rLR.GetLeft() );
1019 0 : m_pBspWin->SetFtRight( rLR.GetRight() );
1020 0 : m_pBspWin->SetFooter( true );
1021 : }
1022 : else
1023 0 : pSetItem = 0;
1024 : }
1025 :
1026 0 : if ( !pSetItem )
1027 : {
1028 0 : m_pBspWin->SetFooter( false );
1029 :
1030 0 : if ( SID_ATTR_PAGE_FOOTERSET == nId )
1031 : {
1032 0 : m_pCntSharedBox->Disable();
1033 0 : m_pCntSharedFirstBox->Disable();
1034 : }
1035 : }
1036 :
1037 0 : pItem = GetItem( rSet, SID_ATTR_PAGE_EXT1 );
1038 :
1039 0 : if ( pItem && pItem->ISA(SfxBoolItem) )
1040 : {
1041 0 : m_pBspWin->SetTable( true );
1042 0 : m_pBspWin->SetHorz( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
1043 : }
1044 :
1045 0 : pItem = GetItem( rSet, SID_ATTR_PAGE_EXT2 );
1046 :
1047 0 : if ( pItem && pItem->ISA(SfxBoolItem) )
1048 : {
1049 0 : m_pBspWin->SetTable( true );
1050 0 : m_pBspWin->SetVert( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
1051 : }
1052 0 : ResetBackground_Impl( rSet );
1053 0 : RangeHdl( 0 );
1054 0 : }
1055 :
1056 0 : int SvxHFPage::DeactivatePage( SfxItemSet* _pSet )
1057 : {
1058 0 : if ( _pSet )
1059 0 : FillItemSet( _pSet );
1060 0 : return LEAVE_PAGE;
1061 : }
1062 :
1063 0 : IMPL_LINK_NOARG(SvxHFPage, RangeHdl)
1064 : {
1065 0 : long nHHeight = m_pBspWin->GetHdHeight();
1066 0 : long nHDist = m_pBspWin->GetHdDist();
1067 :
1068 0 : long nFHeight = m_pBspWin->GetFtHeight();
1069 0 : long nFDist = m_pBspWin->GetFtDist();
1070 :
1071 : long nHeight = std::max( (long)MINBODY,
1072 0 : static_cast<long>(m_pHeightEdit->Denormalize( m_pHeightEdit->GetValue( FUNIT_TWIP ) ) ) );
1073 0 : long nDist = m_pTurnOnBox->IsChecked() ?
1074 0 : static_cast<long>(m_pDistEdit->Denormalize( m_pDistEdit->GetValue( FUNIT_TWIP ) )) : 0;
1075 :
1076 : long nMin;
1077 : long nMax;
1078 :
1079 0 : if ( nId == SID_ATTR_PAGE_HEADERSET )
1080 : {
1081 0 : nHHeight = nHeight;
1082 0 : nHDist = nDist;
1083 : }
1084 : else
1085 : {
1086 0 : nFHeight = nHeight;
1087 0 : nFDist = nDist;
1088 : }
1089 :
1090 : // Current values of the side edges
1091 0 : long nBT = m_pBspWin->GetTop();
1092 0 : long nBB = m_pBspWin->GetBottom();
1093 0 : long nBL = m_pBspWin->GetLeft();
1094 0 : long nBR = m_pBspWin->GetRight();
1095 :
1096 0 : long nH = m_pBspWin->GetSize().Height();
1097 0 : long nW = m_pBspWin->GetSize().Width();
1098 :
1099 : // Borders
1100 0 : if ( nId == SID_ATTR_PAGE_HEADERSET )
1101 : {
1102 : // Header
1103 0 : nMin = ( nH - nBB - nBT ) / 5; // 20%
1104 0 : nMax = std::max( nH - nMin - nHDist - nFDist - nFHeight - nBB - nBT,
1105 0 : nMin );
1106 0 : m_pHeightEdit->SetMax( m_pHeightEdit->Normalize( nMax ), FUNIT_TWIP );
1107 0 : nMin = ( nH - nBB - nBT ) / 5; // 20%
1108 0 : nDist = std::max( nH - nMin - nHHeight - nFDist - nFHeight - nBB - nBT,
1109 0 : long(0) );
1110 0 : m_pDistEdit->SetMax( m_pDistEdit->Normalize( nDist ), FUNIT_TWIP );
1111 : }
1112 : else
1113 : {
1114 : // Footer
1115 0 : nMin = ( nH - nBT - nBB ) / 5; // 20%
1116 0 : nMax = std::max( nH - nMin - nFDist - nHDist - nHHeight - nBT - nBB,
1117 0 : nMin );
1118 0 : m_pHeightEdit->SetMax( m_pHeightEdit->Normalize( nMax ), FUNIT_TWIP );
1119 0 : nMin = ( nH - nBT - nBB ) / 5; // 20%
1120 0 : nDist = std::max( nH - nMin - nFHeight - nHDist - nHHeight - nBT - nBB,
1121 0 : long(0) );
1122 0 : m_pDistEdit->SetMax( m_pDistEdit->Normalize( nDist ), FUNIT_TWIP );
1123 : }
1124 :
1125 : // Limit Indentation
1126 0 : nMax = nW - nBL - nBR -
1127 0 : static_cast<long>(m_pRMEdit->Denormalize( m_pRMEdit->GetValue( FUNIT_TWIP ) )) - MINBODY;
1128 0 : m_pLMEdit->SetMax( m_pLMEdit->Normalize( nMax ), FUNIT_TWIP );
1129 :
1130 0 : nMax = nW - nBL - nBR -
1131 0 : static_cast<long>(m_pLMEdit->Denormalize( m_pLMEdit->GetValue( FUNIT_TWIP ) )) - MINBODY;
1132 0 : m_pRMEdit->SetMax( m_pLMEdit->Normalize( nMax ), FUNIT_TWIP );
1133 0 : return 0;
1134 : }
1135 :
1136 0 : static void lcl_Move(vcl::Window& rWin, sal_Int32 nDiff)
1137 : {
1138 0 : Point aPos(rWin.GetPosPixel());
1139 0 : aPos.Y() -= nDiff;
1140 0 : rWin.SetPosPixel(aPos);
1141 0 : }
1142 :
1143 0 : void SvxHFPage::EnableDynamicSpacing()
1144 : {
1145 0 : m_pDynSpacingCB->Show();
1146 : //move all following controls
1147 : vcl::Window* aMoveWindows[] =
1148 : {
1149 : m_pHeightFT,
1150 : m_pHeightEdit,
1151 : m_pHeightDynBtn,
1152 : m_pBackgroundBtn,
1153 : 0
1154 0 : };
1155 0 : sal_Int32 nOffset = m_pTurnOnBox->GetPosPixel().Y() - m_pCntSharedBox->GetPosPixel().Y();
1156 0 : sal_Int32 nIdx = 0;
1157 0 : while(aMoveWindows[nIdx])
1158 0 : lcl_Move(*aMoveWindows[nIdx++], nOffset);
1159 0 : }
1160 :
1161 0 : void SvxHFPage::PageCreated(const SfxAllItemSet &rSet)
1162 : {
1163 : //UUUU
1164 0 : SFX_ITEMSET_ARG (&rSet, pSupportDrawingLayerFillStyleItem, SfxBoolItem, SID_DRAWINGLAYER_FILLSTYLES, false);
1165 :
1166 0 : if(pSupportDrawingLayerFillStyleItem)
1167 : {
1168 0 : const bool bNew(pSupportDrawingLayerFillStyleItem->GetValue());
1169 :
1170 0 : EnableDrawingLayerFillStyles(bNew);
1171 : }
1172 594 : }
1173 :
1174 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|