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