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