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 : #include <editeng/cmapitem.hxx>
58 :
59 : #include "app.hrc"
60 :
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 : #include <boost/scoped_ptr.hpp>
72 :
73 : namespace sd {
74 :
75 : /**
76 : * Process SfxRequests
77 : */
78 :
79 0 : void TextObjectBar::Execute( SfxRequest &rReq )
80 : {
81 0 : const SfxItemSet* pArgs = rReq.GetArgs();
82 0 : const SfxPoolItem* pPoolItem = NULL;
83 0 : sal_uInt16 nSlot = rReq.GetSlot();
84 0 : OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
85 :
86 0 : boost::scoped_ptr< OutlineViewModelChangeGuard > aGuard;
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 : assert(mpViewShell->GetViewShell());
104 0 : rtl::Reference<FuPoor> 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->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, 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, true, 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, true, 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, true, 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, true, 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, true, 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, true, 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, true, false );
345 : }
346 0 : rReq.Done();
347 : }
348 0 : break;
349 :
350 : case SID_THES:
351 : {
352 0 : OUString aReplaceText;
353 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, false );
354 0 : if (pItem2)
355 0 : aReplaceText = pItem2->GetValue();
356 0 : if (!aReplaceText.isEmpty())
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_CASEMAP:
422 : {
423 : aNewAttr.Put( SvxCaseMapItem( ( (const SvxCaseMapItem&) aEditAttr.
424 0 : Get( EE_CHAR_CASEMAP ) ) ) );
425 : }
426 0 : break;
427 : case SID_ATTR_CHAR_STRIKEOUT:
428 : {
429 : FontStrikeout eFSO = ( ( (const SvxCrossedOutItem&) aEditAttr.
430 0 : Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() );
431 : aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ?
432 0 : STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
433 : }
434 0 : break;
435 :
436 : case SID_ATTR_PARA_ADJUST_LEFT:
437 : {
438 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
439 : }
440 0 : break;
441 : case SID_ATTR_PARA_ADJUST_CENTER:
442 : {
443 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
444 : }
445 0 : break;
446 : case SID_ATTR_PARA_ADJUST_RIGHT:
447 : {
448 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
449 : }
450 0 : break;
451 : case SID_ATTR_PARA_ADJUST_BLOCK:
452 : {
453 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
454 : }
455 0 : break;
456 : case SID_ATTR_PARA_LINESPACE_10:
457 : {
458 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL );
459 0 : aItem.SetPropLineSpace( 100 );
460 0 : aNewAttr.Put( aItem );
461 : }
462 0 : break;
463 : case SID_ATTR_PARA_LINESPACE_15:
464 : {
465 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL );
466 0 : aItem.SetPropLineSpace( 150 );
467 0 : aNewAttr.Put( aItem );
468 : }
469 0 : break;
470 : case SID_ATTR_PARA_LINESPACE_20:
471 : {
472 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
473 0 : aItem.SetPropLineSpace( 200 );
474 0 : aNewAttr.Put( aItem );
475 : }
476 0 : break;
477 : case SID_SET_SUPER_SCRIPT:
478 : {
479 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
480 : SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
481 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
482 :
483 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
484 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
485 : else
486 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
487 0 : aNewAttr.Put( aItem );
488 : }
489 0 : break;
490 : case SID_SET_SUB_SCRIPT:
491 : {
492 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
493 : SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
494 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
495 :
496 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
497 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
498 : else
499 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
500 0 : aNewAttr.Put( aItem );
501 : }
502 0 : break;
503 :
504 : // attributes for TextObjectBar
505 : case SID_ATTR_CHAR_FONT:
506 : {
507 0 : if( pArgs )
508 : {
509 0 : if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTINFO, true, &pPoolItem ) )
510 0 : aNewAttr.Put( *pPoolItem );
511 : }
512 : else
513 : mpViewShell->GetViewFrame()->GetDispatcher()->
514 0 : Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON );
515 : }
516 0 : break;
517 : case SID_ATTR_CHAR_FONTHEIGHT:
518 : {
519 0 : if( pArgs )
520 : {
521 0 : if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTHEIGHT, true, &pPoolItem ) )
522 0 : aNewAttr.Put( *pPoolItem );
523 : }
524 : else
525 : mpViewShell->GetViewFrame()->GetDispatcher()->
526 0 : Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON );
527 : }
528 0 : break;
529 : case SID_ATTR_CHAR_COLOR:
530 : {
531 0 : if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_COLOR, true, &pPoolItem ) )
532 0 : aNewAttr.Put( *pPoolItem );
533 : }
534 0 : break;
535 : // #i35937# removed need for FN_NUM_BULLET_ON handling
536 : }
537 :
538 0 : rReq.Done( aNewAttr );
539 0 : pArgs = rReq.GetArgs();
540 : }
541 0 : else if ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ||
542 : nSlot == SID_ATTR_PARA_RIGHT_TO_LEFT )
543 : {
544 0 : sal_Bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
545 :
546 0 : sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
547 0 : if( SFX_ITEM_ON == aEditAttr.GetItemState(EE_PARA_JUST, true, &pPoolItem ) )
548 0 : nAdjust = ( (SvxAdjustItem*)pPoolItem)->GetEnumValue();
549 :
550 0 : if( bLeftToRight )
551 : {
552 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
553 0 : if( nAdjust == SVX_ADJUST_RIGHT )
554 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
555 : }
556 : else
557 : {
558 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
559 0 : if( nAdjust == SVX_ADJUST_LEFT )
560 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
561 : }
562 :
563 0 : rReq.Done( aNewAttr );
564 0 : pArgs = rReq.GetArgs();
565 :
566 0 : Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT );
567 : }
568 0 : else if ( nSlot == SID_ATTR_CHAR_FONT ||
569 0 : nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
570 0 : nSlot == SID_ATTR_CHAR_POSTURE ||
571 : nSlot == SID_ATTR_CHAR_WEIGHT )
572 : {
573 : // #i78017 establish the same behaviour as in Writer
574 0 : sal_uInt16 nScriptType = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
575 0 : if (nSlot == SID_ATTR_CHAR_FONT)
576 0 : nScriptType = mpView->GetScriptType();
577 :
578 0 : SfxItemPool& rPool = mpView->GetDoc().GetPool();
579 0 : SvxScriptSetItem aSvxScriptSetItem( nSlot, rPool );
580 0 : aSvxScriptSetItem.PutItemForScriptType( nScriptType, pArgs->Get( rPool.GetWhich( nSlot ) ) );
581 0 : aNewAttr.Put( aSvxScriptSetItem.GetItemSet() );
582 0 : rReq.Done( aNewAttr );
583 0 : pArgs = rReq.GetArgs();
584 : }
585 0 : else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT ||
586 0 : nSlot == SID_ATTR_PARA_ADJUST_CENTER ||
587 0 : nSlot == SID_ATTR_PARA_ADJUST_RIGHT ||
588 : nSlot == SID_ATTR_PARA_ADJUST_BLOCK)
589 : {
590 0 : switch( nSlot )
591 : {
592 : case SID_ATTR_PARA_ADJUST_LEFT:
593 : {
594 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
595 : }
596 0 : break;
597 : case SID_ATTR_PARA_ADJUST_CENTER:
598 : {
599 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
600 : }
601 0 : break;
602 : case SID_ATTR_PARA_ADJUST_RIGHT:
603 : {
604 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
605 : }
606 0 : break;
607 : case SID_ATTR_PARA_ADJUST_BLOCK:
608 : {
609 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
610 : }
611 0 : break;
612 : }
613 0 : rReq.Done( aNewAttr );
614 0 : pArgs = rReq.GetArgs();
615 : }
616 0 : else if(nSlot == SID_ATTR_CHAR_KERNING)
617 : {
618 0 : aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot)));
619 0 : rReq.Done( aNewAttr );
620 0 : pArgs = rReq.GetArgs();
621 : }
622 0 : else if(nSlot == SID_SET_SUPER_SCRIPT )
623 : {
624 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
625 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
626 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
627 :
628 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
629 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
630 : else
631 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
632 0 : aNewAttr.Put( aItem );
633 0 : rReq.Done( aNewAttr );
634 0 : pArgs = rReq.GetArgs();
635 : }
636 0 : else if( nSlot == SID_SET_SUB_SCRIPT )
637 : {
638 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
639 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
640 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
641 :
642 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
643 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
644 : else
645 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
646 0 : aNewAttr.Put( aItem );
647 0 : rReq.Done( aNewAttr );
648 0 : pArgs = rReq.GetArgs();
649 : }
650 :
651 0 : mpView->SetAttributes(*pArgs);
652 :
653 : // invalidate entire shell because of performance and
654 : // extension reasons
655 0 : Invalidate();
656 :
657 : // to refresh preview (in outline mode), slot has to be invalidated:
658 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
659 : }
660 0 : break;
661 : }
662 :
663 0 : Invalidate( SID_OUTLINE_LEFT );
664 0 : Invalidate( SID_OUTLINE_RIGHT );
665 0 : Invalidate( SID_OUTLINE_UP );
666 0 : Invalidate( SID_OUTLINE_DOWN );
667 0 : }
668 :
669 : } // end of namespace sd
670 :
671 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|