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