xref: /aoo41x/main/cui/source/tabpages/tparea.cxx (revision cdf0e10c)
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