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 = (const SvxULSpaceItem&) aAttr.Get( EE_PARA_ULSPACE );
157 0 : boost::scoped_ptr<SvxULSpaceItem> pNewItem((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 = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE );
198 0 : boost::scoped_ptr<SvxULSpaceItem> pNewItem((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 = (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 = (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, (const SfxPoolItem**)&pItem);
353 :
354 0 : if (pItem )
355 : {
356 0 : SvxNumRule aNewRule(*((SvxNumBulletItem*)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.SetLSpace(0);
375 0 : aFmt.SetAbsLSpace(0);
376 0 : aFmt.SetFirstLineOffset(0);
377 : }
378 :
379 0 : aNewRule.SetLevel(nLevel, aFmt);
380 0 : }
381 :
382 0 : pFirstStyleSheet->GetItemSet().Put(SvxNumBulletItem(aNewRule, EE_PARA_NUMBULLET));
383 :
384 0 : SdStyleSheet::BroadcastSdStyleSheetChange(pFirstStyleSheet, PO_OUTLINE_1, pSSPool);
385 0 : }
386 : }
387 : }
388 : }
389 0 : break;
390 : }
391 : case SID_GROW_FONT_SIZE:
392 : case SID_SHRINK_FONT_SIZE:
393 : {
394 0 : const SvxFontListItem* pFonts = (const SvxFontListItem*)mpViewShell->GetDocSh()->GetItem( SID_ATTR_CHAR_FONTLIST );
395 0 : const FontList* pFontList = pFonts ? pFonts->GetFontList(): 0;
396 0 : if( pFontList )
397 : {
398 0 : FuText::ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pOLV, pFontList, mpView );
399 0 : if( pOLV )
400 : {
401 0 : SfxItemSet aSet( pOLV->GetEditView().GetAttribs() );
402 0 : SfxItemSet aNewAttrs (pOLV->GetEditView().GetEmptyItemSet() );
403 :
404 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT ), EE_CHAR_FONTHEIGHT );
405 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CJK ), EE_CHAR_FONTHEIGHT_CJK );
406 0 : aNewAttrs.Put( aSet.Get( EE_CHAR_FONTHEIGHT_CTL ), EE_CHAR_FONTHEIGHT_CTL );
407 :
408 0 : mpView->SetAttributes( aNewAttrs );
409 : }
410 0 : Invalidate();
411 : // to refresh preview (in outline mode), slot has to be invalidated:
412 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
413 : }
414 0 : rReq.Done();
415 : }
416 0 : break;
417 :
418 : case SID_THES:
419 : {
420 0 : OUString aReplaceText;
421 0 : SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, false );
422 0 : if (pItem2)
423 0 : aReplaceText = pItem2->GetValue();
424 0 : if (!aReplaceText.isEmpty())
425 0 : ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
426 : }
427 0 : break;
428 :
429 : default:
430 : {
431 0 : SfxItemSet aEditAttr( mpView->GetDoc().GetPool() );
432 0 : mpView->GetAttributes( aEditAttr );
433 0 : SfxItemSet aNewAttr(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
434 :
435 0 : if( !pArgs )
436 : {
437 : //aNewAttr.InvalidateAllItems(); <- produces problems (#35465#)
438 :
439 0 : switch ( nSlot )
440 : {
441 : case SID_ATTR_CHAR_WEIGHT:
442 : {
443 : FontWeight eFW = ( (const SvxWeightItem&) aEditAttr.
444 0 : Get( EE_CHAR_WEIGHT ) ).GetWeight();
445 : aNewAttr.Put( SvxWeightItem( eFW == WEIGHT_NORMAL ?
446 : WEIGHT_BOLD : WEIGHT_NORMAL,
447 0 : EE_CHAR_WEIGHT ) );
448 : }
449 0 : break;
450 : case SID_ATTR_CHAR_POSTURE:
451 : {
452 : FontItalic eFI = ( (const SvxPostureItem&) aEditAttr.
453 0 : Get( EE_CHAR_ITALIC ) ).GetPosture();
454 : aNewAttr.Put( SvxPostureItem( eFI == ITALIC_NORMAL ?
455 : ITALIC_NONE : ITALIC_NORMAL,
456 0 : EE_CHAR_ITALIC ) );
457 : }
458 0 : break;
459 : case SID_ATTR_CHAR_UNDERLINE:
460 : {
461 : FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr.
462 0 : Get( EE_CHAR_UNDERLINE ) ).GetLineStyle();
463 : aNewAttr.Put( SvxUnderlineItem( eFU == UNDERLINE_SINGLE ?
464 : UNDERLINE_NONE : UNDERLINE_SINGLE,
465 0 : EE_CHAR_UNDERLINE ) );
466 : }
467 0 : break;
468 : case SID_ATTR_CHAR_OVERLINE:
469 : {
470 : FontUnderline eFO = ( (const SvxOverlineItem&) aEditAttr.
471 0 : Get( EE_CHAR_OVERLINE ) ).GetLineStyle();
472 : aNewAttr.Put( SvxOverlineItem( eFO == UNDERLINE_SINGLE ?
473 : UNDERLINE_NONE : UNDERLINE_SINGLE,
474 0 : EE_CHAR_OVERLINE ) );
475 : }
476 0 : break;
477 : case SID_ATTR_CHAR_CONTOUR:
478 : {
479 : aNewAttr.Put( SvxContourItem( !( (const SvxContourItem&) aEditAttr.
480 0 : Get( EE_CHAR_OUTLINE ) ).GetValue(), EE_CHAR_OUTLINE ) );
481 : }
482 0 : break;
483 : case SID_ATTR_CHAR_SHADOWED:
484 : {
485 : aNewAttr.Put( SvxShadowedItem( !( (const SvxShadowedItem&) aEditAttr.
486 0 : Get( EE_CHAR_SHADOW ) ).GetValue(), EE_CHAR_SHADOW ) );
487 : }
488 0 : break;
489 : case SID_ATTR_CHAR_CASEMAP:
490 : {
491 : aNewAttr.Put( SvxCaseMapItem( ( (const SvxCaseMapItem&) aEditAttr.
492 0 : Get( EE_CHAR_CASEMAP ) ) ) );
493 : }
494 0 : break;
495 : case SID_ATTR_CHAR_STRIKEOUT:
496 : {
497 : FontStrikeout eFSO = ( ( (const SvxCrossedOutItem&) aEditAttr.
498 0 : Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() );
499 : aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ?
500 0 : STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
501 : }
502 0 : break;
503 :
504 : case SID_ATTR_PARA_ADJUST_LEFT:
505 : {
506 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
507 : }
508 0 : break;
509 : case SID_ATTR_PARA_ADJUST_CENTER:
510 : {
511 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
512 : }
513 0 : break;
514 : case SID_ATTR_PARA_ADJUST_RIGHT:
515 : {
516 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
517 : }
518 0 : break;
519 : case SID_ATTR_PARA_ADJUST_BLOCK:
520 : {
521 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
522 : }
523 0 : break;
524 : case SID_ATTR_PARA_LINESPACE_10:
525 : {
526 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL );
527 0 : aItem.SetPropLineSpace( 100 );
528 0 : aNewAttr.Put( aItem );
529 : }
530 0 : break;
531 : case SID_ATTR_PARA_LINESPACE_15:
532 : {
533 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL );
534 0 : aItem.SetPropLineSpace( 150 );
535 0 : aNewAttr.Put( aItem );
536 : }
537 0 : break;
538 : case SID_ATTR_PARA_LINESPACE_20:
539 : {
540 0 : SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
541 0 : aItem.SetPropLineSpace( 200 );
542 0 : aNewAttr.Put( aItem );
543 : }
544 0 : break;
545 : case SID_SET_SUPER_SCRIPT:
546 : {
547 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
548 : SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
549 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
550 :
551 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
552 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
553 : else
554 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
555 0 : aNewAttr.Put( aItem );
556 : }
557 0 : break;
558 : case SID_SET_SUB_SCRIPT:
559 : {
560 0 : SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
561 : SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
562 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
563 :
564 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
565 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
566 : else
567 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
568 0 : aNewAttr.Put( aItem );
569 : }
570 0 : break;
571 :
572 : // attributes for TextObjectBar
573 : case SID_ATTR_CHAR_FONT:
574 : mpViewShell->GetViewFrame()->GetDispatcher()->
575 0 : Execute( SID_CHAR_DLG, SfxCallMode::ASYNCHRON );
576 0 : break;
577 : case SID_ATTR_CHAR_FONTHEIGHT:
578 : mpViewShell->GetViewFrame()->GetDispatcher()->
579 0 : Execute( SID_CHAR_DLG, SfxCallMode::ASYNCHRON );
580 0 : break;
581 : case SID_ATTR_CHAR_COLOR:
582 0 : break;
583 : // #i35937# removed need for FN_NUM_BULLET_ON handling
584 : }
585 :
586 0 : rReq.Done( aNewAttr );
587 0 : pArgs = rReq.GetArgs();
588 : }
589 0 : else if ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ||
590 : nSlot == SID_ATTR_PARA_RIGHT_TO_LEFT )
591 : {
592 0 : bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
593 :
594 0 : sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
595 0 : if( SfxItemState::SET == aEditAttr.GetItemState(EE_PARA_JUST, true, &pPoolItem ) )
596 0 : nAdjust = ( (SvxAdjustItem*)pPoolItem)->GetEnumValue();
597 :
598 0 : if( bLeftToRight )
599 : {
600 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
601 0 : if( nAdjust == SVX_ADJUST_RIGHT )
602 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
603 : }
604 : else
605 : {
606 0 : aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
607 0 : if( nAdjust == SVX_ADJUST_LEFT )
608 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
609 : }
610 :
611 0 : rReq.Done( aNewAttr );
612 0 : pArgs = rReq.GetArgs();
613 :
614 0 : Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT );
615 : }
616 0 : else if ( nSlot == SID_ATTR_CHAR_FONT ||
617 0 : nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
618 0 : nSlot == SID_ATTR_CHAR_POSTURE ||
619 : nSlot == SID_ATTR_CHAR_WEIGHT )
620 : {
621 : // #i78017 establish the same behaviour as in Writer
622 0 : sal_uInt16 nScriptType = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
623 0 : if (nSlot == SID_ATTR_CHAR_FONT)
624 0 : nScriptType = mpView->GetScriptType();
625 :
626 0 : SfxItemPool& rPool = mpView->GetDoc().GetPool();
627 0 : SvxScriptSetItem aSvxScriptSetItem( nSlot, rPool );
628 0 : aSvxScriptSetItem.PutItemForScriptType( nScriptType, pArgs->Get( rPool.GetWhich( nSlot ) ) );
629 0 : aNewAttr.Put( aSvxScriptSetItem.GetItemSet() );
630 0 : rReq.Done( aNewAttr );
631 0 : pArgs = rReq.GetArgs();
632 : }
633 0 : else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT ||
634 0 : nSlot == SID_ATTR_PARA_ADJUST_CENTER ||
635 0 : nSlot == SID_ATTR_PARA_ADJUST_RIGHT ||
636 : nSlot == SID_ATTR_PARA_ADJUST_BLOCK)
637 : {
638 0 : switch( nSlot )
639 : {
640 : case SID_ATTR_PARA_ADJUST_LEFT:
641 : {
642 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
643 : }
644 0 : break;
645 : case SID_ATTR_PARA_ADJUST_CENTER:
646 : {
647 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
648 : }
649 0 : break;
650 : case SID_ATTR_PARA_ADJUST_RIGHT:
651 : {
652 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
653 : }
654 0 : break;
655 : case SID_ATTR_PARA_ADJUST_BLOCK:
656 : {
657 0 : aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
658 : }
659 0 : break;
660 : }
661 0 : rReq.Done( aNewAttr );
662 0 : pArgs = rReq.GetArgs();
663 : }
664 0 : else if(nSlot == SID_ATTR_CHAR_KERNING)
665 : {
666 0 : aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot)));
667 0 : rReq.Done( aNewAttr );
668 0 : pArgs = rReq.GetArgs();
669 : }
670 0 : else if(nSlot == SID_SET_SUPER_SCRIPT )
671 : {
672 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
673 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
674 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
675 :
676 0 : if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
677 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
678 : else
679 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
680 0 : aNewAttr.Put( aItem );
681 0 : rReq.Done( aNewAttr );
682 0 : pArgs = rReq.GetArgs();
683 : }
684 0 : else if( nSlot == SID_SET_SUB_SCRIPT )
685 : {
686 0 : SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
687 : SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
688 0 : aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
689 :
690 0 : if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
691 0 : aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
692 : else
693 0 : aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
694 0 : aNewAttr.Put( aItem );
695 0 : rReq.Done( aNewAttr );
696 0 : pArgs = rReq.GetArgs();
697 : }
698 :
699 0 : mpView->SetAttributes(*pArgs);
700 :
701 : // invalidate entire shell because of performance and
702 : // extension reasons
703 0 : Invalidate();
704 :
705 : // to refresh preview (in outline mode), slot has to be invalidated:
706 0 : mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, true, false );
707 : }
708 0 : break;
709 : }
710 :
711 0 : Invalidate( SID_OUTLINE_LEFT );
712 0 : Invalidate( SID_OUTLINE_RIGHT );
713 0 : Invalidate( SID_OUTLINE_UP );
714 0 : Invalidate( SID_OUTLINE_DOWN );
715 0 : }
716 :
717 114 : } // end of namespace sd
718 :
719 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|