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 : #include "glob.hrc"
61 : #include "sdresid.hxx"
62 : #include "prlayout.hxx"
63 : #include "ViewShell.hxx"
64 : #include "drawview.hxx"
65 : #include "drawdoc.hxx"
66 : #include "stlpool.hxx"
67 : #include "stlsheet.hxx"
68 : #include "OutlineView.hxx"
69 : #include "Window.hxx"
70 : #include "futempl.hxx"
71 : #include "DrawDocShell.hxx"
72 : #include "Outliner.hxx"
73 : #include "futext.hxx"
74 :
75 : #include <boost/scoped_ptr.hpp>
76 :
77 : namespace sd {
78 :
79 : /**
80 : * Process SfxRequests
81 : */
82 :
83 0 : void TextObjectBar::Execute( SfxRequest &rReq )
84 : {
85 0 : const SfxItemSet* pArgs = rReq.GetArgs();
86 0 : const SfxPoolItem* pPoolItem = NULL;
87 0 : sal_uInt16 nSlot = rReq.GetSlot();
88 0 : OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
89 :
90 0 : boost::scoped_ptr< OutlineViewModelChangeGuard > aGuard;
91 :
92 0 : if (mpView->ISA(OutlineView))
93 : {
94 : pOLV = static_cast<OutlineView*>(mpView)
95 0 : ->GetViewByWindow(mpViewShell->GetActiveWindow());
96 :
97 0 : aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) );
98 : }
99 :
100 0 : switch (nSlot)
101 : {
102 : case SID_STYLE_APPLY:
103 : {
104 0 : if( pArgs )
105 : {
106 0 : SdDrawDocument& rDoc = mpView->GetDoc();
107 : assert(mpViewShell->GetViewShell());
108 0 : rtl::Reference<FuPoor> xFunc( FuTemplate::Create( mpViewShell, static_cast< ::sd::Window*>( mpViewShell->GetViewShell()->GetWindow()), mpView, &rDoc, rReq ) );
109 :
110 0 : if(xFunc.is())
111 : {
112 0 : xFunc->Activate();
113 0 : xFunc->Deactivate();
114 :
115 0 : if( rReq.GetSlot() == SID_STYLE_APPLY )
116 : {
117 0 : if (mpViewShell->GetViewFrame())
118 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_APPLY );
119 : }
120 0 : }
121 : }
122 : else
123 : {
124 0 : if( mpViewShell && mpViewShell->GetViewFrame() )
125 0 : mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_STYLE_DESIGNER, SfxCallMode::ASYNCHRON );
126 : }
127 :
128 0 : rReq.Done();
129 : }
130 0 : break;
131 :
132 : case SID_PARASPACE_INCREASE:
133 : case SID_PARASPACE_DECREASE:
134 : {
135 0 : if( pOLV )
136 : {
137 0 : ESelection aSel = pOLV->GetSelection();
138 0 : aSel.Adjust();
139 0 : sal_Int32 nStartPara = aSel.nStartPara;
140 0 : sal_Int32 nEndPara = aSel.nEndPara;
141 0 : if( !aSel.HasRange() )
142 : {
143 0 : nStartPara = 0;
144 0 : nEndPara = pOLV->GetOutliner()->GetParagraphCount() - 1;
145 : }
146 0 : for( sal_Int32 nPara = nStartPara; nPara <= nEndPara; nPara++ )
147 : {
148 0 : SfxStyleSheet* pStyleSheet = NULL;
149 0 : if (pOLV->GetOutliner() != NULL)
150 0 : pStyleSheet = pOLV->GetOutliner()->GetStyleSheet(nPara);
151 0 : if (pStyleSheet != NULL)
152 : {
153 0 : SfxItemSet aAttr( pStyleSheet->GetItemSet() );
154 0 : SfxItemSet aTmpSet( pOLV->GetOutliner()->GetParaAttribs( nPara ) );
155 0 : aAttr.Put( aTmpSet, false ); // sal_False= InvalidItems is not default, handle it as "holes"
156 0 : const SvxULSpaceItem& rItem = static_cast<const SvxULSpaceItem&>( aAttr.Get( EE_PARA_ULSPACE ) );
157 0 : boost::scoped_ptr<SvxULSpaceItem> pNewItem(static_cast<SvxULSpaceItem*>(rItem.Clone()));
158 :
159 0 : long nUpper = pNewItem->GetUpper();
160 0 : if( nSlot == SID_PARASPACE_INCREASE )
161 0 : nUpper += 100;
162 : else
163 : {
164 0 : nUpper -= 100;
165 0 : nUpper = std::max( (long) nUpper, 0L );
166 : }
167 0 : pNewItem->SetUpper( (sal_uInt16) nUpper );
168 :
169 0 : long nLower = pNewItem->GetLower();
170 0 : if( nSlot == SID_PARASPACE_INCREASE )
171 0 : nLower += 100;
172 : else
173 : {
174 0 : nLower -= 100;
175 0 : nLower = std::max( (long) nLower, 0L );
176 : }
177 0 : pNewItem->SetLower( (sal_uInt16) nLower );
178 :
179 0 : SfxItemSet aNewAttrs( aAttr );
180 0 : aNewAttrs.Put( *pNewItem );
181 0 : pNewItem.reset();
182 0 : pOLV->GetOutliner()->SetParaAttribs( nPara, aNewAttrs );
183 : }
184 : }
185 : }
186 : else
187 : {
188 : // the following code could be enabled, if I get a correct
189 : // DontCare status from JOE.
190 :
191 : // gets enabled, through it doesn't really work (see above)
192 0 : SfxItemSet aEditAttr( mpView->GetDoc().GetPool() );
193 0 : mpView->GetAttributes( aEditAttr );
194 0 : if( aEditAttr.GetItemState( EE_PARA_ULSPACE ) >= SfxItemState::DEFAULT )
195 : {
196 0 : SfxItemSet aNewAttrs(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
197 0 : const SvxULSpaceItem& rItem = static_cast<const SvxULSpaceItem&>( aEditAttr.Get( EE_PARA_ULSPACE ) );
198 0 : boost::scoped_ptr<SvxULSpaceItem> pNewItem(static_cast<SvxULSpaceItem*>( rItem.Clone() ));
199 0 : long nUpper = pNewItem->GetUpper();
200 :
201 0 : if( nSlot == SID_PARASPACE_INCREASE )
202 0 : nUpper += 100;
203 : else
204 : {
205 0 : nUpper -= 100;
206 0 : nUpper = std::max( (long) nUpper, 0L );
207 : }
208 0 : pNewItem->SetUpper( (sal_uInt16) nUpper );
209 :
210 0 : long nLower = pNewItem->GetLower();
211 0 : if( nSlot == SID_PARASPACE_INCREASE )
212 0 : nLower += 100;
213 : else
214 : {
215 0 : nLower -= 100;
216 0 : nLower = std::max( (long) nLower, 0L );
217 : }
218 0 : pNewItem->SetLower( (sal_uInt16) nLower );
219 :
220 0 : aNewAttrs.Put( *pNewItem );
221 0 : pNewItem.reset();
222 :
223 0 : mpView->SetAttributes( aNewAttrs );
224 0 : }
225 : }
226 0 : rReq.Done();
227 :
228 0 : Invalidate();
229 : // to refresh preview (in outline mode), slot has to be invalidated:
230 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
231 : }
232 0 : break;
233 :
234 : case SID_OUTLINE_LEFT:
235 : {
236 0 : if (pOLV)
237 : {
238 0 : pOLV->AdjustDepth( -1 );
239 :
240 : // Ensure bold/italic etc. icon state updates
241 0 : Invalidate();
242 : // trigger preview refresh
243 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
244 : }
245 0 : rReq.Done();
246 : }
247 0 : break;
248 :
249 : case SID_OUTLINE_RIGHT:
250 : {
251 0 : if (pOLV)
252 : {
253 0 : pOLV->AdjustDepth( 1 );
254 :
255 : // Ensure bold/italic etc. icon state updates
256 0 : Invalidate();
257 : // trigger preview refresh
258 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
259 : }
260 0 : rReq.Done();
261 : }
262 0 : break;
263 :
264 : case SID_ATTR_PARA_LRSPACE:
265 : {
266 0 : sal_uInt16 nSpaceSlot = SID_ATTR_PARA_LRSPACE;
267 : SvxLRSpaceItem aLRSpace = static_cast<const SvxLRSpaceItem&>(pArgs->Get(
268 0 : GetPool().GetWhich(nSpaceSlot)));
269 :
270 0 : SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE );
271 0 : aLRSpace.SetWhich( EE_PARA_LRSPACE );
272 :
273 0 : aEditAttr.Put( aLRSpace );
274 0 : mpView->SetAttributes( aEditAttr );
275 :
276 0 : Invalidate(SID_ATTR_PARA_LRSPACE);
277 : }
278 0 : break;
279 :
280 : case SID_OUTLINE_UP:
281 : {
282 0 : if (pOLV)
283 : {
284 0 : pOLV->AdjustHeight( -1 );
285 :
286 : // trigger preview refresh
287 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
288 : }
289 0 : rReq.Done();
290 : }
291 0 : break;
292 :
293 : case SID_OUTLINE_DOWN:
294 : {
295 0 : if (pOLV)
296 : {
297 0 : pOLV->AdjustHeight( 1 );
298 :
299 : // trigger preview refresh
300 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
301 : }
302 0 : rReq.Done();
303 : }
304 0 : break;
305 :
306 : case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
307 : case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
308 : {
309 0 : mpView->SdrEndTextEdit();
310 0 : SfxItemSet aAttr( mpView->GetDoc().GetPool(), SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 0 );
311 : aAttr.Put( SvxWritingModeItem(
312 : nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ?
313 : com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL,
314 0 : SDRATTR_TEXTDIRECTION ) );
315 0 : rReq.Done( aAttr );
316 0 : mpView->SetAttributes( aAttr );
317 0 : Invalidate();
318 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
319 : }
320 0 : break;
321 :
322 : case FN_NUM_BULLET_ON:
323 : {
324 0 : if (pOLV)
325 : {
326 0 : bool bMasterPage = false;
327 0 : SdrPageView* pPageView = mpView->GetSdrPageView();
328 0 : if (pPageView)
329 : {
330 0 : SdPage* pPage = static_cast<SdPage*>(pPageView->GetPage());
331 0 : bMasterPage = pPage && (pPage->GetPageKind() == PK_STANDARD) && pPage->IsMasterPage();
332 : }
333 :
334 0 : if (!bMasterPage)
335 0 : pOLV->ToggleBullets();
336 : else
337 : {
338 : //Resolves: fdo#78151 in master pages if we toggle bullets on
339 : //and off then just disable/enable the bulleting, but do not
340 : //change the *level* of the paragraph, because the paragraph is
341 : //effectively a preview of the equivalent style level, and
342 : //changing the level disconnects it from the style
343 :
344 0 : ::Outliner* pOL = pOLV->GetOutliner();
345 0 : if (pOL)
346 : {
347 0 : const SvxNumBulletItem *pItem = NULL;
348 0 : SfxStyleSheetBasePool* pSSPool = mpView->GetDocSh()->GetStyleSheetPool();
349 0 : OUString sStyleName(SD_RESSTR(STR_PSEUDOSHEET_OUTLINE) + " 1");
350 0 : SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find(sStyleName, SD_STYLE_FAMILY_PSEUDO);
351 0 : if( pFirstStyleSheet )
352 0 : pFirstStyleSheet->GetItemSet().GetItemState(EE_PARA_NUMBULLET, false, reinterpret_cast<const SfxPoolItem**>(&pItem));
353 :
354 0 : if (pItem )
355 : {
356 0 : SvxNumRule aNewRule(*pItem->GetNumRule());
357 0 : ESelection aSel = pOLV->GetSelection();
358 0 : aSel.Adjust();
359 0 : sal_Int32 nStartPara = aSel.nStartPara;
360 0 : sal_Int32 nEndPara = aSel.nEndPara;
361 0 : for (sal_Int32 nPara = nStartPara; nPara <= nEndPara; ++nPara)
362 : {
363 0 : sal_uInt16 nLevel = pOL->GetDepth(nPara);
364 0 : SvxNumberFormat aFmt(aNewRule.GetLevel(nLevel));
365 :
366 0 : if (aFmt.GetNumberingType() == SVX_NUM_NUMBER_NONE)
367 : {
368 0 : aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
369 0 : SdStyleSheetPool::setDefaultOutlineNumberFormatBulletAndIndent(nLevel, aFmt);
370 : }
371 : else
372 : {
373 0 : aFmt.SetNumberingType(SVX_NUM_NUMBER_NONE);
374 0 : aFmt.SetAbsLSpace(0);
375 0 : aFmt.SetFirstLineOffset(0);
376 : }
377 :
378 0 : aNewRule.SetLevel(nLevel, aFmt);
379 0 : }
380 :
381 0 : pFirstStyleSheet->GetItemSet().Put(SvxNumBulletItem(aNewRule, EE_PARA_NUMBULLET));
382 :
383 0 : SdStyleSheet::BroadcastSdStyleSheetChange(pFirstStyleSheet, PO_OUTLINE_1, pSSPool);
384 0 : }
385 : }
386 : }
387 : }
388 0 : break;
389 : }
390 : case SID_GROW_FONT_SIZE:
391 : case SID_SHRINK_FONT_SIZE:
392 : {
393 0 : const SvxFontListItem* pFonts = static_cast<const SvxFontListItem*>(mpViewShell->GetDocSh()->GetItem( SID_ATTR_CHAR_FONTLIST ));
394 0 : const FontList* pFontList = pFonts ? pFonts->GetFontList(): 0;
395 0 : if( pFontList )
396 : {
397 0 : FuText::ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pOLV, pFontList, mpView );
398 0 : if( pOLV )
399 : {
400 0 : SfxItemSet aSet( pOLV->GetEditView().GetAttribs() );
401 0 : SfxItemSet aNewAttrs (pOLV->GetEditView().GetEmptyItemSet() );
402 :
403 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT ), EE_CHAR_FONTHEIGHT );
404 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CJK ), EE_CHAR_FONTHEIGHT_CJK );
405 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CTL ), EE_CHAR_FONTHEIGHT_CTL );
406 :
407 0 : mpView->SetAttributes( aNewAttrs );
408 : }
409 0 : Invalidate();
410 : // to refresh preview (in outline mode), slot has to be invalidated:
411 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
412 : }
413 0 : rReq.Done();
414 : }
415 0 : break;
416 :
417 : case SID_THES:
418 : {
419 0 : OUString aReplaceText;
420 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, false );
421 0 : if (pItem2)
422 0 : aReplaceText = pItem2->GetValue();
423 0 : if (!aReplaceText.isEmpty())
424 0 : ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
425 : }
426 0 : break;
427 :
428 : default:
429 : {
430 0 : SfxItemSet aEditAttr( mpView->GetDoc().GetPool() );
431 0 : mpView->GetAttributes( aEditAttr );
432 0 : SfxItemSet aNewAttr(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
433 :
434 0 : if( !pArgs )
435 : {
436 : //aNewAttr.InvalidateAllItems(); <- produces problems (#35465#)
437 :
438 0 : switch ( nSlot )
439 : {
440 : case SID_ATTR_CHAR_WEIGHT:
441 : {
442 : FontWeight eFW = static_cast<const SvxWeightItem&>( aEditAttr.
443 0 : Get( EE_CHAR_WEIGHT ) ).GetWeight();
444 : aNewAttr.Put( SvxWeightItem( eFW == WEIGHT_NORMAL ?
445 : WEIGHT_BOLD : WEIGHT_NORMAL,
446 0 : EE_CHAR_WEIGHT ) );
447 : }
448 0 : break;
449 : case SID_ATTR_CHAR_POSTURE:
450 : {
451 : FontItalic eFI = static_cast<const SvxPostureItem&>( aEditAttr.
452 0 : Get( EE_CHAR_ITALIC ) ).GetPosture();
453 : aNewAttr.Put( SvxPostureItem( eFI == ITALIC_NORMAL ?
454 : ITALIC_NONE : ITALIC_NORMAL,
455 0 : EE_CHAR_ITALIC ) );
456 : }
457 0 : break;
458 : case SID_ATTR_CHAR_UNDERLINE:
459 : {
460 : FontUnderline eFU = static_cast<const SvxUnderlineItem&>( aEditAttr.
461 0 : Get( EE_CHAR_UNDERLINE ) ).GetLineStyle();
462 : aNewAttr.Put( SvxUnderlineItem( eFU == UNDERLINE_SINGLE ?
463 : UNDERLINE_NONE : UNDERLINE_SINGLE,
464 0 : EE_CHAR_UNDERLINE ) );
465 : }
466 0 : break;
467 : case SID_ATTR_CHAR_OVERLINE:
468 : {
469 : FontUnderline eFO = static_cast<const SvxOverlineItem&>( aEditAttr.
470 0 : Get( EE_CHAR_OVERLINE ) ).GetLineStyle();
471 : aNewAttr.Put( SvxOverlineItem( eFO == UNDERLINE_SINGLE ?
472 : UNDERLINE_NONE : UNDERLINE_SINGLE,
473 0 : EE_CHAR_OVERLINE ) );
474 : }
475 0 : break;
476 : case SID_ATTR_CHAR_CONTOUR:
477 : {
478 : aNewAttr.Put( SvxContourItem( !static_cast<const SvxContourItem&>( aEditAttr.
479 0 : Get( EE_CHAR_OUTLINE ) ).GetValue(), EE_CHAR_OUTLINE ) );
480 : }
481 0 : break;
482 : case SID_ATTR_CHAR_SHADOWED:
483 : {
484 : aNewAttr.Put( SvxShadowedItem( !static_cast<const SvxShadowedItem&>( aEditAttr.
485 0 : Get( EE_CHAR_SHADOW ) ).GetValue(), EE_CHAR_SHADOW ) );
486 : }
487 0 : break;
488 : case SID_ATTR_CHAR_CASEMAP:
489 : {
490 : aNewAttr.Put( SvxCaseMapItem( static_cast<const SvxCaseMapItem&>( aEditAttr.
491 0 : Get( EE_CHAR_CASEMAP ) ) ) );
492 : }
493 0 : break;
494 : case SID_ATTR_CHAR_STRIKEOUT:
495 : {
496 : FontStrikeout eFSO = ( static_cast<const SvxCrossedOutItem&>( aEditAttr.
497 0 : Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() );
498 : aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ?
499 0 : STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
500 : }
501 0 : break;
502 :
503 : case SID_ATTR_PARA_ADJUST_LEFT:
504 : {
505 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
506 : }
507 0 : break;
508 : case SID_ATTR_PARA_ADJUST_CENTER:
509 : {
510 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
511 : }
512 0 : break;
513 : case SID_ATTR_PARA_ADJUST_RIGHT:
514 : {
515 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
516 : }
517 0 : break;
518 : case SID_ATTR_PARA_ADJUST_BLOCK:
519 : {
520 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
521 : }
522 0 : break;
523 : case SID_ATTR_PARA_LINESPACE_10:
524 : {
525 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL );
526 0 : aItem.SetPropLineSpace( 100 );
527 0 : aNewAttr.Put( aItem );
528 : }
529 0 : break;
530 : case SID_ATTR_PARA_LINESPACE_15:
531 : {
532 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL );
533 0 : aItem.SetPropLineSpace( 150 );
534 0 : aNewAttr.Put( aItem );
535 : }
536 0 : break;
537 : case SID_ATTR_PARA_LINESPACE_20:
538 : {
539 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
540 0 : aItem.SetPropLineSpace( 200 );
541 0 : aNewAttr.Put( aItem );
542 : }
543 0 : break;
544 : case SID_SET_SUPER_SCRIPT:
545 : {
546 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
547 : SvxEscapement eEsc = (SvxEscapement ) static_cast<const SvxEscapementItem&>(
548 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
549 :
550 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
551 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
552 : else
553 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
554 0 : aNewAttr.Put( aItem );
555 : }
556 0 : break;
557 : case SID_SET_SUB_SCRIPT:
558 : {
559 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
560 : SvxEscapement eEsc = (SvxEscapement ) static_cast<const SvxEscapementItem&>(
561 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
562 :
563 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
564 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
565 : else
566 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
567 0 : aNewAttr.Put( aItem );
568 : }
569 0 : break;
570 :
571 : // attributes for TextObjectBar
572 : case SID_ATTR_CHAR_FONT:
573 : mpViewShell->GetViewFrame()->GetDispatcher()->
574 0 : Execute( SID_CHAR_DLG, SfxCallMode::ASYNCHRON );
575 0 : break;
576 : case SID_ATTR_CHAR_FONTHEIGHT:
577 : mpViewShell->GetViewFrame()->GetDispatcher()->
578 0 : Execute( SID_CHAR_DLG, SfxCallMode::ASYNCHRON );
579 0 : break;
580 : case SID_ATTR_CHAR_COLOR:
581 0 : break;
582 : // #i35937# removed need for FN_NUM_BULLET_ON handling
583 : }
584 :
585 0 : rReq.Done( aNewAttr );
586 0 : pArgs = rReq.GetArgs();
587 : }
588 0 : else if ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ||
589 : nSlot == SID_ATTR_PARA_RIGHT_TO_LEFT )
590 : {
591 0 : bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
592 :
593 0 : sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
594 0 : if( SfxItemState::SET == aEditAttr.GetItemState(EE_PARA_JUST, true, &pPoolItem ) )
595 0 : nAdjust = static_cast<const SvxAdjustItem*>(pPoolItem)->GetEnumValue();
596 :
597 0 : if( bLeftToRight )
598 : {
599 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
600 0 : if( nAdjust == SVX_ADJUST_RIGHT )
601 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
602 : }
603 : else
604 : {
605 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
606 0 : if( nAdjust == SVX_ADJUST_LEFT )
607 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
608 : }
609 :
610 0 : rReq.Done( aNewAttr );
611 0 : pArgs = rReq.GetArgs();
612 :
613 0 : Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT );
614 : }
615 0 : else if ( nSlot == SID_ATTR_CHAR_FONT ||
616 0 : nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
617 0 : nSlot == SID_ATTR_CHAR_POSTURE ||
618 : nSlot == SID_ATTR_CHAR_WEIGHT )
619 : {
620 : // #i78017 establish the same behaviour as in Writer
621 0 : SvtScriptType nScriptType = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
622 0 : if (nSlot == SID_ATTR_CHAR_FONT)
623 0 : nScriptType = mpView->GetScriptType();
624 :
625 0 : SfxItemPool& rPool = mpView->GetDoc().GetPool();
626 0 : SvxScriptSetItem aSvxScriptSetItem( nSlot, rPool );
627 0 : aSvxScriptSetItem.PutItemForScriptType( nScriptType, pArgs->Get( rPool.GetWhich( nSlot ) ) );
628 0 : aNewAttr.Put( aSvxScriptSetItem.GetItemSet() );
629 0 : rReq.Done( aNewAttr );
630 0 : pArgs = rReq.GetArgs();
631 : }
632 0 : else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT ||
633 0 : nSlot == SID_ATTR_PARA_ADJUST_CENTER ||
634 0 : nSlot == SID_ATTR_PARA_ADJUST_RIGHT ||
635 : nSlot == SID_ATTR_PARA_ADJUST_BLOCK)
636 : {
637 0 : switch( nSlot )
638 : {
639 : case SID_ATTR_PARA_ADJUST_LEFT:
640 : {
641 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
642 : }
643 0 : break;
644 : case SID_ATTR_PARA_ADJUST_CENTER:
645 : {
646 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
647 : }
648 0 : break;
649 : case SID_ATTR_PARA_ADJUST_RIGHT:
650 : {
651 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
652 : }
653 0 : break;
654 : case SID_ATTR_PARA_ADJUST_BLOCK:
655 : {
656 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
657 : }
658 0 : break;
659 : }
660 0 : rReq.Done( aNewAttr );
661 0 : pArgs = rReq.GetArgs();
662 : }
663 0 : else if(nSlot == SID_ATTR_CHAR_KERNING)
664 : {
665 0 : aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot)));
666 0 : rReq.Done( aNewAttr );
667 0 : pArgs = rReq.GetArgs();
668 : }
669 0 : else if(nSlot == SID_SET_SUPER_SCRIPT )
670 : {
671 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
672 : SvxEscapement eEsc = (SvxEscapement) static_cast<const SvxEscapementItem&>(
673 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
674 :
675 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
676 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
677 : else
678 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
679 0 : aNewAttr.Put( aItem );
680 0 : rReq.Done( aNewAttr );
681 0 : pArgs = rReq.GetArgs();
682 : }
683 0 : else if( nSlot == SID_SET_SUB_SCRIPT )
684 : {
685 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
686 : SvxEscapement eEsc = (SvxEscapement) static_cast<const SvxEscapementItem&>(
687 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
688 :
689 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
690 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
691 : else
692 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
693 0 : aNewAttr.Put( aItem );
694 0 : rReq.Done( aNewAttr );
695 0 : pArgs = rReq.GetArgs();
696 : }
697 :
698 0 : mpView->SetAttributes(*pArgs);
699 :
700 : // invalidate entire shell because of performance and
701 : // extension reasons
702 0 : Invalidate();
703 :
704 : // to refresh preview (in outline mode), slot has to be invalidated:
705 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
706 : }
707 0 : break;
708 : }
709 :
710 0 : Invalidate( SID_OUTLINE_LEFT );
711 0 : Invalidate( SID_OUTLINE_RIGHT );
712 0 : Invalidate( SID_OUTLINE_UP );
713 0 : Invalidate( SID_OUTLINE_DOWN );
714 0 : }
715 :
716 66 : } // end of namespace sd
717 :
718 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|