Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <tools/shl.hxx>
30 : : #include <sfx2/app.hxx>
31 : : #include <sfx2/module.hxx>
32 : : #include <svx/dialogs.hrc>
33 : :
34 : : #define _SVX_TPSHADOW_CXX
35 : :
36 : : #include "svx/xattr.hxx"
37 : : #include <svx/xpool.hxx>
38 : : #include <cuires.hrc>
39 : : #include "tabarea.hrc"
40 : : #include <svx/svdattr.hxx>
41 : : #include "svx/drawitem.hxx"
42 : : #include "cuitabarea.hxx"
43 : : #include <dialmgr.hxx>
44 : : #include "svx/dlgutil.hxx"
45 : : #include <cuitabline.hxx>
46 : : #include "paragrph.hrc"
47 : : #include <svx/xlineit0.hxx>
48 : : #include <sfx2/request.hxx>
49 : :
50 : : static sal_uInt16 pShadowRanges[] =
51 : : {
52 : : SDRATTR_SHADOWCOLOR,
53 : : SDRATTR_SHADOWTRANSPARENCE,
54 : : SID_ATTR_FILL_SHADOW,
55 : : SID_ATTR_FILL_SHADOW,
56 : : 0
57 : : };
58 : :
59 : 0 : SvxShadowTabPage::SvxShadowTabPage( Window* pParent, const SfxItemSet& rInAttrs ) :
60 : :
61 : 0 : SvxTabPage ( pParent, CUI_RES( RID_SVXPAGE_SHADOW ), rInAttrs ),
62 : :
63 [ # # ]: 0 : aFlProp ( this, CUI_RES( FL_PROP ) ),
64 [ # # ]: 0 : aTsbShowShadow ( this, CUI_RES( TSB_SHOW_SHADOW ) ),
65 [ # # ]: 0 : aFtPosition ( this, CUI_RES( FT_POSITION ) ),
66 [ # # ]: 0 : aCtlPosition ( this, CUI_RES( CTL_POSITION ) ),
67 [ # # ]: 0 : aFtDistance ( this, CUI_RES( FT_DISTANCE ) ),
68 [ # # ]: 0 : aMtrDistance ( this, CUI_RES( MTR_FLD_DISTANCE ) ),
69 [ # # ]: 0 : aFtShadowColor ( this, CUI_RES( FT_SHADOW_COLOR ) ),
70 [ # # ]: 0 : aLbShadowColor ( this, CUI_RES( LB_SHADOW_COLOR ) ),
71 [ # # ]: 0 : aFtTransparent ( this, CUI_RES( FT_TRANSPARENT ) ),
72 [ # # ]: 0 : aMtrTransparent ( this, CUI_RES( MTR_SHADOW_TRANSPARENT ) ),
73 [ # # ]: 0 : aCtlXRectPreview ( this, CUI_RES( CTL_COLOR_PREVIEW ) ),
74 : : rOutAttrs ( rInAttrs ),
75 : : bDisable ( sal_False ),
76 : 0 : pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ),
77 : : aXFillAttr ( pXPool ),
78 [ # # ][ # # ]: 0 : rXFSet ( aXFillAttr.GetItemSet() )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
79 : : {
80 [ # # ]: 0 : FreeResource();
81 : :
82 : : // this page needs ExchangeSupport
83 : 0 : SetExchangeSupport();
84 : :
85 : : // adjust metric
86 [ # # ]: 0 : FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
87 : :
88 [ # # ]: 0 : switch ( eFUnit )
89 : : {
90 : : case FUNIT_M:
91 : : case FUNIT_KM:
92 : 0 : eFUnit = FUNIT_MM;
93 : 0 : break;
94 : : default: ;//prevent warning
95 : : }
96 [ # # ]: 0 : SetFieldUnit( aMtrDistance, eFUnit );
97 : :
98 : : // determine PoolUnit
99 : 0 : SfxItemPool* pPool = rOutAttrs.GetPool();
100 : : DBG_ASSERT( pPool, "Wo ist der Pool?" );
101 [ # # ]: 0 : ePoolUnit = pPool->GetMetric( SDRATTR_SHADOWXDIST );
102 : :
103 : : // setting the output device
104 : 0 : XFillStyle eXFS = XFILL_SOLID;
105 [ # # ][ # # ]: 0 : if( rOutAttrs.GetItemState( XATTR_FILLSTYLE ) != SFX_ITEM_DONTCARE )
106 : : {
107 : : eXFS = (XFillStyle) ( ( ( const XFillStyleItem& ) rOutAttrs.
108 [ # # ][ # # ]: 0 : Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
109 [ # # # # : 0 : switch( eXFS )
# # ]
110 : : {
111 : : //case XFILL_NONE: --> NOTHING
112 : :
113 : : case XFILL_SOLID:
114 [ # # ][ # # ]: 0 : if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLCOLOR ) )
115 : : {
116 : : XFillColorItem aColorItem( ( const XFillColorItem& )
117 [ # # ][ # # ]: 0 : rOutAttrs.Get( XATTR_FILLCOLOR ) );
118 [ # # ][ # # ]: 0 : rXFSet.Put( aColorItem );
119 : : }
120 : 0 : break;
121 : :
122 : : case XFILL_GRADIENT:
123 [ # # ][ # # ]: 0 : if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLGRADIENT ) )
124 : : {
125 : : XFillGradientItem aGradientItem( ( ( const XFillGradientItem& )
126 [ # # ][ # # ]: 0 : rOutAttrs.Get( XATTR_FILLGRADIENT ) ) );
127 [ # # ][ # # ]: 0 : rXFSet.Put( aGradientItem );
128 : : }
129 : 0 : break;
130 : :
131 : : case XFILL_HATCH:
132 [ # # ][ # # ]: 0 : if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLHATCH ) )
133 : : {
134 : : XFillHatchItem aHatchItem( ( ( const XFillHatchItem& )
135 [ # # ][ # # ]: 0 : rOutAttrs.Get( XATTR_FILLHATCH ) ) );
136 [ # # ][ # # ]: 0 : rXFSet.Put( aHatchItem );
137 : : }
138 : 0 : break;
139 : :
140 : : case XFILL_BITMAP:
141 : : {
142 [ # # ][ # # ]: 0 : if( SFX_ITEM_DONTCARE != rOutAttrs.GetItemState( XATTR_FILLBITMAP ) )
143 : : {
144 : : XFillBitmapItem aBitmapItem( ( const XFillBitmapItem& )
145 [ # # ][ # # ]: 0 : rOutAttrs.Get( XATTR_FILLBITMAP ) );
146 [ # # ][ # # ]: 0 : rXFSet.Put( aBitmapItem );
147 : : }
148 : : }
149 : 0 : break;
150 : 0 : case XFILL_NONE : break;
151 : : }
152 : : }
153 : : else
154 : : {
155 [ # # ][ # # ]: 0 : rXFSet.Put( XFillColorItem( String(), COL_LIGHTRED ) );
[ # # ][ # # ]
[ # # ]
156 : : }
157 : :
158 [ # # ]: 0 : if(XFILL_NONE == eXFS)
159 : : {
160 : : // #i96350#
161 : : // fallback to solid fillmode when no fill mode is provided to have
162 : : // a reasonable shadow preview. The used color will be a set one or
163 : : // the default (currently blue8)
164 : 0 : eXFS = XFILL_SOLID;
165 : : }
166 : :
167 [ # # ][ # # ]: 0 : rXFSet.Put( XFillStyleItem( eXFS ) );
[ # # ]
168 [ # # ]: 0 : aCtlXRectPreview.SetRectangleAttributes(aXFillAttr.GetItemSet());
169 : : //aCtlXRectPreview.SetFillAttr( aXFillAttr );
170 : :
171 [ # # ]: 0 : aTsbShowShadow.SetClickHdl( LINK( this, SvxShadowTabPage, ClickShadowHdl_Impl ) );
172 [ # # ]: 0 : Link aLink = LINK( this, SvxShadowTabPage, ModifyShadowHdl_Impl );
173 : 0 : aLbShadowColor.SetSelectHdl( aLink );
174 : 0 : aMtrTransparent.SetModifyHdl( aLink );
175 : 0 : aMtrDistance.SetModifyHdl( aLink );
176 : :
177 [ # # ][ # # ]: 0 : aCtlXRectPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
[ # # ][ # # ]
178 [ # # ]: 0 : aCtlPosition.SetAccessibleRelationMemberOf( &aFlProp );
179 : 0 : }
180 : :
181 : : // -----------------------------------------------------------------------
182 : :
183 : 0 : void SvxShadowTabPage::Construct()
184 : : {
185 : 0 : aLbShadowColor.Fill( pColorList );
186 : :
187 [ # # ]: 0 : if( bDisable )
188 : : {
189 : 0 : aTsbShowShadow.Disable();
190 : 0 : aFtPosition.Disable();
191 : 0 : aCtlPosition.Disable();
192 : 0 : aFtDistance.Disable();
193 : 0 : aMtrDistance.Disable();
194 : 0 : aFtShadowColor.Disable();
195 : 0 : aLbShadowColor.Disable();
196 : 0 : aFtTransparent.Disable();
197 : 0 : aMtrTransparent.Disable();
198 : : }
199 : 0 : }
200 : :
201 : : // -----------------------------------------------------------------------
202 : :
203 : 0 : void SvxShadowTabPage::ActivatePage( const SfxItemSet& rSet )
204 : : {
205 : : sal_uInt16 nPos;
206 : : sal_uInt16 nCount;
207 : :
208 : 0 : SFX_ITEMSET_ARG (&rSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
209 [ # # ]: 0 : if (pPageTypeItem)
210 : 0 : SetPageType(pPageTypeItem->GetValue());
211 : :
212 [ # # ]: 0 : if( nDlgType == 0 )
213 : : {
214 [ # # ]: 0 : if( pColorList.is() )
215 : : {
216 : : // ColorList
217 [ # # ][ # # ]: 0 : if( *pnColorListState & CT_CHANGED ||
218 : : *pnColorListState & CT_MODIFIED )
219 : : {
220 [ # # ]: 0 : if( *pnColorListState & CT_CHANGED )
221 : : {
222 [ # # ]: 0 : SvxAreaTabDialog* pArea = dynamic_cast< SvxAreaTabDialog* >( GetParentDialog() );
223 [ # # ]: 0 : if( pArea )
224 : : {
225 [ # # ]: 0 : pColorList = pArea->GetNewColorList();
226 : : }
227 : : else
228 : : {
229 [ # # ]: 0 : SvxLineTabDialog* pLine = dynamic_cast< SvxLineTabDialog* >( GetParentDialog() );
230 [ # # ]: 0 : if( pLine )
231 [ # # ]: 0 : pColorList = pLine->GetNewColorList();
232 : : }
233 : : }
234 : :
235 : 0 : aCtlXRectPreview.SetRectangleAttributes(rSet);
236 : : // aLbShadowColor
237 : 0 : nPos = aLbShadowColor.GetSelectEntryPos();
238 : 0 : aLbShadowColor.Clear();
239 : 0 : aLbShadowColor.Fill( pColorList );
240 : 0 : nCount = aLbShadowColor.GetEntryCount();
241 [ # # ]: 0 : if( nCount == 0 )
242 : : ; // this case should not occur
243 [ # # ]: 0 : else if( nCount <= nPos )
244 : 0 : aLbShadowColor.SelectEntryPos( 0 );
245 : : else
246 : 0 : aLbShadowColor.SelectEntryPos( nPos );
247 : :
248 : 0 : ModifyShadowHdl_Impl( this );
249 : : }
250 : 0 : nPageType = PT_SHADOW;
251 : : }
252 : : }
253 : 0 : }
254 : :
255 : : // -----------------------------------------------------------------------
256 : :
257 : 0 : int SvxShadowTabPage::DeactivatePage( SfxItemSet* _pSet )
258 : : {
259 [ # # ]: 0 : if( _pSet )
260 : 0 : FillItemSet( *_pSet );
261 : :
262 : 0 : return( LEAVE_PAGE );
263 : : }
264 : :
265 : : // -----------------------------------------------------------------------
266 : :
267 : 0 : sal_Bool SvxShadowTabPage::FillItemSet( SfxItemSet& rAttrs )
268 : : {
269 : 0 : const SfxPoolItem* pOld = NULL;
270 : 0 : sal_Bool bModified = sal_False;
271 : :
272 [ # # ]: 0 : if( !bDisable )
273 : : {
274 : 0 : TriState eState = aTsbShowShadow.GetState();
275 [ # # ]: 0 : if( eState != aTsbShowShadow.GetSavedValue() )
276 : : {
277 [ # # ]: 0 : SdrShadowItem aItem( sal::static_int_cast< sal_Bool >( eState ) );
278 [ # # ]: 0 : pOld = GetOldItem( rAttrs, SDRATTR_SHADOW );
279 [ # # ][ # # ]: 0 : if ( !pOld || !( *(const SdrShadowItem*)pOld == aItem ) )
[ # # ][ # # ]
280 : : {
281 [ # # ]: 0 : rAttrs.Put( aItem );
282 : 0 : bModified = sal_True;
283 [ # # ]: 0 : }
284 : : }
285 : :
286 : : // shadow removal
287 : : // a bit intricate inquiry whether there was something changed,
288 : : // as the items can't be displayed directly on controls
289 : 0 : sal_Int32 nX = 0L, nY = 0L;
290 : 0 : sal_Int32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
291 : :
292 [ # # # # : 0 : switch( aCtlPosition.GetActualRP() )
# # # # #
# ]
293 : : {
294 : 0 : case RP_LT: nX = nY = -nXY; break;
295 : 0 : case RP_MT: nY = -nXY; break;
296 : 0 : case RP_RT: nX = nXY; nY = -nXY; break;
297 : 0 : case RP_LM: nX = -nXY; break;
298 : 0 : case RP_RM: nX = nXY; break;
299 : 0 : case RP_LB: nX = -nXY; nY = nXY; break;
300 : 0 : case RP_MB: nY = nXY; break;
301 : 0 : case RP_RB: nX = nY = nXY; break;
302 : 0 : case RP_MM: break;
303 : : }
304 : :
305 : : // If the values of the shadow distances==SFX_ITEM_DONTCARE and the displayed
306 : : // string in the respective MetricField=="", then the comparison of the old
307 : : // and the new distance values would return a wrong result because in such a
308 : : // case the new distance values would matche the default values of the MetricField !!!!
309 [ # # # # : 0 : if ( !aMtrDistance.IsEmptyFieldValue() ||
# # ][ # # ]
310 : 0 : rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE ||
311 : 0 : rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
312 : : {
313 : 0 : sal_Int32 nOldX = 9876543; // impossible value, so DontCare
314 : 0 : sal_Int32 nOldY = 9876543;
315 [ # # ][ # # ]: 0 : if( rOutAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
[ # # ][ # # ]
316 [ # # ]: 0 : rOutAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
317 : : {
318 : : nOldX = ( ( const SdrShadowXDistItem& ) rOutAttrs.
319 [ # # ]: 0 : Get( SDRATTR_SHADOWXDIST ) ).GetValue();
320 : : nOldY = ( ( const SdrShadowYDistItem& ) rOutAttrs.
321 [ # # ]: 0 : Get( SDRATTR_SHADOWYDIST ) ).GetValue();
322 : : }
323 [ # # ]: 0 : SdrShadowXDistItem aXItem( nX );
324 [ # # ]: 0 : pOld = GetOldItem( rAttrs, SDRATTR_SHADOWXDIST );
325 [ # # ][ # # ]: 0 : if ( nX != nOldX &&
[ # # ][ # # ]
326 [ # # ]: 0 : ( !pOld || !( *(const SdrShadowXDistItem*)pOld == aXItem ) ) )
327 : : {
328 [ # # ]: 0 : rAttrs.Put( aXItem );
329 : 0 : bModified = sal_True;
330 : : }
331 [ # # ]: 0 : SdrShadowYDistItem aYItem( nY );
332 [ # # ]: 0 : pOld = GetOldItem( rAttrs, SDRATTR_SHADOWYDIST );
333 [ # # ][ # # ]: 0 : if ( nY != nOldY &&
[ # # ][ # # ]
334 [ # # ]: 0 : ( !pOld || !( *(const SdrShadowYDistItem*)pOld == aYItem ) ) )
335 : : {
336 [ # # ]: 0 : rAttrs.Put( aYItem );
337 : 0 : bModified = sal_True;
338 [ # # ][ # # ]: 0 : }
339 : : }
340 : :
341 : : // ShadowColor
342 : 0 : sal_uInt16 nPos = aLbShadowColor.GetSelectEntryPos();
343 [ # # ]: 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND &&
[ # # # # ]
344 : 0 : nPos != aLbShadowColor.GetSavedValue() )
345 : : {
346 : : SdrShadowColorItem aItem( aLbShadowColor.GetSelectEntry(),
347 [ # # ][ # # ]: 0 : aLbShadowColor.GetSelectEntryColor() );
[ # # ][ # # ]
348 [ # # ]: 0 : pOld = GetOldItem( rAttrs, SDRATTR_SHADOWCOLOR );
349 [ # # ][ # # ]: 0 : if ( !pOld || !( *(const SdrShadowColorItem*)pOld == aItem ) )
[ # # ][ # # ]
350 : : {
351 [ # # ]: 0 : rAttrs.Put( aItem );
352 : 0 : bModified = sal_True;
353 [ # # ]: 0 : }
354 : : }
355 : :
356 : : // transparency
357 : 0 : sal_uInt16 nVal = (sal_uInt16)aMtrTransparent.GetValue();
358 [ # # ]: 0 : if( nVal != (sal_uInt16)aMtrTransparent.GetSavedValue().ToInt32() )
359 : : {
360 [ # # ]: 0 : SdrShadowTransparenceItem aItem( nVal );
361 [ # # ]: 0 : pOld = GetOldItem( rAttrs, SDRATTR_SHADOWTRANSPARENCE );
362 [ # # ][ # # ]: 0 : if ( !pOld || !( *(const SdrShadowTransparenceItem*)pOld == aItem ) )
[ # # ][ # # ]
363 : : {
364 [ # # ]: 0 : rAttrs.Put( aItem );
365 : 0 : bModified = sal_True;
366 [ # # ]: 0 : }
367 : : }
368 : : }
369 : :
370 [ # # ]: 0 : rAttrs.Put (CntUInt16Item(SID_PAGE_TYPE,nPageType));
371 : :
372 : 0 : return( bModified );
373 : : }
374 : :
375 : : // -----------------------------------------------------------------------
376 : :
377 : 0 : void SvxShadowTabPage::Reset( const SfxItemSet& rAttrs )
378 : : {
379 [ # # ]: 0 : if( !bDisable )
380 : : {
381 : : // all objects can have a shadow
382 : : // at the moment there are only 8 possible positions where a shadow can be set
383 : :
384 : : // has a shadow been set?
385 [ # # ]: 0 : if( rAttrs.GetItemState( SDRATTR_SHADOW ) != SFX_ITEM_DONTCARE )
386 : : {
387 : 0 : aTsbShowShadow.EnableTriState( sal_False );
388 : :
389 [ # # ]: 0 : if( ( ( const SdrShadowItem& ) rAttrs.Get( SDRATTR_SHADOW ) ).GetValue() )
390 : 0 : aTsbShowShadow.SetState( STATE_CHECK );
391 : : else
392 : : {
393 : 0 : aTsbShowShadow.SetState( STATE_NOCHECK );
394 : : }
395 : : }
396 : : else
397 : 0 : aTsbShowShadow.SetState( STATE_DONTKNOW );
398 : :
399 : : // distance (only 8 possible positions),
400 : : // so there is only one item evaluated
401 : :
402 [ # # # # ]: 0 : if( rAttrs.GetItemState( SDRATTR_SHADOWXDIST ) != SFX_ITEM_DONTCARE &&
[ # # ]
403 : 0 : rAttrs.GetItemState( SDRATTR_SHADOWYDIST ) != SFX_ITEM_DONTCARE )
404 : : {
405 : 0 : sal_Int32 nX = ( ( const SdrShadowXDistItem& ) rAttrs.Get( SDRATTR_SHADOWXDIST ) ).GetValue();
406 : 0 : sal_Int32 nY = ( ( const SdrShadowYDistItem& ) rAttrs.Get( SDRATTR_SHADOWYDIST ) ).GetValue();
407 : :
408 [ # # ]: 0 : if( nX != 0 )
409 : 0 : SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
410 : : else
411 : 0 : SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
412 : :
413 : : // setting the shadow control
414 [ # # ][ # # ]: 0 : if ( nX < 0L && nY < 0L ) aCtlPosition.SetActualRP( RP_LT );
415 [ # # ][ # # ]: 0 : else if( nX == 0L && nY < 0L ) aCtlPosition.SetActualRP( RP_MT );
416 [ # # ][ # # ]: 0 : else if( nX > 0L && nY < 0L ) aCtlPosition.SetActualRP( RP_RT );
417 [ # # ][ # # ]: 0 : else if( nX < 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_LM );
418 : : // there's no center point anymore
419 [ # # ][ # # ]: 0 : else if( nX == 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RB );
420 [ # # ][ # # ]: 0 : else if( nX > 0L && nY == 0L ) aCtlPosition.SetActualRP( RP_RM );
421 [ # # ][ # # ]: 0 : else if( nX < 0L && nY > 0L ) aCtlPosition.SetActualRP( RP_LB );
422 [ # # ][ # # ]: 0 : else if( nX == 0L && nY > 0L ) aCtlPosition.SetActualRP( RP_MB );
423 [ # # ][ # # ]: 0 : else if( nX > 0L && nY > 0L ) aCtlPosition.SetActualRP( RP_RB );
424 : : }
425 : : else
426 : : {
427 : : // determine default-distance
428 : 0 : SfxItemPool* pPool = rOutAttrs.GetPool();
429 : 0 : SdrShadowXDistItem* pXDistItem = (SdrShadowXDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWXDIST);
430 : 0 : SdrShadowYDistItem* pYDistItem = (SdrShadowYDistItem*)&pPool->GetDefaultItem (SDRATTR_SHADOWYDIST);
431 [ # # ][ # # ]: 0 : if (pXDistItem && pYDistItem)
432 : : {
433 : 0 : sal_Int32 nX = pXDistItem->GetValue();
434 : 0 : sal_Int32 nY = pYDistItem->GetValue();
435 [ # # ]: 0 : if( nX != 0 )
436 : 0 : SetMetricValue( aMtrDistance, nX < 0L ? -nX : nX, ePoolUnit );
437 : : else
438 : 0 : SetMetricValue( aMtrDistance, nY < 0L ? -nY : nY, ePoolUnit );
439 : : }
440 : :
441 : : // Tristate, e. g. multiple objects have been marked of which some have a shadow and some don't.
442 : : // The text (which shall be displayed) of the MetricFields is set to "" and serves as an
443 : : // identification in the method FillItemSet for the fact that the distance value was NOT changed !!!!
444 [ # # ]: 0 : aMtrDistance.SetText( String() );
445 : 0 : aCtlPosition.SetActualRP( RP_MM );
446 : : }
447 : :
448 [ # # ]: 0 : if( rAttrs.GetItemState( SDRATTR_SHADOWCOLOR ) != SFX_ITEM_DONTCARE )
449 : : {
450 : 0 : aLbShadowColor.SelectEntry( ( ( const SdrShadowColorItem& ) rAttrs.Get( SDRATTR_SHADOWCOLOR ) ).GetColorValue() );
451 : : }
452 : : else
453 : 0 : aLbShadowColor.SetNoSelection();
454 : :
455 [ # # ]: 0 : if( rAttrs.GetItemState( SDRATTR_SHADOWTRANSPARENCE ) != SFX_ITEM_DONTCARE )
456 : : {
457 : 0 : sal_uInt16 nTransp = ( ( const SdrShadowTransparenceItem& ) rAttrs.Get( SDRATTR_SHADOWTRANSPARENCE ) ).GetValue();
458 : 0 : aMtrTransparent.SetValue( nTransp );
459 : : }
460 : : else
461 [ # # ]: 0 : aMtrTransparent.SetText( String() );
462 : :
463 : : //aCtlPosition
464 : 0 : aMtrDistance.SaveValue();
465 : 0 : aLbShadowColor.SaveValue();
466 : 0 : aTsbShowShadow.SaveValue();
467 : :
468 : : // #66832# This field was not saved, but used to determine changes.
469 : : // Why? Seems to be the error.
470 : : // It IS the error.
471 : 0 : aMtrTransparent.SaveValue();
472 : :
473 : 0 : ClickShadowHdl_Impl( NULL );
474 : 0 : ModifyShadowHdl_Impl( NULL );
475 : : }
476 : 0 : }
477 : :
478 : : // -----------------------------------------------------------------------
479 : :
480 : 0 : SfxTabPage* SvxShadowTabPage::Create( Window* pWindow,
481 : : const SfxItemSet& rAttrs )
482 : : {
483 [ # # ]: 0 : return( new SvxShadowTabPage( pWindow, rAttrs ) );
484 : : }
485 : :
486 : : //------------------------------------------------------------------------
487 : :
488 : 0 : sal_uInt16* SvxShadowTabPage::GetRanges()
489 : : {
490 : 0 : return( pShadowRanges );
491 : : }
492 : :
493 : : //------------------------------------------------------------------------
494 : :
495 : 0 : IMPL_LINK_NOARG(SvxShadowTabPage, ClickShadowHdl_Impl)
496 : : {
497 [ # # ]: 0 : if( aTsbShowShadow.GetState() == STATE_NOCHECK )
498 : : {
499 : 0 : aFtPosition.Disable();
500 : 0 : aCtlPosition.Disable();
501 : 0 : aFtDistance.Disable();
502 : 0 : aMtrDistance.Disable();
503 : 0 : aFtShadowColor.Disable();
504 : 0 : aLbShadowColor.Disable();
505 : 0 : aFtTransparent.Disable();
506 : 0 : aMtrTransparent.Disable();
507 : : }
508 : : else
509 : : {
510 : 0 : aFtPosition.Enable();
511 : 0 : aCtlPosition.Enable();
512 : 0 : aFtDistance.Enable();
513 : 0 : aMtrDistance.Enable();
514 : 0 : aFtShadowColor.Enable();
515 : 0 : aLbShadowColor.Enable();
516 : 0 : aFtTransparent.Enable();
517 : 0 : aMtrTransparent.Enable();
518 : : }
519 : 0 : aCtlPosition.Invalidate();
520 : :
521 : 0 : ModifyShadowHdl_Impl( NULL );
522 : :
523 : 0 : return( 0L );
524 : : }
525 : :
526 : : //------------------------------------------------------------------------
527 : :
528 : 0 : IMPL_LINK_NOARG(SvxShadowTabPage, ModifyShadowHdl_Impl)
529 : : {
530 [ # # ]: 0 : if( aTsbShowShadow.GetState() == STATE_CHECK )
531 [ # # ][ # # ]: 0 : rXFSet.Put( XFillStyleItem( XFILL_SOLID ) );
[ # # ]
532 : : else
533 [ # # ][ # # ]: 0 : rXFSet.Put( XFillStyleItem( XFILL_NONE ) );
[ # # ]
534 : :
535 [ # # ]: 0 : sal_uInt16 nPos = aLbShadowColor.GetSelectEntryPos();
536 [ # # ]: 0 : if( nPos != LISTBOX_ENTRY_NOTFOUND )
537 : : {
538 : : rXFSet.Put( XFillColorItem( String(),
539 [ # # ][ # # ]: 0 : aLbShadowColor.GetSelectEntryColor() ) );
[ # # ][ # # ]
[ # # ][ # # ]
540 : : }
541 [ # # ]: 0 : sal_uInt16 nVal = (sal_uInt16)aMtrTransparent.GetValue();
542 [ # # ]: 0 : XFillTransparenceItem aItem( nVal );
543 [ # # ][ # # ]: 0 : rXFSet.Put( XFillTransparenceItem( aItem ) );
[ # # ]
544 : :
545 : : // shadow removal
546 : 0 : sal_Int32 nX = 0L, nY = 0L;
547 [ # # ]: 0 : sal_Int32 nXY = GetCoreValue( aMtrDistance, ePoolUnit );
548 [ # # ][ # # : 0 : switch( aCtlPosition.GetActualRP() )
# # # # #
# # # ]
549 : : {
550 : 0 : case RP_LT: nX = nY = -nXY; break;
551 : 0 : case RP_MT: nY = -nXY; break;
552 : 0 : case RP_RT: nX = nXY; nY = -nXY; break;
553 : 0 : case RP_LM: nX = -nXY; break;
554 : 0 : case RP_RM: nX = nXY; break;
555 : 0 : case RP_LB: nX = -nXY; nY = nXY; break;
556 : 0 : case RP_MB: nY = nXY; break;
557 : 0 : case RP_RB: nX = nY = nXY; break;
558 : 0 : case RP_MM: break;
559 : : }
560 : :
561 [ # # ]: 0 : aCtlXRectPreview.SetShadowPosition(Point(nX, nY));
562 : :
563 [ # # ]: 0 : aCtlXRectPreview.SetShadowAttributes(aXFillAttr.GetItemSet());
564 : : //aCtlXRectPreview.SetFillAttr( aXFillAttr );
565 [ # # ]: 0 : aCtlXRectPreview.Invalidate();
566 : :
567 [ # # ]: 0 : return( 0L );
568 : : }
569 : :
570 : : //------------------------------------------------------------------------
571 : :
572 : 0 : void SvxShadowTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
573 : : {
574 : 0 : eRP = eRcPt;
575 : :
576 : : // repaint shadow
577 : 0 : ModifyShadowHdl_Impl( pWindow );
578 : 0 : }
579 : :
580 : 0 : void SvxShadowTabPage::PageCreated (SfxAllItemSet aSet)
581 : : {
582 : 0 : SFX_ITEMSET_ARG (&aSet,pColorListItem,SvxColorListItem,SID_COLOR_TABLE,sal_False);
583 : 0 : SFX_ITEMSET_ARG (&aSet,pPageTypeItem,SfxUInt16Item,SID_PAGE_TYPE,sal_False);
584 : 0 : SFX_ITEMSET_ARG (&aSet,pDlgTypeItem,SfxUInt16Item,SID_DLG_TYPE,sal_False);
585 : :
586 [ # # ]: 0 : if (pColorListItem)
587 [ # # ]: 0 : SetColorList(pColorListItem->GetColorList());
588 [ # # ]: 0 : if (pPageTypeItem)
589 : 0 : SetPageType(pPageTypeItem->GetValue());
590 [ # # ]: 0 : if (pDlgTypeItem)
591 : 0 : SetDlgType(pDlgTypeItem->GetValue());
592 : 0 : Construct();
593 : 0 : }
594 : :
595 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|