xref: /AOO41X/main/cui/source/tabpages/tpshadow.cxx (revision 3ce09a58b0d6873449cda31e55c66dba2dbc8f7f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26 
27 // include ---------------------------------------------------------------
28 #include <tools/shl.hxx>
29 #include <sfx2/app.hxx>
30 #include <sfx2/module.hxx>
31 #include <svx/dialogs.hrc>
32 
33 #define _SVX_TPSHADOW_CXX
34 
35 #include "svx/xattr.hxx"
36 #include <svx/xpool.hxx>
37 #include <cuires.hrc>
38 #include "tabarea.hrc"
39 #include <svx/svdattr.hxx>
40 #include "svx/drawitem.hxx"
41 #include "cuitabarea.hxx"
42 #include <dialmgr.hxx>
43 #include "svx/dlgutil.hxx"
44 #include <cuitabline.hxx>
45 #include "paragrph.hrc"
46 #include <svx/xlineit0.hxx>
47 #include <sfx2/request.hxx> //add CHINA001
48 
49 #define DLGWIN this->GetParent()->GetParent()
50 
51 // static ----------------------------------------------------------------
52 
53 static sal_uInt16 pShadowRanges[] =
54 {
55     SDRATTR_SHADOWCOLOR,
56     SDRATTR_SHADOWTRANSPARENCE,
57     SID_ATTR_FILL_SHADOW,
58     SID_ATTR_FILL_SHADOW,
59     0
60 };
61 
62 /*************************************************************************
63 |*
64 |*  Dialog zum Aendern des Schattens
65 |*
66 \************************************************************************/
67 
SvxShadowTabPage(Window * pParent,const SfxItemSet & rInAttrs)68 SvxShadowTabPage::SvxShadowTabPage( Window* pParent, const SfxItemSet& rInAttrs ) :
69 
70     SvxTabPage          ( pParent, CUI_RES( RID_SVXPAGE_SHADOW ), rInAttrs ),
71 
72     aFlProp             ( this, CUI_RES( FL_PROP ) ),
73     aTsbShowShadow      ( this, CUI_RES( TSB_SHOW_SHADOW ) ),
74     aFtPosition         ( this, CUI_RES( FT_POSITION ) ),
75     aCtlPosition        ( this, CUI_RES( CTL_POSITION ) ),
76     aFtDistance         ( this, CUI_RES( FT_DISTANCE ) ),
77     aMtrDistance        ( this, CUI_RES( MTR_FLD_DISTANCE ) ),
78     aFtShadowColor      ( this, CUI_RES( FT_SHADOW_COLOR ) ),
79     aLbShadowColor      ( this, CUI_RES( LB_SHADOW_COLOR ) ),
80     aFtTransparent      ( this, CUI_RES( FT_TRANSPARENT ) ),
81     aMtrTransparent      ( this, CUI_RES( MTR_SHADOW_TRANSPARENT ) ),
82     aCtlXRectPreview    ( this, CUI_RES( CTL_COLOR_PREVIEW ) ),
83     rOutAttrs           ( rInAttrs ),
84     maColorTab(),
85     bDisable            ( sal_False ),
86     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
87     aXFillAttr          ( pXPool ),
88     rXFSet              ( aXFillAttr.GetItemSet() )
89 {
90     FreeResource();
91 
92     // diese Page braucht ExchangeSupport
93     SetExchangeSupport();
94 
95     // Metrik einstellen
96     FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
97 
98     switch ( eFUnit )
99     {
100         case FUNIT_M:
101         case FUNIT_KM:
102             eFUnit = FUNIT_MM;
103             break;
104         default: ;//prevent warning
105     }
106     SetFieldUnit( aMtrDistance, eFUnit );
107 
108     // PoolUnit ermitteln
109     SfxItemPool* pPool = rOutAttrs.GetPool();
110     DBG_ASSERT( pPool, "Wo ist der Pool?" );
111     ePoolUnit = pPool->GetMetric( SDRATTR_SHADOWXDIST );
112 
113     // Setzen des Output-Devices
114     XFillStyle eXFS = XFILL_SOLID;
115     if( rOutAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE )
116     {
117         eXFS = (XFillStyle) ( ( ( const XFillStyleItem& ) rOutAttrs.
118                                 Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
119         switch( eXFS )
120         {
121             //case XFILL_NONE: --> NICHTS
122 
123             case XFILL_SOLID:
124                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLCOLOR ) )
125                 {
126                     XFillColorItem aColorItem( ( const XFillColorItem& )
127                                         rOutAttrs.Get( XATTR_FILLCOLOR ) );
128                     rXFSet.Put( aColorItem );
129                 }
130             break;
131 
132             case XFILL_GRADIENT:
133                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLGRADIENT ) )
134                 {
135                     XFillGradientItem aGradientItem( ( ( const XFillGradientItem& )
136                                             rOutAttrs.Get( XATTR_FILLGRADIENT ) ) );
137                     rXFSet.Put( aGradientItem );
138                 }
139             break;
140 
141             case XFILL_HATCH:
142                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLHATCH ) )
143                 {
144                     XFillHatchItem aHatchItem( ( ( const XFillHatchItem& )
145                                     rOutAttrs.Get( XATTR_FILLHATCH ) ) );
146                     rXFSet.Put( aHatchItem );
147                 }
148             break;
149 
150             case XFILL_BITMAP:
151             {
152                 if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLBITMAP ) )
153                 {
154                     XFillBitmapItem aBitmapItem( ( const XFillBitmapItem& )
155                                         rOutAttrs.Get( XATTR_FILLBITMAP ) );
156                     rXFSet.Put( aBitmapItem );
157                 }
158             }
159             break;
160             case XFILL_NONE : break;
161         }
162     }
163     else
164     {
165         rXFSet.Put( XFillColorItem( String(), COL_LIGHTRED ) );
166     }
167 
168     if(XFILL_NONE == eXFS)
169     {
170         // #i96350#
171         // fallback to solid fillmode when no fill mode is provided to have
172         // a reasonable shadow preview. The used color will be a set one or
173         // the default (currently blue8)
174         eXFS = XFILL_SOLID;
175     }
176 
177     rXFSet.Put( XFillStyleItem( eXFS ) );
178     aCtlXRectPreview.SetRectangleAttributes(aXFillAttr.GetItemSet());
179     //aCtlXRectPreview.SetFillAttr( aXFillAttr );
180 
181     aTsbShowShadow.SetClickHdl( LINK( this, SvxShadowTabPage, ClickShadowHdl_Impl ) );
182     Link aLink = LINK( this, SvxShadowTabPage, ModifyShadowHdl_Impl );
183     aLbShadowColor.SetSelectHdl( aLink );
184     aMtrTransparent.SetModifyHdl( aLink );
185     aMtrDistance.SetModifyHdl( aLink );
186 
187     aCtlXRectPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
188     aCtlPosition.SetAccessibleRelationMemberOf( &aFlProp );
189 }
190 
191 // -----------------------------------------------------------------------
192 
Construct()193 void SvxShadowTabPage::Construct()
194 {
195     // Farbtabelle fuellen
196     aLbShadowColor.Fill( maColorTab );
197 
198     if( bDisable )
199     {
200         aTsbShowShadow.Disable();
201         aFtPosition.Disable();
202         aCtlPosition.Disable();
203         aFtDistance.Disable();
204         aMtrDistance.Disable();
205         aFtShadowColor.Disable();
206         aLbShadowColor.Disable();
207         aFtTransparent.Disable();
208         aMtrTransparent.Disable();
209     }
210 }
211 
212 // -----------------------------------------------------------------------
213 
ActivatePage(const SfxItemSet & rSet)214 void SvxShadowTabPage::ActivatePage( const SfxItemSet& rSet )
215 {
216     sal_uInt16 nPos;
217     sal_uInt16 nCount;
218     //add CHINA001 Begin
219     SFX_ITEMSET_ARG (&rSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
220     if (pPageTypeItem)
221         SetPageType(pPageTypeItem->GetValue());
222     //add CHINA001 end
223     if( nDlgType == 0 ) //CHINA001 // Flaechen-Dialogif( *pDlgType == 0 ) // Flaechen-Dialog
224     {
225         if( maColorTab.get() )
226         {
227             // ColorTable
228             if( *pnColorTableState & CT_CHANGED ||
229                 *pnColorTableState & CT_MODIFIED )
230             {
231                 if( *pnColorTableState & CT_CHANGED )
232                 {
233                     SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( DLGWIN );
234                     if( pArea )
235                     {
236                         maColorTab = pArea->GetNewColorTable();
237                     }
238                     else
239                     {
240                         SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( DLGWIN );
241                         if( pLine )
242                             maColorTab = pLine->GetNewColorTable();
243                     }
244                 }
245 
246                 // aLbShadowColor
247                 nPos = aLbShadowColor.GetSelectEntryPos();
248                 aLbShadowColor.Clear();
249                 aLbShadowColor.Fill( maColorTab );
250                 nCount = aLbShadowColor.GetEntryCount();
251                 if( nCount == 0 )
252                     ; // Dieser Fall sollte nicht auftreten
253                 else if( nCount <= nPos )
254                     aLbShadowColor.SelectEntryPos( 0 );
255                 else
256                     aLbShadowColor.SelectEntryPos( nPos );
257 
258                 ModifyShadowHdl_Impl( this );
259             }
260             nPageType = PT_SHADOW;//CHINA001 *pPageType = PT_SHADOW;
261         }
262     }
263 }
264 
265 // -----------------------------------------------------------------------
266 
DeactivatePage(SfxItemSet * _pSet)267 int SvxShadowTabPage::DeactivatePage( SfxItemSet* _pSet )
268 {
269     if( _pSet )
270         FillItemSet( *_pSet );
271 
272     return( LEAVE_PAGE );
273 }
274 
275 // -----------------------------------------------------------------------
276 
FillItemSet(SfxItemSet & rAttrs)277 sal_Bool SvxShadowTabPage::FillItemSet( SfxItemSet& rAttrs )
278 {
279     const SfxPoolItem*  pOld = NULL;
280     sal_Bool                bModified = sal_False;
281 
282     if( !bDisable )
283     {
284         // Schatten
285         TriState eState = aTsbShowShadow.GetState();
286         if( eState != aTsbShowShadow.GetSavedValue() )
287         {
288             SdrShadowItem aItem( sal::static_int_cast< sal_Bool >( eState ) );
289             pOld = GetOldItem( rAttrs, SDRATTR_SHADOW );
290             if ( !pOld || !( *(const SdrShadowItem*)pOld == aItem ) )
291             {
292                 rAttrs.Put( aItem );
293                 bModified = sal_True;
294             }
295         }
296 
297         // Schatten-Entfernung
298         // Etwas umstaendliche Abfrage, ob etwas geaendert wurde,
299         // da Items nicht direkt auf Controls abbildbar sind
300         sal_Int32 nX = 0L, nY = 0L;
301         sal_Int32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
302 
303         switch( aCtlPosition.GetActualRP() )
304         {
305             case RP_LT: nX = nY = -nXY;      break;
306             case RP_MT: nY = -nXY;           break;
307             case RP_RT: nX = nXY; nY = -nXY; break;
308             case RP_LM: nX = -nXY;           break;
309             case RP_RM: nX = nXY;            break;
310             case RP_LB: nX = -nXY; nY = nXY; break;
311             case RP_MB: nY = nXY;            break;
312             case RP_RB: nX = nY = nXY;       break;
313             case RP_MM: break;
314         }
315 
316         // Wenn die Werte des Schattenabstanden==SFX_ITEM_DONTCARE und der angezeigte
317         // String im entspr. MetricField=="", dann w�rde der Vergleich zw. alten und
318         // neuen Distance-Werte ein falsches Ergebnis liefern, da in so einem Fall die
319         // neuen Distance-Werte den Default-Werten des MetricField entspr�chen !!!!
320         if ( !aMtrDistance.IsEmptyFieldValue()                                  ||
321              rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE ||
322              rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE    )
323         {
324             sal_Int32 nOldX = 9876543; // Unmoeglicher Wert, entspr. DontCare
325             sal_Int32 nOldY = 9876543;
326             if( rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
327                 rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
328             {
329                 nOldX = ( ( const SdrShadowXDistItem& ) rOutAttrs.
330                                     Get( SDRATTR_SHADOWXDIST ) ).GetValue();
331                 nOldY = ( ( const SdrShadowYDistItem& ) rOutAttrs.
332                                     Get( SDRATTR_SHADOWYDIST ) ).GetValue();
333             }
334             SdrShadowXDistItem aXItem( nX );
335             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWXDIST );
336             if ( nX != nOldX &&
337                 ( !pOld || !( *(const SdrShadowXDistItem*)pOld == aXItem ) ) )
338             {
339                 rAttrs.Put( aXItem );
340                 bModified = sal_True;
341             }
342             SdrShadowYDistItem aYItem( nY );
343             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWYDIST );
344             if ( nY != nOldY &&
345                 ( !pOld || !( *(const SdrShadowYDistItem*)pOld == aYItem ) ) )
346             {
347                 rAttrs.Put( aYItem );
348                 bModified = sal_True;
349             }
350         }
351 
352         // ShadowColor
353         sal_uInt16 nPos = aLbShadowColor.GetSelectEntryPos();
354         if( nPos != LISTBOX_ENTRY_NOTFOUND &&
355             nPos != aLbShadowColor.GetSavedValue() )
356         {
357             SdrShadowColorItem aItem( aLbShadowColor.GetSelectEntry(),
358                                     aLbShadowColor.GetSelectEntryColor() );
359             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWCOLOR );
360             if ( !pOld || !( *(const SdrShadowColorItem*)pOld == aItem ) )
361             {
362                 rAttrs.Put( aItem );
363                 bModified = sal_True;
364             }
365         }
366 
367         // Transparenz
368         sal_uInt16 nVal = (sal_uInt16)aMtrTransparent.GetValue();
369         if( nVal != (sal_uInt16)aMtrTransparent.GetSavedValue().ToInt32() )
370         {
371             SdrShadowTransparenceItem aItem( nVal );
372             pOld = GetOldItem( rAttrs, SDRATTR_SHADOWTRANSPARENCE );
373             if ( !pOld || !( *(const SdrShadowTransparenceItem*)pOld == aItem ) )
374             {
375                 rAttrs.Put( aItem );
376                 bModified = sal_True;
377             }
378         }
379     }
380     //add CHINA001  begin
381     rAttrs.Put (CntUInt16Item(SID_PAGE_TYPE,nPageType));
382     //add CHINA001  end
383     return( bModified );
384 }
385 
386 // -----------------------------------------------------------------------
387 
Reset(const SfxItemSet & rAttrs)388 void SvxShadowTabPage::Reset( const SfxItemSet& rAttrs )
389 {
390     if( !bDisable )
391     {
392         // Alle Objekte koennen einen Schatten besitzen
393         // z.Z. gibt es nur 8 m�gliche Positionen den Schatten zu setzen
394 
395         // Ist Schatten gesetzt?
396         if( rAttrs.GetItemState( SDRATTR_SHADOW ) != SFX_ITEM_DONTCARE )
397         {
398             aTsbShowShadow.EnableTriState( sal_False );
399 
400             if( ( ( const SdrShadowItem& ) rAttrs.Get( SDRATTR_SHADOW ) ).GetValue() )
401                 aTsbShowShadow.SetState( STATE_CHECK );
402             else
403             {
404                 aTsbShowShadow.SetState( STATE_NOCHECK );
405             }
406         }
407         else
408             aTsbShowShadow.SetState( STATE_DONTKNOW );
409 
410         // Entfernung (nur 8 moegliche Positionen), deshalb
411         // wird nur ein Item ausgewertet
412 
413         if( rAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
414             rAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
415         {
416             sal_Int32 nX = ( ( const SdrShadowXDistItem& ) rAttrs.Get( SDRATTR_SHADOWXDIST ) ).GetValue();
417             sal_Int32 nY = ( ( const SdrShadowYDistItem& ) rAttrs.Get( SDRATTR_SHADOWYDIST ) ).GetValue();
418 
419             if( nX != 0 )
420                 SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
421             else
422                 SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
423 
424             // Setzen des Schatten-Controls
425             if     ( nX <  0L && nY <  0L ) aCtlPosition.SetActualRP( RP_LT );
426             else if( nX == 0L && nY <  0L ) aCtlPosition.SetActualRP( RP_MT );
427             else if( nX >  0L && nY <  0L ) aCtlPosition.SetActualRP( RP_RT );
428             else if( nX <  0L && nY == 0L ) aCtlPosition.SetActualRP( RP_LM );
429             // Mittelpunkt gibt es nicht mehr
430             else if( nX == 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RB );
431             else if( nX >  0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RM );
432             else if( nX <  0L && nY >  0L ) aCtlPosition.SetActualRP( RP_LB );
433             else if( nX == 0L && nY >  0L ) aCtlPosition.SetActualRP( RP_MB );
434             else if( nX >  0L && nY >  0L ) aCtlPosition.SetActualRP( RP_RB );
435         }
436         else
437         {
438             // determine default-distance
439             SfxItemPool* pPool = rOutAttrs.GetPool();
440             SdrShadowXDistItem* pXDistItem = (SdrShadowXDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWXDIST);
441             SdrShadowYDistItem* pYDistItem = (SdrShadowYDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWYDIST);
442             if (pXDistItem && pYDistItem)
443             {
444                 sal_Int32 nX = pXDistItem->GetValue();
445                 sal_Int32 nY = pYDistItem->GetValue();
446                 if( nX != 0 )
447                     SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
448                 else
449                     SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
450             }
451 
452             // Tristate, z.B. mehrer Objekte wurden markiert, wovon einige einen Schatten besitzen, einige nicht.
453             // Der anzuzeigende Text des MetricFields wird auf "" gesetzt und dient in der Methode FillItemSet
454             // als Erkennungszeichen daf�r, das der Distance-Wert NICHT ver�ndert wurde !!!!
455             aMtrDistance.SetText( String() );
456             aCtlPosition.SetActualRP( RP_MM );
457         }
458 
459         // SchattenFarbe:
460         if( rAttrs.GetItemState( SDRATTR_SHADOWCOLOR ) != SFX_ITEM_DONTCARE )
461         {
462             aLbShadowColor.SelectEntry( ( ( const SdrShadowColorItem& ) rAttrs.Get( SDRATTR_SHADOWCOLOR ) ).GetColorValue() );
463         }
464         else
465             aLbShadowColor.SetNoSelection();
466 
467         // Transparenz
468         if( rAttrs.GetItemState( SDRATTR_SHADOWTRANSPARENCE ) != SFX_ITEM_DONTCARE )
469         {
470             sal_uInt16 nTransp = ( ( const SdrShadowTransparenceItem& ) rAttrs.Get( SDRATTR_SHADOWTRANSPARENCE ) ).GetValue();
471             aMtrTransparent.SetValue( nTransp );
472         }
473         else
474             aMtrTransparent.SetText( String() );
475 
476         // Werte sichern
477         //aCtlPosition
478         aMtrDistance.SaveValue();
479         aLbShadowColor.SaveValue();
480         aTsbShowShadow.SaveValue();
481 
482         // #66832# This field was not saved, but used to determine changes.
483         // Why? Seems to be the error.
484         // It IS the error.
485         aMtrTransparent.SaveValue();
486 
487         ClickShadowHdl_Impl( NULL );
488         ModifyShadowHdl_Impl( NULL );
489     }
490 }
491 
492 // -----------------------------------------------------------------------
493 
Create(Window * pWindow,const SfxItemSet & rAttrs)494 SfxTabPage* SvxShadowTabPage::Create( Window* pWindow,
495                 const SfxItemSet& rAttrs )
496 {
497     return( new SvxShadowTabPage( pWindow, rAttrs ) );
498 }
499 
500 //------------------------------------------------------------------------
501 
GetRanges()502 sal_uInt16* SvxShadowTabPage::GetRanges()
503 {
504     return( pShadowRanges );
505 }
506 
507 //------------------------------------------------------------------------
508 
IMPL_LINK(SvxShadowTabPage,ClickShadowHdl_Impl,void *,EMPTYARG)509 IMPL_LINK( SvxShadowTabPage, ClickShadowHdl_Impl, void *, EMPTYARG )
510 {
511     if( aTsbShowShadow.GetState() == STATE_NOCHECK )
512     {
513         aFtPosition.Disable();
514         aCtlPosition.Disable();
515         aFtDistance.Disable();
516         aMtrDistance.Disable();
517         aFtShadowColor.Disable();
518         aLbShadowColor.Disable();
519         aFtTransparent.Disable();
520         aMtrTransparent.Disable();
521     }
522     else
523     {
524         aFtPosition.Enable();
525         aCtlPosition.Enable();
526         aFtDistance.Enable();
527         aMtrDistance.Enable();
528         aFtShadowColor.Enable();
529         aLbShadowColor.Enable();
530         aFtTransparent.Enable();
531         aMtrTransparent.Enable();
532     }
533     aCtlPosition.Invalidate();
534 
535     ModifyShadowHdl_Impl( NULL );
536 
537     return( 0L );
538 }
539 
540 //------------------------------------------------------------------------
541 
IMPL_LINK(SvxShadowTabPage,ModifyShadowHdl_Impl,void *,EMPTYARG)542 IMPL_LINK( SvxShadowTabPage, ModifyShadowHdl_Impl, void *, EMPTYARG )
543 {
544     if( aTsbShowShadow.GetState() == STATE_CHECK )
545         rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
546     else
547         rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
548 
549     sal_uInt16 nPos = aLbShadowColor.GetSelectEntryPos();
550     if( nPos != LISTBOX_ENTRY_NOTFOUND )
551     {
552         rXFSet.Put( XFillColorItem( String(),
553                         aLbShadowColor.GetSelectEntryColor() ) );
554     }
555     sal_uInt16 nVal = (sal_uInt16)aMtrTransparent.GetValue();
556     XFillTransparenceItem aItem( nVal );
557     rXFSet.Put( XFillTransparenceItem( aItem ) );
558 
559     // Schatten-Entfernung
560     sal_Int32 nX = 0L, nY = 0L;
561     sal_Int32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
562     switch( aCtlPosition.GetActualRP() )
563     {
564         case RP_LT: nX = nY = -nXY;      break;
565         case RP_MT: nY = -nXY;           break;
566         case RP_RT: nX = nXY; nY = -nXY; break;
567         case RP_LM: nX = -nXY;           break;
568         case RP_RM: nX = nXY;            break;
569         case RP_LB: nX = -nXY; nY = nXY; break;
570         case RP_MB: nY = nXY;            break;
571         case RP_RB: nX = nY = nXY;       break;
572         case RP_MM: break;
573     }
574 
575     aCtlXRectPreview.SetShadowPosition(Point(nX, nY));
576 
577     aCtlXRectPreview.SetShadowAttributes(aXFillAttr.GetItemSet());
578     //aCtlXRectPreview.SetFillAttr( aXFillAttr );
579     aCtlXRectPreview.Invalidate();
580 
581     return( 0L );
582 }
583 
584 //------------------------------------------------------------------------
585 
PointChanged(Window * pWindow,RECT_POINT eRcPt)586 void SvxShadowTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
587 {
588     eRP = eRcPt;
589 
590     // Schatten neu zeichnen
591     ModifyShadowHdl_Impl( pWindow );
592 }
593 
PageCreated(SfxAllItemSet aSet)594 void SvxShadowTabPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
595 {
596     SFX_ITEMSET_ARG (&aSet,pColorTabItem,SvxColorTableItem,SID_COLOR_TABLE,sal_False);
597     SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
598     SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False);
599 
600 
601     if (pColorTabItem)
602         SetColorTable(pColorTabItem->GetColorTable());
603     if (pPageTypeItem)
604         SetPageType(pPageTypeItem->GetValue());
605     if (pDlgTypeItem)
606         SetDlgType(pDlgTypeItem->GetValue());
607     Construct();
608 }
609