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