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 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_svx.hxx" 24 25 // include --------------------------------------------------------------- 26 #include <sfx2/module.hxx> 27 #include <sfx2/dispatch.hxx> 28 #include <tools/shl.hxx> 29 30 #define _SVX_FONTWORK_CXX 31 #include <svx/svdobj.hxx> 32 #include <svx/svdopath.hxx> 33 #include <svx/svdview.hxx> 34 #include <svx/svdocirc.hxx> 35 #include <svx/xtextit.hxx> 36 37 #include <svx/dialmgr.hxx> 38 #include "svx/dlgutil.hxx" 39 40 #include <svx/dialogs.hrc> 41 #include "fontwork.hrc" 42 #include <svx/fontwork.hxx> 43 #include <editeng/outlobj.hxx> 44 #include <basegfx/polygon/b2dpolygon.hxx> 45 #include <basegfx/point/b2dpoint.hxx> 46 47 SFX_IMPL_DOCKINGWINDOW( SvxFontWorkChildWindow, SID_FONTWORK ); 48 49 /************************************************************************* 50 |* ControllerItem for Fontwork 51 \************************************************************************/ 52 53 SvxFontWorkControllerItem::SvxFontWorkControllerItem 54 ( 55 sal_uInt16 _nId, 56 SvxFontWorkDialog& rDlg, 57 SfxBindings& rBindings 58 ) : 59 60 SfxControllerItem( _nId, rBindings ), 61 62 rFontWorkDlg( rDlg ) 63 { 64 } 65 66 /************************************************************************* 67 |* StateChanged-Methode fuer FontWork-Items 68 \************************************************************************/ 69 70 void SvxFontWorkControllerItem::StateChanged( sal_uInt16 /*nSID*/, SfxItemState /*eState*/, 71 const SfxPoolItem* pItem ) 72 { 73 switch ( GetId() ) 74 { 75 case SID_FORMTEXT_STYLE: 76 { 77 const XFormTextStyleItem* pStateItem = 78 PTR_CAST(XFormTextStyleItem, pItem); 79 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStyleItem expected"); 80 rFontWorkDlg.SetStyle_Impl(pStateItem); 81 break; 82 } 83 case SID_FORMTEXT_ADJUST: 84 { 85 const XFormTextAdjustItem* pStateItem = 86 PTR_CAST(XFormTextAdjustItem, pItem); 87 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextAdjustItem expected"); 88 rFontWorkDlg.SetAdjust_Impl(pStateItem); 89 break; 90 } 91 case SID_FORMTEXT_DISTANCE: 92 { 93 const XFormTextDistanceItem* pStateItem = 94 PTR_CAST(XFormTextDistanceItem, pItem); 95 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextDistanceItem expected"); 96 rFontWorkDlg.SetDistance_Impl(pStateItem); 97 break; 98 } 99 case SID_FORMTEXT_START: 100 { 101 const XFormTextStartItem* pStateItem = 102 PTR_CAST(XFormTextStartItem, pItem); 103 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextStartItem expected"); 104 rFontWorkDlg.SetStart_Impl(pStateItem); 105 break; 106 } 107 case SID_FORMTEXT_MIRROR: 108 { 109 const XFormTextMirrorItem* pStateItem = 110 PTR_CAST(XFormTextMirrorItem, pItem); 111 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextMirrorItem expected"); 112 rFontWorkDlg.SetMirror_Impl(pStateItem); 113 break; 114 } 115 case SID_FORMTEXT_HIDEFORM: 116 { 117 const XFormTextHideFormItem* pStateItem = 118 PTR_CAST(XFormTextHideFormItem, pItem); 119 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextHideFormItem expected"); 120 rFontWorkDlg.SetShowForm_Impl(pStateItem); 121 break; 122 } 123 case SID_FORMTEXT_OUTLINE: 124 { 125 const XFormTextOutlineItem* pStateItem = 126 PTR_CAST(XFormTextOutlineItem, pItem); 127 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextOutlineItem expected"); 128 rFontWorkDlg.SetOutline_Impl(pStateItem); 129 break; 130 } 131 case SID_FORMTEXT_SHADOW: 132 { 133 const XFormTextShadowItem* pStateItem = 134 PTR_CAST(XFormTextShadowItem, pItem); 135 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowItem expected"); 136 rFontWorkDlg.SetShadow_Impl(pStateItem); 137 break; 138 } 139 case SID_FORMTEXT_SHDWCOLOR: 140 { 141 const XFormTextShadowColorItem* pStateItem = 142 PTR_CAST(XFormTextShadowColorItem, pItem); 143 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowColorItem expected"); 144 rFontWorkDlg.SetShadowColor_Impl(pStateItem); 145 break; 146 } 147 case SID_FORMTEXT_SHDWXVAL: 148 { 149 const XFormTextShadowXValItem* pStateItem = 150 PTR_CAST(XFormTextShadowXValItem, pItem); 151 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowXValItem expected"); 152 rFontWorkDlg.SetShadowXVal_Impl(pStateItem); 153 break; 154 } 155 case SID_FORMTEXT_SHDWYVAL: 156 { 157 const XFormTextShadowYValItem* pStateItem = 158 PTR_CAST(XFormTextShadowYValItem, pItem); 159 DBG_ASSERT(pStateItem || pItem == 0, "XFormTextShadowYValItem expected"); 160 rFontWorkDlg.SetShadowYVal_Impl(pStateItem); 161 break; 162 } 163 } 164 } 165 166 /************************************************************************* 167 |* Ableitung vom SfxChildWindow als "Behälter" für Fontwork-Dialog 168 \************************************************************************/ 169 170 SvxFontWorkChildWindow::SvxFontWorkChildWindow 171 ( 172 Window* _pParent, 173 sal_uInt16 nId, 174 SfxBindings* pBindings, 175 SfxChildWinInfo* pInfo 176 ) : 177 178 SfxChildWindow( _pParent, nId ) 179 180 { 181 pWindow = new SvxFontWorkDialog( pBindings, this, _pParent, 182 SVX_RES( RID_SVXDLG_FONTWORK ) ); 183 SvxFontWorkDialog* pDlg = (SvxFontWorkDialog*) pWindow; 184 185 eChildAlignment = SFX_ALIGN_NOALIGNMENT; 186 187 pDlg->Initialize( pInfo ); 188 } 189 190 /************************************************************************* 191 |* Floating Window zur Attributierung von Texteffekten 192 \************************************************************************/ 193 194 SvxFontWorkDialog::SvxFontWorkDialog( SfxBindings *pBindinx, 195 SfxChildWindow *pCW, 196 Window* _pParent, 197 const ResId& rResId ) : 198 SfxDockingWindow( pBindinx, pCW, _pParent, rResId ), 199 200 aTbxStyle (this, ResId(TBX_STYLE,*rResId.GetResMgr())), 201 aTbxAdjust (this, ResId(TBX_ADJUST,*rResId.GetResMgr())), 202 203 aFbDistance (this, ResId(FB_DISTANCE,*rResId.GetResMgr())), 204 aMtrFldDistance (this, ResId(MTR_FLD_DISTANCE,*rResId.GetResMgr())), 205 aFbTextStart (this, ResId(FB_TEXTSTART,*rResId.GetResMgr())), 206 aMtrFldTextStart(this, ResId(MTR_FLD_TEXTSTART,*rResId.GetResMgr())), 207 208 aTbxShadow (this, ResId(TBX_SHADOW,*rResId.GetResMgr())), 209 210 aFbShadowX (this, ResId(FB_SHADOW_X,*rResId.GetResMgr())), 211 aMtrFldShadowX (this, ResId(MTR_FLD_SHADOW_X,*rResId.GetResMgr())), 212 aFbShadowY (this, ResId(FB_SHADOW_Y,*rResId.GetResMgr())), 213 aMtrFldShadowY (this, ResId(MTR_FLD_SHADOW_Y,*rResId.GetResMgr())), 214 215 aShadowColorLB (this, ResId(CLB_SHADOW_COLOR,*rResId.GetResMgr())), 216 rBindings (*pBindinx), 217 218 nLastStyleTbxId(0), 219 nLastAdjustTbxId(0), 220 nLastShadowTbxId(0), 221 nSaveShadowX (0), 222 nSaveShadowY (0), 223 nSaveShadowAngle(450), 224 nSaveShadowSize (100), 225 226 maImageList (ResId(IL_FONTWORK,*rResId.GetResMgr())), 227 maImageListH (ResId(ILH_FONTWORK,*rResId.GetResMgr())), 228 229 maColorTable() 230 { 231 FreeResource(); 232 233 ApplyImageList(); 234 235 pCtrlItems[0] = new SvxFontWorkControllerItem(SID_FORMTEXT_STYLE, *this, rBindings); 236 pCtrlItems[1] = new SvxFontWorkControllerItem(SID_FORMTEXT_ADJUST, *this, rBindings); 237 pCtrlItems[2] = new SvxFontWorkControllerItem(SID_FORMTEXT_DISTANCE, *this, rBindings); 238 pCtrlItems[3] = new SvxFontWorkControllerItem(SID_FORMTEXT_START, *this, rBindings); 239 pCtrlItems[4] = new SvxFontWorkControllerItem(SID_FORMTEXT_MIRROR, *this, rBindings); 240 pCtrlItems[5] = new SvxFontWorkControllerItem(SID_FORMTEXT_HIDEFORM, *this, rBindings); 241 pCtrlItems[6] = new SvxFontWorkControllerItem(SID_FORMTEXT_OUTLINE, *this, rBindings); 242 pCtrlItems[7] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHADOW, *this, rBindings); 243 pCtrlItems[8] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWCOLOR, *this, rBindings); 244 pCtrlItems[9] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWXVAL, *this, rBindings); 245 pCtrlItems[10] = new SvxFontWorkControllerItem(SID_FORMTEXT_SHDWYVAL, *this, rBindings); 246 247 Size aSize = aTbxStyle.CalcWindowSizePixel(); 248 aTbxStyle.SetSizePixel(aSize); 249 aTbxStyle.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectStyleHdl_Impl) ); 250 251 aTbxAdjust.SetSizePixel(aSize); 252 aTbxAdjust.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectAdjustHdl_Impl) ); 253 254 aTbxShadow.SetSizePixel(aSize); 255 aTbxShadow.SetSelectHdl( LINK(this, SvxFontWorkDialog, SelectShadowHdl_Impl) ); 256 257 Link aLink = LINK(this, SvxFontWorkDialog, ModifyInputHdl_Impl); 258 aMtrFldDistance.SetModifyHdl( aLink ); 259 aMtrFldTextStart.SetModifyHdl( aLink ); 260 aMtrFldShadowX.SetModifyHdl( aLink ); 261 aMtrFldShadowY.SetModifyHdl( aLink ); 262 263 // System-Metrik setzen 264 const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit(); 265 SetFieldUnit( aMtrFldDistance, eDlgUnit, sal_True ); 266 SetFieldUnit( aMtrFldTextStart, eDlgUnit, sal_True ); 267 SetFieldUnit( aMtrFldShadowX, eDlgUnit, sal_True ); 268 SetFieldUnit( aMtrFldShadowY, eDlgUnit, sal_True ); 269 if( eDlgUnit == FUNIT_MM ) 270 { 271 aMtrFldDistance.SetSpinSize( 50 ); 272 aMtrFldTextStart.SetSpinSize( 50 ); 273 aMtrFldShadowX.SetSpinSize( 50 ); 274 aMtrFldShadowY.SetSpinSize( 50 ); 275 } 276 else 277 { 278 aMtrFldDistance.SetSpinSize( 10 ); 279 aMtrFldTextStart.SetSpinSize( 10 ); 280 aMtrFldShadowX.SetSpinSize( 10 ); 281 aMtrFldShadowY.SetSpinSize( 10 ); 282 } 283 284 aShadowColorLB.SetSelectHdl( LINK(this, SvxFontWorkDialog, ColorSelectHdl_Impl) ); 285 286 aInputTimer.SetTimeout(500); 287 aInputTimer.SetTimeoutHdl(LINK(this, SvxFontWorkDialog, InputTimeoutHdl_Impl)); 288 } 289 290 /************************************************************************* 291 |* Destruktor 292 \************************************************************************/ 293 294 SvxFontWorkDialog::~SvxFontWorkDialog() 295 { 296 for (sal_uInt16 i = 0; i < CONTROLLER_COUNT; i++) 297 DELETEZ(pCtrlItems[i]); 298 } 299 300 /************************************************************************* 301 |* 302 \************************************************************************/ 303 304 void SvxFontWorkDialog::Zoom() 305 { 306 SfxDockingWindow::Roll(); 307 } 308 309 310 /************************************************************************* 311 |* 312 \************************************************************************/ 313 314 SfxChildAlignment SvxFontWorkDialog::CheckAlignment( SfxChildAlignment eActAlign, 315 SfxChildAlignment eAlign ) 316 { 317 SfxChildAlignment eAlignment; 318 319 switch ( eAlign ) 320 { 321 case SFX_ALIGN_TOP: 322 case SFX_ALIGN_HIGHESTTOP: 323 case SFX_ALIGN_LOWESTTOP: 324 case SFX_ALIGN_BOTTOM: 325 case SFX_ALIGN_LOWESTBOTTOM: 326 case SFX_ALIGN_HIGHESTBOTTOM: 327 { 328 eAlignment = eActAlign; 329 } 330 break; 331 332 case SFX_ALIGN_LEFT: 333 case SFX_ALIGN_RIGHT: 334 case SFX_ALIGN_FIRSTLEFT: 335 case SFX_ALIGN_LASTLEFT: 336 case SFX_ALIGN_FIRSTRIGHT: 337 case SFX_ALIGN_LASTRIGHT: 338 { 339 eAlignment = eAlign; 340 } 341 break; 342 343 default: 344 { 345 eAlignment = eAlign; 346 } 347 break; 348 } 349 350 return eAlignment; 351 } 352 353 354 /************************************************************************* 355 |* Style-Buttons setzen 356 \************************************************************************/ 357 358 void SvxFontWorkDialog::SetStyle_Impl(const XFormTextStyleItem* pItem) 359 { 360 if ( pItem ) 361 { 362 sal_uInt16 nId = TBI_STYLE_OFF; 363 364 switch ( pItem->GetValue() ) 365 { 366 case XFT_ROTATE : nId = TBI_STYLE_ROTATE; break; 367 case XFT_UPRIGHT: nId = TBI_STYLE_UPRIGHT; break; 368 case XFT_SLANTX : nId = TBI_STYLE_SLANTX; break; 369 case XFT_SLANTY : nId = TBI_STYLE_SLANTY; break; 370 default: ;//prevent warning 371 } 372 aTbxStyle.Enable(); 373 374 // Make sure that there is always exactly one checked toolbox item. 375 if ( pItem->GetValue() == XFT_NONE ) 376 { 377 aTbxStyle.CheckItem(TBI_STYLE_ROTATE, sal_False); 378 aTbxStyle.CheckItem(TBI_STYLE_UPRIGHT, sal_False); 379 aTbxStyle.CheckItem(TBI_STYLE_SLANTX, sal_False); 380 aTbxStyle.CheckItem(TBI_STYLE_SLANTY, sal_False); 381 382 aTbxStyle.CheckItem(TBI_STYLE_OFF, sal_True); 383 } 384 else 385 { 386 aTbxStyle.CheckItem(TBI_STYLE_OFF, sal_False); 387 aTbxStyle.CheckItem(nId); 388 } 389 390 nLastStyleTbxId = nId; 391 } 392 else 393 aTbxStyle.Disable(); 394 } 395 396 /************************************************************************* 397 |* Adjust-Buttons setzen 398 \************************************************************************/ 399 400 void SvxFontWorkDialog::SetAdjust_Impl(const XFormTextAdjustItem* pItem) 401 { 402 if ( pItem ) 403 { 404 sal_uInt16 nId; 405 406 aTbxAdjust.Enable(); 407 aMtrFldDistance.Enable(); 408 409 if ( pItem->GetValue() == XFT_LEFT || pItem->GetValue() == XFT_RIGHT ) 410 { 411 if ( pItem->GetValue() == XFT_LEFT ) nId = TBI_ADJUST_LEFT; 412 else nId = TBI_ADJUST_RIGHT; 413 aMtrFldTextStart.Enable(); 414 } 415 else 416 { 417 if ( pItem->GetValue() == XFT_CENTER ) nId = TBI_ADJUST_CENTER; 418 else nId = TBI_ADJUST_AUTOSIZE; 419 aMtrFldTextStart.Disable(); 420 } 421 422 if ( !aTbxAdjust.IsItemChecked(nId) ) 423 { 424 aTbxAdjust.CheckItem(nId); 425 } 426 nLastAdjustTbxId = nId; 427 } 428 else 429 { 430 aTbxAdjust.Disable(); 431 aMtrFldTextStart.Disable(); 432 aMtrFldDistance.Disable(); 433 } 434 } 435 436 /************************************************************************* 437 |* Abstand-Wert in Editfeld eintragen 438 \************************************************************************/ 439 440 void SvxFontWorkDialog::SetDistance_Impl(const XFormTextDistanceItem* pItem) 441 { 442 // #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields 443 if ( pItem && !aMtrFldDistance.HasChildPathFocus() ) 444 { 445 SetMetricValue( aMtrFldDistance, pItem->GetValue(), SFX_MAPUNIT_100TH_MM ); 446 } 447 } 448 449 /************************************************************************* 450 |* Einzug-Wert in Editfeld eintragen 451 \************************************************************************/ 452 453 void SvxFontWorkDialog::SetStart_Impl(const XFormTextStartItem* pItem) 454 { 455 // #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields 456 if ( pItem && !aMtrFldTextStart.HasChildPathFocus() ) 457 { 458 SetMetricValue( aMtrFldTextStart, pItem->GetValue(), SFX_MAPUNIT_100TH_MM ); 459 } 460 } 461 462 /************************************************************************* 463 |* Button für Umkehrung der Textrichtung setzen 464 \************************************************************************/ 465 466 void SvxFontWorkDialog::SetMirror_Impl(const XFormTextMirrorItem* pItem) 467 { 468 if ( pItem ) 469 aTbxAdjust.CheckItem(TBI_ADJUST_MIRROR, pItem->GetValue()); 470 } 471 472 /************************************************************************* 473 |* Button für Konturanzeige setzen 474 \************************************************************************/ 475 476 void SvxFontWorkDialog::SetShowForm_Impl(const XFormTextHideFormItem* pItem) 477 { 478 if ( pItem ) 479 aTbxShadow.CheckItem(TBI_SHOWFORM, !pItem->GetValue()); 480 } 481 482 /************************************************************************* 483 |* Button für Zeichenumrandung setzen 484 \************************************************************************/ 485 486 void SvxFontWorkDialog::SetOutline_Impl(const XFormTextOutlineItem* pItem) 487 { 488 if ( pItem ) 489 aTbxShadow.CheckItem(TBI_OUTLINE, pItem->GetValue()); 490 } 491 492 /************************************************************************* 493 |* Shadow-Buttons setzen 494 \************************************************************************/ 495 496 void SvxFontWorkDialog::SetShadow_Impl(const XFormTextShadowItem* pItem, 497 sal_Bool bRestoreValues) 498 { 499 if ( pItem ) 500 { 501 sal_uInt16 nId; 502 503 aTbxShadow.Enable(); 504 505 if ( pItem->GetValue() == XFTSHADOW_NONE ) 506 { 507 nId = TBI_SHADOW_OFF; 508 aFbShadowX.Hide(); 509 aFbShadowY.Hide(); 510 aMtrFldShadowX.Disable(); 511 aMtrFldShadowY.Disable(); 512 aShadowColorLB.Disable(); 513 } 514 else 515 { 516 aFbShadowX.Show(); 517 aFbShadowY.Show(); 518 aMtrFldShadowX.Enable(); 519 aMtrFldShadowY.Enable(); 520 aShadowColorLB.Enable(); 521 522 if ( pItem->GetValue() == XFTSHADOW_NORMAL ) 523 { 524 nId = TBI_SHADOW_NORMAL; 525 const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit(); 526 527 // aFbShadowX.SetBitmap( Bitmap( ResId(RID_SVXBMP_SHADOW_XDIST, _pMgr ) ) ); 528 //aMtrFldShadowX.SetUnit(FUNIT_MM); 529 aMtrFldShadowX.SetUnit( eDlgUnit ); 530 aMtrFldShadowX.SetDecimalDigits(2); 531 aMtrFldShadowX.SetMin(LONG_MIN); 532 aMtrFldShadowX.SetMax(LONG_MAX); 533 if( eDlgUnit == FUNIT_MM ) 534 aMtrFldShadowX.SetSpinSize( 50 ); 535 else 536 aMtrFldShadowX.SetSpinSize( 10 ); 537 538 // aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_YDIST, _pMgr ) ) ); 539 //aMtrFldShadowY.SetUnit(FUNIT_MM); 540 aMtrFldShadowY.SetUnit( eDlgUnit ); 541 aMtrFldShadowY.SetDecimalDigits(2); 542 aMtrFldShadowY.SetMin(LONG_MIN); 543 aMtrFldShadowY.SetMax(LONG_MAX); 544 if( eDlgUnit == FUNIT_MM ) 545 aMtrFldShadowY.SetSpinSize( 50 ); 546 else 547 aMtrFldShadowY.SetSpinSize( 10 ); 548 549 if ( bRestoreValues ) 550 { 551 SetMetricValue( aMtrFldShadowX, nSaveShadowX, SFX_MAPUNIT_100TH_MM ); 552 SetMetricValue( aMtrFldShadowY, nSaveShadowY, SFX_MAPUNIT_100TH_MM ); 553 554 XFormTextShadowXValItem aXItem( nSaveShadowX ); 555 XFormTextShadowYValItem aYItem( nSaveShadowY ); 556 557 GetBindings().GetDispatcher()->Execute( 558 SID_FORMTEXT_SHDWXVAL, SFX_CALLMODE_RECORD, &aXItem, &aYItem, 0L ); 559 } 560 } 561 else 562 { 563 nId = TBI_SHADOW_SLANT; 564 565 // aFbShadowX.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_ANGLE, _pMgr ) ) ); 566 aMtrFldShadowX.SetUnit(FUNIT_CUSTOM); 567 aMtrFldShadowX.SetDecimalDigits(1); 568 aMtrFldShadowX.SetMin(-1800); 569 aMtrFldShadowX.SetMax( 1800); 570 aMtrFldShadowX.SetSpinSize(10); 571 572 // aFbShadowY.SetBitmap( Bitmap( ResId( RID_SVXBMP_SHADOW_SIZE, _pMgr ) ) ); 573 aMtrFldShadowY.SetUnit(FUNIT_PERCENT); 574 aMtrFldShadowY.SetDecimalDigits(0); 575 aMtrFldShadowY.SetMin(-999); 576 aMtrFldShadowY.SetMax( 999); 577 aMtrFldShadowY.SetSpinSize(10); 578 579 if ( bRestoreValues ) 580 { 581 aMtrFldShadowX.SetValue(nSaveShadowAngle); 582 aMtrFldShadowY.SetValue(nSaveShadowSize); 583 XFormTextShadowXValItem aXItem(nSaveShadowAngle); 584 XFormTextShadowYValItem aYItem(nSaveShadowSize); 585 GetBindings().GetDispatcher()->Execute( 586 SID_FORMTEXT_SHDWXVAL, SFX_CALLMODE_RECORD, &aXItem, &aYItem, 0L ); 587 } 588 } 589 } 590 591 if ( !aTbxShadow.IsItemChecked(nId) ) 592 { 593 aTbxShadow.CheckItem(nId); 594 } 595 nLastShadowTbxId = nId; 596 597 ApplyImageList(); 598 } 599 else 600 { 601 aTbxShadow.Disable(); 602 aMtrFldShadowX.Disable(); 603 aMtrFldShadowY.Disable(); 604 aShadowColorLB.Disable(); 605 } 606 } 607 608 /************************************************************************* 609 |* Schattenfarbe in Listbox eintragen 610 \************************************************************************/ 611 612 void SvxFontWorkDialog::SetShadowColor_Impl(const XFormTextShadowColorItem* pItem) 613 { 614 if ( pItem ) 615 aShadowColorLB.SelectEntry(pItem->GetColorValue()); 616 } 617 618 /************************************************************************* 619 |* X-Wert für Schatten in Editfeld eintragen 620 \************************************************************************/ 621 622 void SvxFontWorkDialog::SetShadowXVal_Impl(const XFormTextShadowXValItem* pItem) 623 { 624 // #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields 625 if ( pItem && !aMtrFldShadowX.HasChildPathFocus() ) 626 { 627 // #i19251# 628 // sal_Int32 nValue = pItem->GetValue(); 629 630 // #i19251# 631 // The two involved fields/items are used double and contain/give different 632 // values regarding to the access method. Thus, here we need to separate the access 633 // method regarding to the kind of value accessed. 634 if(aTbxShadow.IsItemChecked(TBI_SHADOW_SLANT)) 635 { 636 // #i19251# 637 // There is no value correction necessary at all, i think this 638 // was only tried to be done without understanding that the two 639 // involved fields/items are used double and contain/give different 640 // values regarding to the access method. 641 // nValue = nValue - ( int( float( nValue ) / 360.0 ) * 360 ); 642 aMtrFldShadowX.SetValue(pItem->GetValue()); 643 } 644 else 645 { 646 SetMetricValue( aMtrFldShadowX, pItem->GetValue(), SFX_MAPUNIT_100TH_MM ); 647 } 648 } 649 } 650 651 /************************************************************************* 652 |* Y-Wert für Schatten in Editfeld eintragen 653 \************************************************************************/ 654 655 void SvxFontWorkDialog::SetShadowYVal_Impl(const XFormTextShadowYValItem* pItem) 656 { 657 // #104596# Use HasChildPathFocus() instead of HasFocus() at SpinFields 658 if ( pItem && !aMtrFldShadowY.HasChildPathFocus() ) 659 { 660 // #i19251# 661 // The two involved fields/items are used double and contain/give different 662 // values regarding to the access method. Thus, here we need to separate the access 663 // method regarding to the kind of value accessed. 664 if(aTbxShadow.IsItemChecked(TBI_SHADOW_SLANT)) 665 { 666 aMtrFldShadowY.SetValue(pItem->GetValue()); 667 } 668 else 669 { 670 SetMetricValue( aMtrFldShadowY, pItem->GetValue(), SFX_MAPUNIT_100TH_MM ); 671 } 672 } 673 } 674 675 /************************************************************************* 676 |* 677 \************************************************************************/ 678 679 IMPL_LINK( SvxFontWorkDialog, SelectStyleHdl_Impl, void *, EMPTYARG ) 680 { 681 sal_uInt16 nId = aTbxStyle.GetCurItemId(); 682 683 // Execute this block when a different toolbox item has been clicked or 684 // when the off item has been clicked. The later is necessary to 685 // override the toolbox behavior of unchecking the item after second 686 // click on it: One of the items has to be checked at all times (when 687 // enabled that is.) 688 if (nId == TBI_STYLE_OFF || nId != nLastStyleTbxId ) 689 { 690 XFormTextStyle eStyle = XFT_NONE; 691 692 switch ( nId ) 693 { 694 case TBI_STYLE_ROTATE : eStyle = XFT_ROTATE; break; 695 case TBI_STYLE_UPRIGHT : eStyle = XFT_UPRIGHT; break; 696 case TBI_STYLE_SLANTX : eStyle = XFT_SLANTX; break; 697 case TBI_STYLE_SLANTY : eStyle = XFT_SLANTY; break; 698 } 699 XFormTextStyleItem aItem( eStyle ); 700 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_STYLE, SFX_CALLMODE_RECORD, &aItem, 0L ); 701 SetStyle_Impl( &aItem ); 702 nLastStyleTbxId = nId; 703 } 704 return 0; 705 } 706 707 /************************************************************************* 708 |* 709 \************************************************************************/ 710 711 IMPL_LINK( SvxFontWorkDialog, SelectAdjustHdl_Impl, void *, EMPTYARG ) 712 { 713 sal_uInt16 nId = aTbxAdjust.GetCurItemId(); 714 715 if ( nId == TBI_ADJUST_MIRROR ) 716 { 717 XFormTextMirrorItem aItem(aTbxAdjust.IsItemChecked(nId)); 718 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_MIRROR, SFX_CALLMODE_SLOT, &aItem, 0L ); 719 } 720 else if ( nId != nLastAdjustTbxId ) 721 { 722 XFormTextAdjust eAdjust = XFT_AUTOSIZE; 723 724 switch ( nId ) 725 { 726 case TBI_ADJUST_LEFT : eAdjust = XFT_LEFT; break; 727 case TBI_ADJUST_CENTER : eAdjust = XFT_CENTER; break; 728 case TBI_ADJUST_RIGHT : eAdjust = XFT_RIGHT; break; 729 } 730 XFormTextAdjustItem aItem(eAdjust); 731 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_ADJUST, SFX_CALLMODE_RECORD, &aItem, 0L ); 732 SetAdjust_Impl(&aItem); 733 nLastAdjustTbxId = nId; 734 } 735 return 0; 736 } 737 738 /************************************************************************* 739 |* 740 \************************************************************************/ 741 742 IMPL_LINK( SvxFontWorkDialog, SelectShadowHdl_Impl, void *, EMPTYARG ) 743 { 744 sal_uInt16 nId = aTbxShadow.GetCurItemId(); 745 746 if ( nId == TBI_SHOWFORM ) 747 { 748 XFormTextHideFormItem aItem(!aTbxShadow.IsItemChecked(nId)); 749 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_HIDEFORM, SFX_CALLMODE_RECORD, &aItem, 0L ); 750 } 751 else if ( nId == TBI_OUTLINE ) 752 { 753 XFormTextOutlineItem aItem(aTbxShadow.IsItemChecked(nId)); 754 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_OUTLINE, SFX_CALLMODE_RECORD, &aItem, 0L ); 755 } 756 else if ( nId != nLastShadowTbxId ) 757 { 758 XFormTextShadow eShadow = XFTSHADOW_NONE; 759 760 if ( nLastShadowTbxId == TBI_SHADOW_NORMAL ) 761 { 762 nSaveShadowX = GetCoreValue( aMtrFldShadowX, SFX_MAPUNIT_100TH_MM ); 763 nSaveShadowY = GetCoreValue( aMtrFldShadowY, SFX_MAPUNIT_100TH_MM ); 764 } 765 else if ( nLastShadowTbxId == TBI_SHADOW_SLANT ) 766 { 767 nSaveShadowAngle = static_cast<long>(aMtrFldShadowX.GetValue()); 768 nSaveShadowSize = static_cast<long>(aMtrFldShadowY.GetValue()); 769 } 770 nLastShadowTbxId = nId; 771 772 if ( nId == TBI_SHADOW_NORMAL ) eShadow = XFTSHADOW_NORMAL; 773 else if ( nId == TBI_SHADOW_SLANT ) eShadow = XFTSHADOW_SLANT; 774 775 XFormTextShadowItem aItem(eShadow); 776 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHADOW, SFX_CALLMODE_RECORD, &aItem, 0L ); 777 SetShadow_Impl(&aItem, sal_True); 778 } 779 return 0; 780 } 781 782 /************************************************************************* 783 |* 784 \************************************************************************/ 785 786 IMPL_LINK_INLINE_START( SvxFontWorkDialog, ModifyInputHdl_Impl, void *, EMPTYARG ) 787 { 788 aInputTimer.Start(); 789 return 0; 790 } 791 IMPL_LINK_INLINE_END( SvxFontWorkDialog, ModifyInputHdl_Impl, void *, EMPTYARG ) 792 793 /************************************************************************* 794 |* 795 \************************************************************************/ 796 797 IMPL_LINK( SvxFontWorkDialog, InputTimeoutHdl_Impl, void *, EMPTYARG ) 798 { 799 // System-Metrik evtl. neu setzen 800 // Dieses sollte mal als Listener passieren, ist aber aus 801 // inkompatibilitätsgründen z.Z. nicht möglich 802 const FieldUnit eDlgUnit = rBindings.GetDispatcher()->GetModule()->GetFieldUnit(); 803 if( eDlgUnit != aMtrFldDistance.GetUnit() ) 804 { 805 SetFieldUnit( aMtrFldDistance, eDlgUnit, sal_True ); 806 SetFieldUnit( aMtrFldTextStart, eDlgUnit, sal_True ); 807 aMtrFldDistance.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 ); 808 aMtrFldTextStart.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 ); 809 } 810 if( eDlgUnit != aMtrFldShadowX.GetUnit() && 811 aTbxShadow.IsItemChecked( TBI_SHADOW_NORMAL ) ) 812 { 813 SetFieldUnit( aMtrFldShadowX, eDlgUnit, sal_True ); 814 SetFieldUnit( aMtrFldShadowY, eDlgUnit, sal_True ); 815 aMtrFldShadowX.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 ); 816 aMtrFldShadowY.SetSpinSize( eDlgUnit == FUNIT_MM ? 50 : 10 ); 817 } 818 819 long nValue = GetCoreValue( aMtrFldDistance, SFX_MAPUNIT_100TH_MM ); 820 XFormTextDistanceItem aDistItem( nValue ); 821 nValue = GetCoreValue( aMtrFldTextStart, SFX_MAPUNIT_100TH_MM ); 822 XFormTextStartItem aStartItem( nValue ); 823 824 sal_Int32 nValueX(0L); 825 sal_Int32 nValueY(0L); 826 827 // #i19251# 828 // The two involved fields/items are used double and contain/give different 829 // values regarding to the access method. Thus, here we need to separate the access 830 // method regarding to the kind of value accessed. 831 if(nLastShadowTbxId == TBI_SHADOW_NORMAL) 832 { 833 nValueX = GetCoreValue( aMtrFldShadowX, SFX_MAPUNIT_100TH_MM ); 834 nValueY = GetCoreValue( aMtrFldShadowY, SFX_MAPUNIT_100TH_MM ); 835 } 836 else if(nLastShadowTbxId == TBI_SHADOW_SLANT) 837 { 838 nValueX = static_cast<long>(aMtrFldShadowX.GetValue()); 839 nValueY = static_cast<long>(aMtrFldShadowY.GetValue()); 840 } 841 842 XFormTextShadowXValItem aShadowXItem( nValueX ); 843 XFormTextShadowYValItem aShadowYItem( nValueY ); 844 845 // Slot-ID ist egal, die Exec-Methode wertet das gesamte ItemSet aus 846 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_DISTANCE, SFX_CALLMODE_RECORD, &aDistItem, 847 &aStartItem, &aShadowXItem, &aShadowYItem, 0L ); 848 return 0; 849 } 850 851 /************************************************************************* 852 |* 853 \************************************************************************/ 854 855 IMPL_LINK( SvxFontWorkDialog, ColorSelectHdl_Impl, void *, EMPTYARG ) 856 { 857 // Changed by obo. Linux-Compiler can't parse commented lines 858 XFormTextShadowColorItem aItem( (const String &) String(), 859 (const Color &) aShadowColorLB.GetSelectEntryColor() ); 860 // XFormTextShadowColorItem aItem( String(), 861 // aShadowColorLB.GetSelectEntryColor() ); 862 GetBindings().GetDispatcher()->Execute( SID_FORMTEXT_SHDWCOLOR, SFX_CALLMODE_RECORD, &aItem, 0L ); 863 return 0; 864 } 865 866 /************************************************************************* 867 |* 868 \************************************************************************/ 869 870 void SvxFontWorkDialog::SetColorTable(XColorListSharedPtr aTable) 871 { 872 if ( aTable != maColorTable ) 873 { 874 maColorTable = aTable; 875 aShadowColorLB.Clear(); 876 aShadowColorLB.Fill(maColorTable); 877 } 878 } 879 880 /************************************************************************* 881 |* 882 \************************************************************************/ 883 884 void SvxFontWorkDialog::SetActive(sal_Bool /*bActivate*/) 885 { 886 } 887 888 void SvxFontWorkDialog::DataChanged( const DataChangedEvent& rDCEvt ) 889 { 890 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) ) 891 ApplyImageList(); 892 893 SfxDockingWindow::DataChanged( rDCEvt ); 894 } 895 /* -----------------------------08.05.2002 14:28------------------------------ 896 897 ---------------------------------------------------------------------------*/ 898 void SvxFontWorkDialog::ApplyImageList() 899 { 900 bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 901 902 ImageList& rImgLst = bHighContrast ? maImageListH : maImageList; 903 904 aTbxStyle.SetImageList( rImgLst ); 905 aTbxAdjust.SetImageList( rImgLst ); 906 aTbxShadow.SetImageList( rImgLst ); 907 908 switch( nLastShadowTbxId ) 909 { 910 case TBI_SHADOW_SLANT: 911 aFbShadowX.SetImage( rImgLst.GetImage( TBI_SHADOW_ANGLE ) ); 912 aFbShadowY.SetImage( rImgLst.GetImage( TBI_SHADOW_SIZE ) ); 913 break; 914 // case TBI_SHADOW_NORMAL: 915 default: 916 aFbShadowX.SetImage( rImgLst.GetImage( TBI_SHADOW_XDIST ) ); 917 aFbShadowY.SetImage( rImgLst.GetImage( TBI_SHADOW_YDIST ) ); 918 break; 919 } 920 921 aFbDistance.SetImage( rImgLst.GetImage( TBI_DISTANCE ) ); 922 aFbTextStart.SetImage( rImgLst.GetImage( TBI_TEXTSTART ) ); 923 924 } 925 926 /* vim: set noet sw=4 ts=4: */ 927