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