Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "TextObjectBar.hxx"
21 :
22 : #include <svx/svxids.hrc>
23 :
24 : #include <editeng/editview.hxx>
25 : #include <editeng/editeng.hxx>
26 : #include <editeng/unolingu.hxx>
27 : #include <editeng/outliner.hxx>
28 : #include <editeng/ulspitem.hxx>
29 : #include <editeng/lspcitem.hxx>
30 : #include <editeng/adjustitem.hxx>
31 : #include <vcl/vclenum.hxx>
32 : #include <sfx2/app.hxx>
33 : #include <svl/whiter.hxx>
34 : #include <svl/itempool.hxx>
35 : #include <svl/style.hxx>
36 : #include <sfx2/tplpitem.hxx>
37 : #include <sfx2/request.hxx>
38 : #include <sfx2/viewfrm.hxx>
39 : #include <sfx2/dispatch.hxx>
40 : #include <editeng/escapementitem.hxx>
41 : #include <editeng/wghtitem.hxx>
42 : #include <editeng/postitem.hxx>
43 : #include <editeng/udlnitem.hxx>
44 : #include <editeng/crossedoutitem.hxx>
45 : #include <editeng/contouritem.hxx>
46 : #include <editeng/shdditem.hxx>
47 : #include <svx/xtable.hxx>
48 : #include <svx/svdobj.hxx>
49 : #include <editeng/outlobj.hxx>
50 : #include <editeng/flstitem.hxx>
51 : #include <svl/intitem.hxx>
52 : #include <editeng/scripttypeitem.hxx>
53 : #include <svx/svdoutl.hxx>
54 : #include <editeng/writingmodeitem.hxx>
55 : #include <editeng/frmdiritem.hxx>
56 : #include <svl/itemiter.hxx>
57 :
58 : #include "app.hrc"
59 :
60 : #include <editeng/outliner.hxx>
61 : #include "ViewShell.hxx"
62 : #include "drawview.hxx"
63 : #include "drawdoc.hxx"
64 : #include "OutlineView.hxx"
65 : #include "Window.hxx"
66 : #include "futempl.hxx"
67 : #include "DrawDocShell.hxx"
68 : #include "Outliner.hxx"
69 : #include "futext.hxx"
70 :
71 : namespace sd {
72 :
73 : /**
74 : * Process SfxRequests
75 : */
76 :
77 0 : void TextObjectBar::Execute( SfxRequest &rReq )
78 : {
79 0 : const SfxItemSet* pArgs = rReq.GetArgs();
80 0 : const SfxPoolItem* pPoolItem = NULL;
81 0 : sal_uInt16 nSlot = rReq.GetSlot();
82 0 : OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
83 :
84 : SAL_WNODEPRECATED_DECLARATIONS_PUSH
85 0 : std::auto_ptr< OutlineViewModelChangeGuard > aGuard;
86 : SAL_WNODEPRECATED_DECLARATIONS_POP
87 :
88 0 : if (mpView->ISA(OutlineView))
89 : {
90 : pOLV = static_cast<OutlineView*>(mpView)
91 0 : ->GetViewByWindow(mpViewShell->GetActiveWindow());
92 :
93 0 : aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) );
94 : }
95 :
96 0 : switch (nSlot)
97 : {
98 : case SID_STYLE_APPLY:
99 : {
100 0 : if( pArgs )
101 : {
102 0 : SdDrawDocument& rDoc = mpView->GetDoc();
103 : OSL_ASSERT (mpViewShell->GetViewShell()!=NULL);
104 0 : FunctionReference xFunc( FuTemplate::Create( mpViewShell, static_cast< ::sd::Window*>( mpViewShell->GetViewShell()->GetWindow()), mpView, &rDoc, rReq ) );
105 :
106 0 : if(xFunc.is())
107 : {
108 0 : xFunc->Activate();
109 0 : xFunc->Deactivate();
110 :
111 0 : if( rReq.GetSlot() == SID_STYLE_APPLY )
112 : {
113 0 : if( mpViewShell && mpViewShell->GetViewFrame() )
114 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_APPLY );
115 : }
116 0 : }
117 : }
118 : else
119 : {
120 0 : if( mpViewShell && mpViewShell->GetViewFrame() )
121 0 : mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON );
122 : }
123 :
124 0 : rReq.Done();
125 : }
126 0 : break;
127 :
128 : case SID_PARASPACE_INCREASE:
129 : case SID_PARASPACE_DECREASE:
130 : {
131 0 : if( pOLV )
132 : {
133 0 : ESelection aSel = pOLV->GetSelection();
134 0 : aSel.Adjust();
135 0 : sal_Int32 nStartPara = aSel.nStartPara;
136 0 : sal_Int32 nEndPara = aSel.nEndPara;
137 0 : if( !aSel.HasRange() )
138 : {
139 0 : nStartPara = 0;
140 0 : nEndPara = pOLV->GetOutliner()->GetParagraphCount() - 1;
141 : }
142 0 : for( sal_Int32 nPara = nStartPara; nPara <= nEndPara; nPara++ )
143 : {
144 0 : SfxStyleSheet* pStyleSheet = NULL;
145 0 : if (pOLV->GetOutliner() != NULL)
146 0 : pStyleSheet = pOLV->GetOutliner()->GetStyleSheet(nPara);
147 0 : if (pStyleSheet != NULL)
148 : {
149 0 : SfxItemSet aAttr( pStyleSheet->GetItemSet() );
150 0 : SfxItemSet aTmpSet( pOLV->GetOutliner()->GetParaAttribs( nPara ) );
151 0 : aAttr.Put( aTmpSet, sal_False ); // sal_False= InvalidItems is not default, handle it as "holes"
152 0 : const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) aAttr.Get( EE_PARA_ULSPACE );
153 0 : SvxULSpaceItem* pNewItem = (SvxULSpaceItem*) rItem.Clone();
154 :
155 0 : long nUpper = pNewItem->GetUpper();
156 0 : if( nSlot == SID_PARASPACE_INCREASE )
157 0 : nUpper += 100;
158 : else
159 : {
160 0 : nUpper -= 100;
161 0 : nUpper = std::max( (long) nUpper, 0L );
162 : }
163 0 : pNewItem->SetUpper( (sal_uInt16) nUpper );
164 :
165 0 : long nLower = pNewItem->GetLower();
166 0 : if( nSlot == SID_PARASPACE_INCREASE )
167 0 : nLower += 100;
168 : else
169 : {
170 0 : nLower -= 100;
171 0 : nLower = std::max( (long) nLower, 0L );
172 : }
173 0 : pNewItem->SetLower( (sal_uInt16) nLower );
174 :
175 0 : SfxItemSet aNewAttrs( aAttr );
176 0 : aNewAttrs.Put( *pNewItem );
177 0 : delete pNewItem;
178 0 : pOLV->GetOutliner()->SetParaAttribs( nPara, aNewAttrs );
179 : }
180 : }
181 : }
182 : else
183 : {
184 : // the following code could be enabled, if I get a correct
185 : // DontCare status from JOE.
186 :
187 : // gets enabled, through it doesn't really work (see above)
188 0 : SfxItemSet aEditAttr( mpView->GetDoc().GetPool() );
189 0 : mpView->GetAttributes( aEditAttr );
190 0 : if( aEditAttr.GetItemState( EE_PARA_ULSPACE ) >= SFX_ITEM_AVAILABLE )
191 : {
192 0 : SfxItemSet aNewAttrs(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
193 0 : const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE );
194 0 : SvxULSpaceItem* pNewItem = (SvxULSpaceItem*) rItem.Clone();
195 0 : long nUpper = pNewItem->GetUpper();
196 :
197 0 : if( nSlot == SID_PARASPACE_INCREASE )
198 0 : nUpper += 100;
199 : else
200 : {
201 0 : nUpper -= 100;
202 0 : nUpper = std::max( (long) nUpper, 0L );
203 : }
204 0 : pNewItem->SetUpper( (sal_uInt16) nUpper );
205 :
206 0 : long nLower = pNewItem->GetLower();
207 0 : if( nSlot == SID_PARASPACE_INCREASE )
208 0 : nLower += 100;
209 : else
210 : {
211 0 : nLower -= 100;
212 0 : nLower = std::max( (long) nLower, 0L );
213 : }
214 0 : pNewItem->SetLower( (sal_uInt16) nLower );
215 :
216 0 : aNewAttrs.Put( *pNewItem );
217 0 : delete pNewItem;
218 :
219 0 : mpView->SetAttributes( aNewAttrs );
220 0 : }
221 : }
222 0 : rReq.Done();
223 :
224 0 : Invalidate();
225 : // to refresh preview (in outline mode), slot has to be invalidated:
226 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
227 : }
228 0 : break;
229 :
230 : case SID_OUTLINE_LEFT:
231 : {
232 0 : if (pOLV)
233 : {
234 0 : pOLV->AdjustDepth( -1 );
235 :
236 : // Ensure bold/italic etc. icon state updates
237 0 : Invalidate();
238 : // trigger preview refresh
239 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
240 : }
241 0 : rReq.Done();
242 : }
243 0 : break;
244 :
245 : case SID_OUTLINE_RIGHT:
246 : {
247 0 : if (pOLV)
248 : {
249 0 : pOLV->AdjustDepth( 1 );
250 :
251 : // Ensure bold/italic etc. icon state updates
252 0 : Invalidate();
253 : // trigger preview refresh
254 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
255 : }
256 0 : rReq.Done();
257 : }
258 0 : break;
259 :
260 : case SID_ATTR_PARA_LRSPACE:
261 : {
262 0 : sal_uInt16 nSpaceSlot = SID_ATTR_PARA_LRSPACE;
263 : SvxLRSpaceItem aLRSpace = (const SvxLRSpaceItem&)pArgs->Get(
264 0 : GetPool().GetWhich(nSpaceSlot));
265 :
266 0 : SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE );
267 0 : aLRSpace.SetWhich( EE_PARA_LRSPACE );
268 :
269 0 : aEditAttr.Put( aLRSpace );
270 0 : mpView->SetAttributes( aEditAttr );
271 :
272 0 : Invalidate(SID_ATTR_PARA_LRSPACE);
273 : }
274 0 : break;
275 :
276 : case SID_OUTLINE_UP:
277 : {
278 0 : if (pOLV)
279 : {
280 0 : pOLV->AdjustHeight( -1 );
281 :
282 : // trigger preview refresh
283 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
284 : }
285 0 : rReq.Done();
286 : }
287 0 : break;
288 :
289 : case SID_OUTLINE_DOWN:
290 : {
291 0 : if (pOLV)
292 : {
293 0 : pOLV->AdjustHeight( 1 );
294 :
295 : // trigger preview refresh
296 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
297 : }
298 0 : rReq.Done();
299 : }
300 0 : break;
301 :
302 : case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
303 : case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
304 : {
305 0 : mpView->SdrEndTextEdit();
306 0 : SfxItemSet aAttr( mpView->GetDoc().GetPool(), SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 0 );
307 : aAttr.Put( SvxWritingModeItem(
308 : nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ?
309 : com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL,
310 0 : SDRATTR_TEXTDIRECTION ) );
311 0 : rReq.Done( aAttr );
312 0 : mpView->SetAttributes( aAttr );
313 0 : Invalidate();
314 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
315 : }
316 0 : break;
317 :
318 : case FN_NUM_BULLET_ON:
319 0 : if( pOLV )
320 0 : pOLV->ToggleBullets();
321 0 : break;
322 :
323 : case SID_GROW_FONT_SIZE:
324 : case SID_SHRINK_FONT_SIZE:
325 : {
326 0 : const SvxFontListItem* pFonts = (const SvxFontListItem*)mpViewShell->GetDocSh()->GetItem( SID_ATTR_CHAR_FONTLIST );
327 0 : const FontList* pFontList = pFonts ? pFonts->GetFontList(): 0;
328 0 : if( pFontList )
329 : {
330 0 : FuText::ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pOLV, pFontList, mpView );
331 0 : if( pOLV )
332 : {
333 0 : SfxItemSet aSet( pOLV->GetEditView().GetAttribs() );
334 0 : SfxItemSet aNewAttrs (pOLV->GetEditView().GetEmptyItemSet() );
335 :
336 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT ), EE_CHAR_FONTHEIGHT );
337 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CJK ), EE_CHAR_FONTHEIGHT_CJK );
338 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CTL ), EE_CHAR_FONTHEIGHT_CTL );
339 :
340 0 : mpView->SetAttributes( aNewAttrs );
341 : }
342 0 : Invalidate();
343 : // to refresh preview (in outline mode), slot has to be invalidated:
344 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
345 : }
346 0 : rReq.Done();
347 : }
348 0 : break;
349 :
350 : case SID_THES:
351 : {
352 0 : String aReplaceText;
353 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, sal_False );
354 0 : if (pItem2)
355 0 : aReplaceText = pItem2->GetValue();
356 0 : if (aReplaceText.Len() > 0)
357 0 : ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
358 : }
359 0 : break;
360 :
361 : default:
362 : {
363 0 : SfxItemSet aEditAttr( mpView->GetDoc().GetPool() );
364 0 : mpView->GetAttributes( aEditAttr );
365 0 : SfxItemSet aNewAttr(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
366 :
367 0 : if( !pArgs )
368 : {
369 : //aNewAttr.InvalidateAllItems(); <- produces problems (#35465#)
370 :
371 0 : switch ( nSlot )
372 : {
373 : case SID_ATTR_CHAR_WEIGHT:
374 : {
375 : FontWeight eFW = ( (const SvxWeightItem&) aEditAttr.
376 0 : Get( EE_CHAR_WEIGHT ) ).GetWeight();
377 : aNewAttr.Put( SvxWeightItem( eFW == WEIGHT_NORMAL ?
378 : WEIGHT_BOLD : WEIGHT_NORMAL,
379 0 : EE_CHAR_WEIGHT ) );
380 : }
381 0 : break;
382 : case SID_ATTR_CHAR_POSTURE:
383 : {
384 : FontItalic eFI = ( (const SvxPostureItem&) aEditAttr.
385 0 : Get( EE_CHAR_ITALIC ) ).GetPosture();
386 : aNewAttr.Put( SvxPostureItem( eFI == ITALIC_NORMAL ?
387 : ITALIC_NONE : ITALIC_NORMAL,
388 0 : EE_CHAR_ITALIC ) );
389 : }
390 0 : break;
391 : case SID_ATTR_CHAR_UNDERLINE:
392 : {
393 : FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr.
394 0 : Get( EE_CHAR_UNDERLINE ) ).GetLineStyle();
395 : aNewAttr.Put( SvxUnderlineItem( eFU == UNDERLINE_SINGLE ?
396 : UNDERLINE_NONE : UNDERLINE_SINGLE,
397 0 : EE_CHAR_UNDERLINE ) );
398 : }
399 0 : break;
400 : case SID_ATTR_CHAR_OVERLINE:
401 : {
402 : FontUnderline eFO = ( (const SvxOverlineItem&) aEditAttr.
403 0 : Get( EE_CHAR_OVERLINE ) ).GetLineStyle();
404 : aNewAttr.Put( SvxOverlineItem( eFO == UNDERLINE_SINGLE ?
405 : UNDERLINE_NONE : UNDERLINE_SINGLE,
406 0 : EE_CHAR_OVERLINE ) );
407 : }
408 0 : break;
409 : case SID_ATTR_CHAR_CONTOUR:
410 : {
411 : aNewAttr.Put( SvxContourItem( !( (const SvxContourItem&) aEditAttr.
412 0 : Get( EE_CHAR_OUTLINE ) ).GetValue(), EE_CHAR_OUTLINE ) );
413 : }
414 0 : break;
415 : case SID_ATTR_CHAR_SHADOWED:
416 : {
417 : aNewAttr.Put( SvxShadowedItem( !( (const SvxShadowedItem&) aEditAttr.
418 0 : Get( EE_CHAR_SHADOW ) ).GetValue(), EE_CHAR_SHADOW ) );
419 : }
420 0 : break;
421 : case SID_ATTR_CHAR_STRIKEOUT:
422 : {
423 : FontStrikeout eFSO = ( ( (const SvxCrossedOutItem&) aEditAttr.
424 0 : Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() );
425 : aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ?
426 0 : STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
427 : }
428 0 : break;
429 :
430 : case SID_ATTR_PARA_ADJUST_LEFT:
431 : {
432 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
433 : }
434 0 : break;
435 : case SID_ATTR_PARA_ADJUST_CENTER:
436 : {
437 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
438 : }
439 0 : break;
440 : case SID_ATTR_PARA_ADJUST_RIGHT:
441 : {
442 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
443 : }
444 0 : break;
445 : case SID_ATTR_PARA_ADJUST_BLOCK:
446 : {
447 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
448 : }
449 0 : break;
450 : case SID_ATTR_PARA_LINESPACE_10:
451 : {
452 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL );
453 0 : aItem.SetPropLineSpace( 100 );
454 0 : aNewAttr.Put( aItem );
455 : }
456 0 : break;
457 : case SID_ATTR_PARA_LINESPACE_15:
458 : {
459 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL );
460 0 : aItem.SetPropLineSpace( 150 );
461 0 : aNewAttr.Put( aItem );
462 : }
463 0 : break;
464 : case SID_ATTR_PARA_LINESPACE_20:
465 : {
466 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
467 0 : aItem.SetPropLineSpace( 200 );
468 0 : aNewAttr.Put( aItem );
469 : }
470 0 : break;
471 : case SID_SET_SUPER_SCRIPT:
472 : {
473 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
474 : SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
475 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
476 :
477 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
478 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
479 : else
480 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
481 0 : aNewAttr.Put( aItem );
482 : }
483 0 : break;
484 : case SID_SET_SUB_SCRIPT:
485 : {
486 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
487 : SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
488 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
489 :
490 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
491 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
492 : else
493 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
494 0 : aNewAttr.Put( aItem );
495 : }
496 0 : break;
497 :
498 : // attributes for TextObjectBar
499 : case SID_ATTR_CHAR_FONT:
500 : {
501 0 : if( pArgs )
502 : {
503 0 : if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTINFO, sal_True, &pPoolItem ) )
504 0 : aNewAttr.Put( *pPoolItem );
505 : }
506 : else
507 : mpViewShell->GetViewFrame()->GetDispatcher()->
508 0 : Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON );
509 : }
510 0 : break;
511 : case SID_ATTR_CHAR_FONTHEIGHT:
512 : {
513 0 : if( pArgs )
514 : {
515 0 : if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTHEIGHT, sal_True, &pPoolItem ) )
516 0 : aNewAttr.Put( *pPoolItem );
517 : }
518 : else
519 : mpViewShell->GetViewFrame()->GetDispatcher()->
520 0 : Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON );
521 : }
522 0 : break;
523 : case SID_ATTR_CHAR_COLOR:
524 : {
525 0 : if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_COLOR, sal_True, &pPoolItem ) )
526 0 : aNewAttr.Put( *pPoolItem );
527 : }
528 0 : break;
529 : // #i35937# removed need for FN_NUM_BULLET_ON handling
530 : }
531 :
532 0 : rReq.Done( aNewAttr );
533 0 : pArgs = rReq.GetArgs();
534 : }
535 0 : else if ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ||
536 : nSlot == SID_ATTR_PARA_RIGHT_TO_LEFT )
537 : {
538 0 : sal_Bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
539 :
540 0 : sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
541 0 : if( SFX_ITEM_ON == aEditAttr.GetItemState(EE_PARA_JUST, sal_True, &pPoolItem ) )
542 0 : nAdjust = ( (SvxAdjustItem*)pPoolItem)->GetEnumValue();
543 :
544 0 : if( bLeftToRight )
545 : {
546 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
547 0 : if( nAdjust == SVX_ADJUST_RIGHT )
548 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
549 : }
550 : else
551 : {
552 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
553 0 : if( nAdjust == SVX_ADJUST_LEFT )
554 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
555 : }
556 :
557 0 : rReq.Done( aNewAttr );
558 0 : pArgs = rReq.GetArgs();
559 :
560 0 : Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT );
561 : }
562 0 : else if ( nSlot == SID_ATTR_CHAR_FONT ||
563 0 : nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
564 0 : nSlot == SID_ATTR_CHAR_POSTURE ||
565 : nSlot == SID_ATTR_CHAR_WEIGHT )
566 : {
567 : // #i78017 establish the same behaviour as in Writer
568 0 : sal_uInt16 nScriptType = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
569 0 : if (nSlot == SID_ATTR_CHAR_FONT)
570 0 : nScriptType = mpView->GetScriptType();
571 :
572 0 : SfxItemPool& rPool = mpView->GetDoc().GetPool();
573 0 : SvxScriptSetItem aSvxScriptSetItem( nSlot, rPool );
574 0 : aSvxScriptSetItem.PutItemForScriptType( nScriptType, pArgs->Get( rPool.GetWhich( nSlot ) ) );
575 0 : aNewAttr.Put( aSvxScriptSetItem.GetItemSet() );
576 0 : rReq.Done( aNewAttr );
577 0 : pArgs = rReq.GetArgs();
578 : }
579 0 : else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT ||
580 0 : nSlot == SID_ATTR_PARA_ADJUST_CENTER ||
581 0 : nSlot == SID_ATTR_PARA_ADJUST_RIGHT ||
582 : nSlot == SID_ATTR_PARA_ADJUST_BLOCK)
583 : {
584 0 : switch( nSlot )
585 : {
586 : case SID_ATTR_PARA_ADJUST_LEFT:
587 : {
588 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
589 : }
590 0 : break;
591 : case SID_ATTR_PARA_ADJUST_CENTER:
592 : {
593 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
594 : }
595 0 : break;
596 : case SID_ATTR_PARA_ADJUST_RIGHT:
597 : {
598 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
599 : }
600 0 : break;
601 : case SID_ATTR_PARA_ADJUST_BLOCK:
602 : {
603 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
604 : }
605 0 : break;
606 : }
607 0 : rReq.Done( aNewAttr );
608 0 : pArgs = rReq.GetArgs();
609 : }
610 0 : else if(nSlot == SID_ATTR_CHAR_KERNING)
611 : {
612 0 : aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot)));
613 0 : rReq.Done( aNewAttr );
614 0 : pArgs = rReq.GetArgs();
615 : }
616 0 : else if(nSlot == SID_SET_SUPER_SCRIPT )
617 : {
618 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
619 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
620 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
621 :
622 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
623 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
624 : else
625 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
626 0 : aNewAttr.Put( aItem );
627 0 : rReq.Done( aNewAttr );
628 0 : pArgs = rReq.GetArgs();
629 : }
630 0 : else if( nSlot == SID_SET_SUB_SCRIPT )
631 : {
632 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
633 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
634 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
635 :
636 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
637 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
638 : else
639 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
640 0 : aNewAttr.Put( aItem );
641 0 : rReq.Done( aNewAttr );
642 0 : pArgs = rReq.GetArgs();
643 : }
644 :
645 0 : mpView->SetAttributes(*pArgs);
646 :
647 : // invalidate entire shell because of performance and
648 : // extension reasons
649 0 : Invalidate();
650 :
651 : // to refresh preview (in outline mode), slot has to be invalidated:
652 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
653 : }
654 0 : break;
655 : }
656 :
657 0 : Invalidate( SID_OUTLINE_LEFT );
658 0 : Invalidate( SID_OUTLINE_RIGHT );
659 0 : Invalidate( SID_OUTLINE_UP );
660 0 : Invalidate( SID_OUTLINE_DOWN );
661 0 : }
662 :
663 33 : } // end of namespace sd
664 :
665 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|