xref: /aoo42x/main/svx/source/dialog/fontwork.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_svx.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir // include ---------------------------------------------------------------
32*cdf0e10cSrcweir #include <sfx2/module.hxx>
33*cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
34*cdf0e10cSrcweir #include <tools/shl.hxx>
35*cdf0e10cSrcweir 
36*cdf0e10cSrcweir #define _SVX_FONTWORK_CXX
37*cdf0e10cSrcweir #include <svx/svdobj.hxx>
38*cdf0e10cSrcweir #include <svx/svdopath.hxx>
39*cdf0e10cSrcweir #include <svx/svdview.hxx>
40*cdf0e10cSrcweir #include <svx/svdocirc.hxx>
41*cdf0e10cSrcweir #include <svx/xtextit.hxx>
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir #include <svx/dialmgr.hxx>
44*cdf0e10cSrcweir #include "svx/dlgutil.hxx"
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir #include <svx/dialogs.hrc>
47*cdf0e10cSrcweir #include "fontwork.hrc"
48*cdf0e10cSrcweir #include <svx/fontwork.hxx>
49*cdf0e10cSrcweir #include <editeng/outlobj.hxx>
50*cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygon.hxx>
51*cdf0e10cSrcweir #include <basegfx/point/b2dpoint.hxx>
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir SFX_IMPL_DOCKINGWINDOW( SvxFontWorkChildWindow, SID_FONTWORK );
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir /*************************************************************************
56*cdf0e10cSrcweir |*
57*cdf0e10cSrcweir |* ControllerItem fuer Fontwork
58*cdf0e10cSrcweir |*
59*cdf0e10cSrcweir \************************************************************************/
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir SvxFontWorkControllerItem::SvxFontWorkControllerItem
62*cdf0e10cSrcweir (
63*cdf0e10cSrcweir     sal_uInt16 _nId,
64*cdf0e10cSrcweir 	SvxFontWorkDialog& rDlg,
65*cdf0e10cSrcweir 	SfxBindings& rBindings
66*cdf0e10cSrcweir ) :
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir     SfxControllerItem( _nId, rBindings ),
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir 	rFontWorkDlg( rDlg )
71*cdf0e10cSrcweir {
72*cdf0e10cSrcweir }
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir /*************************************************************************
75*cdf0e10cSrcweir |*
76*cdf0e10cSrcweir |* StateChanged-Methode fuer FontWork-Items
77*cdf0e10cSrcweir |*
78*cdf0e10cSrcweir \************************************************************************/
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir void SvxFontWorkControllerItem::StateChanged( sal_uInt16 /*nSID*/, SfxItemState /*eState*/,
81*cdf0e10cSrcweir 											  const SfxPoolItem* pItem )
82*cdf0e10cSrcweir {
83*cdf0e10cSrcweir 	switch ( GetId() )
84*cdf0e10cSrcweir 	{
85*cdf0e10cSrcweir 		case SID_FORMTEXT_STYLE:
86*cdf0e10cSrcweir 		{
87*cdf0e10cSrcweir 			const XFormTextStyleItem* pStateItem =
88*cdf0e10cSrcweir 								PTR_CAST(XFormTextStyleItem, pItem);
89*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStyleItem erwartet");
90*cdf0e10cSrcweir 			rFontWorkDlg.SetStyle_Impl(pStateItem);
91*cdf0e10cSrcweir 			break;
92*cdf0e10cSrcweir 		}
93*cdf0e10cSrcweir 		case SID_FORMTEXT_ADJUST:
94*cdf0e10cSrcweir 		{
95*cdf0e10cSrcweir 			const XFormTextAdjustItem* pStateItem =
96*cdf0e10cSrcweir 								PTR_CAST(XFormTextAdjustItem, pItem);
97*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextAdjustItem erwartet");
98*cdf0e10cSrcweir 			rFontWorkDlg.SetAdjust_Impl(pStateItem);
99*cdf0e10cSrcweir 			break;
100*cdf0e10cSrcweir 		}
101*cdf0e10cSrcweir 		case SID_FORMTEXT_DISTANCE:
102*cdf0e10cSrcweir 		{
103*cdf0e10cSrcweir 			const XFormTextDistanceItem* pStateItem =
104*cdf0e10cSrcweir 								PTR_CAST(XFormTextDistanceItem, pItem);
105*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextDistanceItem erwartet");
106*cdf0e10cSrcweir 			rFontWorkDlg.SetDistance_Impl(pStateItem);
107*cdf0e10cSrcweir 			break;
108*cdf0e10cSrcweir 		}
109*cdf0e10cSrcweir 		case SID_FORMTEXT_START:
110*cdf0e10cSrcweir 		{
111*cdf0e10cSrcweir 			const XFormTextStartItem* pStateItem =
112*cdf0e10cSrcweir 								PTR_CAST(XFormTextStartItem, pItem);
113*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStartItem erwartet");
114*cdf0e10cSrcweir 			rFontWorkDlg.SetStart_Impl(pStateItem);
115*cdf0e10cSrcweir 			break;
116*cdf0e10cSrcweir 		}
117*cdf0e10cSrcweir 		case SID_FORMTEXT_MIRROR:
118*cdf0e10cSrcweir 		{
119*cdf0e10cSrcweir 			const XFormTextMirrorItem* pStateItem =
120*cdf0e10cSrcweir 								PTR_CAST(XFormTextMirrorItem, pItem);
121*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextMirrorItem erwartet");
122*cdf0e10cSrcweir 			rFontWorkDlg.SetMirror_Impl(pStateItem);
123*cdf0e10cSrcweir 			break;
124*cdf0e10cSrcweir 		}
125*cdf0e10cSrcweir 		case SID_FORMTEXT_STDFORM:
126*cdf0e10cSrcweir 		{
127*cdf0e10cSrcweir 			const XFormTextStdFormItem* pStateItem =
128*cdf0e10cSrcweir 								PTR_CAST(XFormTextStdFormItem, pItem);
129*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStdFormItem erwartet");
130*cdf0e10cSrcweir 			rFontWorkDlg.SetStdForm_Impl(pStateItem);
131*cdf0e10cSrcweir 			break;
132*cdf0e10cSrcweir 		}
133*cdf0e10cSrcweir 		case SID_FORMTEXT_HIDEFORM:
134*cdf0e10cSrcweir 		{
135*cdf0e10cSrcweir 			const XFormTextHideFormItem* pStateItem =
136*cdf0e10cSrcweir 								PTR_CAST(XFormTextHideFormItem, pItem);
137*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextHideFormItem erwartet");
138*cdf0e10cSrcweir 			rFontWorkDlg.SetShowForm_Impl(pStateItem);
139*cdf0e10cSrcweir 			break;
140*cdf0e10cSrcweir 		}
141*cdf0e10cSrcweir 		case SID_FORMTEXT_OUTLINE:
142*cdf0e10cSrcweir 		{
143*cdf0e10cSrcweir 			const XFormTextOutlineItem* pStateItem =
144*cdf0e10cSrcweir 								PTR_CAST(XFormTextOutlineItem, pItem);
145*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextOutlineItem erwartet");
146*cdf0e10cSrcweir 			rFontWorkDlg.SetOutline_Impl(pStateItem);
147*cdf0e10cSrcweir 			break;
148*cdf0e10cSrcweir 		}
149*cdf0e10cSrcweir 		case SID_FORMTEXT_SHADOW:
150*cdf0e10cSrcweir 		{
151*cdf0e10cSrcweir 			const XFormTextShadowItem* pStateItem =
152*cdf0e10cSrcweir 								PTR_CAST(XFormTextShadowItem, pItem);
153*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowItem erwartet");
154*cdf0e10cSrcweir 			rFontWorkDlg.SetShadow_Impl(pStateItem);
155*cdf0e10cSrcweir 			break;
156*cdf0e10cSrcweir 		}
157*cdf0e10cSrcweir 		case SID_FORMTEXT_SHDWCOLOR:
158*cdf0e10cSrcweir 		{
159*cdf0e10cSrcweir 			const XFormTextShadowColorItem* pStateItem =
160*cdf0e10cSrcweir 								PTR_CAST(XFormTextShadowColorItem, pItem);
161*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowColorItem erwartet");
162*cdf0e10cSrcweir 			rFontWorkDlg.SetShadowColor_Impl(pStateItem);
163*cdf0e10cSrcweir 			break;
164*cdf0e10cSrcweir 		}
165*cdf0e10cSrcweir 		case SID_FORMTEXT_SHDWXVAL:
166*cdf0e10cSrcweir 		{
167*cdf0e10cSrcweir 			const XFormTextShadowXValItem* pStateItem =
168*cdf0e10cSrcweir 								PTR_CAST(XFormTextShadowXValItem, pItem);
169*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowXValItem erwartet");
170*cdf0e10cSrcweir 			rFontWorkDlg.SetShadowXVal_Impl(pStateItem);
171*cdf0e10cSrcweir 			break;
172*cdf0e10cSrcweir 		}
173*cdf0e10cSrcweir 		case SID_FORMTEXT_SHDWYVAL:
174*cdf0e10cSrcweir 		{
175*cdf0e10cSrcweir 			const XFormTextShadowYValItem* pStateItem =
176*cdf0e10cSrcweir 								PTR_CAST(XFormTextShadowYValItem, pItem);
177*cdf0e10cSrcweir 			DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowYValItem erwartet");
178*cdf0e10cSrcweir 			rFontWorkDlg.SetShadowYVal_Impl(pStateItem);
179*cdf0e10cSrcweir 			break;
180*cdf0e10cSrcweir 		}
181*cdf0e10cSrcweir 	}
182*cdf0e10cSrcweir }
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir /*************************************************************************
185*cdf0e10cSrcweir |*
186*cdf0e10cSrcweir |* Ableitung vom SfxChildWindow als "Behaelter" fuer Fontwork-Dialog
187*cdf0e10cSrcweir |*
188*cdf0e10cSrcweir \************************************************************************/
189*cdf0e10cSrcweir 
190*cdf0e10cSrcweir SvxFontWorkChildWindow::SvxFontWorkChildWindow
191*cdf0e10cSrcweir (
192*cdf0e10cSrcweir     Window* _pParent,
193*cdf0e10cSrcweir 	sal_uInt16 nId,
194*cdf0e10cSrcweir 	SfxBindings* pBindings,
195*cdf0e10cSrcweir 	SfxChildWinInfo* pInfo
196*cdf0e10cSrcweir ) :
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir     SfxChildWindow( _pParent, nId )
199*cdf0e10cSrcweir 
200*cdf0e10cSrcweir {
201*cdf0e10cSrcweir     pWindow = new SvxFontWorkDialog( pBindings, this, _pParent,
202*cdf0e10cSrcweir 									 SVX_RES( RID_SVXDLG_FONTWORK ) );
203*cdf0e10cSrcweir 	SvxFontWorkDialog* pDlg = (SvxFontWorkDialog*) pWindow;
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir 	eChildAlignment = SFX_ALIGN_NOALIGNMENT;
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir 	pDlg->Initialize( pInfo );
208*cdf0e10cSrcweir }
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir /*************************************************************************
211*cdf0e10cSrcweir |*
212*cdf0e10cSrcweir |* Floating Window zur Attributierung von Texteffekten
213*cdf0e10cSrcweir |*
214*cdf0e10cSrcweir \************************************************************************/
215*cdf0e10cSrcweir 
216*cdf0e10cSrcweir SvxFontWorkDialog::SvxFontWorkDialog( SfxBindings *pBindinx,
217*cdf0e10cSrcweir 									  SfxChildWindow *pCW,
218*cdf0e10cSrcweir                                       Window* _pParent,
219*cdf0e10cSrcweir 									  const ResId& rResId ) :
220*cdf0e10cSrcweir     SfxDockingWindow( pBindinx, pCW, _pParent, rResId ),
221*cdf0e10cSrcweir 
222*cdf0e10cSrcweir 	aFormSet		(this, ResId(VS_FORMS,*rResId.GetResMgr())),
223*cdf0e10cSrcweir 
224*cdf0e10cSrcweir 	aTbxStyle		(this, ResId(TBX_STYLE,*rResId.GetResMgr())),
225*cdf0e10cSrcweir 	aTbxAdjust		(this, ResId(TBX_ADJUST,*rResId.GetResMgr())),
226*cdf0e10cSrcweir 
227*cdf0e10cSrcweir 	aFbDistance 	(this, ResId(FB_DISTANCE,*rResId.GetResMgr())),
228*cdf0e10cSrcweir 	aMtrFldDistance (this, ResId(MTR_FLD_DISTANCE,*rResId.GetResMgr())),
229*cdf0e10cSrcweir 	aFbTextStart	(this, ResId(FB_TEXTSTART,*rResId.GetResMgr())),
230*cdf0e10cSrcweir 	aMtrFldTextStart(this, ResId(MTR_FLD_TEXTSTART,*rResId.GetResMgr())),
231*cdf0e10cSrcweir 
232*cdf0e10cSrcweir 	aTbxShadow		(this, ResId(TBX_SHADOW,*rResId.GetResMgr())),
233*cdf0e10cSrcweir 
234*cdf0e10cSrcweir 	aFbShadowX		(this, ResId(FB_SHADOW_X,*rResId.GetResMgr())),
235*cdf0e10cSrcweir 	aMtrFldShadowX	(this, ResId(MTR_FLD_SHADOW_X,*rResId.GetResMgr())),
236*cdf0e10cSrcweir 	aFbShadowY		(this, ResId(FB_SHADOW_Y,*rResId.GetResMgr())),
237*cdf0e10cSrcweir 	aMtrFldShadowY	(this, ResId(MTR_FLD_SHADOW_Y,*rResId.GetResMgr())),
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir 	aShadowColorLB	(this, ResId(CLB_SHADOW_COLOR,*rResId.GetResMgr())),
240*cdf0e10cSrcweir     rBindings       (*pBindinx),
241*cdf0e10cSrcweir 
242*cdf0e10cSrcweir 	nLastStyleTbxId(0),
243*cdf0e10cSrcweir 	nLastAdjustTbxId(0),
244*cdf0e10cSrcweir 	nLastShadowTbxId(0),
245*cdf0e10cSrcweir 	nSaveShadowX	(0),
246*cdf0e10cSrcweir 	nSaveShadowY	(0),
247*cdf0e10cSrcweir 	nSaveShadowAngle(450),
248*cdf0e10cSrcweir 	nSaveShadowSize (100),
249*cdf0e10cSrcweir 
250*cdf0e10cSrcweir     maImageList     (ResId(IL_FONTWORK,*rResId.GetResMgr())),
251*cdf0e10cSrcweir     maImageListH    (ResId(ILH_FONTWORK,*rResId.GetResMgr())),
252*cdf0e10cSrcweir 
253*cdf0e10cSrcweir     pColorTable     (NULL)
254*cdf0e10cSrcweir {
255*cdf0e10cSrcweir 	FreeResource();
256*cdf0e10cSrcweir 
257*cdf0e10cSrcweir 	ApplyImageList();
258*cdf0e10cSrcweir 
259*cdf0e10cSrcweir 	pCtrlItems[0] = new SvxFontWorkControllerItem(SID_FORMTEXT_STYLE, *this, rBindings);
260*cdf0e10cSrcweir 	pCtrlItems[1] = new SvxFontWorkControllerItem(SID_FORMTEXT_ADJUST, *this, rBindings);
261*cdf0e10cSrcweir 	pCtrlItems[2] = new SvxFontWorkControllerItem(SID_FORMTEXT_DISTANCE, *this, rBindings);
262*cdf0e10cSrcweir 	pCtrlItems[3] = new SvxFontWorkControllerItem(SID_FORMTEXT_START, *this, rBindings);
263*cdf0e10cSrcweir 	pCtrlItems[4] = new SvxFontWorkControllerItem(SID_FORMTEXT_MIRROR, *this, rBindings);
264*cdf0e10cSrcweir 	pCtrlItems[5] = new SvxFontWorkControllerItem(SID_FORMTEXT_STDFORM, *this, rBindings);
265*cdf0e10cSrcweir 	pCtrlItems[6] = new SvxFontWorkControllerItem(SID_FORMTEXT_HIDEFORM, *this, rBindings);
266*cdf0e10cSrcweir 	pCtrlItems[7] = new SvxFontWorkControllerItem(SID_FORMTEXT_OUTLINE, *this, rBindings);
267*cdf0e10cSrcweir 	pCtrlItems[8] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHADOW, *this, rBindings);
268*cdf0e10cSrcweir 	pCtrlItems[9] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWCOLOR, *this, rBindings);
269*cdf0e10cSrcweir 	pCtrlItems[10] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWXVAL, *this, rBindings);
270*cdf0e10cSrcweir 	pCtrlItems[11] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWYVAL, *this, rBindings);
271*cdf0e10cSrcweir 
272*cdf0e10cSrcweir 	WinBits aNewStyle = ( aFormSet.GetStyle() | WB_VSCROLL | WB_ITEMBORDER | WB_DOUBLEBORDER );
273*cdf0e10cSrcweir 	aFormSet.SetStyle( aNewStyle );
274*cdf0e10cSrcweir 
275*cdf0e10cSrcweir 	Size aSize = aTbxStyle.CalcWindowSizePixel();
276*cdf0e10cSrcweir 	aTbxStyle.SetSizePixel(aSize);
277*cdf0e10cSrcweir 	aTbxStyle.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectStyleHdl_Impl) );
278*cdf0e10cSrcweir 
279*cdf0e10cSrcweir 	aTbxAdjust.SetSizePixel(aSize);
280*cdf0e10cSrcweir 	aTbxAdjust.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectAdjustHdl_Impl) );
281*cdf0e10cSrcweir 
282*cdf0e10cSrcweir 	aTbxShadow.SetSizePixel(aSize);
283*cdf0e10cSrcweir 	aTbxShadow.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectShadowHdl_Impl) );
284*cdf0e10cSrcweir 
285*cdf0e10cSrcweir //	aFbShadowX.SetBitmap(Bitmap(FW_RESID(RID_SVXBMP_SHADOW_XDIST)));
286*cdf0e10cSrcweir //	aFbShadowY.SetBitmap(Bitmap(FW_RESID(RID_SVXBMP_SHADOW_YDIST)));
287*cdf0e10cSrcweir 
288*cdf0e10cSrcweir 	Link aLink = LINK(this, SvxFontWorkDialog, ModifyInputHdl_Impl);
289*cdf0e10cSrcweir 	aMtrFldDistance.SetModifyHdl( aLink );
290*cdf0e10cSrcweir 	aMtrFldTextStart.SetModifyHdl( aLink );
291*cdf0e10cSrcweir 	aMtrFldShadowX.SetModifyHdl( aLink );
292*cdf0e10cSrcweir 	aMtrFldShadowY.SetModifyHdl( aLink );
293*cdf0e10cSrcweir 
294*cdf0e10cSrcweir 	// System-Metrik setzen
295*cdf0e10cSrcweir 	const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
296*cdf0e10cSrcweir 	SetFieldUnit( aMtrFldDistance, eDlgUnit, sal_True );
297*cdf0e10cSrcweir 	SetFieldUnit( aMtrFldTextStart, eDlgUnit, sal_True );
298*cdf0e10cSrcweir 	SetFieldUnit( aMtrFldShadowX, eDlgUnit, sal_True );
299*cdf0e10cSrcweir 	SetFieldUnit( aMtrFldShadowY, eDlgUnit, sal_True );
300*cdf0e10cSrcweir 	if( eDlgUnit == FUNIT_MM )
301*cdf0e10cSrcweir 	{
302*cdf0e10cSrcweir 		aMtrFldDistance.SetSpinSize( 50 );
303*cdf0e10cSrcweir 		aMtrFldTextStart.SetSpinSize( 50 );
304*cdf0e10cSrcweir 		aMtrFldShadowX.SetSpinSize( 50 );
305*cdf0e10cSrcweir 		aMtrFldShadowY.SetSpinSize( 50 );
306*cdf0e10cSrcweir 	}
307*cdf0e10cSrcweir 	else
308*cdf0e10cSrcweir 	{
309*cdf0e10cSrcweir 		aMtrFldDistance.SetSpinSize( 10 );
310*cdf0e10cSrcweir 		aMtrFldTextStart.SetSpinSize( 10 );
311*cdf0e10cSrcweir 		aMtrFldShadowX.SetSpinSize( 10 );
312*cdf0e10cSrcweir 		aMtrFldShadowY.SetSpinSize( 10 );
313*cdf0e10cSrcweir 	}
314*cdf0e10cSrcweir 
315*cdf0e10cSrcweir 	aShadowColorLB.SetSelectHdl( LINK(this, SvxFontWorkDialog, ColorSelectHdl_Impl) );
316*cdf0e10cSrcweir 
317*cdf0e10cSrcweir 	aInputTimer.SetTimeout(500);
318*cdf0e10cSrcweir 	aInputTimer.SetTimeoutHdl(LINK(this, SvxFontWorkDialog, InputTimoutHdl_Impl));
319*cdf0e10cSrcweir 
320*cdf0e10cSrcweir 	aFormSet.SetSelectHdl( LINK(this, SvxFontWorkDialog, FormSelectHdl_Impl) );
321*cdf0e10cSrcweir 	aFormSet.SetColCount(4);
322*cdf0e10cSrcweir 	aFormSet.SetLineCount(2);
323*cdf0e10cSrcweir 
324*cdf0e10cSrcweir     Bitmap aBmp(SVX_RES(RID_SVXBMP_FONTWORK_FORM1));
325*cdf0e10cSrcweir 	aSize.Height() = aFormSet.CalcWindowSizePixel(aBmp.GetSizePixel()).Height() + 2;
326*cdf0e10cSrcweir 	aFormSet.SetSizePixel(aSize);
327*cdf0e10cSrcweir }
328*cdf0e10cSrcweir 
329*cdf0e10cSrcweir /*************************************************************************
330*cdf0e10cSrcweir |*
331*cdf0e10cSrcweir |* Destruktor
332*cdf0e10cSrcweir |*
333*cdf0e10cSrcweir \************************************************************************/
334*cdf0e10cSrcweir 
335*cdf0e10cSrcweir SvxFontWorkDialog::~SvxFontWorkDialog()
336*cdf0e10cSrcweir {
337*cdf0e10cSrcweir 	for (sal_uInt16 i = 0; i < CONTROLLER_COUNT; i++)
338*cdf0e10cSrcweir 		DELETEZ(pCtrlItems[i]);
339*cdf0e10cSrcweir }
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir /*************************************************************************
342*cdf0e10cSrcweir |*
343*cdf0e10cSrcweir \************************************************************************/
344*cdf0e10cSrcweir 
345*cdf0e10cSrcweir void SvxFontWorkDialog::Zoom()
346*cdf0e10cSrcweir {
347*cdf0e10cSrcweir 	SfxDockingWindow::Roll();
348*cdf0e10cSrcweir }
349*cdf0e10cSrcweir 
350*cdf0e10cSrcweir 
351*cdf0e10cSrcweir /*************************************************************************
352*cdf0e10cSrcweir |*
353*cdf0e10cSrcweir |*
354*cdf0e10cSrcweir |*
355*cdf0e10cSrcweir \************************************************************************/
356*cdf0e10cSrcweir 
357*cdf0e10cSrcweir SfxChildAlignment SvxFontWorkDialog::CheckAlignment( SfxChildAlignment eActAlign,
358*cdf0e10cSrcweir 													 SfxChildAlignment eAlign )
359*cdf0e10cSrcweir {
360*cdf0e10cSrcweir 	SfxChildAlignment eAlignment;
361*cdf0e10cSrcweir 
362*cdf0e10cSrcweir 	switch ( eAlign )
363*cdf0e10cSrcweir 	{
364*cdf0e10cSrcweir 		case SFX_ALIGN_TOP:
365*cdf0e10cSrcweir 		case SFX_ALIGN_HIGHESTTOP:
366*cdf0e10cSrcweir 		case SFX_ALIGN_LOWESTTOP:
367*cdf0e10cSrcweir 		case SFX_ALIGN_BOTTOM:
368*cdf0e10cSrcweir 		case SFX_ALIGN_LOWESTBOTTOM:
369*cdf0e10cSrcweir 		case SFX_ALIGN_HIGHESTBOTTOM:
370*cdf0e10cSrcweir 		{
371*cdf0e10cSrcweir 			eAlignment = eActAlign;
372*cdf0e10cSrcweir 		}
373*cdf0e10cSrcweir 		break;
374*cdf0e10cSrcweir 
375*cdf0e10cSrcweir 		case SFX_ALIGN_LEFT:
376*cdf0e10cSrcweir 		case SFX_ALIGN_RIGHT:
377*cdf0e10cSrcweir 		case SFX_ALIGN_FIRSTLEFT:
378*cdf0e10cSrcweir 		case SFX_ALIGN_LASTLEFT:
379*cdf0e10cSrcweir 		case SFX_ALIGN_FIRSTRIGHT:
380*cdf0e10cSrcweir 		case SFX_ALIGN_LASTRIGHT:
381*cdf0e10cSrcweir 		{
382*cdf0e10cSrcweir 			eAlignment = eAlign;
383*cdf0e10cSrcweir 		}
384*cdf0e10cSrcweir 		break;
385*cdf0e10cSrcweir 
386*cdf0e10cSrcweir 		default:
387*cdf0e10cSrcweir 		{
388*cdf0e10cSrcweir 			eAlignment = eAlign;
389*cdf0e10cSrcweir 		}
390*cdf0e10cSrcweir 		break;
391*cdf0e10cSrcweir 	}
392*cdf0e10cSrcweir 
393*cdf0e10cSrcweir 	return eAlignment;
394*cdf0e10cSrcweir }
395*cdf0e10cSrcweir 
396*cdf0e10cSrcweir 
397*cdf0e10cSrcweir /*************************************************************************
398*cdf0e10cSrcweir |*
399*cdf0e10cSrcweir |* Style-Buttons setzen
400*cdf0e10cSrcweir |*
401*cdf0e10cSrcweir \************************************************************************/
402*cdf0e10cSrcweir 
403*cdf0e10cSrcweir void SvxFontWorkDialog::SetStyle_Impl(const XFormTextStyleItem* pItem)
404*cdf0e10cSrcweir {
405*cdf0e10cSrcweir     if ( pItem )
406*cdf0e10cSrcweir 	{
407*cdf0e10cSrcweir 		sal_uInt16 nId = TBI_STYLE_OFF;
408*cdf0e10cSrcweir 
409*cdf0e10cSrcweir 		switch ( pItem->GetValue() )
410*cdf0e10cSrcweir 		{
411*cdf0e10cSrcweir 			case XFT_ROTATE : nId = TBI_STYLE_ROTATE;	break;
412*cdf0e10cSrcweir 			case XFT_UPRIGHT: nId = TBI_STYLE_UPRIGHT;	break;
413*cdf0e10cSrcweir 			case XFT_SLANTX : nId = TBI_STYLE_SLANTX;	break;
414*cdf0e10cSrcweir 			case XFT_SLANTY : nId = TBI_STYLE_SLANTY;	break;
415*cdf0e10cSrcweir             default: ;//prevent warning
416*cdf0e10cSrcweir 		}
417*cdf0e10cSrcweir 		aTbxStyle.Enable();
418*cdf0e10cSrcweir 
419*cdf0e10cSrcweir         // Make sure that there is allways exactly one checked toolbox item.
420*cdf0e10cSrcweir 		if ( pItem->GetValue() == XFT_NONE )
421*cdf0e10cSrcweir 		{
422*cdf0e10cSrcweir 			aTbxStyle.CheckItem(TBI_STYLE_ROTATE, sal_False);
423*cdf0e10cSrcweir 			aTbxStyle.CheckItem(TBI_STYLE_UPRIGHT, sal_False);
424*cdf0e10cSrcweir 			aTbxStyle.CheckItem(TBI_STYLE_SLANTX, sal_False);
425*cdf0e10cSrcweir 			aTbxStyle.CheckItem(TBI_STYLE_SLANTY, sal_False);
426*cdf0e10cSrcweir 
427*cdf0e10cSrcweir 			aTbxStyle.CheckItem(TBI_STYLE_OFF, sal_True);
428*cdf0e10cSrcweir 		}
429*cdf0e10cSrcweir 		else
430*cdf0e10cSrcweir         {
431*cdf0e10cSrcweir 			aTbxStyle.CheckItem(TBI_STYLE_OFF, sal_False);
432*cdf0e10cSrcweir             aTbxStyle.CheckItem(nId);
433*cdf0e10cSrcweir         }
434*cdf0e10cSrcweir 
435*cdf0e10cSrcweir 		nLastStyleTbxId = nId;
436*cdf0e10cSrcweir 	}
437*cdf0e10cSrcweir 	else
438*cdf0e10cSrcweir 		aTbxStyle.Disable();
439*cdf0e10cSrcweir }
440*cdf0e10cSrcweir 
441*cdf0e10cSrcweir /*************************************************************************
442*cdf0e10cSrcweir |*
443*cdf0e10cSrcweir |* Adjust-Buttons setzen
444*cdf0e10cSrcweir |*
445*cdf0e10cSrcweir \************************************************************************/
446*cdf0e10cSrcweir 
447*cdf0e10cSrcweir void SvxFontWorkDialog::SetAdjust_Impl(const XFormTextAdjustItem* pItem)
448*cdf0e10cSrcweir {
449*cdf0e10cSrcweir 	if ( pItem )
450*cdf0e10cSrcweir 	{
451*cdf0e10cSrcweir 		sal_uInt16 nId;
452*cdf0e10cSrcweir 
453*cdf0e10cSrcweir 		aTbxAdjust.Enable();
454*cdf0e10cSrcweir 		aMtrFldDistance.Enable();
455*cdf0e10cSrcweir 
456*cdf0e10cSrcweir 		if ( pItem->GetValue() == XFT_LEFT || pItem->GetValue() == XFT_RIGHT )
457*cdf0e10cSrcweir 		{
458*cdf0e10cSrcweir 			if ( pItem->GetValue() == XFT_LEFT )	nId = TBI_ADJUST_LEFT;
459*cdf0e10cSrcweir 			else									nId = TBI_ADJUST_RIGHT;
460*cdf0e10cSrcweir 			aMtrFldTextStart.Enable();
461*cdf0e10cSrcweir 		}
462*cdf0e10cSrcweir 		else
463*cdf0e10cSrcweir 		{
464*cdf0e10cSrcweir 			if ( pItem->GetValue() == XFT_CENTER )	nId = TBI_ADJUST_CENTER;
465*cdf0e10cSrcweir 			else									nId = TBI_ADJUST_AUTOSIZE;
466*cdf0e10cSrcweir 			aMtrFldTextStart.Disable();
467*cdf0e10cSrcweir 		}
468*cdf0e10cSrcweir 
469*cdf0e10cSrcweir 		if ( !aTbxAdjust.IsItemChecked(nId) )
470*cdf0e10cSrcweir 		{
471*cdf0e10cSrcweir 			aTbxAdjust.CheckItem(nId);
472*cdf0e10cSrcweir 		}
473*cdf0e10cSrcweir 		nLastAdjustTbxId = nId;
474*cdf0e10cSrcweir 	}
475*cdf0e10cSrcweir 	else
476*cdf0e10cSrcweir 	{
477*cdf0e10cSrcweir 		aTbxAdjust.Disable();
478*cdf0e10cSrcweir 		aMtrFldTextStart.Disable();
479*cdf0e10cSrcweir 		aMtrFldDistance.Disable();
480*cdf0e10cSrcweir 	}
481*cdf0e10cSrcweir }
482*cdf0e10cSrcweir 
483*cdf0e10cSrcweir /*************************************************************************
484*cdf0e10cSrcweir |*
485*cdf0e10cSrcweir |* Abstand-Wert in Editfeld eintragen
486*cdf0e10cSrcweir |*
487*cdf0e10cSrcweir \************************************************************************/
488*cdf0e10cSrcweir 
489*cdf0e10cSrcweir void SvxFontWorkDialog::SetDistance_Impl(const XFormTextDistanceItem* pItem)
490*cdf0e10cSrcweir {
491*cdf0e10cSrcweir 	// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
492*cdf0e10cSrcweir 	if ( pItem && !aMtrFldDistance.HasChildPathFocus() )
493*cdf0e10cSrcweir 	{
494*cdf0e10cSrcweir 		SetMetricValue( aMtrFldDistance, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
495*cdf0e10cSrcweir 	}
496*cdf0e10cSrcweir }
497*cdf0e10cSrcweir 
498*cdf0e10cSrcweir /*************************************************************************
499*cdf0e10cSrcweir |*
500*cdf0e10cSrcweir |* Einzug-Wert in Editfeld eintragen
501*cdf0e10cSrcweir |*
502*cdf0e10cSrcweir \************************************************************************/
503*cdf0e10cSrcweir 
504*cdf0e10cSrcweir void SvxFontWorkDialog::SetStart_Impl(const XFormTextStartItem* pItem)
505*cdf0e10cSrcweir {
506*cdf0e10cSrcweir 	// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
507*cdf0e10cSrcweir 	if ( pItem && !aMtrFldTextStart.HasChildPathFocus() )
508*cdf0e10cSrcweir 	{
509*cdf0e10cSrcweir 		SetMetricValue( aMtrFldTextStart, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
510*cdf0e10cSrcweir 	}
511*cdf0e10cSrcweir }
512*cdf0e10cSrcweir 
513*cdf0e10cSrcweir /*************************************************************************
514*cdf0e10cSrcweir |*
515*cdf0e10cSrcweir |* Button fuer Umkehrung der Textrichtung setzen
516*cdf0e10cSrcweir |*
517*cdf0e10cSrcweir \************************************************************************/
518*cdf0e10cSrcweir 
519*cdf0e10cSrcweir void SvxFontWorkDialog::SetMirror_Impl(const XFormTextMirrorItem* pItem)
520*cdf0e10cSrcweir {
521*cdf0e10cSrcweir 	if ( pItem )
522*cdf0e10cSrcweir 		aTbxAdjust.CheckItem(TBI_ADJUST_MIRROR, pItem->GetValue());
523*cdf0e10cSrcweir }
524*cdf0e10cSrcweir 
525*cdf0e10cSrcweir /*************************************************************************
526*cdf0e10cSrcweir |*
527*cdf0e10cSrcweir |* Standardform im ValueSet anzeigen
528*cdf0e10cSrcweir |*
529*cdf0e10cSrcweir \************************************************************************/
530*cdf0e10cSrcweir 
531*cdf0e10cSrcweir void SvxFontWorkDialog::SetStdForm_Impl(const XFormTextStdFormItem* pItem)
532*cdf0e10cSrcweir {
533*cdf0e10cSrcweir 	if ( pItem )
534*cdf0e10cSrcweir 	{
535*cdf0e10cSrcweir 		aFormSet.Enable();
536*cdf0e10cSrcweir 		aFormSet.SetNoSelection();
537*cdf0e10cSrcweir 
538*cdf0e10cSrcweir 		if ( pItem->GetValue() != XFTFORM_NONE )
539*cdf0e10cSrcweir 			aFormSet.SelectItem(
540*cdf0e10cSrcweir                 sal::static_int_cast< sal_uInt16 >(pItem->GetValue()));
541*cdf0e10cSrcweir 	}
542*cdf0e10cSrcweir 	else
543*cdf0e10cSrcweir 		aFormSet.Disable();
544*cdf0e10cSrcweir }
545*cdf0e10cSrcweir 
546*cdf0e10cSrcweir /*************************************************************************
547*cdf0e10cSrcweir |*
548*cdf0e10cSrcweir |* Button fuer Konturanzeige setzen
549*cdf0e10cSrcweir |*
550*cdf0e10cSrcweir \************************************************************************/
551*cdf0e10cSrcweir 
552*cdf0e10cSrcweir void SvxFontWorkDialog::SetShowForm_Impl(const XFormTextHideFormItem* pItem)
553*cdf0e10cSrcweir {
554*cdf0e10cSrcweir 	if ( pItem )
555*cdf0e10cSrcweir 		aTbxShadow.CheckItem(TBI_SHOWFORM, !pItem->GetValue());
556*cdf0e10cSrcweir }
557*cdf0e10cSrcweir 
558*cdf0e10cSrcweir /*************************************************************************
559*cdf0e10cSrcweir |*
560*cdf0e10cSrcweir |* Button fuer Zeichenumrandung setzen
561*cdf0e10cSrcweir |*
562*cdf0e10cSrcweir \************************************************************************/
563*cdf0e10cSrcweir 
564*cdf0e10cSrcweir void SvxFontWorkDialog::SetOutline_Impl(const XFormTextOutlineItem* pItem)
565*cdf0e10cSrcweir {
566*cdf0e10cSrcweir 	if ( pItem )
567*cdf0e10cSrcweir 		aTbxShadow.CheckItem(TBI_OUTLINE, pItem->GetValue());
568*cdf0e10cSrcweir }
569*cdf0e10cSrcweir 
570*cdf0e10cSrcweir /*************************************************************************
571*cdf0e10cSrcweir |*
572*cdf0e10cSrcweir |* Shadow-Buttons setzen
573*cdf0e10cSrcweir |*
574*cdf0e10cSrcweir \************************************************************************/
575*cdf0e10cSrcweir 
576*cdf0e10cSrcweir void SvxFontWorkDialog::SetShadow_Impl(const XFormTextShadowItem* pItem,
577*cdf0e10cSrcweir 										sal_Bool bRestoreValues)
578*cdf0e10cSrcweir {
579*cdf0e10cSrcweir 	if ( pItem )
580*cdf0e10cSrcweir 	{
581*cdf0e10cSrcweir 		sal_uInt16 nId;
582*cdf0e10cSrcweir 
583*cdf0e10cSrcweir 		aTbxShadow.Enable();
584*cdf0e10cSrcweir 
585*cdf0e10cSrcweir 		if ( pItem->GetValue() == XFTSHADOW_NONE )
586*cdf0e10cSrcweir 		{
587*cdf0e10cSrcweir 			nId = TBI_SHADOW_OFF;
588*cdf0e10cSrcweir 			aFbShadowX.Hide();
589*cdf0e10cSrcweir 			aFbShadowY.Hide();
590*cdf0e10cSrcweir 			aMtrFldShadowX.Disable();
591*cdf0e10cSrcweir 			aMtrFldShadowY.Disable();
592*cdf0e10cSrcweir 			aShadowColorLB.Disable();
593*cdf0e10cSrcweir 		}
594*cdf0e10cSrcweir 		else
595*cdf0e10cSrcweir 		{
596*cdf0e10cSrcweir 			aFbShadowX.Show();
597*cdf0e10cSrcweir 			aFbShadowY.Show();
598*cdf0e10cSrcweir 			aMtrFldShadowX.Enable();
599*cdf0e10cSrcweir 			aMtrFldShadowY.Enable();
600*cdf0e10cSrcweir 			aShadowColorLB.Enable();
601*cdf0e10cSrcweir 
602*cdf0e10cSrcweir 			if ( pItem->GetValue() == XFTSHADOW_NORMAL )
603*cdf0e10cSrcweir 			{
604*cdf0e10cSrcweir 				nId = TBI_SHADOW_NORMAL;
605*cdf0e10cSrcweir 				const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
606*cdf0e10cSrcweir 
607*cdf0e10cSrcweir //              aFbShadowX.SetBitmap( Bitmap( ResId(RID_SVXBMP_SHADOW_XDIST, _pMgr ) ) );
608*cdf0e10cSrcweir 				//aMtrFldShadowX.SetUnit(FUNIT_MM);
609*cdf0e10cSrcweir 				aMtrFldShadowX.SetUnit( eDlgUnit );
610*cdf0e10cSrcweir 				aMtrFldShadowX.SetDecimalDigits(2);
611*cdf0e10cSrcweir                 aMtrFldShadowX.SetMin(LONG_MIN);
612*cdf0e10cSrcweir                 aMtrFldShadowX.SetMax(LONG_MAX);
613*cdf0e10cSrcweir 				if( eDlgUnit == FUNIT_MM )
614*cdf0e10cSrcweir 					aMtrFldShadowX.SetSpinSize( 50 );
615*cdf0e10cSrcweir 				else
616*cdf0e10cSrcweir 					aMtrFldShadowX.SetSpinSize( 10 );
617*cdf0e10cSrcweir 
618*cdf0e10cSrcweir //              aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_YDIST, _pMgr ) ) );
619*cdf0e10cSrcweir 				//aMtrFldShadowY.SetUnit(FUNIT_MM);
620*cdf0e10cSrcweir 				aMtrFldShadowY.SetUnit( eDlgUnit );
621*cdf0e10cSrcweir 				aMtrFldShadowY.SetDecimalDigits(2);
622*cdf0e10cSrcweir                 aMtrFldShadowY.SetMin(LONG_MIN);
623*cdf0e10cSrcweir                 aMtrFldShadowY.SetMax(LONG_MAX);
624*cdf0e10cSrcweir 				if( eDlgUnit == FUNIT_MM )
625*cdf0e10cSrcweir 					aMtrFldShadowY.SetSpinSize( 50 );
626*cdf0e10cSrcweir 				else
627*cdf0e10cSrcweir 					aMtrFldShadowY.SetSpinSize( 10 );
628*cdf0e10cSrcweir 
629*cdf0e10cSrcweir 				if ( bRestoreValues )
630*cdf0e10cSrcweir 				{
631*cdf0e10cSrcweir 					SetMetricValue( aMtrFldShadowX, nSaveShadowX, SFX_MAPUNIT_100TH_MM );
632*cdf0e10cSrcweir 					SetMetricValue( aMtrFldShadowY, nSaveShadowY, SFX_MAPUNIT_100TH_MM );
633*cdf0e10cSrcweir 
634*cdf0e10cSrcweir 					XFormTextShadowXValItem aXItem( nSaveShadowX );
635*cdf0e10cSrcweir 					XFormTextShadowYValItem aYItem( nSaveShadowY );
636*cdf0e10cSrcweir 
637*cdf0e10cSrcweir 					GetBindings().GetDispatcher()->Execute(
638*cdf0e10cSrcweir 						SID_FORMTEXT_SHDWXVAL, SFX_CALLMODE_RECORD, &aXItem, &aYItem, 0L );
639*cdf0e10cSrcweir 				}
640*cdf0e10cSrcweir 			}
641*cdf0e10cSrcweir 			else
642*cdf0e10cSrcweir 			{
643*cdf0e10cSrcweir 				nId = TBI_SHADOW_SLANT;
644*cdf0e10cSrcweir 
645*cdf0e10cSrcweir //              aFbShadowX.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_ANGLE, _pMgr ) ) );
646*cdf0e10cSrcweir 				aMtrFldShadowX.SetUnit(FUNIT_CUSTOM);
647*cdf0e10cSrcweir 				aMtrFldShadowX.SetDecimalDigits(1);
648*cdf0e10cSrcweir                 aMtrFldShadowX.SetMin(-1800);
649*cdf0e10cSrcweir                 aMtrFldShadowX.SetMax( 1800);
650*cdf0e10cSrcweir 				aMtrFldShadowX.SetSpinSize(10);
651*cdf0e10cSrcweir 
652*cdf0e10cSrcweir //              aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_SIZE, _pMgr ) ) );
653*cdf0e10cSrcweir 				aMtrFldShadowY.SetUnit(FUNIT_CUSTOM);
654*cdf0e10cSrcweir 				aMtrFldShadowY.SetDecimalDigits(0);
655*cdf0e10cSrcweir                 aMtrFldShadowY.SetMin(-999);
656*cdf0e10cSrcweir                 aMtrFldShadowY.SetMax( 999);
657*cdf0e10cSrcweir 				aMtrFldShadowY.SetSpinSize(10);
658*cdf0e10cSrcweir 
659*cdf0e10cSrcweir 				if ( bRestoreValues )
660*cdf0e10cSrcweir 				{
661*cdf0e10cSrcweir 					aMtrFldShadowX.SetValue(nSaveShadowAngle);
662*cdf0e10cSrcweir 					aMtrFldShadowY.SetValue(nSaveShadowSize);
663*cdf0e10cSrcweir 					XFormTextShadowXValItem aXItem(nSaveShadowAngle);
664*cdf0e10cSrcweir 					XFormTextShadowYValItem aYItem(nSaveShadowSize);
665*cdf0e10cSrcweir 					GetBindings().GetDispatcher()->Execute(
666*cdf0e10cSrcweir 						SID_FORMTEXT_SHDWXVAL, SFX_CALLMODE_RECORD, &aXItem, &aYItem, 0L );
667*cdf0e10cSrcweir 				}
668*cdf0e10cSrcweir 			}
669*cdf0e10cSrcweir 		}
670*cdf0e10cSrcweir 
671*cdf0e10cSrcweir 		if ( !aTbxShadow.IsItemChecked(nId) )
672*cdf0e10cSrcweir 		{
673*cdf0e10cSrcweir 			aTbxShadow.CheckItem(nId);
674*cdf0e10cSrcweir 		}
675*cdf0e10cSrcweir 		nLastShadowTbxId = nId;
676*cdf0e10cSrcweir 
677*cdf0e10cSrcweir 		ApplyImageList();
678*cdf0e10cSrcweir 	}
679*cdf0e10cSrcweir 	else
680*cdf0e10cSrcweir 	{
681*cdf0e10cSrcweir 		aTbxShadow.Disable();
682*cdf0e10cSrcweir 		aMtrFldShadowX.Disable();
683*cdf0e10cSrcweir 		aMtrFldShadowY.Disable();
684*cdf0e10cSrcweir 		aShadowColorLB.Disable();
685*cdf0e10cSrcweir 	}
686*cdf0e10cSrcweir }
687*cdf0e10cSrcweir 
688*cdf0e10cSrcweir /*************************************************************************
689*cdf0e10cSrcweir |*
690*cdf0e10cSrcweir |* Schattenfarbe in Listbox eintragen
691*cdf0e10cSrcweir |*
692*cdf0e10cSrcweir \************************************************************************/
693*cdf0e10cSrcweir 
694*cdf0e10cSrcweir void SvxFontWorkDialog::SetShadowColor_Impl(const XFormTextShadowColorItem* pItem)
695*cdf0e10cSrcweir {
696*cdf0e10cSrcweir 	if ( pItem )
697*cdf0e10cSrcweir         aShadowColorLB.SelectEntry(pItem->GetColorValue());
698*cdf0e10cSrcweir }
699*cdf0e10cSrcweir 
700*cdf0e10cSrcweir /*************************************************************************
701*cdf0e10cSrcweir |*
702*cdf0e10cSrcweir |* X-Wert fuer Schatten in Editfeld eintragen
703*cdf0e10cSrcweir |*
704*cdf0e10cSrcweir \************************************************************************/
705*cdf0e10cSrcweir 
706*cdf0e10cSrcweir void SvxFontWorkDialog::SetShadowXVal_Impl(const XFormTextShadowXValItem* pItem)
707*cdf0e10cSrcweir {
708*cdf0e10cSrcweir 	// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
709*cdf0e10cSrcweir 	if ( pItem && !aMtrFldShadowX.HasChildPathFocus() )
710*cdf0e10cSrcweir 	{
711*cdf0e10cSrcweir 		// #i19251#
712*cdf0e10cSrcweir 		// sal_Int32 nValue = pItem->GetValue();
713*cdf0e10cSrcweir 
714*cdf0e10cSrcweir 		// #i19251#
715*cdf0e10cSrcweir 		// The two involved fields/items are used double and contain/give different
716*cdf0e10cSrcweir 		// values regarding to the access method. Thus, here we need to separate the access
717*cdf0e10cSrcweir 		// methos regarding to the kind of value accessed.
718*cdf0e10cSrcweir 		if(aTbxShadow.IsItemChecked(TBI_SHADOW_SLANT))
719*cdf0e10cSrcweir 		{
720*cdf0e10cSrcweir 			// #i19251#
721*cdf0e10cSrcweir 			// There is no value correction necessary at all, i think this
722*cdf0e10cSrcweir 			// was only tried to be done without understanding that the two
723*cdf0e10cSrcweir 			// involved fields/items are used double and contain/give different
724*cdf0e10cSrcweir 			// values regarding to the access method.
725*cdf0e10cSrcweir 			// nValue = nValue - ( int( float( nValue ) / 360.0 ) * 360 );
726*cdf0e10cSrcweir 			aMtrFldShadowX.SetValue(pItem->GetValue());
727*cdf0e10cSrcweir 		}
728*cdf0e10cSrcweir 		else
729*cdf0e10cSrcweir 		{
730*cdf0e10cSrcweir 			SetMetricValue( aMtrFldShadowX, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
731*cdf0e10cSrcweir 		}
732*cdf0e10cSrcweir 	}
733*cdf0e10cSrcweir }
734*cdf0e10cSrcweir 
735*cdf0e10cSrcweir /*************************************************************************
736*cdf0e10cSrcweir |*
737*cdf0e10cSrcweir |* Y-Wert fuer Schatten in Editfeld eintragen
738*cdf0e10cSrcweir |*
739*cdf0e10cSrcweir \************************************************************************/
740*cdf0e10cSrcweir 
741*cdf0e10cSrcweir void SvxFontWorkDialog::SetShadowYVal_Impl(const XFormTextShadowYValItem* pItem)
742*cdf0e10cSrcweir {
743*cdf0e10cSrcweir 	// #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields
744*cdf0e10cSrcweir 	if ( pItem && !aMtrFldShadowY.HasChildPathFocus() )
745*cdf0e10cSrcweir 	{
746*cdf0e10cSrcweir 		// #i19251#
747*cdf0e10cSrcweir 		// The two involved fields/items are used double and contain/give different
748*cdf0e10cSrcweir 		// values regarding to the access method. Thus, here we need to separate the access
749*cdf0e10cSrcweir 		// methos regarding to the kind of value accessed.
750*cdf0e10cSrcweir 		if(aTbxShadow.IsItemChecked(TBI_SHADOW_SLANT))
751*cdf0e10cSrcweir 		{
752*cdf0e10cSrcweir 			aMtrFldShadowY.SetValue(pItem->GetValue());
753*cdf0e10cSrcweir 		}
754*cdf0e10cSrcweir 		else
755*cdf0e10cSrcweir 		{
756*cdf0e10cSrcweir 			SetMetricValue( aMtrFldShadowY, pItem->GetValue(), SFX_MAPUNIT_100TH_MM );
757*cdf0e10cSrcweir 		}
758*cdf0e10cSrcweir 	}
759*cdf0e10cSrcweir }
760*cdf0e10cSrcweir 
761*cdf0e10cSrcweir /*************************************************************************
762*cdf0e10cSrcweir |*
763*cdf0e10cSrcweir \************************************************************************/
764*cdf0e10cSrcweir 
765*cdf0e10cSrcweir IMPL_LINK( SvxFontWorkDialog, SelectStyleHdl_Impl, void *, EMPTYARG )
766*cdf0e10cSrcweir {
767*cdf0e10cSrcweir 	sal_uInt16 nId = aTbxStyle.GetCurItemId();
768*cdf0e10cSrcweir 
769*cdf0e10cSrcweir     // Execute this block when a different toolbox item has been clicked or
770*cdf0e10cSrcweir     // when the off item has been clicked.  The later is necessary to
771*cdf0e10cSrcweir     // override the toolbox behaviour of unchecking the item after second
772*cdf0e10cSrcweir     // click on it: One of the items has to be checked at all times (when
773*cdf0e10cSrcweir     // enabled that is.)
774*cdf0e10cSrcweir 	if (nId == TBI_STYLE_OFF || nId != nLastStyleTbxId )
775*cdf0e10cSrcweir 	{
776*cdf0e10cSrcweir 		XFormTextStyle eStyle = XFT_NONE;
777*cdf0e10cSrcweir 
778*cdf0e10cSrcweir 		switch ( nId )
779*cdf0e10cSrcweir 		{
780*cdf0e10cSrcweir 			case TBI_STYLE_ROTATE	: eStyle = XFT_ROTATE;	break;
781*cdf0e10cSrcweir 			case TBI_STYLE_UPRIGHT	: eStyle = XFT_UPRIGHT; break;
782*cdf0e10cSrcweir 			case TBI_STYLE_SLANTX	: eStyle = XFT_SLANTX;	break;
783*cdf0e10cSrcweir 			case TBI_STYLE_SLANTY	: eStyle = XFT_SLANTY;	break;
784*cdf0e10cSrcweir 		}
785*cdf0e10cSrcweir 		XFormTextStyleItem aItem( eStyle );
786*cdf0e10cSrcweir 		GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_STYLE, SFX_CALLMODE_RECORD, &aItem, 0L );
787*cdf0e10cSrcweir 		SetStyle_Impl( &aItem );
788*cdf0e10cSrcweir 		nLastStyleTbxId = nId;
789*cdf0e10cSrcweir 	}
790*cdf0e10cSrcweir 	return 0;
791*cdf0e10cSrcweir }
792*cdf0e10cSrcweir 
793*cdf0e10cSrcweir /*************************************************************************
794*cdf0e10cSrcweir |*
795*cdf0e10cSrcweir \************************************************************************/
796*cdf0e10cSrcweir 
797*cdf0e10cSrcweir IMPL_LINK( SvxFontWorkDialog, SelectAdjustHdl_Impl, void *, EMPTYARG )
798*cdf0e10cSrcweir {
799*cdf0e10cSrcweir 	sal_uInt16 nId = aTbxAdjust.GetCurItemId();
800*cdf0e10cSrcweir 
801*cdf0e10cSrcweir 	if ( nId == TBI_ADJUST_MIRROR )
802*cdf0e10cSrcweir 	{
803*cdf0e10cSrcweir 		XFormTextMirrorItem aItem(aTbxAdjust.IsItemChecked(nId));
804*cdf0e10cSrcweir 		GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_MIRROR, SFX_CALLMODE_SLOT, &aItem, 0L );
805*cdf0e10cSrcweir 	}
806*cdf0e10cSrcweir 	else if ( nId != nLastAdjustTbxId )
807*cdf0e10cSrcweir 	{
808*cdf0e10cSrcweir 		XFormTextAdjust eAdjust = XFT_AUTOSIZE;
809*cdf0e10cSrcweir 
810*cdf0e10cSrcweir 		switch ( nId )
811*cdf0e10cSrcweir 		{
812*cdf0e10cSrcweir 			case TBI_ADJUST_LEFT	: eAdjust = XFT_LEFT;	break;
813*cdf0e10cSrcweir 			case TBI_ADJUST_CENTER	: eAdjust = XFT_CENTER; break;
814*cdf0e10cSrcweir 			case TBI_ADJUST_RIGHT	: eAdjust = XFT_RIGHT;	break;
815*cdf0e10cSrcweir 		}
816*cdf0e10cSrcweir 		XFormTextAdjustItem aItem(eAdjust);
817*cdf0e10cSrcweir 		GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_ADJUST, SFX_CALLMODE_RECORD, &aItem, 0L );
818*cdf0e10cSrcweir 		SetAdjust_Impl(&aItem);
819*cdf0e10cSrcweir 		nLastAdjustTbxId = nId;
820*cdf0e10cSrcweir 	}
821*cdf0e10cSrcweir 	return 0;
822*cdf0e10cSrcweir }
823*cdf0e10cSrcweir 
824*cdf0e10cSrcweir /*************************************************************************
825*cdf0e10cSrcweir |*
826*cdf0e10cSrcweir \************************************************************************/
827*cdf0e10cSrcweir 
828*cdf0e10cSrcweir IMPL_LINK( SvxFontWorkDialog, SelectShadowHdl_Impl, void *, EMPTYARG )
829*cdf0e10cSrcweir {
830*cdf0e10cSrcweir 	sal_uInt16 nId = aTbxShadow.GetCurItemId();
831*cdf0e10cSrcweir 
832*cdf0e10cSrcweir 	if ( nId == TBI_SHOWFORM )
833*cdf0e10cSrcweir 	{
834*cdf0e10cSrcweir 		XFormTextHideFormItem aItem(!aTbxShadow.IsItemChecked(nId));
835*cdf0e10cSrcweir 		GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_HIDEFORM, SFX_CALLMODE_RECORD, &aItem, 0L );
836*cdf0e10cSrcweir 	}
837*cdf0e10cSrcweir 	else if ( nId == TBI_OUTLINE )
838*cdf0e10cSrcweir 	{
839*cdf0e10cSrcweir 		XFormTextOutlineItem aItem(aTbxShadow.IsItemChecked(nId));
840*cdf0e10cSrcweir 		GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_OUTLINE, SFX_CALLMODE_RECORD, &aItem, 0L );
841*cdf0e10cSrcweir 	}
842*cdf0e10cSrcweir 	else if ( nId != nLastShadowTbxId )
843*cdf0e10cSrcweir 	{
844*cdf0e10cSrcweir 		XFormTextShadow eShadow = XFTSHADOW_NONE;
845*cdf0e10cSrcweir 
846*cdf0e10cSrcweir 		if ( nLastShadowTbxId == TBI_SHADOW_NORMAL )
847*cdf0e10cSrcweir 		{
848*cdf0e10cSrcweir 			nSaveShadowX = GetCoreValue( aMtrFldShadowX, SFX_MAPUNIT_100TH_MM );
849*cdf0e10cSrcweir 			nSaveShadowY = GetCoreValue( aMtrFldShadowY, SFX_MAPUNIT_100TH_MM );
850*cdf0e10cSrcweir 		}
851*cdf0e10cSrcweir 		else if ( nLastShadowTbxId == TBI_SHADOW_SLANT )
852*cdf0e10cSrcweir 		{
853*cdf0e10cSrcweir 			nSaveShadowAngle = static_cast<long>(aMtrFldShadowX.GetValue());
854*cdf0e10cSrcweir 			nSaveShadowSize  = static_cast<long>(aMtrFldShadowY.GetValue());
855*cdf0e10cSrcweir 		}
856*cdf0e10cSrcweir 		nLastShadowTbxId = nId;
857*cdf0e10cSrcweir 
858*cdf0e10cSrcweir 		if ( nId == TBI_SHADOW_NORMAL ) 	eShadow = XFTSHADOW_NORMAL;
859*cdf0e10cSrcweir 		else if ( nId == TBI_SHADOW_SLANT ) eShadow = XFTSHADOW_SLANT;
860*cdf0e10cSrcweir 
861*cdf0e10cSrcweir 		XFormTextShadowItem aItem(eShadow);
862*cdf0e10cSrcweir 		GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHADOW, SFX_CALLMODE_RECORD, &aItem, 0L );
863*cdf0e10cSrcweir 		SetShadow_Impl(&aItem, sal_True);
864*cdf0e10cSrcweir 	}
865*cdf0e10cSrcweir 	return 0;
866*cdf0e10cSrcweir }
867*cdf0e10cSrcweir 
868*cdf0e10cSrcweir /*************************************************************************
869*cdf0e10cSrcweir |*
870*cdf0e10cSrcweir \************************************************************************/
871*cdf0e10cSrcweir 
872*cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvxFontWorkDialog, ModifyInputHdl_Impl, void *, EMPTYARG )
873*cdf0e10cSrcweir {
874*cdf0e10cSrcweir 	aInputTimer.Start();
875*cdf0e10cSrcweir 	return 0;
876*cdf0e10cSrcweir }
877*cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvxFontWorkDialog, ModifyInputHdl_Impl, void *, EMPTYARG )
878*cdf0e10cSrcweir 
879*cdf0e10cSrcweir /*************************************************************************
880*cdf0e10cSrcweir |*
881*cdf0e10cSrcweir \************************************************************************/
882*cdf0e10cSrcweir 
883*cdf0e10cSrcweir IMPL_LINK( SvxFontWorkDialog, InputTimoutHdl_Impl, void *, EMPTYARG )
884*cdf0e10cSrcweir {
885*cdf0e10cSrcweir 	// System-Metrik evtl. neu setzen
886*cdf0e10cSrcweir 	// Dieses sollte mal als Listener passieren, ist aber aus
887*cdf0e10cSrcweir 	// inkompatibilitaetsgruenden z.Z. nicht moeglich
888*cdf0e10cSrcweir 	const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
889*cdf0e10cSrcweir 	if( eDlgUnit != aMtrFldDistance.GetUnit() )
890*cdf0e10cSrcweir 	{
891*cdf0e10cSrcweir 		SetFieldUnit( aMtrFldDistance, eDlgUnit, sal_True );
892*cdf0e10cSrcweir 		SetFieldUnit( aMtrFldTextStart, eDlgUnit, sal_True );
893*cdf0e10cSrcweir 		aMtrFldDistance.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
894*cdf0e10cSrcweir 		aMtrFldTextStart.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
895*cdf0e10cSrcweir 	}
896*cdf0e10cSrcweir 	if( eDlgUnit != aMtrFldShadowX.GetUnit() &&
897*cdf0e10cSrcweir 		aTbxShadow.IsItemChecked( TBI_SHADOW_NORMAL ) )
898*cdf0e10cSrcweir 	{
899*cdf0e10cSrcweir 		SetFieldUnit( aMtrFldShadowX, eDlgUnit, sal_True );
900*cdf0e10cSrcweir 		SetFieldUnit( aMtrFldShadowY, eDlgUnit, sal_True );
901*cdf0e10cSrcweir 		aMtrFldShadowX.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
902*cdf0e10cSrcweir 		aMtrFldShadowY.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 );
903*cdf0e10cSrcweir 	}
904*cdf0e10cSrcweir 
905*cdf0e10cSrcweir 	long nValue = GetCoreValue( aMtrFldDistance, SFX_MAPUNIT_100TH_MM );
906*cdf0e10cSrcweir 	XFormTextDistanceItem aDistItem( nValue );
907*cdf0e10cSrcweir 	nValue = GetCoreValue( aMtrFldTextStart, SFX_MAPUNIT_100TH_MM );
908*cdf0e10cSrcweir 	XFormTextStartItem aStartItem( nValue );
909*cdf0e10cSrcweir 
910*cdf0e10cSrcweir 	sal_Int32 nValueX(0L);
911*cdf0e10cSrcweir 	sal_Int32 nValueY(0L);
912*cdf0e10cSrcweir 
913*cdf0e10cSrcweir 	// #i19251#
914*cdf0e10cSrcweir 	// The two involved fields/items are used double and contain/give different
915*cdf0e10cSrcweir 	// values regarding to the access method. Thus, here we need to separate the access
916*cdf0e10cSrcweir 	// methos regarding to the kind of value accessed.
917*cdf0e10cSrcweir 	if(nLastShadowTbxId == TBI_SHADOW_NORMAL)
918*cdf0e10cSrcweir 	{
919*cdf0e10cSrcweir 		nValueX = GetCoreValue( aMtrFldShadowX, SFX_MAPUNIT_100TH_MM );
920*cdf0e10cSrcweir 		nValueY = GetCoreValue( aMtrFldShadowY, SFX_MAPUNIT_100TH_MM );
921*cdf0e10cSrcweir 	}
922*cdf0e10cSrcweir 	else if(nLastShadowTbxId == TBI_SHADOW_SLANT)
923*cdf0e10cSrcweir 	{
924*cdf0e10cSrcweir 		nValueX = static_cast<long>(aMtrFldShadowX.GetValue());
925*cdf0e10cSrcweir 		nValueY = static_cast<long>(aMtrFldShadowY.GetValue());
926*cdf0e10cSrcweir 	}
927*cdf0e10cSrcweir 
928*cdf0e10cSrcweir 	XFormTextShadowXValItem aShadowXItem( nValueX );
929*cdf0e10cSrcweir 	XFormTextShadowYValItem aShadowYItem( nValueY );
930*cdf0e10cSrcweir 
931*cdf0e10cSrcweir 	// Slot-ID ist egal, die Exec-Methode wertet das gesamte ItemSet aus
932*cdf0e10cSrcweir 	GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_DISTANCE, SFX_CALLMODE_RECORD, &aDistItem,
933*cdf0e10cSrcweir 											&aStartItem, &aShadowXItem, &aShadowYItem, 0L );
934*cdf0e10cSrcweir 	return 0;
935*cdf0e10cSrcweir }
936*cdf0e10cSrcweir 
937*cdf0e10cSrcweir /*************************************************************************
938*cdf0e10cSrcweir |*
939*cdf0e10cSrcweir \************************************************************************/
940*cdf0e10cSrcweir 
941*cdf0e10cSrcweir IMPL_LINK( SvxFontWorkDialog, FormSelectHdl_Impl, void *, EMPTYARG )
942*cdf0e10cSrcweir {
943*cdf0e10cSrcweir 	XFormTextStdFormItem aItem;
944*cdf0e10cSrcweir 
945*cdf0e10cSrcweir 	if ( aFormSet.IsNoSelection() )
946*cdf0e10cSrcweir 		aItem.SetValue(XFTFORM_NONE);
947*cdf0e10cSrcweir 	else
948*cdf0e10cSrcweir 		aItem.SetValue(aFormSet.GetSelectItemId());
949*cdf0e10cSrcweir 	GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_STDFORM, SFX_CALLMODE_RECORD, &aItem, 0L );
950*cdf0e10cSrcweir 	aFormSet.SetNoSelection();
951*cdf0e10cSrcweir 	return 0;
952*cdf0e10cSrcweir }
953*cdf0e10cSrcweir 
954*cdf0e10cSrcweir /*************************************************************************
955*cdf0e10cSrcweir |*
956*cdf0e10cSrcweir \************************************************************************/
957*cdf0e10cSrcweir 
958*cdf0e10cSrcweir IMPL_LINK( SvxFontWorkDialog, ColorSelectHdl_Impl, void *, EMPTYARG )
959*cdf0e10cSrcweir {
960*cdf0e10cSrcweir // Changed by obo. Linux-Compiler can't parse commented lines
961*cdf0e10cSrcweir 	XFormTextShadowColorItem aItem( (const String &) String(),
962*cdf0e10cSrcweir 								    (const Color &) aShadowColorLB.GetSelectEntryColor() );
963*cdf0e10cSrcweir //	XFormTextShadowColorItem aItem( String(),
964*cdf0e10cSrcweir //								    aShadowColorLB.GetSelectEntryColor() );
965*cdf0e10cSrcweir 	GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHDWCOLOR, SFX_CALLMODE_RECORD, &aItem, 0L );
966*cdf0e10cSrcweir 	return 0;
967*cdf0e10cSrcweir }
968*cdf0e10cSrcweir 
969*cdf0e10cSrcweir /*************************************************************************
970*cdf0e10cSrcweir |*
971*cdf0e10cSrcweir \************************************************************************/
972*cdf0e10cSrcweir 
973*cdf0e10cSrcweir void SvxFontWorkDialog::SetColorTable(const XColorTable* pTable)
974*cdf0e10cSrcweir {
975*cdf0e10cSrcweir 	if ( pTable && pTable != pColorTable )
976*cdf0e10cSrcweir 	{
977*cdf0e10cSrcweir 		pColorTable = pTable;
978*cdf0e10cSrcweir 		aShadowColorLB.Clear();
979*cdf0e10cSrcweir 		aShadowColorLB.Fill(pColorTable);
980*cdf0e10cSrcweir 	}
981*cdf0e10cSrcweir }
982*cdf0e10cSrcweir 
983*cdf0e10cSrcweir /*************************************************************************
984*cdf0e10cSrcweir |*
985*cdf0e10cSrcweir \************************************************************************/
986*cdf0e10cSrcweir 
987*cdf0e10cSrcweir void SvxFontWorkDialog::SetActive(sal_Bool /*bActivate*/)
988*cdf0e10cSrcweir {
989*cdf0e10cSrcweir }
990*cdf0e10cSrcweir 
991*cdf0e10cSrcweir /*************************************************************************
992*cdf0e10cSrcweir |*
993*cdf0e10cSrcweir |* Standard-FontWork-Objekt erzeugen
994*cdf0e10cSrcweir |*
995*cdf0e10cSrcweir \************************************************************************/
996*cdf0e10cSrcweir 
997*cdf0e10cSrcweir void SvxFontWorkDialog::CreateStdFormObj(SdrView& rView, SdrPageView& rPV,
998*cdf0e10cSrcweir 										 const SfxItemSet& rAttr,
999*cdf0e10cSrcweir 										 SdrObject& rOldObj,
1000*cdf0e10cSrcweir 										 XFormTextStdForm eForm)
1001*cdf0e10cSrcweir {
1002*cdf0e10cSrcweir 	SfxItemSet	aAttr(*rAttr.GetPool(), XATTR_FORMTXTSTYLE,
1003*cdf0e10cSrcweir 										XATTR_FORMTXTHIDEFORM);
1004*cdf0e10cSrcweir 	SdrObject*	pNewObj = NULL;
1005*cdf0e10cSrcweir 	Rectangle	aRect;
1006*cdf0e10cSrcweir 	XFormTextAdjust eAdjust = XFT_AUTOSIZE;
1007*cdf0e10cSrcweir 
1008*cdf0e10cSrcweir //-/	rOldObj.TakeAttributes(aAttr, sal_True, sal_False);
1009*cdf0e10cSrcweir 	aAttr.Put(rOldObj.GetMergedItemSet());
1010*cdf0e10cSrcweir 
1011*cdf0e10cSrcweir 	const XFormTextStdFormItem& rOldForm = (const XFormTextStdFormItem&)
1012*cdf0e10cSrcweir 											aAttr.Get(XATTR_FORMTXTSTDFORM);
1013*cdf0e10cSrcweir 
1014*cdf0e10cSrcweir 	aRect = rOldObj.GetSnapRect();
1015*cdf0e10cSrcweir 
1016*cdf0e10cSrcweir 	if ( !rOldObj.ISA(SdrPathObj) )
1017*cdf0e10cSrcweir 	{
1018*cdf0e10cSrcweir 		Point aPos = aRect.TopLeft();
1019*cdf0e10cSrcweir 		aRect = rOldObj.GetLogicRect();
1020*cdf0e10cSrcweir 		aRect.SetPos(aPos);
1021*cdf0e10cSrcweir 	}
1022*cdf0e10cSrcweir 
1023*cdf0e10cSrcweir 	aAttr.Put(rAttr);
1024*cdf0e10cSrcweir 
1025*cdf0e10cSrcweir 	if ( rOldForm.GetValue() == XFTFORM_NONE )
1026*cdf0e10cSrcweir 	{
1027*cdf0e10cSrcweir 		long nW = aRect.GetWidth();
1028*cdf0e10cSrcweir 		aRect.SetSize(Size(nW, nW));
1029*cdf0e10cSrcweir 		aAttr.Put(XFormTextStyleItem(XFT_ROTATE));
1030*cdf0e10cSrcweir 	}
1031*cdf0e10cSrcweir 
1032*cdf0e10cSrcweir 	Point aCenter = aRect.Center();
1033*cdf0e10cSrcweir 
1034*cdf0e10cSrcweir 	switch ( eForm )
1035*cdf0e10cSrcweir 	{
1036*cdf0e10cSrcweir 		case XFTFORM_TOPCIRC:
1037*cdf0e10cSrcweir 		case XFTFORM_BOTCIRC:
1038*cdf0e10cSrcweir 		case XFTFORM_LFTCIRC:
1039*cdf0e10cSrcweir 		case XFTFORM_RGTCIRC:
1040*cdf0e10cSrcweir 		case XFTFORM_TOPARC:
1041*cdf0e10cSrcweir 		case XFTFORM_BOTARC:
1042*cdf0e10cSrcweir 		case XFTFORM_LFTARC:
1043*cdf0e10cSrcweir 		case XFTFORM_RGTARC:
1044*cdf0e10cSrcweir 		{
1045*cdf0e10cSrcweir 			long nBeg, nEnd;
1046*cdf0e10cSrcweir 
1047*cdf0e10cSrcweir 			switch ( eForm )
1048*cdf0e10cSrcweir 			{
1049*cdf0e10cSrcweir 				default: ; //prevent warning
1050*cdf0e10cSrcweir 				case XFTFORM_TOPCIRC:
1051*cdf0e10cSrcweir 					nBeg = 0;
1052*cdf0e10cSrcweir 					nEnd = 18000;
1053*cdf0e10cSrcweir 					break;
1054*cdf0e10cSrcweir 				case XFTFORM_BOTCIRC:
1055*cdf0e10cSrcweir 					nBeg = 18000;
1056*cdf0e10cSrcweir 					nEnd = 36000;
1057*cdf0e10cSrcweir 					break;
1058*cdf0e10cSrcweir 				case XFTFORM_LFTCIRC:
1059*cdf0e10cSrcweir 					nBeg =	9000;
1060*cdf0e10cSrcweir 					nEnd = 27000;
1061*cdf0e10cSrcweir 					break;
1062*cdf0e10cSrcweir 				case XFTFORM_RGTCIRC:
1063*cdf0e10cSrcweir 					nBeg = 27000;
1064*cdf0e10cSrcweir 					nEnd =	9000;
1065*cdf0e10cSrcweir 					break;
1066*cdf0e10cSrcweir 				case XFTFORM_TOPARC:
1067*cdf0e10cSrcweir 					nBeg =	4500;
1068*cdf0e10cSrcweir 					nEnd = 13500;
1069*cdf0e10cSrcweir 					break;
1070*cdf0e10cSrcweir 				case XFTFORM_BOTARC:
1071*cdf0e10cSrcweir 					nBeg = 22500;
1072*cdf0e10cSrcweir 					nEnd = 31500;
1073*cdf0e10cSrcweir 					break;
1074*cdf0e10cSrcweir 				case XFTFORM_LFTARC:
1075*cdf0e10cSrcweir 					nBeg = 13500;
1076*cdf0e10cSrcweir 					nEnd = 22500;
1077*cdf0e10cSrcweir 					break;
1078*cdf0e10cSrcweir 				case XFTFORM_RGTARC:
1079*cdf0e10cSrcweir 					nBeg = 31500;
1080*cdf0e10cSrcweir 					nEnd =	4500;
1081*cdf0e10cSrcweir 					break;
1082*cdf0e10cSrcweir 			}
1083*cdf0e10cSrcweir 			pNewObj = new SdrCircObj(OBJ_CARC, aRect, nBeg, nEnd);
1084*cdf0e10cSrcweir 			break;
1085*cdf0e10cSrcweir 		}
1086*cdf0e10cSrcweir 		case XFTFORM_BUTTON1:
1087*cdf0e10cSrcweir 		{
1088*cdf0e10cSrcweir 			basegfx::B2DPolyPolygon aPolyPolygon;
1089*cdf0e10cSrcweir 			basegfx::B2DPolygon aLine;
1090*cdf0e10cSrcweir 			long nR = aRect.GetWidth() / 2;
1091*cdf0e10cSrcweir 			basegfx::B2DPolygon aTopArc(XPolygon(aCenter, -nR, nR, 50, 1750, sal_False).getB2DPolygon());
1092*cdf0e10cSrcweir 			basegfx::B2DPolygon aBottomArc(XPolygon(aCenter, -nR, nR, 1850, 3550, sal_False).getB2DPolygon());
1093*cdf0e10cSrcweir 
1094*cdf0e10cSrcweir 			// Polygone schliessen
1095*cdf0e10cSrcweir 			aTopArc.setClosed(true);
1096*cdf0e10cSrcweir 			aBottomArc.setClosed(true);
1097*cdf0e10cSrcweir 			aPolyPolygon.append(aTopArc);
1098*cdf0e10cSrcweir 
1099*cdf0e10cSrcweir 			aLine.append(aBottomArc.getB2DPoint(aBottomArc.count() - 1L));
1100*cdf0e10cSrcweir 			aLine.append(aBottomArc.getB2DPoint(0L));
1101*cdf0e10cSrcweir 			aLine.setClosed(true);
1102*cdf0e10cSrcweir 
1103*cdf0e10cSrcweir 			aPolyPolygon.append(aLine);
1104*cdf0e10cSrcweir 			aPolyPolygon.append(aBottomArc);
1105*cdf0e10cSrcweir 
1106*cdf0e10cSrcweir 			pNewObj = new SdrPathObj(OBJ_PATHFILL, aPolyPolygon);
1107*cdf0e10cSrcweir 			eAdjust = XFT_CENTER;
1108*cdf0e10cSrcweir 			break;
1109*cdf0e10cSrcweir 		}
1110*cdf0e10cSrcweir 		case XFTFORM_BUTTON2:
1111*cdf0e10cSrcweir 		case XFTFORM_BUTTON3:
1112*cdf0e10cSrcweir 		case XFTFORM_BUTTON4:
1113*cdf0e10cSrcweir 		{
1114*cdf0e10cSrcweir 			basegfx::B2DPolyPolygon aPolyPolygon;
1115*cdf0e10cSrcweir 			basegfx::B2DPolygon aLine;
1116*cdf0e10cSrcweir 			long nR = aRect.GetWidth() / 2;
1117*cdf0e10cSrcweir 			long nWDiff = nR / 5;
1118*cdf0e10cSrcweir 			long nHDiff;
1119*cdf0e10cSrcweir 
1120*cdf0e10cSrcweir 			if ( eForm == XFTFORM_BUTTON4 )
1121*cdf0e10cSrcweir 			{
1122*cdf0e10cSrcweir 				basegfx::B2DPolygon aNewArc(XPolygon(aCenter, -nR, nR, 950, 2650, sal_False).getB2DPolygon());
1123*cdf0e10cSrcweir 				aNewArc.setClosed(true);
1124*cdf0e10cSrcweir 				aPolyPolygon.append(aNewArc);
1125*cdf0e10cSrcweir 				eAdjust = XFT_CENTER;
1126*cdf0e10cSrcweir 			}
1127*cdf0e10cSrcweir 			else
1128*cdf0e10cSrcweir 			{
1129*cdf0e10cSrcweir 				basegfx::B2DPolygon aNewArc(XPolygon(aCenter, -nR, nR, 2700, 2700).getB2DPolygon());
1130*cdf0e10cSrcweir 				aPolyPolygon.append(aNewArc);
1131*cdf0e10cSrcweir 			}
1132*cdf0e10cSrcweir 
1133*cdf0e10cSrcweir 			if ( eForm == XFTFORM_BUTTON3 )
1134*cdf0e10cSrcweir 				nHDiff = -aRect.GetHeight() / 10;
1135*cdf0e10cSrcweir 			else
1136*cdf0e10cSrcweir 				nHDiff = aRect.GetHeight() / 20;
1137*cdf0e10cSrcweir 
1138*cdf0e10cSrcweir 			aLine.append(basegfx::B2DPoint(aRect.Left() + nWDiff, aRect.Center().Y() + nHDiff));
1139*cdf0e10cSrcweir 			aLine.append(basegfx::B2DPoint(aRect.Right() - nWDiff, aRect.Center().Y() + nHDiff));
1140*cdf0e10cSrcweir 			aLine.setClosed(true);
1141*cdf0e10cSrcweir 			aPolyPolygon.append(aLine);
1142*cdf0e10cSrcweir 
1143*cdf0e10cSrcweir 			if ( eForm == XFTFORM_BUTTON4 )
1144*cdf0e10cSrcweir 			{
1145*cdf0e10cSrcweir 				basegfx::B2DPolygon aNewArc(XPolygon(aCenter, -nR, nR, 2750, 850, sal_False).getB2DPolygon());
1146*cdf0e10cSrcweir 				aNewArc.setClosed(true);
1147*cdf0e10cSrcweir 				aPolyPolygon.append(aNewArc);
1148*cdf0e10cSrcweir 			}
1149*cdf0e10cSrcweir 
1150*cdf0e10cSrcweir 			if ( eForm == XFTFORM_BUTTON3 )
1151*cdf0e10cSrcweir 			{
1152*cdf0e10cSrcweir 				nHDiff += nHDiff;
1153*cdf0e10cSrcweir 				aLine.setB2DPoint(0L, basegfx::B2DPoint(aLine.getB2DPoint(0L).getX(), aLine.getB2DPoint(0L).getY() - nHDiff));
1154*cdf0e10cSrcweir 				aLine.setB2DPoint(1L, basegfx::B2DPoint(aLine.getB2DPoint(1L).getX(), aLine.getB2DPoint(1L).getY() - nHDiff));
1155*cdf0e10cSrcweir 				aPolyPolygon.append(aLine);
1156*cdf0e10cSrcweir 			}
1157*cdf0e10cSrcweir 
1158*cdf0e10cSrcweir 			pNewObj = new SdrPathObj(OBJ_PATHFILL, aPolyPolygon);
1159*cdf0e10cSrcweir 			break;
1160*cdf0e10cSrcweir         }
1161*cdf0e10cSrcweir         default: ; //prevent warning
1162*cdf0e10cSrcweir     }
1163*cdf0e10cSrcweir 	if ( pNewObj )
1164*cdf0e10cSrcweir 	{
1165*cdf0e10cSrcweir 		// #78478# due to DLs changes in Outliner the object needs
1166*cdf0e10cSrcweir 		// a model to get an outliner for later calls to
1167*cdf0e10cSrcweir 		// pNewObj->SetOutlinerParaObject(pPara) (see below).
1168*cdf0e10cSrcweir 		pNewObj->SetModel(rOldObj.GetModel());
1169*cdf0e10cSrcweir 
1170*cdf0e10cSrcweir 		Size aSize;
1171*cdf0e10cSrcweir 		Rectangle aSnap = pNewObj->GetSnapRect();
1172*cdf0e10cSrcweir 
1173*cdf0e10cSrcweir 		aSize.Width() = aRect.Left() - aSnap.Left();
1174*cdf0e10cSrcweir 		aSize.Height() = aRect.Top() - aSnap.Top();
1175*cdf0e10cSrcweir 		pNewObj->NbcMove(aSize);
1176*cdf0e10cSrcweir 
1177*cdf0e10cSrcweir 		rView.BegUndo( SVX_RESSTR( RID_SVXSTR_FONTWORK_UNDOCREATE ) );
1178*cdf0e10cSrcweir 		OutlinerParaObject* pPara = rOldObj.GetOutlinerParaObject();
1179*cdf0e10cSrcweir 		sal_Bool bHide = sal_True;
1180*cdf0e10cSrcweir 
1181*cdf0e10cSrcweir 		if ( pPara != NULL )
1182*cdf0e10cSrcweir 		{
1183*cdf0e10cSrcweir 			pPara = new OutlinerParaObject(*pPara);
1184*cdf0e10cSrcweir 			pNewObj->SetOutlinerParaObject(pPara);
1185*cdf0e10cSrcweir 		}
1186*cdf0e10cSrcweir 		else
1187*cdf0e10cSrcweir 			bHide = sal_False;
1188*cdf0e10cSrcweir 
1189*cdf0e10cSrcweir 		rView.ReplaceObjectAtView(&rOldObj, rPV, pNewObj, sal_True);
1190*cdf0e10cSrcweir 		pNewObj->SetLayer(rOldObj.GetLayer());
1191*cdf0e10cSrcweir 		aAttr.Put(XFormTextHideFormItem(bHide));
1192*cdf0e10cSrcweir 		aAttr.Put(XFormTextAdjustItem(eAdjust));
1193*cdf0e10cSrcweir 
1194*cdf0e10cSrcweir 		XFormTextShadow eShadow = XFTSHADOW_NONE;
1195*cdf0e10cSrcweir 
1196*cdf0e10cSrcweir 		if ( nLastShadowTbxId == TBI_SHADOW_NORMAL )
1197*cdf0e10cSrcweir 		{
1198*cdf0e10cSrcweir 			eShadow = XFTSHADOW_NORMAL;
1199*cdf0e10cSrcweir 			aAttr.Put(XFormTextShadowXValItem(nSaveShadowX));
1200*cdf0e10cSrcweir 			aAttr.Put(XFormTextShadowYValItem(nSaveShadowY));
1201*cdf0e10cSrcweir 		}
1202*cdf0e10cSrcweir 		else if ( nLastShadowTbxId == TBI_SHADOW_SLANT )
1203*cdf0e10cSrcweir 		{
1204*cdf0e10cSrcweir 			eShadow = XFTSHADOW_SLANT;
1205*cdf0e10cSrcweir 			aAttr.Put(XFormTextShadowXValItem(nSaveShadowAngle));
1206*cdf0e10cSrcweir 			aAttr.Put(XFormTextShadowYValItem(nSaveShadowSize));
1207*cdf0e10cSrcweir 		}
1208*cdf0e10cSrcweir 
1209*cdf0e10cSrcweir 		aAttr.Put(XFormTextShadowItem(eShadow));
1210*cdf0e10cSrcweir 
1211*cdf0e10cSrcweir 		rView.SetAttributes(aAttr);
1212*cdf0e10cSrcweir 		rView.EndUndo();
1213*cdf0e10cSrcweir 	}
1214*cdf0e10cSrcweir }
1215*cdf0e10cSrcweir 
1216*cdf0e10cSrcweir void SvxFontWorkDialog::DataChanged( const DataChangedEvent& rDCEvt )
1217*cdf0e10cSrcweir {
1218*cdf0e10cSrcweir 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
1219*cdf0e10cSrcweir             ApplyImageList();
1220*cdf0e10cSrcweir 
1221*cdf0e10cSrcweir     SfxDockingWindow::DataChanged( rDCEvt );
1222*cdf0e10cSrcweir }
1223*cdf0e10cSrcweir /* -----------------------------08.05.2002 14:28------------------------------
1224*cdf0e10cSrcweir 
1225*cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
1226*cdf0e10cSrcweir void SvxFontWorkDialog::ApplyImageList()
1227*cdf0e10cSrcweir {
1228*cdf0e10cSrcweir 	bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode();
1229*cdf0e10cSrcweir 
1230*cdf0e10cSrcweir     ResMgr* _pMgr = &DIALOG_MGR();
1231*cdf0e10cSrcweir 
1232*cdf0e10cSrcweir 	sal_uInt16 nBitmapResId = bHighContrast ? RID_SVXBMP_FONTWORK_FORM1_H : RID_SVXBMP_FONTWORK_FORM1;
1233*cdf0e10cSrcweir 	sal_uInt16 nTextResId = RID_SVXSTR_FONTWORK_FORM1;
1234*cdf0e10cSrcweir 
1235*cdf0e10cSrcweir 	bool bInit = aFormSet.GetItemCount() == 0;
1236*cdf0e10cSrcweir 
1237*cdf0e10cSrcweir 	if( bInit )
1238*cdf0e10cSrcweir 	{
1239*cdf0e10cSrcweir /*
1240*cdf0e10cSrcweir 		Size aSize( aTbxStyle.CalcWindowSizePixel() );
1241*cdf0e10cSrcweir         Bitmap aBmp(ResId(RID_SVXBMP_FONTWORK_FORM1,_pMgr));
1242*cdf0e10cSrcweir 		aSize.Height() = aFormSet.CalcWindowSizePixel(aBmp.GetSizePixel()).Height() + 2;
1243*cdf0e10cSrcweir 		aFormSet.SetSizePixel(aSize);
1244*cdf0e10cSrcweir */
1245*cdf0e10cSrcweir 	}
1246*cdf0e10cSrcweir 
1247*cdf0e10cSrcweir 	sal_uInt16 i;
1248*cdf0e10cSrcweir 	for( i = 1; i < 13; i++, nTextResId++, nBitmapResId++ )
1249*cdf0e10cSrcweir 	{
1250*cdf0e10cSrcweir 		if( bInit )
1251*cdf0e10cSrcweir 		{
1252*cdf0e10cSrcweir             aFormSet.InsertItem( i, Bitmap(ResId(nBitmapResId,*_pMgr)),
1253*cdf0e10cSrcweir                                     String(ResId(nTextResId,*_pMgr)));
1254*cdf0e10cSrcweir 		}
1255*cdf0e10cSrcweir 		else
1256*cdf0e10cSrcweir 		{
1257*cdf0e10cSrcweir             aFormSet.SetItemImage( i, Bitmap(ResId(nBitmapResId,*_pMgr)) );
1258*cdf0e10cSrcweir 		}
1259*cdf0e10cSrcweir 	}
1260*cdf0e10cSrcweir 
1261*cdf0e10cSrcweir     ImageList& rImgLst = bHighContrast ? maImageListH : maImageList;
1262*cdf0e10cSrcweir 
1263*cdf0e10cSrcweir 	aTbxStyle.SetImageList( rImgLst );
1264*cdf0e10cSrcweir 	aTbxAdjust.SetImageList( rImgLst );
1265*cdf0e10cSrcweir 	aTbxShadow.SetImageList( rImgLst );
1266*cdf0e10cSrcweir 
1267*cdf0e10cSrcweir 	switch( nLastShadowTbxId )
1268*cdf0e10cSrcweir 	{
1269*cdf0e10cSrcweir 	case TBI_SHADOW_SLANT:
1270*cdf0e10cSrcweir 		aFbShadowX.SetImage( rImgLst.GetImage( TBI_SHADOW_ANGLE ) );
1271*cdf0e10cSrcweir 		aFbShadowY.SetImage( rImgLst.GetImage( TBI_SHADOW_SIZE ) );
1272*cdf0e10cSrcweir 		break;
1273*cdf0e10cSrcweir //	case TBI_SHADOW_NORMAL:
1274*cdf0e10cSrcweir 	default:
1275*cdf0e10cSrcweir 		aFbShadowX.SetImage( rImgLst.GetImage( TBI_SHADOW_XDIST ) );
1276*cdf0e10cSrcweir 		aFbShadowY.SetImage( rImgLst.GetImage( TBI_SHADOW_YDIST ) );
1277*cdf0e10cSrcweir 		break;
1278*cdf0e10cSrcweir 	}
1279*cdf0e10cSrcweir 
1280*cdf0e10cSrcweir 	aFbDistance.SetImage( rImgLst.GetImage( TBI_DISTANCE ) );
1281*cdf0e10cSrcweir 	aFbTextStart.SetImage( rImgLst.GetImage( TBI_TEXTSTART ) );
1282*cdf0e10cSrcweir 
1283*cdf0e10cSrcweir }
1284