xref: /trunk/main/svx/source/dialog/fontwork.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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