xref: /trunk/main/cui/source/tabpages/tparea.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_cui.hxx"
30 
31 // include ---------------------------------------------------------------
32 #include <tools/shl.hxx>
33 #include <tools/urlobj.hxx>
34 #include <sfx2/app.hxx>
35 #include <sfx2/module.hxx>
36 #include <svx/dialogs.hrc>
37 
38 #define _SVX_TPAREA_CXX
39 
40 #if defined (UNX) || defined (WTC) || defined (ICC) || defined(WNT)
41 #include <stdlib.h>
42 #endif
43 
44 #include "svx/xattr.hxx"
45 #include <svx/xpool.hxx>
46 #include <cuires.hrc>
47 #include "tabarea.hrc"
48 //#include "dlgname.hrc"
49 #include <svx/xflbckit.hxx>
50 #include <svx/svdattr.hxx>
51 #include <svx/xtable.hxx>
52 #include <svx/xlineit0.hxx>
53 #include "svx/drawitem.hxx"
54 #include "cuitabarea.hxx"
55 #include "dlgname.hxx"
56 #include <dialmgr.hxx>
57 #include "svx/dlgutil.hxx"
58 #include <svl/intitem.hxx> //add CHINA001
59 #include <sfx2/request.hxx>//add CHINA001
60 #include "paragrph.hrc"
61 #define DLGWIN this->GetParent()->GetParent()
62 
63 // static ----------------------------------------------------------------
64 
65 static sal_uInt16 pAreaRanges[] =
66 {
67     XATTR_GRADIENTSTEPCOUNT,
68     XATTR_GRADIENTSTEPCOUNT,
69     SID_ATTR_FILL_STYLE,
70     SID_ATTR_FILL_BITMAP,
71     0
72 };
73 
74 static sal_uInt16 pTransparenceRanges[] =
75 {
76     XATTR_FILLTRANSPARENCE,
77     XATTR_FILLTRANSPARENCE,
78     SDRATTR_SHADOWTRANSPARENCE,
79     SDRATTR_SHADOWTRANSPARENCE,
80     XATTR_FILLFLOATTRANSPARENCE,
81     XATTR_FILLFLOATTRANSPARENCE,
82     0
83 };
84 
85 /*************************************************************************
86 |*
87 |*  Dialog for transparence
88 |*
89 \************************************************************************/
90 
91 IMPL_LINK(SvxTransparenceTabPage, ClickTransOffHdl_Impl, void *, EMPTYARG)
92 {
93     // disable all other controls
94     ActivateLinear(sal_False);
95     ActivateGradient(sal_False);
96 
97     // Preview
98     rXFSet.ClearItem (XATTR_FILLTRANSPARENCE);
99     rXFSet.ClearItem (XATTR_FILLFLOATTRANSPARENCE);
100     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
101     aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
102 
103     InvalidatePreview( sal_False );
104 
105     return( 0L );
106 }
107 
108 IMPL_LINK(SvxTransparenceTabPage, ClickTransLinearHdl_Impl, void *, EMPTYARG)
109 {
110     // enable linear, disable other
111     ActivateLinear(sal_True);
112     ActivateGradient(sal_False);
113 
114     // preview
115     rXFSet.ClearItem (XATTR_FILLFLOATTRANSPARENCE);
116     ModifyTransparentHdl_Impl (NULL);
117 
118     return( 0L );
119 }
120 
121 IMPL_LINK(SvxTransparenceTabPage, ClickTransGradientHdl_Impl, void *, EMPTYARG)
122 {
123     // enable gradient, disable other
124     ActivateLinear(sal_False);
125     ActivateGradient(sal_True);
126 
127     // preview
128     rXFSet.ClearItem (XATTR_FILLTRANSPARENCE);
129     ModifiedTrgrHdl_Impl (NULL);
130 
131     return( 0L );
132 }
133 
134 void SvxTransparenceTabPage::ActivateLinear(sal_Bool bActivate)
135 {
136     aMtrTransparent.Enable(bActivate);
137 }
138 
139 IMPL_LINK(SvxTransparenceTabPage, ModifyTransparentHdl_Impl, void*, EMPTYARG)
140 {
141     sal_uInt16 nPos = (sal_uInt16)aMtrTransparent.GetValue();
142     XFillTransparenceItem aItem(nPos);
143     rXFSet.Put(XFillTransparenceItem(aItem));
144 
145     // preview
146     InvalidatePreview();
147 
148     return 0L;
149 }
150 
151 IMPL_LINK(SvxTransparenceTabPage, ModifiedTrgrHdl_Impl, void *, pControl)
152 {
153     if(pControl == &aLbTrgrGradientType || pControl == this)
154     {
155         XGradientStyle eXGS = (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos();
156         SetControlState_Impl( eXGS );
157     }
158 
159     // preview
160     sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrStartValue.GetValue() * 255) / 100);
161     sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrEndValue.GetValue() * 255) / 100);
162     XGradient aTmpGradient(
163                 Color(nStartCol, nStartCol, nStartCol),
164                 Color(nEndCol, nEndCol, nEndCol),
165                 (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos(),
166                 (sal_uInt16)aMtrTrgrAngle.GetValue() * 10,
167                 (sal_uInt16)aMtrTrgrCenterX.GetValue(),
168                 (sal_uInt16)aMtrTrgrCenterY.GetValue(),
169                 (sal_uInt16)aMtrTrgrBorder.GetValue(),
170                 100, 100);
171 
172     String aString;
173     XFillFloatTransparenceItem aItem( rXFSet.GetPool()/*aString*/, aTmpGradient);
174     rXFSet.Put ( aItem );
175 
176     InvalidatePreview();
177 
178     return( 0L );
179 }
180 
181 void SvxTransparenceTabPage::ActivateGradient(sal_Bool bActivate)
182 {
183     aFtTrgrType.Enable(bActivate);
184     aLbTrgrGradientType.Enable(bActivate);
185     aFtTrgrCenterX.Enable(bActivate);
186     aMtrTrgrCenterX.Enable(bActivate);
187     aFtTrgrCenterY.Enable(bActivate);
188     aMtrTrgrCenterY.Enable(bActivate);
189     aFtTrgrAngle.Enable(bActivate);
190     aMtrTrgrAngle.Enable(bActivate);
191     aFtTrgrBorder.Enable(bActivate);
192     aMtrTrgrBorder.Enable(bActivate);
193     aFtTrgrStartValue.Enable(bActivate);
194     aMtrTrgrStartValue.Enable(bActivate);
195     aFtTrgrEndValue.Enable(bActivate);
196     aMtrTrgrEndValue.Enable(bActivate);
197 
198     if(bActivate)
199     {
200         XGradientStyle eXGS = (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos();
201         SetControlState_Impl( eXGS );
202     }
203 }
204 
205 IMPL_LINK(SvxTransparenceTabPage, ChangeTrgrTypeHdl_Impl, void *, EMPTYARG)
206 {
207     return( 0L );
208 }
209 
210 void SvxTransparenceTabPage::SetControlState_Impl(XGradientStyle eXGS)
211 {
212     switch(eXGS)
213     {
214         case XGRAD_LINEAR:
215         case XGRAD_AXIAL:
216             aFtTrgrCenterX.Disable();
217             aMtrTrgrCenterX.Disable();
218             aFtTrgrCenterY.Disable();
219             aMtrTrgrCenterY.Disable();
220             aFtTrgrAngle.Enable();
221             aMtrTrgrAngle.Enable();
222             break;
223 
224         case XGRAD_RADIAL:
225             aFtTrgrCenterX.Enable();
226             aMtrTrgrCenterX.Enable();
227             aFtTrgrCenterY.Enable();
228             aMtrTrgrCenterY.Enable();
229             aFtTrgrAngle.Disable();
230             aMtrTrgrAngle.Disable();
231             break;
232 
233         case XGRAD_ELLIPTICAL:
234             aFtTrgrCenterX.Enable();
235             aMtrTrgrCenterX.Enable();
236             aFtTrgrCenterY.Enable();
237             aMtrTrgrCenterY.Enable();
238             aFtTrgrAngle.Enable();
239             aMtrTrgrAngle.Enable();
240             break;
241 
242         case XGRAD_SQUARE:
243         case XGRAD_RECT:
244             aFtTrgrCenterX.Enable();
245             aMtrTrgrCenterX.Enable();
246             aFtTrgrCenterY.Enable();
247             aMtrTrgrCenterY.Enable();
248             aFtTrgrAngle.Enable();
249             aMtrTrgrAngle.Enable();
250             break;
251     }
252 }
253 
254 SvxTransparenceTabPage::SvxTransparenceTabPage(Window* pParent, const SfxItemSet& rInAttrs)
255 :   SvxTabPage          ( pParent, CUI_RES( RID_SVXPAGE_TRANSPARENCE ), rInAttrs),
256     rOutAttrs           ( rInAttrs ),
257     nPageType(0),
258     nDlgType(0),
259 
260     aFlProp             ( this, CUI_RES( FL_PROP ) ),
261     aRbtTransOff        ( this, CUI_RES( RBT_TRANS_OFF ) ),
262     aRbtTransLinear     ( this, CUI_RES( RBT_TRANS_LINEAR ) ),
263     aRbtTransGradient   ( this, CUI_RES( RBT_TRANS_GRADIENT ) ),
264 
265     aMtrTransparent     ( this, CUI_RES( MTR_TRANSPARENT ) ),
266 
267     aFtTrgrType         ( this, CUI_RES( FT_TRGR_TYPE ) ),
268     aLbTrgrGradientType ( this, CUI_RES( LB_TRGR_GRADIENT_TYPES ) ),
269     aFtTrgrCenterX      ( this, CUI_RES( FT_TRGR_CENTER_X ) ),
270     aMtrTrgrCenterX     ( this, CUI_RES( MTR_TRGR_CENTER_X ) ),
271     aFtTrgrCenterY      ( this, CUI_RES( FT_TRGR_CENTER_Y ) ),
272     aMtrTrgrCenterY     ( this, CUI_RES( MTR_TRGR_CENTER_Y ) ),
273     aFtTrgrAngle        ( this, CUI_RES( FT_TRGR_ANGLE ) ),
274     aMtrTrgrAngle       ( this, CUI_RES( MTR_TRGR_ANGLE ) ),
275     aFtTrgrBorder       ( this, CUI_RES( FT_TRGR_BORDER ) ),
276     aMtrTrgrBorder      ( this, CUI_RES( MTR_TRGR_BORDER ) ),
277     aFtTrgrStartValue   ( this, CUI_RES( FT_TRGR_START_VALUE ) ),
278     aMtrTrgrStartValue  ( this, CUI_RES( MTR_TRGR_START_VALUE ) ),
279     aFtTrgrEndValue     ( this, CUI_RES( FT_TRGR_END_VALUE ) ),
280     aMtrTrgrEndValue    ( this, CUI_RES( MTR_TRGR_END_VALUE ) ),
281 
282     aCtlBitmapPreview   ( this, CUI_RES( CTL_BITMAP_PREVIEW ) ),
283     aCtlXRectPreview    ( this, CUI_RES( CTL_TRANS_PREVIEW ) ),
284     bBitmap             ( sal_False ),
285     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
286     aXFillAttr          ( pXPool ),
287     rXFSet              ( aXFillAttr.GetItemSet() )
288 {
289     FreeResource();
290 
291     String accName = String(CUI_RES(STR_EXAMPLE));
292     aCtlBitmapPreview.SetAccessibleName(accName);
293     aCtlXRectPreview.SetAccessibleName(accName);
294     aMtrTransparent.SetAccessibleRelationLabeledBy( &aRbtTransLinear );
295 
296     // main selection
297     aRbtTransOff.SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransOffHdl_Impl));
298     aRbtTransLinear.SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransLinearHdl_Impl));
299     aRbtTransGradient.SetClickHdl(LINK(this, SvxTransparenceTabPage, ClickTransGradientHdl_Impl));
300 
301     // linear transparency
302     aMtrTransparent.SetValue( 50 );
303     aMtrTransparent.SetModifyHdl(LINK(this, SvxTransparenceTabPage, ModifyTransparentHdl_Impl));
304 
305     // gradient transparency
306     aMtrTrgrEndValue.SetValue( 100 );
307     aMtrTrgrStartValue.SetValue( 0 );
308     aLbTrgrGradientType.SetSelectHdl(LINK(this, SvxTransparenceTabPage, ChangeTrgrTypeHdl_Impl));
309     Link aLink = LINK( this, SvxTransparenceTabPage, ModifiedTrgrHdl_Impl);
310     aLbTrgrGradientType.SetSelectHdl( aLink );
311     aMtrTrgrCenterX.SetModifyHdl( aLink );
312     aMtrTrgrCenterY.SetModifyHdl( aLink );
313     aMtrTrgrAngle.SetModifyHdl( aLink );
314     aMtrTrgrBorder.SetModifyHdl( aLink );
315     aMtrTrgrStartValue.SetModifyHdl( aLink );
316     aMtrTrgrEndValue.SetModifyHdl( aLink );
317 
318     // this page needs ExchangeSupport
319     SetExchangeSupport();
320 }
321 
322 void SvxTransparenceTabPage::Construct()
323 {
324 }
325 
326 SfxTabPage* SvxTransparenceTabPage::Create(Window* pWindow, const SfxItemSet& rAttrs)
327 {
328     return(new SvxTransparenceTabPage(pWindow, rAttrs));
329 }
330 
331 sal_uInt16* SvxTransparenceTabPage::GetRanges()
332 {
333     return(pTransparenceRanges);
334 }
335 
336 sal_Bool SvxTransparenceTabPage::FillItemSet(SfxItemSet& rAttrs)
337 {
338     const SfxPoolItem* pGradientItem = NULL;
339     const SfxPoolItem* pLinearItem = NULL;
340     SfxItemState eStateGradient(rOutAttrs.GetItemState(XATTR_FILLFLOATTRANSPARENCE, sal_True, &pGradientItem));
341     SfxItemState eStateLinear(rOutAttrs.GetItemState(XATTR_FILLTRANSPARENCE, sal_True, &pLinearItem));
342     sal_Bool bGradActive = (eStateGradient == SFX_ITEM_SET && ((XFillFloatTransparenceItem*)pGradientItem)->IsEnabled());
343     sal_Bool bLinearActive = (eStateLinear == SFX_ITEM_SET && ((XFillTransparenceItem*)pLinearItem)->GetValue() != 0);
344 
345     // #103765#
346     sal_Bool bGradUsed = (eStateGradient == SFX_ITEM_DONTCARE);
347     sal_Bool bLinearUsed = (eStateLinear == SFX_ITEM_DONTCARE);
348 
349     sal_Bool bModified(sal_False);
350     sal_Bool bSwitchOffLinear(sal_False);
351     sal_Bool bSwitchOffGradient(sal_False);
352 
353     if(aMtrTransparent.IsEnabled())
354     {
355         // linear transparence
356         sal_uInt16 nPos = (sal_uInt16)aMtrTransparent.GetValue();
357         if(nPos != (sal_uInt16)aMtrTransparent.GetSavedValue().ToInt32() || !bLinearActive)
358         {
359             XFillTransparenceItem aItem(nPos);
360             SdrShadowTransparenceItem aShadowItem(nPos);
361             const SfxPoolItem* pOld = GetOldItem(rAttrs, XATTR_FILLTRANSPARENCE);
362             if(!pOld || !(*(const XFillTransparenceItem*)pOld == aItem) || !bLinearActive)
363             {
364                 rAttrs.Put(aItem);
365                 rAttrs.Put(aShadowItem);
366                 bModified = sal_True;
367                 bSwitchOffGradient = sal_True;
368             }
369         }
370     }
371     else if(aLbTrgrGradientType.IsEnabled())
372     {
373         // transparence gradient, fill ItemSet from values
374         if(!bGradActive
375             || (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos() != (XGradientStyle)aLbTrgrGradientType.GetSavedValue()
376             || (sal_uInt16)aMtrTrgrAngle.GetValue() != (sal_uInt16)aMtrTrgrAngle.GetSavedValue().ToInt32()
377             || (sal_uInt16)aMtrTrgrCenterX.GetValue() != (sal_uInt16)aMtrTrgrCenterX.GetSavedValue().ToInt32()
378             || (sal_uInt16)aMtrTrgrCenterY.GetValue() != (sal_uInt16)aMtrTrgrCenterY.GetSavedValue().ToInt32()
379             || (sal_uInt16)aMtrTrgrBorder.GetValue() != (sal_uInt16)aMtrTrgrBorder.GetSavedValue().ToInt32()
380             || (sal_uInt16)aMtrTrgrStartValue.GetValue() != (sal_uInt16)aMtrTrgrStartValue.GetSavedValue().ToInt32()
381             || (sal_uInt16)aMtrTrgrEndValue.GetValue() != (sal_uInt16)aMtrTrgrEndValue.GetSavedValue().ToInt32() )
382         {
383             sal_uInt8 nStartCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrStartValue.GetValue() * 255) / 100);
384             sal_uInt8 nEndCol = (sal_uInt8)(((sal_uInt16)aMtrTrgrEndValue.GetValue() * 255) / 100);
385             XGradient aTmpGradient(
386                         Color(nStartCol, nStartCol, nStartCol),
387                         Color(nEndCol, nEndCol, nEndCol),
388                         (XGradientStyle)aLbTrgrGradientType.GetSelectEntryPos(),
389                         (sal_uInt16)aMtrTrgrAngle.GetValue() * 10,
390                         (sal_uInt16)aMtrTrgrCenterX.GetValue(),
391                         (sal_uInt16)aMtrTrgrCenterY.GetValue(),
392                         (sal_uInt16)aMtrTrgrBorder.GetValue(),
393                         100, 100);
394 
395             String aString;
396             XFillFloatTransparenceItem aItem( rXFSet.GetPool()/*aString*/, aTmpGradient);
397             const SfxPoolItem* pOld = GetOldItem(rAttrs, XATTR_FILLFLOATTRANSPARENCE);
398 
399             if(!pOld || !(*(const XFillFloatTransparenceItem*)pOld == aItem) || !bGradActive)
400             {
401                 rAttrs.Put(aItem);
402                 bModified = sal_True;
403                 bSwitchOffLinear = sal_True;
404             }
405         }
406     }
407     else
408     {
409         // no transparence
410         bSwitchOffGradient = sal_True;
411         bSwitchOffLinear = sal_True;
412     }
413 
414     // disable unused XFillFloatTransparenceItem
415     if(bSwitchOffGradient && (bGradActive || bGradUsed))
416     {
417         Color aColor(COL_BLACK);
418         XGradient aGrad(aColor, Color(COL_WHITE));
419         aGrad.SetStartIntens(100);
420         aGrad.SetEndIntens(100);
421         String aString;
422         XFillFloatTransparenceItem aItem( rXFSet.GetPool()/*aString*/, aGrad);
423         aItem.SetEnabled(sal_False);
424         rAttrs.Put(aItem);
425         bModified = sal_True;
426     }
427 
428     // disable unused XFillFloatTransparenceItem
429     if(bSwitchOffLinear && (bLinearActive || bLinearUsed))
430     {
431         XFillTransparenceItem aItem(0);
432         SdrShadowTransparenceItem aShadowItem(0);
433         rAttrs.Put(aItem);
434         rAttrs.Put(aShadowItem);
435         bModified = sal_True;
436     }
437     //add CHINA001  begin
438     rAttrs.Put (CntUInt16Item(SID_PAGE_TYPE,nPageType));
439     //add CHINA001  end
440     return bModified;
441 }
442 
443 void SvxTransparenceTabPage::Reset(const SfxItemSet& rAttrs)
444 {
445     const SfxPoolItem* pGradientItem = NULL;
446     SfxItemState eStateGradient(rAttrs.GetItemState(XATTR_FILLFLOATTRANSPARENCE, sal_True, &pGradientItem));
447     if(!pGradientItem)
448         pGradientItem = &rAttrs.Get(XATTR_FILLFLOATTRANSPARENCE);
449     sal_Bool bGradActive = (eStateGradient == SFX_ITEM_SET && ((XFillFloatTransparenceItem*)pGradientItem)->IsEnabled());
450 
451     const SfxPoolItem* pLinearItem = NULL;
452     SfxItemState eStateLinear(rAttrs.GetItemState(XATTR_FILLTRANSPARENCE, sal_True, &pLinearItem));
453     if(!pLinearItem)
454         pLinearItem = &rAttrs.Get(XATTR_FILLTRANSPARENCE);
455     sal_Bool bLinearActive = (eStateLinear == SFX_ITEM_SET && ((XFillTransparenceItem*)pLinearItem)->GetValue() != 0);
456 
457     // transparence gradient
458     const XGradient& rGradient = ((XFillFloatTransparenceItem*)pGradientItem)->GetGradientValue();
459     XGradientStyle eXGS(rGradient.GetGradientStyle());
460     aLbTrgrGradientType.SelectEntryPos(sal::static_int_cast< sal_uInt16 >(eXGS));
461     aMtrTrgrAngle.SetValue(rGradient.GetAngle() / 10);
462     aMtrTrgrBorder.SetValue(rGradient.GetBorder());
463     aMtrTrgrCenterX.SetValue(rGradient.GetXOffset());
464     aMtrTrgrCenterY.SetValue(rGradient.GetYOffset());
465     aMtrTrgrStartValue.SetValue((sal_uInt16)((((sal_uInt16)rGradient.GetStartColor().GetRed() + 1) * 100) / 255));
466     aMtrTrgrEndValue.SetValue((sal_uInt16)((((sal_uInt16)rGradient.GetEndColor().GetRed() + 1) * 100) / 255));
467 
468     // linear transparence
469     sal_uInt16 nTransp = ((XFillTransparenceItem*)pLinearItem)->GetValue();
470     aMtrTransparent.SetValue(bLinearActive ? nTransp : 50);
471     ModifyTransparentHdl_Impl(NULL);
472 
473     // select the correct radio button
474     if(bGradActive)
475     {
476         // transparence gradient, set controls appropriate to item
477         aRbtTransGradient.Check();
478         ClickTransGradientHdl_Impl(NULL);
479     }
480     else if(bLinearActive)
481     {
482         // linear transparence
483         aRbtTransLinear.Check();
484         ClickTransLinearHdl_Impl(NULL);
485     }
486     else
487     {
488         // no transparence
489         aRbtTransOff.Check();
490         ClickTransOffHdl_Impl(NULL);
491         ModifiedTrgrHdl_Impl(NULL);
492     }
493 
494     // save values
495     aMtrTransparent.SaveValue();
496     aLbTrgrGradientType.SaveValue();
497     aMtrTrgrCenterX.SaveValue();
498     aMtrTrgrCenterY.SaveValue();
499     aMtrTrgrAngle.SaveValue();
500     aMtrTrgrBorder.SaveValue();
501     aMtrTrgrStartValue.SaveValue();
502     aMtrTrgrEndValue.SaveValue();
503 
504     sal_Bool bActive = InitPreview ( rAttrs );
505     InvalidatePreview ( bActive );
506 }
507 
508 void SvxTransparenceTabPage::ActivatePage(const SfxItemSet& rSet)
509 {
510     //add CHINA001 Begin
511     SFX_ITEMSET_ARG (&rSet,pPageTypeItem,CntUInt16Item,SID_PAGE_TYPE,sal_False);
512     if (pPageTypeItem)
513         SetPageType(pPageTypeItem->GetValue());
514     //add CHINA001 end
515     //CHINA001 if(*pDlgType == 0) // Flaechen-Dialog
516     //CHINA001      *pPageType = PT_TRANSPARENCE;
517     if(nDlgType == 0) //add CHINA001 // Flaechen-Dialog
518         nPageType = PT_TRANSPARENCE; //add CHINA001
519 
520     InitPreview ( rSet );
521 }
522 
523 int SvxTransparenceTabPage::DeactivatePage(SfxItemSet* _pSet)
524 {
525     if( _pSet )
526         FillItemSet( *_pSet );
527     return(LEAVE_PAGE);
528 }
529 
530 void SvxTransparenceTabPage::PointChanged(Window* , RECT_POINT eRcPt)
531 {
532     eRP = eRcPt;
533 }
534 
535 //
536 // Preview-Methods
537 //
538 sal_Bool SvxTransparenceTabPage::InitPreview ( const SfxItemSet& rSet )
539 {
540     // set transparencetyp for preview
541     if ( aRbtTransOff.IsChecked() )
542     {
543         ClickTransOffHdl_Impl(NULL);
544     } else if ( aRbtTransLinear.IsChecked() )
545     {
546         ClickTransLinearHdl_Impl(NULL);
547     } else if ( aRbtTransGradient.IsChecked() )
548     {
549         ClickTransGradientHdl_Impl(NULL);
550     }
551 
552     // Get fillstyle for preview
553     rXFSet.Put ( ( XFillStyleItem& )    rSet.Get(XATTR_FILLSTYLE) );
554     rXFSet.Put ( ( XFillColorItem& )    rSet.Get(XATTR_FILLCOLOR) );
555     rXFSet.Put ( ( XFillGradientItem& ) rSet.Get(XATTR_FILLGRADIENT) );
556     rXFSet.Put ( ( XFillHatchItem& )    rSet.Get(XATTR_FILLHATCH) );
557     rXFSet.Put ( ( XFillBackgroundItem&)rSet.Get(XATTR_FILLBACKGROUND) );
558     rXFSet.Put ( ( XFillBitmapItem& )   rSet.Get(XATTR_FILLBITMAP) );
559 
560     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
561     aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
562 
563     bBitmap = ( ( ( XFillStyleItem& )rSet.Get(XATTR_FILLSTYLE) ).GetValue() == XFILL_BITMAP );
564 
565     // show the right preview window
566     if ( bBitmap )
567     {
568         aCtlBitmapPreview.Show();
569         aCtlXRectPreview.Hide();
570     }
571     else
572     {
573         aCtlBitmapPreview.Hide();
574         aCtlXRectPreview.Show();
575     }
576 
577     return !aRbtTransOff.IsChecked();
578 }
579 
580 void SvxTransparenceTabPage::InvalidatePreview (sal_Bool bEnable)
581 {
582     if ( bBitmap )
583     {
584         if ( bEnable )
585         {
586             aCtlBitmapPreview.Enable();
587             aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
588         }
589         else
590             aCtlBitmapPreview.Disable();
591         aCtlBitmapPreview.Invalidate();
592     }
593     else
594     {
595         if ( bEnable )
596         {
597             aCtlXRectPreview.Enable();
598             aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
599         }
600         else
601             aCtlXRectPreview.Disable();
602         aCtlXRectPreview.Invalidate();
603     }
604 }
605 
606 void SvxTransparenceTabPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
607 {
608     SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
609     SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False);
610 
611     if (pPageTypeItem)
612         SetPageType(pPageTypeItem->GetValue());
613     if (pDlgTypeItem)
614         SetDlgType(pDlgTypeItem->GetValue());
615     Construct();
616 }
617 /*************************************************************************
618 |*
619 |*  Dialog to modify fill-attributes
620 |*
621 \************************************************************************/
622 
623 SvxAreaTabPage::SvxAreaTabPage( Window* pParent, const SfxItemSet& rInAttrs ) :
624 
625     SvxTabPage          ( pParent, CUI_RES( RID_SVXPAGE_AREA ), rInAttrs ),
626 
627     aFlProp             ( this, CUI_RES( FL_PROP ) ),
628     aTypeLB             ( this, CUI_RES( LB_AREA_TYPE ) ),
629 
630     aLbColor            ( this, CUI_RES( LB_COLOR ) ),
631     aLbGradient         ( this, CUI_RES( LB_GRADIENT ) ),
632     aLbHatching         ( this, CUI_RES( LB_HATCHING ) ),
633     aLbBitmap           ( this, CUI_RES( LB_BITMAP ) ),
634     aCtlBitmapPreview   ( this, CUI_RES( CTL_BITMAP_PREVIEW ) ),
635 
636     aTsbStepCount       ( this, CUI_RES( TSB_STEPCOUNT ) ),
637     aFlStepCount        ( this, CUI_RES( FL_STEPCOUNT ) ),
638     aNumFldStepCount    ( this, CUI_RES( NUM_FLD_STEPCOUNT ) ),
639 
640     aCbxHatchBckgrd     ( this, CUI_RES( CB_HATCHBCKGRD ) ),
641     aLbHatchBckgrdColor ( this, CUI_RES( LB_HATCHBCKGRDCOLOR ) ),
642 
643     aFlSize             ( this, CUI_RES( FL_SIZE ) ),
644     aTsbOriginal        ( this, CUI_RES( TSB_ORIGINAL ) ),
645     aTsbScale           ( this, CUI_RES( TSB_SCALE ) ),
646     aFtXSize            ( this, CUI_RES( FT_X_SIZE ) ),
647     aMtrFldXSize        ( this, CUI_RES( MTR_FLD_X_SIZE ) ),
648     aFtYSize            ( this, CUI_RES( FT_Y_SIZE ) ),
649     aMtrFldYSize        ( this, CUI_RES( MTR_FLD_Y_SIZE ) ),
650     aFlPosition         ( this, CUI_RES( FL_POSITION ) ),
651     aCtlPosition        ( this, CUI_RES( CTL_POSITION ), RP_RM, 110, 80, CS_RECT ),
652     aFtXOffset          ( this, CUI_RES( FT_X_OFFSET ) ),
653     aMtrFldXOffset      ( this, CUI_RES( MTR_FLD_X_OFFSET ) ),
654     aFtYOffset          ( this, CUI_RES( FT_Y_OFFSET ) ),
655     aMtrFldYOffset      ( this, CUI_RES( MTR_FLD_Y_OFFSET ) ),
656     aTsbTile            ( this, CUI_RES( TSB_TILE ) ),
657     aTsbStretch         ( this, CUI_RES( TSB_STRETCH ) ),
658     aFlOffset           ( this, CUI_RES( FL_OFFSET ) ),
659     aRbtRow             ( this, CUI_RES( RBT_ROW ) ),
660     aRbtColumn          ( this, CUI_RES( RBT_COLUMN ) ),
661     aMtrFldOffset       ( this, CUI_RES( MTR_FLD_OFFSET ) ),
662 
663     aCtlXRectPreview    ( this, CUI_RES( CTL_COLOR_PREVIEW ) ),
664 
665     rOutAttrs           ( rInAttrs ),
666 
667     pColorTab( NULL ),
668     pGradientList( NULL ),
669     pHatchingList( NULL ),
670     pBitmapList( NULL ),
671 
672     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
673     aXFillAttr          ( pXPool ),
674     rXFSet              ( aXFillAttr.GetItemSet() )
675 {
676     FreeResource();
677 
678     String accName = String(CUI_RES(STR_EXAMPLE));
679     aCtlXRectPreview.SetAccessibleName(accName);
680     aCtlBitmapPreview.SetAccessibleName(accName);
681 
682     // Gruppen, die sich ueberlagern
683     aLbBitmap.Hide();
684     aCtlBitmapPreview.Hide();
685 
686     aFlStepCount.Hide();
687     aTsbStepCount.Hide();
688     aNumFldStepCount.Hide();
689 
690     aTsbTile.Hide();
691     aTsbStretch.Hide();
692     aTsbScale.Hide();
693     aTsbOriginal.Hide();
694     aFtXSize.Hide();
695     aMtrFldXSize.Hide();
696     aFtYSize.Hide();
697     aMtrFldYSize.Hide();
698     aFlSize.Hide();
699     aRbtRow.Hide();
700     aRbtColumn.Hide();
701     aMtrFldOffset.Hide();
702     aFlOffset.Hide();
703     aCtlPosition.Hide();
704     aFtXOffset.Hide();
705     aMtrFldXOffset.Hide();
706     aFtYOffset.Hide();
707     aMtrFldYOffset.Hide();
708     aFlPosition.Hide();
709     // Controls for Hatch-Background
710     aCbxHatchBckgrd.Hide();
711     aLbHatchBckgrdColor.Hide();
712 
713 
714     aTsbOriginal.EnableTriState( sal_False );
715 
716 
717     // this page needs ExchangeSupport
718     SetExchangeSupport();
719 
720     // set Metrics
721     eFUnit = GetModuleFieldUnit( rInAttrs );
722 
723     switch ( eFUnit )
724     {
725         case FUNIT_M:
726         case FUNIT_KM:
727             eFUnit = FUNIT_MM;
728         break;
729         default: ;//prevent warning
730     }
731     SetFieldUnit( aMtrFldXSize, eFUnit, sal_True );
732     SetFieldUnit( aMtrFldYSize, eFUnit, sal_True );
733 
734     // get PoolUnit
735     SfxItemPool* pPool = rOutAttrs.GetPool();
736     DBG_ASSERT( pPool, "Wo ist der Pool?" );
737     ePoolUnit = pPool->GetMetric( XATTR_FILLBMP_SIZEX );
738 
739     // Setzen Output-Devices
740     rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
741     rXFSet.Put( XFillColorItem( String(), COL_BLACK ) );
742     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
743     aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
744 
745     aLbColor.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyColorHdl_Impl ) );
746     aLbHatchBckgrdColor.SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyHatchBckgrdColorHdl_Impl ) );
747     aCbxHatchBckgrd.SetToggleHdl( LINK( this, SvxAreaTabPage, ToggleHatchBckgrdColorHdl_Impl ) );
748 
749     aLbGradient.SetSelectHdl(
750         LINK( this, SvxAreaTabPage, ModifyGradientHdl_Impl ) );
751     aLbHatching.SetSelectHdl(
752         LINK( this, SvxAreaTabPage, ModifyHatchingHdl_Impl ) );
753     aLbBitmap.SetSelectHdl(
754         LINK( this, SvxAreaTabPage, ModifyBitmapHdl_Impl ) );
755 
756     aTsbStepCount.SetClickHdl(
757         LINK( this, SvxAreaTabPage, ModifyStepCountHdl_Impl ) );
758     aNumFldStepCount.SetModifyHdl(
759         LINK( this, SvxAreaTabPage, ModifyStepCountHdl_Impl ) );
760 
761     Link aLink( LINK( this, SvxAreaTabPage, ModifyTileHdl_Impl ) );
762     aTsbTile.SetClickHdl( aLink );
763     aTsbStretch.SetClickHdl( aLink );
764     aTsbOriginal.SetClickHdl( aLink );
765     aMtrFldXSize.SetModifyHdl( aLink );
766     aMtrFldYSize.SetModifyHdl( aLink );
767     aRbtRow.SetClickHdl( aLink );
768     aRbtColumn.SetClickHdl( aLink );
769     aMtrFldOffset.SetModifyHdl( aLink );
770     aMtrFldXOffset.SetModifyHdl( aLink );
771     aMtrFldYOffset.SetModifyHdl( aLink );
772     aTsbScale.SetClickHdl( LINK( this, SvxAreaTabPage, ClickScaleHdl_Impl ) );
773 
774     aTypeLB.SetSelectHdl( LINK( this, SvxAreaTabPage, SelectDialogTypeHdl_Impl ) );
775 
776     // #i76307# always paint the preview in LTR, because this is what the document does
777     aCtlXRectPreview.EnableRTL(sal_False);
778 
779     aNumFldStepCount.SetAccessibleRelationLabeledBy( &aTsbStepCount );
780     aCtlPosition.SetAccessibleRelationMemberOf( &aFlPosition );
781     aLbHatchBckgrdColor.SetAccessibleRelationLabeledBy( &aCbxHatchBckgrd );
782     aLbHatchBckgrdColor.SetAccessibleName(aCbxHatchBckgrd.GetText());
783 
784     aLbColor.SetAccessibleRelationMemberOf( &aFlProp );
785     aMtrFldOffset.SetAccessibleRelationLabeledBy(&aFlOffset);
786     aMtrFldOffset.SetAccessibleName(aFlOffset.GetText());
787 }
788 
789 // -----------------------------------------------------------------------
790 
791 void SvxAreaTabPage::Construct()
792 {
793     // fill colortables / lists
794     aLbColor.Fill( pColorTab );
795     aLbHatchBckgrdColor.Fill ( pColorTab );
796 
797     aLbGradient.Fill( pGradientList );
798     aLbHatching.Fill( pHatchingList );
799     aLbBitmap.Fill( pBitmapList );
800 }
801 
802 // -----------------------------------------------------------------------
803 
804 void SvxAreaTabPage::ActivatePage( const SfxItemSet& rSet )
805 {
806     sal_uInt16 _nPos = 0;
807     sal_uInt16 nCount;
808     //add CHINA001 Begin
809     SFX_ITEMSET_ARG (&rSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
810     SFX_ITEMSET_ARG (&rSet,pPosItem,SfxUInt16Item,SID_TABPAGE_POS,sal_False);
811     if (pPageTypeItem)
812         SetPageType(pPageTypeItem->GetValue());
813     if (pPosItem)
814         SetPos(pPosItem->GetValue());
815     //add CHINA001 end
816     if( nDlgType == 0 )//CHINA001 if( *pDlgType == 0 ) // Flaechen-Dialog
817     {
818         *pbAreaTP = sal_True;
819 
820         if( pColorTab )
821         {
822             // Bitmapliste
823             if( *pnBitmapListState )
824             {
825                 if( *pnBitmapListState & CT_CHANGED )
826                     pBitmapList = ( (SvxAreaTabDialog*) DLGWIN )->
827                                             GetNewBitmapList();
828 
829                 _nPos = aLbBitmap.GetSelectEntryPos();
830 
831                 aLbBitmap.Clear();
832                 aLbBitmap.Fill( pBitmapList );
833                 nCount = aLbBitmap.GetEntryCount();
834                 if( nCount == 0 )
835                     ; // This case should never occur
836                 else if( nCount <= _nPos )
837                     aLbBitmap.SelectEntryPos( 0 );
838                 else
839                     aLbBitmap.SelectEntryPos( _nPos );
840                 ModifyBitmapHdl_Impl( this );
841             }
842             // hatch-liste
843             if( *pnHatchingListState )
844             {
845                 if( *pnHatchingListState & CT_CHANGED )
846                     pHatchingList = ( (SvxAreaTabDialog*) DLGWIN )->
847                                             GetNewHatchingList();
848 
849                 _nPos = aLbHatching.GetSelectEntryPos();
850 
851                 aLbHatching.Clear();
852                 aLbHatching.Fill( pHatchingList );
853                 nCount = aLbHatching.GetEntryCount();
854                 if( nCount == 0 )
855                     ; // This case should never occur
856                 else if( nCount <= _nPos )
857                     aLbHatching.SelectEntryPos( 0 );
858                 else
859                     aLbHatching.SelectEntryPos( _nPos );
860                 ModifyHatchingHdl_Impl( this );
861 
862                 ModifyHatchBckgrdColorHdl_Impl( this );
863             }
864             // gradient-liste
865             if( *pnGradientListState )
866             {
867                 if( *pnGradientListState & CT_CHANGED )
868                     pGradientList = ( (SvxAreaTabDialog*) DLGWIN )->
869                                             GetNewGradientList();
870 
871                 _nPos = aLbGradient.GetSelectEntryPos();
872 
873                 aLbGradient.Clear();
874                 aLbGradient.Fill( pGradientList );
875                 nCount = aLbGradient.GetEntryCount();
876                 if( nCount == 0 )
877                     ; // This case should never occur
878                 else if( nCount <= _nPos )
879                     aLbGradient.SelectEntryPos( 0 );
880                 else
881                     aLbGradient.SelectEntryPos( _nPos );
882                 ModifyGradientHdl_Impl( this );
883             }
884             // ColorTable
885             if( *pnColorTableState )
886             {
887                 if( *pnColorTableState & CT_CHANGED )
888                     pColorTab = ( (SvxAreaTabDialog*) DLGWIN )->
889                                             GetNewColorTable();
890                 // aLbColor
891                 _nPos = aLbColor.GetSelectEntryPos();
892                 aLbColor.Clear();
893                 aLbColor.Fill( pColorTab );
894                 nCount = aLbColor.GetEntryCount();
895                 if( nCount == 0 )
896                     ; // This case should never occur
897                 else if( nCount <= _nPos )
898                     aLbColor.SelectEntryPos( 0 );
899                 else
900                     aLbColor.SelectEntryPos( _nPos );
901 
902                 ModifyColorHdl_Impl( this );
903 
904                 // Backgroundcolor of hatch
905                 _nPos = aLbHatchBckgrdColor.GetSelectEntryPos();
906                 aLbHatchBckgrdColor.Clear();
907                 aLbHatchBckgrdColor.Fill( pColorTab );
908                 nCount = aLbHatchBckgrdColor.GetEntryCount();
909                 if( nCount == 0 )
910                     ; // This case should never occur
911                 else if( nCount <= _nPos )
912                     aLbHatchBckgrdColor.SelectEntryPos( 0 );
913                 else
914                     aLbHatchBckgrdColor.SelectEntryPos( _nPos );
915 
916                 ModifyHatchBckgrdColorHdl_Impl( this );
917             }
918 
919             // evaluate if any other Tabpage set another filltype
920             if( aTypeLB.GetSelectEntryPos() > XFILL_NONE)
921             {
922                 switch( nPageType )//CHINA001 switch( *pPageType )
923                 {
924                     case PT_GRADIENT:
925                         aTypeLB.SelectEntryPos( XFILL_GRADIENT );
926                         aLbGradient.SelectEntryPos( _nPos );//CHINA001 aLbGradient.SelectEntryPos( *pPos );
927                         ClickGradientHdl_Impl( this );
928                     break;
929 
930                     case PT_HATCH:
931                         aTypeLB.SelectEntryPos( XFILL_HATCH );
932                         aLbHatching.SelectEntryPos( _nPos );//CHINA001 aLbHatching.SelectEntryPos( *pPos );
933                         ClickHatchingHdl_Impl( this );
934                     break;
935 
936                     case PT_BITMAP:
937                         aTypeLB.SelectEntryPos( XFILL_BITMAP );
938                         aLbBitmap.SelectEntryPos( _nPos );//CHINA001 aLbBitmap.SelectEntryPos( *pPos );
939                         ClickBitmapHdl_Impl( this );
940                     break;
941 
942                     case PT_COLOR:
943                         aTypeLB.SelectEntryPos( XFILL_SOLID );
944                         aLbColor.SelectEntryPos( _nPos );//CHINA001 aLbColor.SelectEntryPos( *pPos );
945                         aLbHatchBckgrdColor.SelectEntryPos( _nPos ); //CHINA001 aLbHatchBckgrdColor.SelectEntryPos( *pPos );
946                         ClickColorHdl_Impl( this );
947                     break;
948                 }
949             }
950             nPageType = PT_AREA;//CHINA001 *pPageType = PT_AREA;
951         }
952     }
953 }
954 
955 // -----------------------------------------------------------------------
956 
957 int SvxAreaTabPage::DeactivatePage( SfxItemSet* _pSet )
958 {
959     if( nDlgType == 0 ) // Flaechen-Dialog//CHINA001 if( *pDlgType == 0 ) // Flaechen-Dialog
960     {
961         XFillStyle eStyle = (XFillStyle) aTypeLB.GetSelectEntryPos();
962         switch( eStyle )
963         {
964             case XFILL_GRADIENT:
965             {
966                         nPageType = PT_GRADIENT;//CHINA001 *pPageType = PT_GRADIENT;
967                         nPos = aLbGradient.GetSelectEntryPos();//CHINA001 *pPos = aLbGradient.GetSelectEntryPos();
968             }
969             break;
970             case XFILL_HATCH:
971             {
972                 nPageType = PT_HATCH;//CHINA001 *pPageType = PT_HATCH;
973                 nPos = aLbHatching.GetSelectEntryPos();//CHINA001 *pPos = aLbHatching.GetSelectEntryPos();
974             }
975             break;
976             case XFILL_BITMAP:
977             {
978                 nPageType = PT_BITMAP;//CHINA001 *pPageType = PT_BITMAP;
979                 nPos = aLbBitmap.GetSelectEntryPos();//CHINA001 *pPos = aLbBitmap.GetSelectEntryPos();
980             }
981             break;
982             case XFILL_SOLID:
983             {
984                 nPageType = PT_COLOR;//CHINA001 *pPageType = PT_COLOR;
985                 nPos = aLbColor.GetSelectEntryPos();//CHINA001 *pPos = aLbColor.GetSelectEntryPos();
986             }
987             break;
988             default: ;//prevent warning
989         }
990     }
991 
992     if( _pSet )
993         FillItemSet( *_pSet );
994 
995     return( LEAVE_PAGE );
996 }
997 
998 // -----------------------------------------------------------------------
999 
1000 sal_Bool SvxAreaTabPage::FillItemSet( SfxItemSet& rAttrs )
1001 {
1002     const SfxPoolItem* pOld = NULL;
1003     sal_uInt16  _nPos;
1004     sal_Bool    bModified = sal_False;
1005 
1006     if( nDlgType != 0 || *pbAreaTP )//CHINA001 if( *pDlgType != 0 || *pbAreaTP )
1007     {
1008         XFillStyle eStyle = (XFillStyle) aTypeLB.GetSelectEntryPos();
1009         XFillStyle eSavedStyle = (XFillStyle) aTypeLB.GetSavedValue();
1010         switch( eStyle )
1011         {
1012             case XFILL_NONE:
1013             {
1014                 if(  eSavedStyle != eStyle )
1015                 {
1016                     XFillStyleItem aStyleItem( XFILL_NONE );
1017                     pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE );
1018                     if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) )
1019                     {
1020                         rAttrs.Put( aStyleItem );
1021                         bModified = sal_True;
1022                     }
1023                 }
1024             }
1025             break;
1026             case XFILL_SOLID:
1027             {
1028                  _nPos = aLbColor.GetSelectEntryPos();
1029                  if( _nPos != LISTBOX_ENTRY_NOTFOUND &&
1030                      _nPos != aLbColor.GetSavedValue() )
1031                  {
1032                      XFillColorItem aItem( aLbColor.GetSelectEntry(),
1033                                            aLbColor.GetSelectEntryColor() );
1034                      pOld = GetOldItem( rAttrs, XATTR_FILLCOLOR );
1035                      if ( !pOld || !( *(const XFillColorItem*)pOld == aItem ) )
1036                      {
1037                          rAttrs.Put( aItem );
1038                          bModified = sal_True;
1039                      }
1040                  }
1041                  // NEU
1042                  if( (eSavedStyle != eStyle) &&
1043                      ( bModified ||
1044                        SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True ) ) )
1045                  {
1046                      XFillStyleItem aStyleItem( XFILL_SOLID );
1047                      pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE );
1048                      if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) )
1049                      {
1050                          rAttrs.Put( aStyleItem );
1051                          bModified = sal_True;
1052                      }
1053                  }
1054             }
1055             break;
1056             case XFILL_GRADIENT:
1057             {
1058                 _nPos = aLbGradient.GetSelectEntryPos();
1059                 if( _nPos != LISTBOX_ENTRY_NOTFOUND &&
1060                     _nPos != aLbGradient.GetSavedValue() )
1061                 {
1062                     XGradient aGradient = pGradientList->GetGradient( _nPos )->GetGradient();
1063                     String aString = aLbGradient.GetSelectEntry();
1064                     XFillGradientItem aItem( aString, aGradient );
1065                     pOld = GetOldItem( rAttrs, XATTR_FILLGRADIENT );
1066                     if ( !pOld || !( *(const XFillGradientItem*)pOld == aItem ) )
1067                     {
1068                         rAttrs.Put( aItem );
1069                         bModified = sal_True;
1070                     }
1071                 }
1072                 // NEU
1073                 if( (eSavedStyle != eStyle) &&
1074                     ( bModified ||
1075                       SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True ) ) )
1076                 {
1077                     XFillStyleItem aStyleItem( XFILL_GRADIENT );
1078                     pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE );
1079                     if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) )
1080                     {
1081                         rAttrs.Put( aStyleItem );
1082                         bModified = sal_True;
1083                     }
1084                 }
1085             }
1086             break;
1087             case XFILL_HATCH:
1088             {
1089                 _nPos = aLbHatching.GetSelectEntryPos();
1090                 if( _nPos != LISTBOX_ENTRY_NOTFOUND &&
1091                    _nPos != aLbHatching.GetSavedValue() )
1092                 {
1093                     XHatch aHatching = pHatchingList->GetHatch( _nPos )->GetHatch();
1094                     String aString = aLbHatching.GetSelectEntry();
1095                     XFillHatchItem aItem( aString, aHatching );
1096                     pOld = GetOldItem( rAttrs, XATTR_FILLHATCH );
1097                     if ( !pOld || !( *(const XFillHatchItem*)pOld == aItem ) )
1098                     {
1099                         rAttrs.Put( aItem );
1100                         bModified = sal_True;
1101                     }
1102                 }
1103                 XFillBackgroundItem aItem ( aCbxHatchBckgrd.IsChecked() );
1104                 rAttrs.Put( aItem );
1105                 nPos = aLbHatchBckgrdColor.GetSelectEntryPos();
1106                 if( nPos != LISTBOX_ENTRY_NOTFOUND &&
1107                      nPos != aLbHatchBckgrdColor.GetSavedValue() )
1108                 {
1109                     XFillColorItem aFillColorItem( aLbHatchBckgrdColor.GetSelectEntry(),
1110                                           aLbHatchBckgrdColor.GetSelectEntryColor() );
1111                     pOld = GetOldItem( rAttrs, XATTR_FILLCOLOR );
1112                     if ( !pOld || !( *(const XFillColorItem*)pOld == aFillColorItem ) )
1113                     {
1114                         rAttrs.Put( aFillColorItem );
1115                         bModified = sal_True;
1116                     }
1117                 }
1118                 // NEU
1119                 if( (eSavedStyle != eStyle) &&
1120                     ( bModified ||
1121                       SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True ) ) )
1122                 {
1123                     XFillStyleItem aStyleItem( XFILL_HATCH );
1124                     pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE );
1125                     if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) )
1126                     {
1127                         rAttrs.Put( aStyleItem );
1128                         bModified = sal_True;
1129                     }
1130                 }
1131             }
1132             break;
1133             case XFILL_BITMAP:
1134             {
1135                 nPos = aLbBitmap.GetSelectEntryPos();
1136                 if( nPos != LISTBOX_ENTRY_NOTFOUND &&
1137                     nPos != aLbBitmap.GetSavedValue() )
1138                 {
1139                     XOBitmap aXOBitmap = pBitmapList->GetBitmap( nPos )->GetXBitmap();
1140                     String aString = aLbBitmap.GetSelectEntry();
1141                     XFillBitmapItem aFillBitmapItem( aString, aXOBitmap );
1142                     pOld = GetOldItem( rAttrs, XATTR_FILLBITMAP );
1143                     if ( !pOld || !( *(const XFillBitmapItem*)pOld == aFillBitmapItem ) )
1144                     {
1145                         rAttrs.Put( aFillBitmapItem );
1146                         bModified = sal_True;
1147                     }
1148                 }
1149                 // NEU
1150                 if( (eSavedStyle != eStyle) &&
1151                     ( bModified ||
1152                       SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ), sal_True ) ) )
1153                 {
1154                     XFillStyleItem aStyleItem( XFILL_BITMAP );
1155                     pOld = GetOldItem( rAttrs, XATTR_FILLSTYLE );
1156                     if ( !pOld || !( *(const XFillStyleItem*)pOld == aStyleItem ) )
1157                     {
1158                         rAttrs.Put( aStyleItem );
1159                         bModified = sal_True;
1160                     }
1161                }
1162            }
1163            break;
1164        }
1165 
1166         // Schrittweite
1167         if( aTsbStepCount.IsEnabled() )
1168         {
1169             sal_uInt16 nValue = 0;
1170             sal_Bool   bValueModified = sal_False;
1171             TriState eState = aTsbStepCount.GetState();
1172             if( eState == STATE_CHECK )
1173             {
1174                 if( eState != aTsbStepCount.GetSavedValue() )
1175                     bValueModified = sal_True;
1176             }
1177             else
1178             {
1179                 // Zustand != Disabled ?
1180                 if( aNumFldStepCount.GetText().Len() > 0 )
1181                 {
1182                     nValue = (sal_uInt16) aNumFldStepCount.GetValue();
1183                     if( nValue != (sal_uInt16) aNumFldStepCount.GetSavedValue().ToInt32() )
1184                         bValueModified = sal_True;
1185                 }
1186             }
1187             if( bValueModified )
1188             {
1189                 XGradientStepCountItem aFillBitmapItem( nValue );
1190                 pOld = GetOldItem( rAttrs, XATTR_GRADIENTSTEPCOUNT );
1191                 if ( !pOld || !( *(const XGradientStepCountItem*)pOld == aFillBitmapItem ) )
1192                 {
1193                     rAttrs.Put( aFillBitmapItem );
1194                     bModified = sal_True;
1195                 }
1196             }
1197         }
1198 
1199         // Kacheln
1200         if( aTsbTile.IsEnabled() )
1201         {
1202             TriState eState = aTsbTile.GetState();
1203             if( eState != aTsbTile.GetSavedValue() )
1204             {
1205                 XFillBmpTileItem aFillBmpTileItem(
1206                     sal::static_int_cast< sal_Bool >( eState ) );
1207                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_TILE );
1208                 if ( !pOld || !( *(const XFillBmpTileItem*)pOld == aFillBmpTileItem ) )
1209                 {
1210                     rAttrs.Put( aFillBmpTileItem );
1211                     bModified = sal_True;
1212                 }
1213             }
1214         }
1215         // Stretchen
1216         if( aTsbStretch.IsEnabled() )
1217         {
1218             TriState eState = aTsbStretch.GetState();
1219             if( eState != aTsbStretch.GetSavedValue() )
1220             {
1221                 XFillBmpStretchItem aFillBmpStretchItem(
1222                     sal::static_int_cast< sal_Bool >( eState ) );
1223                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_STRETCH );
1224                 if ( !pOld || !( *(const XFillBmpStretchItem*)pOld == aFillBmpStretchItem ) )
1225                 {
1226                     rAttrs.Put( aFillBmpStretchItem );
1227                     bModified = sal_True;
1228                 }
1229             }
1230         }
1231 
1232         // Originalgroesse (im UI) wird wie folgt benutzt:
1233         // Controls sind disabled, muessen aber gesetzt werden.
1234         // SizeX = 0; SizeY = 0; Log = sal_True
1235 
1236         //aTsbScale
1237         TriState eState = aTsbScale.GetState();
1238         if( eState != aTsbScale.GetSavedValue() ||
1239             ( !aTsbScale.IsEnabled() &&
1240               aTsbOriginal.IsEnabled() &&
1241               aTsbScale.GetSavedValue() != STATE_CHECK ) )
1242         {
1243             XFillBmpSizeLogItem* pItem = NULL;
1244             if( aTsbScale.IsEnabled() )
1245                 pItem = new XFillBmpSizeLogItem( eState == STATE_NOCHECK );
1246             else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK )
1247                 pItem = new XFillBmpSizeLogItem( sal_True );
1248 
1249             if( pItem )
1250             {
1251                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_SIZELOG );
1252                 if ( !pOld || !( *(const XFillBmpSizeLogItem*)pOld == *pItem ) )
1253                 {
1254                     rAttrs.Put( *pItem );
1255                     bModified = sal_True;
1256                 }
1257                 delete pItem;
1258             }
1259         }
1260 
1261         //aMtrFldXSize
1262         String aStr = aMtrFldXSize.GetText();
1263         {
1264             XFillBmpSizeXItem* pItem = NULL;
1265             TriState eScaleState = aTsbScale.GetState();
1266 
1267             if( aMtrFldXSize.IsEnabled() &&
1268                 aStr.Len() > 0  &&
1269                 aStr != aMtrFldXSize.GetSavedValue() )
1270             {
1271                 if( eScaleState == STATE_NOCHECK )
1272                     pItem = new XFillBmpSizeXItem( GetCoreValue( aMtrFldXSize, ePoolUnit ) );
1273                 else
1274                 {
1275                     // Prozentwerte werden negativ gesetzt, damit
1276                     // diese nicht skaliert werden; dieses wird
1277                     // im Item beruecksichtigt ( KA05.11.96 )
1278                     pItem = new XFillBmpSizeXItem( -labs( static_cast<long>(aMtrFldXSize.GetValue()) ) );
1279                 }
1280             }
1281             else if( aTsbOriginal.IsEnabled() &&
1282                      aTsbOriginal.GetState() == STATE_CHECK &&
1283                      aMtrFldXSize.GetSavedValue().Len() > 0 )
1284                 pItem = new XFillBmpSizeXItem( 0 );
1285 
1286             if( pItem )
1287             {
1288                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_SIZEX );
1289                 if ( !pOld || !( *(const XFillBmpSizeXItem*)pOld == *pItem ) )
1290                 {
1291                     rAttrs.Put( *pItem );
1292                     bModified = sal_True;
1293                 }
1294                 delete pItem;
1295             }
1296         }
1297 
1298         //aMtrFldYSize
1299         aStr = aMtrFldYSize.GetText();
1300         {
1301             XFillBmpSizeYItem* pItem = NULL;
1302             TriState eScaleState = aTsbScale.GetState();
1303 
1304             if( aMtrFldYSize.IsEnabled() &&
1305                 aStr.Len() > 0  &&
1306                 aStr != aMtrFldYSize.GetSavedValue() )
1307             {
1308                 if( eScaleState == STATE_NOCHECK )
1309                     pItem = new XFillBmpSizeYItem( GetCoreValue( aMtrFldYSize, ePoolUnit ) );
1310                 else
1311                 {
1312                     // Prozentwerte werden negativ gesetzt, damit
1313                     // diese vom MetricItem nicht skaliert werden;
1314                     // dieses wird im Item beruecksichtigt ( KA05.11.96 )
1315                     pItem = new XFillBmpSizeYItem( -labs( static_cast<long>(aMtrFldYSize.GetValue()) ) );
1316                 }
1317             }
1318             else if( aTsbOriginal.IsEnabled() &&
1319                      aTsbOriginal.GetState() == STATE_CHECK &&
1320                      aMtrFldYSize.GetSavedValue().Len() > 0 )
1321                 pItem = new XFillBmpSizeYItem( 0 );
1322 
1323             if( pItem )
1324             {
1325                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_SIZEY );
1326                 if ( !pOld || !( *(const XFillBmpSizeYItem*)pOld == *pItem ) )
1327                 {
1328                     rAttrs.Put( *pItem );
1329                     bModified = sal_True;
1330                 }
1331                 delete pItem;
1332             }
1333         }
1334 
1335         //aRbtRow
1336         //aRbtColumn
1337         //aMtrFldOffset
1338         if( aMtrFldOffset.IsEnabled() )
1339         {
1340             String aMtrString = aMtrFldOffset.GetText();
1341             if( ( aMtrString.Len() > 0  &&
1342                   aMtrString != aMtrFldOffset.GetSavedValue() ) ||
1343                   aRbtRow.GetSavedValue() != aRbtRow.IsChecked() ||
1344                   aRbtColumn.GetSavedValue() != aRbtColumn.IsChecked() )
1345             {
1346                 if( aRbtRow.IsChecked() )
1347                 {
1348                     XFillBmpTileOffsetXItem aFillBmpTileOffsetXItem( (sal_uInt16) aMtrFldOffset.GetValue() );
1349                     pOld = GetOldItem( rAttrs, XATTR_FILLBMP_TILEOFFSETX );
1350                     if ( !pOld || !( *(const XFillBmpTileOffsetXItem*)pOld == aFillBmpTileOffsetXItem ) )
1351                     {
1352                         rAttrs.Put( aFillBmpTileOffsetXItem );
1353                         rAttrs.Put( XFillBmpTileOffsetYItem( 0 ) );
1354                         bModified = sal_True;
1355                     }
1356                 }
1357                 else if( aRbtColumn.IsChecked() )
1358                 {
1359                     XFillBmpTileOffsetYItem aFillBmpTileOffsetYItem( (sal_uInt16) aMtrFldOffset.GetValue() );
1360                     pOld = GetOldItem( rAttrs, XATTR_FILLBMP_TILEOFFSETY );
1361                     if ( !pOld || !( *(const XFillBmpTileOffsetYItem*)pOld == aFillBmpTileOffsetYItem ) )
1362                     {
1363                         rAttrs.Put( aFillBmpTileOffsetYItem );
1364                         rAttrs.Put( XFillBmpTileOffsetXItem( 0 ) );
1365                         bModified = sal_True;
1366                     }
1367                 }
1368             }
1369         }
1370 
1371         //aCtlPosition
1372         if( aCtlPosition.IsEnabled() )
1373         {
1374             sal_Bool bPut = sal_False;
1375             RECT_POINT _eRP = aCtlPosition.GetActualRP();
1376 
1377             if( SFX_ITEM_DONTCARE == rOutAttrs.GetItemState( XATTR_FILLBMP_POS ) )
1378                 bPut = sal_True;
1379             else
1380             {
1381                 RECT_POINT eValue = ( ( const XFillBmpPosItem& ) rOutAttrs.Get( XATTR_FILLBMP_POS ) ).GetValue();
1382                 if( eValue != _eRP )
1383                     bPut = sal_True;
1384             }
1385             if( bPut )
1386             {
1387                 XFillBmpPosItem aFillBmpPosItem( _eRP );
1388                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_POS );
1389                 if ( !pOld || !( *(const XFillBmpPosItem*)pOld == aFillBmpPosItem ) )
1390                 {
1391                     rAttrs.Put( aFillBmpPosItem );
1392                     bModified = sal_True;
1393                 }
1394             }
1395         }
1396 
1397         //aMtrFldXOffset
1398         if( aMtrFldXOffset.IsEnabled() )
1399         {
1400             String sMtrXOffset = aMtrFldXOffset.GetText();
1401             if( sMtrXOffset.Len() > 0  &&
1402                 sMtrXOffset != aMtrFldXOffset.GetSavedValue() )
1403             {
1404                 XFillBmpPosOffsetXItem aFillBmpPosOffsetXItem( (sal_uInt16) aMtrFldXOffset.GetValue() );
1405                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_POSOFFSETX );
1406                 if ( !pOld || !( *(const XFillBmpPosOffsetXItem*)pOld == aFillBmpPosOffsetXItem ) )
1407                 {
1408                     rAttrs.Put( aFillBmpPosOffsetXItem );
1409                     bModified = sal_True;
1410                 }
1411             }
1412         }
1413 
1414         //aMtrFldYOffset
1415         if( aMtrFldYOffset.IsEnabled() )
1416         {
1417             String sMtrYOffset = aMtrFldYOffset.GetText();
1418             if( sMtrYOffset.Len() > 0  &&
1419                 sMtrYOffset != aMtrFldYOffset.GetSavedValue() )
1420             {
1421                 XFillBmpPosOffsetYItem aFillBmpPosOffsetYItem( (sal_uInt16) aMtrFldYOffset.GetValue() );
1422                 pOld = GetOldItem( rAttrs, XATTR_FILLBMP_POSOFFSETY );
1423                 if ( !pOld || !( *(const XFillBmpPosOffsetYItem*)pOld == aFillBmpPosOffsetYItem ) )
1424                 {
1425                     rAttrs.Put( aFillBmpPosOffsetYItem );
1426                     bModified = sal_True;
1427                 }
1428             }
1429         }
1430         //add CHINA001  begin
1431         rAttrs.Put (SfxUInt16Item(SID_PAGE_TYPE,nPageType));
1432         rAttrs.Put (SfxUInt16Item(SID_TABPAGE_POS,nPos));
1433         //add CHINA001  end
1434     }
1435 
1436     return( bModified );
1437 }
1438 
1439 // -----------------------------------------------------------------------
1440 
1441 void SvxAreaTabPage::Reset( const SfxItemSet& rAttrs )
1442 {
1443     //const SfxPoolItem *pPoolItem = NULL;
1444 
1445     XFillStyle eXFS;
1446     if( rAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE )
1447     {
1448         eXFS = (XFillStyle) ( ( ( const XFillStyleItem& ) rAttrs.
1449                                 Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
1450         aTypeLB.SelectEntryPos( sal::static_int_cast< sal_uInt16 >( eXFS ) );
1451         switch( eXFS )
1452         {
1453             case XFILL_NONE:
1454                 ClickInvisibleHdl_Impl( this );
1455             break;
1456 
1457             case XFILL_SOLID:
1458                 //if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) )
1459                 if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLCOLOR ) )
1460                 {
1461                     XFillColorItem aColorItem( ( const XFillColorItem& )
1462                                         rAttrs.Get( XATTR_FILLCOLOR ) );
1463 
1464                     aLbColor.SelectEntry( aColorItem.GetColorValue() );
1465                     aLbHatchBckgrdColor.SelectEntry( aColorItem.GetColorValue() );
1466                 }
1467                 ClickColorHdl_Impl( this );
1468 
1469             break;
1470 
1471             case XFILL_GRADIENT:
1472                 //if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True, &pPoolItem ) )
1473                 if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLGRADIENT ) )
1474                 {
1475                     XFillGradientItem aGradientItem( ( ( const XFillGradientItem& )
1476                                             rAttrs.Get( XATTR_FILLGRADIENT ) ) );
1477                     String    aString( aGradientItem.GetName() );
1478                     XGradient aGradient( aGradientItem.GetGradientValue() );
1479 
1480                     aLbGradient.SelectEntryByList( pGradientList, aString, aGradient );
1481                 }
1482                 ClickGradientHdl_Impl( this );
1483             break;
1484 
1485             case XFILL_HATCH:
1486                 //if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True, &pPoolItem ) )
1487                 if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLHATCH ) )
1488                 {
1489                     aLbHatching.SelectEntry( ( ( const XFillHatchItem& )
1490                                     rAttrs.Get( XATTR_FILLHATCH ) ).GetName() );
1491                 }
1492                 ClickHatchingHdl_Impl( this );
1493 
1494                 if ( SFX_ITEM_DONTCARE != rAttrs.GetItemState ( XATTR_FILLBACKGROUND ) )
1495                 {
1496                     aCbxHatchBckgrd.Check ( ( ( const XFillBackgroundItem& ) rAttrs.Get ( XATTR_FILLBACKGROUND ) ).GetValue() );
1497                 }
1498                 ToggleHatchBckgrdColorHdl_Impl( this );
1499                 if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLCOLOR ) )
1500                 {
1501                     XFillColorItem aColorItem( ( const XFillColorItem& )
1502                                         rAttrs.Get( XATTR_FILLCOLOR ) );
1503 
1504                     aLbColor.SelectEntry( aColorItem.GetColorValue() );
1505                     aLbHatchBckgrdColor.SelectEntry( aColorItem.GetColorValue() );
1506                 }
1507             break;
1508 
1509             case XFILL_BITMAP:
1510             {
1511                 if( SFX_ITEM_DONTCARE != rAttrs.GetItemState( XATTR_FILLBITMAP ) )
1512                 {
1513                     XFillBitmapItem aBitmapItem( ( const XFillBitmapItem& )
1514                                         rAttrs.Get( XATTR_FILLBITMAP ) );
1515 
1516                     String aString( aBitmapItem.GetName() );
1517                     aLbBitmap.SelectEntry( aString );
1518                 }
1519                 ClickBitmapHdl_Impl( this );
1520             }
1521             break;
1522 
1523             default:
1524                 //aLbColor.SelectEntryPos(0);
1525                 //aRbtColor.Check();
1526             break;
1527         }
1528     }
1529     else
1530     {
1531         // Alle LBs nicht zug"anglich machen
1532         aLbColor.Hide();
1533         aLbGradient.Hide();
1534         aLbHatching.Hide();
1535         aLbBitmap.Hide();
1536         aCtlBitmapPreview.Hide();
1537         aLbColor.Disable();
1538         aLbColor.Show();
1539 
1540         // Damit Reset() auch mit Zurueck richtig funktioniert
1541         aTypeLB.SetNoSelection();
1542     }
1543 
1544     // Schrittweite
1545     if( ( rAttrs.GetItemState( XATTR_GRADIENTSTEPCOUNT ) != SFX_ITEM_DONTCARE ) ||
1546         ( rAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE ) )
1547     {
1548         aTsbStepCount.EnableTriState( sal_False );
1549         sal_uInt16 nValue = ( ( const XGradientStepCountItem& ) rAttrs.Get( XATTR_GRADIENTSTEPCOUNT ) ).GetValue();
1550         if( nValue == 0 )
1551         {
1552             aTsbStepCount.SetState( STATE_CHECK );
1553             aNumFldStepCount.SetText( String() );
1554         }
1555         else
1556         {
1557             aTsbStepCount.SetState( STATE_NOCHECK );
1558             aNumFldStepCount.SetValue( nValue );
1559         }
1560         ModifyStepCountHdl_Impl( &aTsbStepCount );
1561     }
1562     else
1563     {
1564         aTsbStepCount.SetState( STATE_DONTKNOW );
1565         aNumFldStepCount.SetText( String() );
1566     }
1567 
1568     // Attribute fuer die Bitmap-Fuellung
1569 
1570     // Ist Kacheln gesetzt?
1571     if( rAttrs.GetItemState( XATTR_FILLBMP_TILE ) != SFX_ITEM_DONTCARE )
1572     {
1573         aTsbTile.EnableTriState( sal_False );
1574 
1575         if( ( ( const XFillBmpTileItem& ) rAttrs.Get( XATTR_FILLBMP_TILE ) ).GetValue() )
1576             aTsbTile.SetState( STATE_CHECK );
1577         else
1578             aTsbTile.SetState( STATE_NOCHECK );
1579     }
1580     else
1581         aTsbTile.SetState( STATE_DONTKNOW );
1582 
1583     // Ist Stretchen gesetzt?
1584     if( rAttrs.GetItemState( XATTR_FILLBMP_STRETCH ) != SFX_ITEM_DONTCARE )
1585     {
1586         aTsbStretch.EnableTriState( sal_False );
1587 
1588         if( ( ( const XFillBmpStretchItem& ) rAttrs.Get( XATTR_FILLBMP_STRETCH ) ).GetValue() )
1589             aTsbStretch.SetState( STATE_CHECK );
1590         else
1591             aTsbStretch.SetState( STATE_NOCHECK );
1592     }
1593     else
1594         aTsbStretch.SetState( STATE_DONTKNOW );
1595 
1596 
1597     //aTsbScale
1598     if( rAttrs.GetItemState( XATTR_FILLBMP_SIZELOG ) != SFX_ITEM_DONTCARE )
1599     {
1600         aTsbScale.EnableTriState( sal_False );
1601 
1602         if( ( ( const XFillBmpSizeLogItem& ) rAttrs.Get( XATTR_FILLBMP_SIZELOG ) ).GetValue() )
1603             aTsbScale.SetState( STATE_NOCHECK );
1604         else
1605             aTsbScale.SetState( STATE_CHECK );
1606 
1607         ClickScaleHdl_Impl( NULL );
1608     }
1609     else
1610         aTsbScale.SetState( STATE_DONTKNOW );
1611 
1612 
1613     // Status fuer Originalgroesse ermitteln
1614     TriState eOriginal = STATE_NOCHECK;
1615 
1616     //aMtrFldXSize
1617     if( rAttrs.GetItemState( XATTR_FILLBMP_SIZEX ) != SFX_ITEM_DONTCARE )
1618     {
1619         sal_Int32 nValue = ( ( const XFillBmpSizeXItem& ) rAttrs.Get( XATTR_FILLBMP_SIZEX ) ).GetValue();
1620         if( aTsbScale.GetState() == STATE_CHECK )
1621         {
1622             // Wenn im Item eine Prozentangabe steckt,
1623             // so ist diese wegen des MetricItems negativ
1624             aMtrFldXSize.SetValue( labs( nValue ) );
1625         }
1626         else
1627             SetMetricValue( aMtrFldXSize, nValue, ePoolUnit );
1628         aMtrFldXSize.SaveValue();
1629 
1630         if( nValue == 0 )
1631         {
1632             eOriginal = STATE_CHECK;
1633             // Wert ist beim Ausschalten von Originalgroesse sonst zu klein
1634             // (Performance-Problem)
1635             aMtrFldXSize.SetValue( 100 );
1636         }
1637     }
1638     else
1639     {
1640         aMtrFldXSize.SetText( String() );
1641         aMtrFldXSize.SaveValue();
1642     }
1643 
1644     //aMtrFldYSize
1645     if( rAttrs.GetItemState( XATTR_FILLBMP_SIZEY ) != SFX_ITEM_DONTCARE )
1646     {
1647         sal_Int32 nValue = ( ( const XFillBmpSizeYItem& ) rAttrs.Get( XATTR_FILLBMP_SIZEY ) ).GetValue();
1648         if( aTsbScale.GetState() == STATE_CHECK )
1649         {
1650             // Wenn im Item eine Prozentangabe steckt,
1651             // so ist diese wegen des MetricItems negativ
1652             aMtrFldYSize.SetValue( labs( nValue ) );
1653         }
1654         else
1655             SetMetricValue( aMtrFldYSize, nValue, ePoolUnit );
1656         aMtrFldYSize.SaveValue();
1657 
1658         if( nValue == 0 )
1659             aMtrFldYSize.SetValue( 100 ); //s.o.
1660         else
1661             eOriginal = STATE_NOCHECK;
1662     }
1663     else
1664     {
1665         aMtrFldYSize.SetText( String() );
1666         aMtrFldYSize.SaveValue();
1667         eOriginal = STATE_NOCHECK;
1668     }
1669 
1670     // aTsbOriginal
1671     aTsbOriginal.SetState( eOriginal );
1672 
1673     // #93372# Setting proper state after changing button
1674     ModifyTileHdl_Impl( NULL );
1675 
1676     //aRbtRow
1677     //aRbtColumn
1678     //aMtrFldOffset
1679     if( rAttrs.GetItemState( XATTR_FILLBMP_TILEOFFSETX ) != SFX_ITEM_DONTCARE )
1680     {
1681         sal_uInt16 nValue = ( ( const XFillBmpTileOffsetXItem& ) rAttrs.Get( XATTR_FILLBMP_TILEOFFSETX ) ).GetValue();
1682         if( nValue > 0 )
1683         {
1684             aMtrFldOffset.SetValue( nValue );
1685             aRbtRow.Check();
1686         }
1687         else if( rAttrs.GetItemState( XATTR_FILLBMP_TILEOFFSETY ) != SFX_ITEM_DONTCARE )
1688         {
1689             nValue = ( ( const XFillBmpTileOffsetYItem& ) rAttrs.Get( XATTR_FILLBMP_TILEOFFSETY ) ).GetValue();
1690             if( nValue > 0 )
1691             {
1692                 aMtrFldOffset.SetValue( nValue );
1693                 aRbtColumn.Check();
1694             }
1695         }
1696         else
1697             aMtrFldOffset.SetValue( 0 );
1698     }
1699     else
1700         aMtrFldOffset.SetText( String() );
1701 
1702 
1703     //aCtlPosition
1704     if( rAttrs.GetItemState( XATTR_FILLBMP_POS ) != SFX_ITEM_DONTCARE )
1705     {
1706         RECT_POINT eValue = ( ( const XFillBmpPosItem& ) rAttrs.Get( XATTR_FILLBMP_POS ) ).GetValue();
1707         aCtlPosition.SetActualRP( eValue );
1708     }
1709     else
1710         aCtlPosition.Reset();
1711 
1712     //aMtrFldXOffset
1713     if( rAttrs.GetItemState( XATTR_FILLBMP_POSOFFSETX ) != SFX_ITEM_DONTCARE )
1714     {
1715         sal_Int32 nValue = ( ( const XFillBmpPosOffsetXItem& ) rAttrs.Get( XATTR_FILLBMP_POSOFFSETX ) ).GetValue();
1716         aMtrFldXOffset.SetValue( nValue );
1717     }
1718     else
1719         aMtrFldXOffset.SetText( String() );
1720 
1721     //aMtrFldYOffset
1722     if( rAttrs.GetItemState( XATTR_FILLBMP_POSOFFSETY ) != SFX_ITEM_DONTCARE )
1723     {
1724         sal_Int32 nValue = ( ( const XFillBmpPosOffsetYItem& ) rAttrs.Get( XATTR_FILLBMP_POSOFFSETY ) ).GetValue();
1725         aMtrFldYOffset.SetValue( nValue );
1726     }
1727     else
1728         aMtrFldYOffset.SetText( String() );
1729 
1730     // Erst hier, damit Tile und Stretch mit beruecksichtigt wird
1731     if( aTypeLB.GetSelectEntryPos() == XFILL_BITMAP )
1732         ClickBitmapHdl_Impl( NULL );
1733 
1734     // Werte sichern
1735     aTypeLB.SaveValue();
1736     aLbColor.SaveValue();
1737     aLbGradient.SaveValue();
1738     aLbHatching.SaveValue();
1739     //aCbxHatchBckgrd.SaveValue();
1740     aLbHatchBckgrdColor.SaveValue();
1741     aLbBitmap.SaveValue();
1742 //  aLbTransparent.SaveValue();
1743     aTsbStepCount.SaveValue();
1744     aNumFldStepCount.SaveValue();
1745     aTsbTile.SaveValue();
1746     aTsbStretch.SaveValue();
1747     aTsbScale.SaveValue();
1748     aRbtRow.SaveValue();
1749     aRbtColumn.SaveValue();
1750     aMtrFldOffset.SaveValue();
1751     aMtrFldXOffset.SaveValue();
1752     aMtrFldYOffset.SaveValue();
1753     //aMtrFldXSize.SaveValue(); <- wird oben behandelt
1754     //aMtrFldYSize.SaveValue(); <- wird oben behandelt
1755 }
1756 
1757 // -----------------------------------------------------------------------
1758 
1759 SfxTabPage* SvxAreaTabPage::Create( Window* pWindow,
1760                 const SfxItemSet& rAttrs )
1761 {
1762     return( new SvxAreaTabPage( pWindow, rAttrs ) );
1763 }
1764 
1765 //------------------------------------------------------------------------
1766 
1767 sal_uInt16* SvxAreaTabPage::GetRanges()
1768 {
1769     return( pAreaRanges );
1770 }
1771 
1772 //------------------------------------------------------------------------
1773 IMPL_LINK( SvxAreaTabPage, SelectDialogTypeHdl_Impl, ListBox *, EMPTYARG )
1774 {
1775     switch( (XFillStyle)aTypeLB.GetSelectEntryPos() )
1776     {
1777         case XFILL_NONE: ClickInvisibleHdl_Impl( this ); break;
1778         case XFILL_SOLID: ClickColorHdl_Impl( this ); break;
1779         case XFILL_GRADIENT: ClickGradientHdl_Impl( this ); break;
1780         case XFILL_HATCH: ClickHatchingHdl_Impl( this ); break;
1781         case XFILL_BITMAP: ClickBitmapHdl_Impl( this ); break;
1782     }
1783 
1784     return 0;
1785 }
1786 
1787 IMPL_LINK( SvxAreaTabPage, ClickInvisibleHdl_Impl, void *, EMPTYARG )
1788 {
1789     aTsbTile.Hide();
1790     aTsbStretch.Hide();
1791     aTsbScale.Hide();
1792     aTsbOriginal.Hide();
1793     aFtXSize.Hide();
1794     aMtrFldXSize.Hide();
1795     aFtYSize.Hide();
1796     aMtrFldYSize.Hide();
1797     aFlSize.Hide();
1798     aRbtRow.Hide();
1799     aRbtColumn.Hide();
1800     aMtrFldOffset.Hide();
1801     aFlOffset.Hide();
1802     aCtlPosition.Hide();
1803     aFtXOffset.Hide();
1804     aMtrFldXOffset.Hide();
1805     aFtYOffset.Hide();
1806     aMtrFldYOffset.Hide();
1807     aFlPosition.Hide();
1808 
1809     aLbColor.Hide();
1810     aLbGradient.Hide();
1811     aLbHatching.Hide();
1812     aLbBitmap.Hide();
1813     aCtlXRectPreview.Hide();
1814     aCtlBitmapPreview.Hide();
1815 
1816     aFlStepCount.Hide();
1817     aTsbStepCount.Hide();
1818     aNumFldStepCount.Hide();
1819 
1820     // Controls for Hatch-Background
1821     aCbxHatchBckgrd.Hide();
1822     aLbHatchBckgrdColor.Hide();
1823 
1824     rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
1825     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
1826     aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
1827 
1828     aCtlXRectPreview.Invalidate();
1829     aCtlBitmapPreview.Invalidate();
1830 
1831     return( 0L );
1832 }
1833 
1834 //------------------------------------------------------------------------
1835 
1836 IMPL_LINK( SvxAreaTabPage, ClickColorHdl_Impl, void *, EMPTYARG )
1837 {
1838     aTsbTile.Hide();
1839     aTsbStretch.Hide();
1840     aTsbScale.Hide();
1841     aTsbOriginal.Hide();
1842     aFtXSize.Hide();
1843     aMtrFldXSize.Hide();
1844     aFtYSize.Hide();
1845     aMtrFldYSize.Hide();
1846     aFlSize.Hide();
1847     aRbtRow.Hide();
1848     aRbtColumn.Hide();
1849     aMtrFldOffset.Hide();
1850     aFlOffset.Hide();
1851     aCtlPosition.Hide();
1852     aFtXOffset.Hide();
1853     aMtrFldXOffset.Hide();
1854     aFtYOffset.Hide();
1855     aMtrFldYOffset.Hide();
1856     aFlPosition.Hide();
1857 
1858     aLbColor.Enable();
1859     aLbColor.Show();
1860     aLbGradient.Hide();
1861     aLbHatching.Hide();
1862     aLbBitmap.Hide();
1863     aCtlXRectPreview.Enable();
1864     aCtlXRectPreview.Show();
1865     aCtlBitmapPreview.Hide();
1866 
1867     aFlStepCount.Hide();
1868     aTsbStepCount.Hide();
1869     aNumFldStepCount.Hide();
1870 
1871     // Controls for Hatch-Background
1872     aCbxHatchBckgrd.Hide();
1873     aLbHatchBckgrdColor.Hide();
1874 
1875     // Text der Tabelle setzen
1876     String          aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1877     INetURLObject   aURL( pColorTab->GetPath() );
1878 
1879     aURL.Append( pColorTab->GetName() );
1880     DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
1881 
1882     if( aURL.getBase().getLength() > 18 )
1883     {
1884         aString += String(aURL.getBase()).Copy( 0, 15 );
1885         aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
1886     }
1887     else
1888         aString += String(aURL.getBase());
1889 
1890     ModifyColorHdl_Impl( this );
1891     return( 0L );
1892 }
1893 
1894 //------------------------------------------------------------------------
1895 
1896 IMPL_LINK( SvxAreaTabPage, ModifyColorHdl_Impl, void *, EMPTYARG )
1897 {
1898     const SfxPoolItem* pPoolItem = NULL;
1899     sal_uInt16 _nPos = aLbColor.GetSelectEntryPos();
1900     aLbHatchBckgrdColor.SelectEntryPos( _nPos );
1901     if( _nPos != LISTBOX_ENTRY_NOTFOUND )
1902     {
1903         rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
1904         rXFSet.Put( XFillColorItem( String(),
1905                                     aLbColor.GetSelectEntryColor() ) );
1906     }
1907     // NEU
1908     else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) )
1909     {
1910         rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
1911         Color aColor( ( ( const XFillColorItem* ) pPoolItem )->GetColorValue() );
1912         rXFSet.Put( XFillColorItem( String(), aColor ) );
1913     }
1914     else
1915         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
1916 
1917     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
1918     aCtlXRectPreview.Invalidate();
1919 
1920     return( 0L );
1921 }
1922 //------------------------------------------------------------------------
1923 
1924 IMPL_LINK( SvxAreaTabPage, ClickGradientHdl_Impl, void *, EMPTYARG )
1925 {
1926     aTsbTile.Hide();
1927     aTsbStretch.Hide();
1928     aTsbScale.Hide();
1929     aTsbOriginal.Hide();
1930     aFtXSize.Hide();
1931     aMtrFldXSize.Hide();
1932     aFtYSize.Hide();
1933     aMtrFldYSize.Hide();
1934     aFlSize.Hide();
1935     aRbtRow.Hide();
1936     aRbtColumn.Hide();
1937     aMtrFldOffset.Hide();
1938     aFlOffset.Hide();
1939     aCtlPosition.Hide();
1940     aFtXOffset.Hide();
1941     aMtrFldXOffset.Hide();
1942     aFtYOffset.Hide();
1943     aMtrFldYOffset.Hide();
1944     aFlPosition.Hide();
1945 
1946     aLbColor.Hide();
1947     aLbGradient.Enable();
1948     aLbGradient.Show();
1949     aLbHatching.Hide();
1950     aLbBitmap.Hide();
1951     aCtlXRectPreview.Enable();
1952     aCtlXRectPreview.Show();
1953     aCtlBitmapPreview.Hide();
1954 
1955     aFlStepCount.Enable();
1956     aFlStepCount.Show();
1957     aTsbStepCount.Enable();
1958     aTsbStepCount.Show();
1959     aNumFldStepCount.Show();
1960 
1961     // Controls for Hatch-Background
1962     aCbxHatchBckgrd.Hide();
1963     aLbHatchBckgrdColor.Hide();
1964 
1965     // Text der Tabelle setzen
1966     String          aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1967     INetURLObject   aURL( pGradientList->GetPath() );
1968 
1969     aURL.Append( pGradientList->GetName() );
1970     DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
1971 
1972     if( aURL.getBase().getLength() > 18 )
1973     {
1974         aString += String(aURL.getBase()).Copy( 0, 15 );
1975         aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
1976     }
1977     else
1978         aString += String(aURL.getBase());
1979 
1980     ModifyGradientHdl_Impl( this );
1981     ModifyStepCountHdl_Impl( &aTsbStepCount );
1982     return( 0L );
1983 }
1984 
1985 //------------------------------------------------------------------------
1986 
1987 IMPL_LINK( SvxAreaTabPage, ModifyGradientHdl_Impl, void *, EMPTYARG )
1988 {
1989     const SfxPoolItem* pPoolItem = NULL;
1990     sal_uInt16 _nPos = aLbGradient.GetSelectEntryPos();
1991     if( _nPos != LISTBOX_ENTRY_NOTFOUND )
1992     {
1993         // ItemSet fuellen und an aCtlXRectPreview weiterleiten
1994         XGradientEntry* pEntry = pGradientList->GetGradient( _nPos );
1995 
1996         rXFSet.Put( XFillStyleItem( XFILL_GRADIENT ) );
1997         rXFSet.Put( XFillGradientItem( String(),
1998                                        pEntry->GetGradient() ) );
1999     }
2000     // NEU
2001     else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True, &pPoolItem ) )
2002     {
2003         rXFSet.Put( XFillStyleItem( XFILL_GRADIENT ) );
2004         rXFSet.Put( XFillGradientItem( String(), ( ( const XFillGradientItem* ) pPoolItem )->GetGradientValue() ) );
2005     }
2006     else
2007         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
2008 
2009     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
2010     aCtlXRectPreview.Invalidate();
2011 
2012     return( 0L );
2013 }
2014 
2015 //------------------------------------------------------------------------
2016 
2017 IMPL_LINK( SvxAreaTabPage, ClickHatchingHdl_Impl, void *, EMPTYARG )
2018 {
2019     aLbColor.Hide();
2020     aLbGradient.Hide();
2021     aLbHatching.Enable();
2022     aLbHatching.Show();
2023     aLbBitmap.Hide();
2024     aCtlXRectPreview.Enable();
2025     aCtlXRectPreview.Show();
2026     aCtlBitmapPreview.Hide();
2027 
2028 //  aGrpTransparent.Hide();
2029 //  aLbTransparent.Hide();
2030     aFlStepCount.Hide();
2031     aTsbStepCount.Hide();
2032     aNumFldStepCount.Hide();
2033 
2034     aTsbTile.Hide();
2035     aTsbStretch.Hide();
2036     aTsbScale.Hide();
2037     aTsbOriginal.Hide();
2038     aFtXSize.Hide();
2039     aMtrFldXSize.Hide();
2040     aFtYSize.Hide();
2041     aMtrFldYSize.Hide();
2042     aFlSize.Hide();
2043     aRbtRow.Hide();
2044     aRbtColumn.Hide();
2045     aMtrFldOffset.Hide();
2046     aFlOffset.Hide();
2047     aCtlPosition.Hide();
2048     aFtXOffset.Hide();
2049     aMtrFldXOffset.Hide();
2050     aFtYOffset.Hide();
2051     aMtrFldYOffset.Hide();
2052     aFlPosition.Hide();
2053 
2054     // Controls for Hatch-Background
2055     aCbxHatchBckgrd.Show();
2056     aLbHatchBckgrdColor.Show();
2057     aCbxHatchBckgrd.Enable();
2058     aLbHatchBckgrdColor.Enable();
2059 
2060     // Text der Tabelle setzen
2061     String          aString( CUI_RES( RID_SVXSTR_TABLE ) );     aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
2062     INetURLObject   aURL( pHatchingList->GetPath() );
2063 
2064     aURL.Append( pHatchingList->GetName() );
2065     DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
2066 
2067     if( aURL.getBase().getLength() > 18 )
2068     {
2069         aString += String(String(aURL.getBase()).Copy( 0, 15 ));
2070         aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
2071     }
2072     else
2073         aString += String(aURL.getBase());
2074 
2075     ModifyHatchingHdl_Impl( this );
2076     ModifyHatchBckgrdColorHdl_Impl( this );
2077     ToggleHatchBckgrdColorHdl_Impl( this );
2078 
2079     return( 0L );
2080 }
2081 
2082 //------------------------------------------------------------------------
2083 
2084 IMPL_LINK( SvxAreaTabPage, ModifyHatchingHdl_Impl, void *, EMPTYARG )
2085 {
2086     const SfxPoolItem* pPoolItem = NULL;
2087     sal_uInt16 _nPos = aLbHatching.GetSelectEntryPos();
2088     if( _nPos != LISTBOX_ENTRY_NOTFOUND )
2089     {
2090         // ItemSet fuellen und an aCtlXRectPreview weiterleiten
2091         XHatchEntry* pEntry = pHatchingList->GetHatch( _nPos );
2092 
2093         rXFSet.Put( XFillStyleItem( XFILL_HATCH ) );
2094         rXFSet.Put( XFillHatchItem( String(), pEntry->GetHatch() ) );
2095     }
2096     // NEU
2097     else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True, &pPoolItem ) )
2098     {
2099         rXFSet.Put( XFillStyleItem( XFILL_HATCH ) );
2100         rXFSet.Put( XFillHatchItem( String(), ( ( const XFillHatchItem* ) pPoolItem )->GetHatchValue() ) );
2101     }
2102     else
2103         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
2104 
2105     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
2106     aCtlXRectPreview.Invalidate();
2107 
2108     return( 0L );
2109 }
2110 
2111 //------------------------------------------------------------------------
2112 
2113 IMPL_LINK( SvxAreaTabPage, ModifyHatchBckgrdColorHdl_Impl, void *, EMPTYARG )
2114 {
2115     const SfxPoolItem* pPoolItem = NULL;
2116     sal_uInt16 _nPos = aLbHatchBckgrdColor.GetSelectEntryPos();
2117     aLbColor.SelectEntryPos( _nPos );
2118     if( _nPos != LISTBOX_ENTRY_NOTFOUND )
2119     {
2120 //      rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
2121         rXFSet.Put( XFillColorItem( String(),
2122                                     aLbHatchBckgrdColor.GetSelectEntryColor() ) );
2123     }
2124     // NEU
2125     else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) )
2126     {
2127 //      rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
2128         Color aColor( ( ( const XFillColorItem* ) pPoolItem )->GetColorValue() );
2129         rXFSet.Put( XFillColorItem( String(), aColor ) );
2130     }
2131     else
2132         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
2133 
2134     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
2135     aCtlXRectPreview.Invalidate();
2136 
2137     return( 0L );
2138 }
2139 
2140 //------------------------------------------------------------------------
2141 
2142 IMPL_LINK( SvxAreaTabPage, ToggleHatchBckgrdColorHdl_Impl, void *, EMPTYARG )
2143 {
2144     // switch on/off backgroundcolor for hatches
2145     aLbHatchBckgrdColor.Enable( aCbxHatchBckgrd.IsChecked() );
2146 
2147     XFillBackgroundItem aItem( aCbxHatchBckgrd.IsChecked() );
2148     rXFSet.Put ( aItem, XATTR_FILLBACKGROUND );
2149 
2150     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
2151     aCtlXRectPreview.Invalidate();
2152 
2153     if( aLbHatchBckgrdColor.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND )
2154     {
2155         if ( SFX_ITEM_SET == rOutAttrs.GetItemState( XATTR_FILLCOLOR ) )//>= SFX_ITEM_DEFAULT )
2156         {
2157             XFillColorItem aColorItem( (const XFillColorItem&)rOutAttrs.Get( XATTR_FILLCOLOR ) );
2158             aLbHatchBckgrdColor.SelectEntry( aColorItem.GetColorValue() );
2159         }
2160     }
2161 
2162     return( 0L );
2163 }
2164 
2165 //------------------------------------------------------------------------
2166 
2167 IMPL_LINK( SvxAreaTabPage, ClickBitmapHdl_Impl, void *, EMPTYARG )
2168 {
2169     aLbColor.Hide();
2170     aLbGradient.Hide();
2171     aLbHatching.Hide();
2172     aLbBitmap.Enable();
2173     aLbBitmap.Show();
2174     aCtlBitmapPreview.Enable();
2175     aCtlBitmapPreview.Show();
2176     aCtlXRectPreview.Hide();
2177 //      aGrpPreview.Hide();
2178 //  aGrpTransparent.Hide();
2179 //  aLbTransparent.Hide();
2180     aFlStepCount.Hide();
2181     aTsbStepCount.Hide();
2182     aNumFldStepCount.Hide();
2183 
2184     aTsbTile.Enable();
2185     aTsbStretch.Enable();
2186     aTsbScale.Enable();
2187     aTsbOriginal.Enable();
2188     aFtXSize.Enable();
2189     aMtrFldXSize.Enable();
2190     aFtYSize.Enable();
2191     aMtrFldYSize.Enable();
2192     aFlSize.Enable();
2193     aCtlPosition.Enable();
2194     aFtXOffset.Enable();
2195     aMtrFldXOffset.Enable();
2196     aFtYOffset.Enable();
2197     aMtrFldYOffset.Enable();
2198     aFlPosition.Enable();
2199     aRbtRow.Enable();
2200     aRbtColumn.Enable();
2201     aMtrFldOffset.Enable();
2202     aFlOffset.Enable();
2203 
2204     // Controls for Hatch-Background
2205     aCbxHatchBckgrd.Hide();
2206     aLbHatchBckgrdColor.Hide();
2207 
2208     aTsbTile.Show();
2209     aTsbStretch.Show();
2210     aTsbScale.Show();
2211     aTsbOriginal.Show();
2212     aFtXSize.Show();
2213     aMtrFldXSize.Show();
2214     aFtYSize.Show();
2215     aMtrFldYSize.Show();
2216     aFlSize.Show();
2217     aCtlPosition.Show();
2218     aFtXOffset.Show();
2219     aMtrFldXOffset.Show();
2220     aFtYOffset.Show();
2221     aMtrFldYOffset.Show();
2222     aFlPosition.Show();
2223     aRbtRow.Show();
2224     aRbtColumn.Show();
2225     aMtrFldOffset.Show();
2226     aFlOffset.Show();
2227 
2228     // Text der Tabelle setzen
2229     String          aString( CUI_RES( RID_SVXSTR_TABLE ) );     aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
2230     INetURLObject   aURL( pBitmapList->GetPath() );
2231 
2232     aURL.Append( pBitmapList->GetName() );
2233     DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
2234 
2235     if( aURL.getBase().getLength() > 18 )
2236     {
2237         aString += String(aURL.getBase()).Copy( 0, 15 );
2238         aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
2239     }
2240     else
2241         aString += String(aURL.getBase());
2242 
2243     ModifyBitmapHdl_Impl( this );
2244     ModifyTileHdl_Impl( &aTsbOriginal );
2245     return( 0L );
2246 }
2247 
2248 //------------------------------------------------------------------------
2249 
2250 IMPL_LINK( SvxAreaTabPage, ModifyBitmapHdl_Impl, void *, EMPTYARG )
2251 {
2252     const SfxPoolItem* pPoolItem = NULL;
2253     sal_uInt16 _nPos = aLbBitmap.GetSelectEntryPos();
2254     if( _nPos != LISTBOX_ENTRY_NOTFOUND )
2255     {
2256         // ItemSet fuellen und an aCtlXRectPreview weiterleiten
2257         XBitmapEntry* pEntry = pBitmapList->GetBitmap( _nPos );
2258 
2259         rXFSet.Put( XFillStyleItem( XFILL_BITMAP ) );
2260         rXFSet.Put( XFillBitmapItem( String(), pEntry->GetXBitmap() ) );
2261     }
2262     // NEU
2263     else if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ), sal_True, &pPoolItem ) )
2264     {
2265         rXFSet.Put( XFillStyleItem( XFILL_BITMAP ) );
2266         rXFSet.Put( XFillBitmapItem( String(), ( ( const XFillBitmapItem* ) pPoolItem )->GetBitmapValue() ) );
2267     }
2268     else
2269         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
2270 
2271     aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
2272     aCtlBitmapPreview.Invalidate();
2273 
2274     return( 0L );
2275 }
2276 
2277 //------------------------------------------------------------------------
2278 
2279 //IMPL_LINK( SvxAreaTabPage, ModifyTransparentHdl_Impl, void *, EMPTYARG )
2280 //{
2281 //  sal_uInt16 nPos = aLbTransparent.GetSelectEntryPos();
2282 //  if( nPos != LISTBOX_ENTRY_NOTFOUND )
2283 //  {
2284 //      XFillTransparenceItem aItem( nPos * 25 );
2285 //
2286 //      rXFSet.Put( XFillTransparenceItem( aItem ) );
2287 //      aCtlXRectPreview.SetAttributes( aXFillAttr );
2288 //
2289 //      aCtlXRectPreview.Invalidate();
2290 //  }
2291 //
2292 //  return( 0L );
2293 //}
2294 
2295 //------------------------------------------------------------------------
2296 
2297 IMPL_LINK( SvxAreaTabPage, ModifyStepCountHdl_Impl, void *, p )
2298 {
2299     if( p == &aTsbStepCount )
2300     {
2301         if( aTsbStepCount.GetState() == STATE_NOCHECK )
2302         {
2303             if( aNumFldStepCount.GetText().Len() == 0 )
2304                 aNumFldStepCount.SetText( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "64") ));
2305 
2306             aNumFldStepCount.Enable();
2307         }
2308         else
2309             aNumFldStepCount.Disable();
2310     }
2311 
2312     sal_uInt16 nValue = 0;
2313     if( aTsbStepCount.GetState() != STATE_CHECK )
2314     {
2315         // Zustand != Disabled ?
2316         if( aNumFldStepCount.GetText().Len() > 0 )
2317             nValue = (sal_uInt16) aNumFldStepCount.GetValue();
2318     }
2319     rXFSet.Put( XGradientStepCountItem( nValue ) );
2320     aCtlXRectPreview.SetAttributes( aXFillAttr.GetItemSet() );
2321     aCtlXRectPreview.Invalidate();
2322 
2323     return( 0L );
2324 }
2325 
2326 //------------------------------------------------------------------------
2327 
2328 IMPL_LINK( SvxAreaTabPage, ModifyTileHdl_Impl, void *, EMPTYARG )
2329 {
2330     TriState eState = aTsbTile.GetState();
2331     if( eState == STATE_CHECK )
2332     {
2333         aTsbStretch.Disable();
2334         aRbtRow.Enable();
2335         aRbtColumn.Enable();
2336         aMtrFldOffset.Enable();
2337         aFlOffset.Enable();
2338 
2339         aCtlPosition.Enable();
2340         aCtlPosition.Invalidate();
2341         aFtXOffset.Enable();
2342         aMtrFldXOffset.Enable();
2343         aFtYOffset.Enable();
2344         aMtrFldYOffset.Enable();
2345         aFlPosition.Enable();
2346 
2347         aTsbScale.Enable();
2348         aTsbOriginal.Enable();
2349         aFtXSize.Enable();
2350         aMtrFldXSize.Enable();
2351         aFtYSize.Enable();
2352         aMtrFldYSize.Enable();
2353         aFlSize.Enable();
2354     }
2355     else if( eState == STATE_NOCHECK )
2356     {
2357         aTsbStretch.Enable();
2358         aRbtRow.Disable();
2359         aRbtColumn.Disable();
2360         aMtrFldOffset.Disable();
2361         aFlOffset.Disable();
2362 
2363         aCtlPosition.Disable();
2364         aCtlPosition.Invalidate();
2365         aFtXOffset.Disable();
2366         aMtrFldXOffset.Disable();
2367         aFtYOffset.Disable();
2368         aMtrFldYOffset.Disable();
2369         aFlPosition.Disable();
2370 
2371         if( aTsbStretch.GetState() != STATE_NOCHECK )
2372         {
2373             aTsbScale.Disable();
2374             aTsbOriginal.Disable();
2375             aFtXSize.Disable();
2376             aMtrFldXSize.Disable();
2377             aFtYSize.Disable();
2378             aMtrFldYSize.Disable();
2379             aFlSize.Disable();
2380         }
2381         else
2382         {
2383             aTsbScale.Enable();
2384             aTsbOriginal.Enable();
2385             aFtXSize.Enable();
2386             aMtrFldXSize.Enable();
2387             aFtYSize.Enable();
2388             aMtrFldYSize.Enable();
2389             aFlSize.Enable();
2390         }
2391     }
2392     else
2393     {
2394         aTsbStretch.Disable();
2395         aRbtRow.Disable();
2396         aRbtColumn.Disable();
2397         aMtrFldOffset.Disable();
2398         aFlOffset.Disable();
2399 
2400         aCtlPosition.Disable();
2401         aCtlPosition.Invalidate();
2402         aFtXOffset.Disable();
2403         aMtrFldXOffset.Disable();
2404         aFtYOffset.Disable();
2405         aMtrFldYOffset.Disable();
2406         aFlPosition.Disable();
2407 
2408         aTsbScale.Disable();
2409         aTsbOriginal.Disable();
2410         aFtXSize.Disable();
2411         aMtrFldXSize.Disable();
2412         aFtYSize.Disable();
2413         aMtrFldYSize.Disable();
2414         aFlSize.Disable();
2415     }
2416 
2417     if( aTsbOriginal.GetState() == STATE_CHECK )
2418     {
2419         aMtrFldXSize.SetText( String() );
2420         aMtrFldYSize.SetText( String() );
2421         aFtXSize.Disable();
2422         aFtYSize.Disable();
2423         aMtrFldXSize.Disable();
2424         aMtrFldYSize.Disable();
2425         aTsbScale.Disable();
2426     }
2427     else
2428     {
2429         aMtrFldXSize.SetValue( aMtrFldXSize.GetValue() );
2430         aMtrFldYSize.SetValue( aMtrFldYSize.GetValue() );
2431         /*
2432         if( eState == STATE_CHECK )
2433         {
2434             aFtXSize.Enable();
2435             aFtYSize.Enable();
2436             aMtrFldXSize.Enable();
2437             aMtrFldYSize.Enable();
2438         }
2439         */
2440     }
2441 
2442     rXFSet.Put( XFillBmpTileItem( sal::static_int_cast< sal_Bool >( eState ) ) );
2443 
2444     if( aTsbStretch.IsEnabled() )
2445         rXFSet.Put(
2446             XFillBmpStretchItem(
2447                 sal::static_int_cast< sal_Bool >( aTsbStretch.GetState() ) ) );
2448 
2449     if( aTsbScale.IsEnabled() )
2450         rXFSet.Put( XFillBmpSizeLogItem( aTsbScale.GetState() == STATE_NOCHECK ) );
2451 
2452     if( aMtrFldXSize.IsEnabled() )
2453     {
2454         XFillBmpSizeXItem* pItem = NULL;
2455         TriState eScaleState = aTsbScale.GetState();
2456 
2457         if( eScaleState == STATE_NOCHECK )
2458             pItem = new XFillBmpSizeXItem( GetCoreValue( aMtrFldXSize, ePoolUnit ) );
2459         else
2460             pItem = new XFillBmpSizeXItem( -labs( static_cast<long>(aMtrFldXSize.GetValue()) ) );
2461 
2462         rXFSet.Put( *pItem );
2463 
2464         delete pItem;
2465     }
2466     else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK )
2467     {
2468         // Originalgroesse -> Size == 0
2469         rXFSet.Put( XFillBmpSizeXItem( 0 ) );
2470         rXFSet.Put( XFillBmpSizeLogItem( sal_True ) );
2471     }
2472 
2473     if( aMtrFldYSize.IsEnabled() )
2474     {
2475         XFillBmpSizeYItem* pItem = NULL;
2476         TriState eScaleState = aTsbScale.GetState();
2477 
2478         if( eScaleState == STATE_NOCHECK )
2479             pItem = new XFillBmpSizeYItem( GetCoreValue( aMtrFldYSize, ePoolUnit ) );
2480         else
2481             pItem = new XFillBmpSizeYItem( -labs( static_cast<long>(aMtrFldYSize.GetValue()) ) );
2482 
2483         rXFSet.Put( *pItem );
2484 
2485         delete pItem;
2486     }
2487     else if( aTsbOriginal.IsEnabled() && aTsbOriginal.GetState() == STATE_CHECK )
2488     {
2489         // Originalgroesse -> Size == 0
2490         rXFSet.Put( XFillBmpSizeYItem( 0 ) );
2491         rXFSet.Put( XFillBmpSizeLogItem( sal_True ) );
2492     }
2493 
2494     if( aMtrFldOffset.IsEnabled() )
2495     {
2496         if( aRbtRow.IsChecked() )
2497         {
2498             rXFSet.Put( XFillBmpTileOffsetXItem( (sal_uInt16) aMtrFldOffset.GetValue() ) );
2499             rXFSet.Put( XFillBmpTileOffsetYItem( (sal_uInt16) 0 ) );
2500         }
2501         else if( aRbtColumn.IsChecked() )
2502         {
2503             rXFSet.Put( XFillBmpTileOffsetXItem( (sal_uInt16) 0 ) );
2504             rXFSet.Put( XFillBmpTileOffsetYItem( (sal_uInt16) aMtrFldOffset.GetValue() ) );
2505         }
2506     }
2507 
2508     if( aCtlPosition.IsEnabled() )
2509         rXFSet.Put( XFillBmpPosItem( aCtlPosition.GetActualRP() ) );
2510 
2511     if( aMtrFldXOffset.IsEnabled() )
2512         rXFSet.Put( XFillBmpPosOffsetXItem( (sal_uInt16) aMtrFldXOffset.GetValue() ) );
2513 
2514     if( aMtrFldYOffset.IsEnabled() )
2515         rXFSet.Put( XFillBmpPosOffsetYItem( (sal_uInt16) aMtrFldYOffset.GetValue() ) );
2516 
2517 
2518     aCtlBitmapPreview.SetAttributes( aXFillAttr.GetItemSet() );
2519     aCtlBitmapPreview.Invalidate();
2520 
2521     return( 0L );
2522 }
2523 
2524 //------------------------------------------------------------------------
2525 
2526 IMPL_LINK( SvxAreaTabPage, ClickScaleHdl_Impl, void *, EMPTYARG )
2527 {
2528     if( aTsbScale.GetState() == STATE_CHECK )
2529     {
2530         aMtrFldXSize.SetDecimalDigits( 0 );
2531         aMtrFldXSize.SetUnit( FUNIT_CUSTOM );
2532         aMtrFldXSize.SetValue( 100 );
2533         aMtrFldXSize.SetMax( 100 );
2534         aMtrFldXSize.SetLast( 100 );
2535 
2536         aMtrFldYSize.SetDecimalDigits( 0 );
2537         aMtrFldYSize.SetUnit( FUNIT_CUSTOM );
2538         aMtrFldYSize.SetValue( 100 );
2539         aMtrFldYSize.SetMax( 100 );
2540         aMtrFldYSize.SetLast( 100 );
2541     }
2542     else
2543     {
2544         aMtrFldXSize.SetDecimalDigits( 2 );
2545         aMtrFldXSize.SetUnit( eFUnit );
2546         aMtrFldXSize.SetValue( 100 );
2547         aMtrFldXSize.SetMax( 999900 );
2548         aMtrFldXSize.SetLast( 100000 );
2549 
2550         aMtrFldYSize.SetDecimalDigits( 2 );
2551         aMtrFldYSize.SetUnit( eFUnit );
2552         aMtrFldYSize.SetValue( 100 );
2553         aMtrFldYSize.SetMax( 999900 );
2554         aMtrFldYSize.SetLast( 100000 );
2555     }
2556 
2557     ModifyTileHdl_Impl( NULL );
2558 
2559     return( 0L );
2560 }
2561 
2562 //------------------------------------------------------------------------
2563 
2564 void SvxAreaTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
2565 {
2566     eRP = eRcPt;
2567 
2568     // Ausrichtung der Bitmapfuellung
2569     ModifyTileHdl_Impl( pWindow );
2570 }
2571 
2572 void SvxAreaTabPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
2573 {
2574     SFX_ITEMSET_ARG (&aSet,pColorTabItem,SvxColorTableItem,SID_COLOR_TABLE,sal_False);
2575     SFX_ITEMSET_ARG (&aSet,pGradientListItem,SvxGradientListItem,SID_GRADIENT_LIST,sal_False);
2576     SFX_ITEMSET_ARG (&aSet,pHatchingListItem,SvxHatchListItem,SID_HATCH_LIST,sal_False);
2577     SFX_ITEMSET_ARG (&aSet,pBitmapListItem,SvxBitmapListItem,SID_BITMAP_LIST,sal_False);
2578     SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
2579     SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False);
2580     SFX_ITEMSET_ARG (&aSet,pPosItem,SfxUInt16Item,SID_TABPAGE_POS,sal_False);
2581 
2582     if (pColorTabItem)
2583         SetColorTable(pColorTabItem->GetColorTable());
2584     if (pGradientListItem)
2585         SetGradientList(pGradientListItem->GetGradientList());
2586     if (pHatchingListItem)
2587         SetHatchingList(pHatchingListItem->GetHatchList());
2588     if (pBitmapListItem)
2589         SetBitmapList(pBitmapListItem->GetBitmapList());
2590     if (pPageTypeItem)
2591         SetPageType(pPageTypeItem->GetValue());
2592     if (pDlgTypeItem)
2593         SetDlgType(pDlgTypeItem->GetValue());
2594     if (pPosItem)
2595         SetPos(pPosItem->GetValue());
2596     Construct();
2597 }
2598 
2599