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_sd.hxx" 26 27 #include "TextObjectBar.hxx" 28 29 30 #include <svx/svxids.hrc> 31 32 #include <editeng/editview.hxx> 33 #include <editeng/editeng.hxx> 34 #include <editeng/unolingu.hxx> 35 #include <editeng/outliner.hxx> 36 #include <editeng/ulspitem.hxx> 37 #include <editeng/lspcitem.hxx> 38 #include <editeng/adjitem.hxx> 39 #include <vcl/vclenum.hxx> 40 #include <sfx2/app.hxx> 41 #include <svl/whiter.hxx> 42 #include <svl/itempool.hxx> 43 #include <svl/style.hxx> 44 #include <sfx2/tplpitem.hxx> 45 #include <sfx2/request.hxx> 46 #include <sfx2/viewfrm.hxx> 47 #include <sfx2/dispatch.hxx> 48 #include <editeng/escpitem.hxx> 49 #include <editeng/wghtitem.hxx> 50 #include <editeng/postitem.hxx> 51 #include <editeng/udlnitem.hxx> 52 #include <editeng/crsditem.hxx> 53 #include <editeng/cntritem.hxx> 54 #include <editeng/shdditem.hxx> 55 #include <svx/xtable.hxx> 56 #include <svx/svdobj.hxx> 57 #include <editeng/outlobj.hxx> 58 #include <editeng/flstitem.hxx> 59 #include <editeng/editeng.hxx> 60 #include <svl/intitem.hxx> 61 #include <editeng/scripttypeitem.hxx> 62 #include <svx/svdoutl.hxx> 63 #include <editeng/writingmodeitem.hxx> 64 #include <editeng/frmdiritem.hxx> 65 #include <svl/itemiter.hxx> 66 67 68 #include "app.hrc" 69 70 #include "eetext.hxx" 71 #include "ViewShell.hxx" 72 #include "drawview.hxx" 73 #include "drawdoc.hxx" 74 #include "OutlineView.hxx" 75 #include "Window.hxx" 76 #include "futempl.hxx" 77 #include "DrawDocShell.hxx" 78 #include "Outliner.hxx" 79 #include "futext.hxx" 80 81 namespace sd { 82 83 /************************************************************************* 84 |* 85 |* Bearbeitung der SfxRequests 86 |* 87 \************************************************************************/ 88 89 void TextObjectBar::Execute( SfxRequest &rReq ) 90 { 91 const SfxItemSet* pArgs = rReq.GetArgs(); 92 const SfxPoolItem* pPoolItem = NULL; 93 sal_uInt16 nSlot = rReq.GetSlot(); 94 sal_Bool bOutlineMode = sal_False; 95 OutlinerView* pOLV = mpView->GetTextEditOutlinerView(); 96 97 std::auto_ptr< OutlineViewModelChangeGuard > aGuard; 98 99 if (mpView->ISA(OutlineView)) 100 { 101 bOutlineMode = sal_True; 102 pOLV = static_cast<OutlineView*>(mpView) 103 ->GetViewByWindow(mpViewShell->GetActiveWindow()); 104 105 aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) ); 106 } 107 108 switch (nSlot) 109 { 110 case SID_STYLE_APPLY: 111 { 112 if( pArgs ) 113 { 114 SdDrawDocument* pDoc = mpView->GetDoc(); 115 OSL_ASSERT (mpViewShell->GetViewShell()!=NULL); 116 FunctionReference xFunc( FuTemplate::Create( mpViewShell, static_cast< ::sd::Window*>( mpViewShell->GetViewShell()->GetWindow()), mpView, pDoc, rReq ) ); 117 118 if(xFunc.is()) 119 { 120 xFunc->Activate(); 121 xFunc->Deactivate(); 122 123 if( rReq.GetSlot() == SID_STYLE_APPLY ) 124 { 125 if( mpViewShell && mpViewShell->GetViewFrame() ) 126 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_APPLY ); 127 } 128 } 129 } 130 else 131 { 132 if( mpViewShell && mpViewShell->GetViewFrame() ) 133 mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON ); 134 } 135 136 rReq.Done(); 137 } 138 break; 139 140 case SID_PARASPACE_INCREASE: 141 case SID_PARASPACE_DECREASE: 142 { 143 if( pOLV ) 144 { 145 ESelection aSel = pOLV->GetSelection(); 146 aSel.Adjust(); 147 sal_uLong nStartPara = aSel.nStartPara; 148 sal_uLong nEndPara = aSel.nEndPara; 149 if( !aSel.HasRange() ) 150 { 151 nStartPara = 0; 152 nEndPara = pOLV->GetOutliner()->GetParagraphCount() - 1; 153 } 154 for( sal_uLong nPara = nStartPara; nPara <= nEndPara; nPara++ ) 155 { 156 SfxStyleSheet* pStyleSheet = NULL; 157 if (pOLV->GetOutliner() != NULL) 158 pStyleSheet = pOLV->GetOutliner()->GetStyleSheet(nPara); 159 if (pStyleSheet != NULL) 160 { 161 SfxItemSet aAttr( pStyleSheet->GetItemSet() ); 162 SfxItemSet aTmpSet( pOLV->GetOutliner()->GetParaAttribs( (sal_uInt16) nPara ) ); 163 aAttr.Put( aTmpSet, sal_False ); // sal_False= InvalidItems nicht als Default, sondern als "Loecher" betrachten 164 const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) aAttr.Get( EE_PARA_ULSPACE ); 165 SvxULSpaceItem* pNewItem = (SvxULSpaceItem*) rItem.Clone(); 166 167 long nUpper = pNewItem->GetUpper(); 168 if( nSlot == SID_PARASPACE_INCREASE ) 169 nUpper += 100; 170 else 171 { 172 nUpper -= 100; 173 nUpper = Max( (long) nUpper, 0L ); 174 } 175 pNewItem->SetUpper( (sal_uInt16) nUpper ); 176 177 long nLower = pNewItem->GetLower(); 178 if( nSlot == SID_PARASPACE_INCREASE ) 179 nLower += 100; 180 else 181 { 182 nLower -= 100; 183 nLower = Max( (long) nLower, 0L ); 184 } 185 pNewItem->SetLower( (sal_uInt16) nLower ); 186 187 SfxItemSet aNewAttrs( aAttr ); 188 aNewAttrs.Put( *pNewItem ); 189 delete pNewItem; 190 pOLV->GetOutliner()->SetParaAttribs( (sal_uInt16)nPara, aNewAttrs ); 191 } 192 } 193 } 194 else 195 { 196 // Der folgende Code kann enabled werden, wenn ich von 197 // JOE einen richtigen Status (DontCare) bekomme; 198 199 // Wird enabled, obwohl es nicht richtig funktioniert (s.o.) 200 SfxItemSet aEditAttr( mpView->GetDoc()->GetPool() ); 201 mpView->GetAttributes( aEditAttr ); 202 if( aEditAttr.GetItemState( EE_PARA_ULSPACE ) >= SFX_ITEM_AVAILABLE ) 203 { 204 SfxItemSet aNewAttrs(*(aEditAttr.GetPool()), aEditAttr.GetRanges()); 205 const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE ); 206 SvxULSpaceItem* pNewItem = (SvxULSpaceItem*) rItem.Clone(); 207 long nUpper = pNewItem->GetUpper(); 208 209 if( nSlot == SID_PARASPACE_INCREASE ) 210 nUpper += 100; 211 else 212 { 213 nUpper -= 100; 214 nUpper = Max( (long) nUpper, 0L ); 215 } 216 pNewItem->SetUpper( (sal_uInt16) nUpper ); 217 218 long nLower = pNewItem->GetLower(); 219 if( nSlot == SID_PARASPACE_INCREASE ) 220 nLower += 100; 221 else 222 { 223 nLower -= 100; 224 nLower = Max( (long) nLower, 0L ); 225 } 226 pNewItem->SetLower( (sal_uInt16) nLower ); 227 228 aNewAttrs.Put( *pNewItem ); 229 delete pNewItem; 230 231 mpView->SetAttributes( aNewAttrs ); 232 } 233 } 234 rReq.Done(); 235 236 Invalidate(); 237 // Um die Preview (im Gliederungsmodus) zu aktualisieren muss 238 // der Slot invalidiert werden: 239 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 240 } 241 break; 242 243 case SID_OUTLINE_LEFT: 244 { 245 if (pOLV) 246 { 247 pOLV->AdjustDepth( -1 ); 248 249 // Ensure bold/italic etc. icon state updates 250 Invalidate(); 251 // #96551# trigger preview refresh 252 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 253 } 254 rReq.Done(); 255 } 256 break; 257 258 case SID_OUTLINE_RIGHT: 259 { 260 if (pOLV) 261 { 262 pOLV->AdjustDepth( 1 ); 263 264 // Ensure bold/italic etc. icon state updates 265 Invalidate(); 266 // #96551# trigger preview refresh 267 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 268 } 269 rReq.Done(); 270 } 271 break; 272 273 case SID_ATTR_PARA_LRSPACE: 274 { 275 sal_uInt16 nSlot = SID_ATTR_PARA_LRSPACE; 276 SvxLRSpaceItem aLRSpace = (const SvxLRSpaceItem&)pArgs->Get( 277 GetPool().GetWhich(nSlot)); 278 279 SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE ); 280 aLRSpace.SetWhich( EE_PARA_LRSPACE ); 281 282 aEditAttr.Put( aLRSpace ); 283 mpView->SetAttributes( aEditAttr ); 284 285 Invalidate(SID_ATTR_PARA_LRSPACE); 286 } 287 break; 288 289 case SID_OUTLINE_UP: 290 { 291 if (pOLV) 292 { 293 pOLV->AdjustHeight( -1 ); 294 295 // #96551# trigger preview refresh 296 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 297 } 298 rReq.Done(); 299 } 300 break; 301 302 case SID_OUTLINE_DOWN: 303 { 304 if (pOLV) 305 { 306 pOLV->AdjustHeight( 1 ); 307 308 // #96551# trigger preview refresh 309 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 310 } 311 rReq.Done(); 312 } 313 break; 314 315 case SID_TEXTDIRECTION_LEFT_TO_RIGHT: 316 case SID_TEXTDIRECTION_TOP_TO_BOTTOM: 317 { 318 mpView->SdrEndTextEdit(); 319 SfxItemSet aAttr( mpView->GetDoc()->GetPool(), SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 0 ); 320 aAttr.Put( SvxWritingModeItem( 321 nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ? 322 com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL, 323 SDRATTR_TEXTDIRECTION ) ); 324 rReq.Done( aAttr ); 325 mpView->SetAttributes( aAttr ); 326 Invalidate(); 327 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 328 } 329 break; 330 331 case FN_NUM_BULLET_ON: 332 if( pOLV ) 333 pOLV->ToggleBullets(); 334 break; 335 336 case SID_GROW_FONT_SIZE: 337 case SID_SHRINK_FONT_SIZE: 338 { 339 const SvxFontListItem* pFonts = (const SvxFontListItem*)mpViewShell->GetDocSh()->GetItem( SID_ATTR_CHAR_FONTLIST ); 340 const FontList* pFontList = pFonts ? pFonts->GetFontList(): 0; 341 if( pFontList ) 342 { 343 FuText::ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pOLV, pFontList, mpView ); 344 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT ); 345 } 346 rReq.Done(); 347 } 348 break; 349 350 case SID_THES: 351 { 352 String aReplaceText; 353 SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, sal_False ); 354 if (pItem2) 355 aReplaceText = pItem2->GetValue(); 356 if (aReplaceText.Len() > 0) 357 ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText ); 358 } 359 break; 360 361 default: 362 { 363 SfxItemSet aEditAttr( mpView->GetDoc()->GetPool() ); 364 mpView->GetAttributes( aEditAttr ); 365 SfxItemSet aNewAttr(*(aEditAttr.GetPool()), aEditAttr.GetRanges()); 366 367 if( !pArgs ) 368 { 369 //aNewAttr.InvalidateAllItems(); <- Macht Probleme (#35465#) 370 371 switch ( nSlot ) 372 { 373 case SID_ATTR_CHAR_WEIGHT: 374 { 375 FontWeight eFW = ( (const SvxWeightItem&) aEditAttr. 376 Get( EE_CHAR_WEIGHT ) ).GetWeight(); 377 aNewAttr.Put( SvxWeightItem( eFW == WEIGHT_NORMAL ? 378 WEIGHT_BOLD : WEIGHT_NORMAL, 379 EE_CHAR_WEIGHT ) ); 380 } 381 break; 382 case SID_ATTR_CHAR_POSTURE: 383 { 384 FontItalic eFI = ( (const SvxPostureItem&) aEditAttr. 385 Get( EE_CHAR_ITALIC ) ).GetPosture(); 386 aNewAttr.Put( SvxPostureItem( eFI == ITALIC_NORMAL ? 387 ITALIC_NONE : ITALIC_NORMAL, 388 EE_CHAR_ITALIC ) ); 389 } 390 break; 391 case SID_ATTR_CHAR_UNDERLINE: 392 { 393 FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr. 394 Get( EE_CHAR_UNDERLINE ) ).GetLineStyle(); 395 aNewAttr.Put( SvxUnderlineItem( eFU == UNDERLINE_SINGLE ? 396 UNDERLINE_NONE : UNDERLINE_SINGLE, 397 EE_CHAR_UNDERLINE ) ); 398 } 399 break; 400 case SID_ATTR_CHAR_OVERLINE: 401 { 402 FontUnderline eFO = ( (const SvxOverlineItem&) aEditAttr. 403 Get( EE_CHAR_OVERLINE ) ).GetLineStyle(); 404 aNewAttr.Put( SvxOverlineItem( eFO == UNDERLINE_SINGLE ? 405 UNDERLINE_NONE : UNDERLINE_SINGLE, 406 EE_CHAR_OVERLINE ) ); 407 } 408 break; 409 case SID_ATTR_CHAR_CONTOUR: 410 { 411 aNewAttr.Put( SvxContourItem( !( (const SvxContourItem&) aEditAttr. 412 Get( EE_CHAR_OUTLINE ) ).GetValue(), EE_CHAR_OUTLINE ) ); 413 } 414 break; 415 case SID_ATTR_CHAR_SHADOWED: 416 { 417 aNewAttr.Put( SvxShadowedItem( !( (const SvxShadowedItem&) aEditAttr. 418 Get( EE_CHAR_SHADOW ) ).GetValue(), EE_CHAR_SHADOW ) ); 419 } 420 break; 421 case SID_ATTR_CHAR_STRIKEOUT: 422 { 423 FontStrikeout eFSO = ( ( (const SvxCrossedOutItem&) aEditAttr. 424 Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() ); 425 aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ? 426 STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) ); 427 } 428 break; 429 430 case SID_ATTR_PARA_ADJUST_LEFT: 431 { 432 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); 433 } 434 break; 435 case SID_ATTR_PARA_ADJUST_CENTER: 436 { 437 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); 438 } 439 break; 440 case SID_ATTR_PARA_ADJUST_RIGHT: 441 { 442 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); 443 } 444 break; 445 case SID_ATTR_PARA_ADJUST_BLOCK: 446 { 447 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) ); 448 } 449 break; 450 case SID_ATTR_PARA_LINESPACE_10: 451 { 452 SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL ); 453 aItem.SetPropLineSpace( 100 ); 454 aNewAttr.Put( aItem ); 455 } 456 break; 457 case SID_ATTR_PARA_LINESPACE_15: 458 { 459 SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL ); 460 aItem.SetPropLineSpace( 150 ); 461 aNewAttr.Put( aItem ); 462 } 463 break; 464 case SID_ATTR_PARA_LINESPACE_20: 465 { 466 SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL ); 467 aItem.SetPropLineSpace( 200 ); 468 aNewAttr.Put( aItem ); 469 } 470 break; 471 case SID_SET_SUPER_SCRIPT: 472 { 473 SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT ); 474 SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&) 475 aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 476 477 if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) 478 aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 479 else 480 aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); 481 aNewAttr.Put( aItem ); 482 } 483 break; 484 case SID_SET_SUB_SCRIPT: 485 { 486 SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT ); 487 SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&) 488 aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 489 490 if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) 491 aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 492 else 493 aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); 494 aNewAttr.Put( aItem ); 495 } 496 break; 497 498 // Attribute fuer die TextObjectBar 499 case SID_ATTR_CHAR_FONT: 500 { 501 if( pArgs ) 502 { 503 if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTINFO, sal_True, &pPoolItem ) ) 504 aNewAttr.Put( *pPoolItem ); 505 } 506 else 507 mpViewShell->GetViewFrame()->GetDispatcher()-> 508 Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON ); 509 } 510 break; 511 case SID_ATTR_CHAR_FONTHEIGHT: 512 { 513 if( pArgs ) 514 { 515 if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTHEIGHT, sal_True, &pPoolItem ) ) 516 aNewAttr.Put( *pPoolItem ); 517 } 518 else 519 mpViewShell->GetViewFrame()->GetDispatcher()-> 520 Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON ); 521 } 522 break; 523 case SID_ATTR_CHAR_COLOR: 524 { 525 if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_COLOR, sal_True, &pPoolItem ) ) 526 aNewAttr.Put( *pPoolItem ); 527 } 528 break; 529 /* #i35937# 530 case FN_NUM_BULLET_ON: 531 { 532 if (aEditAttr.GetItemState(EE_PARA_BULLETSTATE) == SFX_ITEM_ON) 533 { 534 SfxUInt16Item aBulletState((const SfxUInt16Item&) aEditAttr.Get(EE_PARA_BULLETSTATE)); 535 536 if (aBulletState.GetValue() != 0) 537 { 538 // Ausschalten 539 aNewAttr.Put(SfxUInt16Item(EE_PARA_BULLETSTATE, 0)); 540 } 541 else 542 { 543 // Einschalten 544 aNewAttr.Put(SfxUInt16Item(EE_PARA_BULLETSTATE, 1)); 545 } 546 } 547 else 548 { 549 // Einschalten 550 aNewAttr.Put(SfxUInt16Item(EE_PARA_BULLETSTATE, 1)); 551 } 552 } 553 break; 554 */ 555 } 556 557 rReq.Done( aNewAttr ); 558 pArgs = rReq.GetArgs(); 559 } 560 else if ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT || 561 nSlot == SID_ATTR_PARA_RIGHT_TO_LEFT ) 562 { 563 sal_Bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT; 564 565 sal_uInt16 nAdjust = SVX_ADJUST_LEFT; 566 if( SFX_ITEM_ON == aEditAttr.GetItemState(EE_PARA_JUST, sal_True, &pPoolItem ) ) 567 nAdjust = ( (SvxAdjustItem*)pPoolItem)->GetEnumValue(); 568 569 if( bLeftToRight ) 570 { 571 aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) ); 572 if( nAdjust == SVX_ADJUST_RIGHT ) 573 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); 574 } 575 else 576 { 577 aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) ); 578 if( nAdjust == SVX_ADJUST_LEFT ) 579 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); 580 } 581 582 rReq.Done( aNewAttr ); 583 pArgs = rReq.GetArgs(); 584 585 Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT ); 586 } 587 else if ( nSlot == SID_ATTR_CHAR_FONT || 588 nSlot == SID_ATTR_CHAR_FONTHEIGHT || 589 nSlot == SID_ATTR_CHAR_POSTURE || 590 nSlot == SID_ATTR_CHAR_WEIGHT ) 591 { 592 // #i78017 establish the same behaviour as in Writer 593 sal_uInt16 nScriptType = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX; 594 if (nSlot == SID_ATTR_CHAR_FONT) 595 nScriptType = mpView->GetScriptType(); 596 597 SfxItemPool& rPool = mpView->GetDoc()->GetPool(); 598 SvxScriptSetItem aSvxScriptSetItem( nSlot, rPool ); 599 aSvxScriptSetItem.PutItemForScriptType( nScriptType, pArgs->Get( rPool.GetWhich( nSlot ) ) ); 600 aNewAttr.Put( aSvxScriptSetItem.GetItemSet() ); 601 rReq.Done( aNewAttr ); 602 pArgs = rReq.GetArgs(); 603 } 604 else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT || 605 nSlot == SID_ATTR_PARA_ADJUST_CENTER || 606 nSlot == SID_ATTR_PARA_ADJUST_RIGHT || 607 nSlot == SID_ATTR_PARA_ADJUST_BLOCK) 608 { 609 switch( nSlot ) 610 { 611 case SID_ATTR_PARA_ADJUST_LEFT: 612 { 613 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) ); 614 } 615 break; 616 case SID_ATTR_PARA_ADJUST_CENTER: 617 { 618 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) ); 619 } 620 break; 621 case SID_ATTR_PARA_ADJUST_RIGHT: 622 { 623 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) ); 624 } 625 break; 626 case SID_ATTR_PARA_ADJUST_BLOCK: 627 { 628 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) ); 629 } 630 break; 631 } 632 rReq.Done( aNewAttr ); 633 pArgs = rReq.GetArgs(); 634 } 635 else if(nSlot == SID_ATTR_CHAR_KERNING) 636 { 637 aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot))); 638 rReq.Done( aNewAttr ); 639 pArgs = rReq.GetArgs(); 640 } 641 else if(nSlot == SID_SET_SUPER_SCRIPT ) 642 { 643 SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); 644 SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 645 aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 646 647 if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) 648 aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 649 else 650 aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); 651 aNewAttr.Put( aItem ); 652 rReq.Done( aNewAttr ); 653 pArgs = rReq.GetArgs(); 654 } 655 else if( nSlot == SID_SET_SUB_SCRIPT ) 656 { 657 SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT); 658 SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&) 659 aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 660 661 if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) 662 aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 663 else 664 aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); 665 aNewAttr.Put( aItem ); 666 rReq.Done( aNewAttr ); 667 pArgs = rReq.GetArgs(); 668 } 669 670 mpView->SetAttributes(*pArgs); 671 672 // Aus Performance- und Erweiterungsgruenden wird 673 // jetzt die komplette Shell invalidiert 674 Invalidate(); 675 676 // Um die Preview (im Gliederungsmodus) zu aktualisieren muss 677 // der Slot invalidiert werden: 678 mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False ); 679 } 680 break; 681 } 682 683 Invalidate( SID_OUTLINE_LEFT ); 684 Invalidate( SID_OUTLINE_RIGHT ); 685 Invalidate( SID_OUTLINE_UP ); 686 Invalidate( SID_OUTLINE_DOWN ); 687 } 688 689 } // end of namespace sd 690