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