1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26
27 #include "TextObjectBar.hxx"
28
29 #include <svx/svxids.hrc>
30
31 #include <i18npool/mslangid.hxx>
32 #include <editeng/ulspitem.hxx>
33 #include <editeng/lspcitem.hxx>
34 #include <editeng/adjitem.hxx>
35 #include <editeng/editview.hxx>
36 #include <editeng/editeng.hxx>
37 #include <editeng/outliner.hxx>
38 #include <editeng/unolingu.hxx>
39 #include <editeng/ulspitem.hxx>
40 #include <editeng/lspcitem.hxx>
41 #include <editeng/adjitem.hxx>
42 #include <editeng/kernitem.hxx>
43 #include <vcl/vclenum.hxx>
44 #include <sfx2/app.hxx>
45 #include <svl/whiter.hxx>
46 #include <svl/itempool.hxx>
47 #include <svl/stritem.hxx>
48 #include <svl/style.hxx>
49 #include <svl/languageoptions.hxx>
50 #include <sfx2/tplpitem.hxx>
51 #include <editeng/escpitem.hxx>
52 #include <svx/svdoutl.hxx>
53 #include <svl/intitem.hxx>
54 #include <editeng/scripttypeitem.hxx>
55 #include <editeng/outlobj.hxx>
56 #include <editeng/writingmodeitem.hxx>
57 #include <editeng/frmdiritem.hxx>
58
59
60 #include <sfx2/objface.hxx>
61
62 #include "app.hrc"
63 #include "glob.hrc"
64 #include "res_bmp.hrc"
65
66 #include "eetext.hxx"
67
68 #include "drawdoc.hxx"
69 #include "DrawViewShell.hxx"
70 #include "OutlineViewShell.hxx"
71 #include "ViewShellBase.hxx"
72 #include "ToolBarManager.hxx"
73 #include "futempl.hxx"
74 #include "sdresid.hxx"
75 #include "Window.hxx"
76 #include "OutlineView.hxx"
77
78
79 using namespace sd;
80 using namespace ::com::sun::star;
81
82 #define TextObjectBar
83 #include "sdslots.hxx"
84
85 namespace sd {
86
87 /*************************************************************************
88 |*
89 |* Standardinterface deklarieren (Die Slotmap darf nicht leer sein, also
90 |* tragen wir etwas ein, was hier (hoffentlich) nie vorkommt).
91 |*
92 \************************************************************************/
93
94
SFX_IMPL_INTERFACE(TextObjectBar,SfxShell,SdResId (STR_TEXTOBJECTBARSHELL))95 SFX_IMPL_INTERFACE( TextObjectBar, SfxShell, SdResId(STR_TEXTOBJECTBARSHELL) )
96 {
97 }
98
99 TYPEINIT1( TextObjectBar, SfxShell );
100
101 /*************************************************************************
102 |*
103 |* Standard-Konstruktor
104 |*
105 \************************************************************************/
106
TextObjectBar(ViewShell * pSdViewSh,SfxItemPool & rItemPool,::sd::View * pSdView)107 TextObjectBar::TextObjectBar (
108 ViewShell* pSdViewSh,
109 SfxItemPool& rItemPool,
110 ::sd::View* pSdView )
111 : SfxShell(pSdViewSh->GetViewShell()),
112 mpViewShell( pSdViewSh ),
113 mpView( pSdView )
114 {
115 SetPool(&rItemPool);
116
117 if( mpView )
118 {
119 OutlineView* pOutlinerView = dynamic_cast< OutlineView* >( mpView );
120 if( pOutlinerView )
121 {
122 SetUndoManager(&pOutlinerView->GetOutliner()->GetUndoManager());
123 }
124 else
125 {
126 SdDrawDocument* pDoc = mpView->GetDoc();
127 if( pDoc )
128 {
129 DrawDocShell* pDocShell = pDoc->GetDocSh();
130 if( pDocShell )
131 {
132 SetUndoManager(pDocShell->GetUndoManager());
133 DrawViewShell* pDrawViewShell = dynamic_cast< DrawViewShell* >( pSdViewSh );
134 if ( pDrawViewShell )
135 SetRepeatTarget(pSdView);
136 }
137 }
138 }
139 }
140
141 SetName( String( RTL_CONSTASCII_USTRINGPARAM( "TextObjectBar" )));
142
143 // SetHelpId( SD_IF_SDDRAWTEXTOBJECTBAR );
144 }
145
146 /*************************************************************************
147 |*
148 |* Destruktor
149 |*
150 \************************************************************************/
151
~TextObjectBar()152 TextObjectBar::~TextObjectBar()
153 {
154 SetRepeatTarget(NULL);
155 }
156
GetCharState(SfxItemSet & rSet)157 void TextObjectBar::GetCharState( SfxItemSet& rSet )
158 {
159 SfxItemSet aCharAttrSet( mpView->GetDoc()->GetPool() );
160 mpView->GetAttributes( aCharAttrSet );
161
162 SfxItemSet aNewAttr( mpViewShell->GetPool(),EE_ITEMS_START,EE_ITEMS_END);
163
164 aNewAttr.Put(aCharAttrSet, sal_False);
165 rSet.Put(aNewAttr, sal_False);
166
167 SvxKerningItem aKern = ( (const SvxKerningItem&) aCharAttrSet.Get( EE_CHAR_KERNING ) );
168 //aKern.SetWhich(SID_ATTR_CHAR_KERNING);
169 rSet.Put(aKern);
170
171 SfxItemState eState = aCharAttrSet.GetItemState( EE_CHAR_KERNING, sal_True );
172 if ( eState == SFX_ITEM_DONTCARE )
173 {
174 rSet.InvalidateItem(EE_CHAR_KERNING);
175 }
176 }
177
178 /*************************************************************************
179 |*
180 |* Status der Attribut-Items
181 |*
182 \************************************************************************/
183
GetAttrState(SfxItemSet & rSet)184 void TextObjectBar::GetAttrState( SfxItemSet& rSet )
185 {
186 SfxWhichIter aIter( rSet );
187 sal_uInt16 nWhich = aIter.FirstWhich();
188 sal_Bool bTemplate = sal_False;
189 SfxItemSet aAttrSet( mpView->GetDoc()->GetPool() );
190 SvtLanguageOptions aLangOpt;
191 sal_Bool bDisableParagraphTextDirection = !aLangOpt.IsCTLFontEnabled();
192 sal_Bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
193
194 mpView->GetAttributes( aAttrSet );
195
196 while ( nWhich )
197 {
198 sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
199 ? GetPool().GetSlotId(nWhich)
200 : nWhich;
201
202 switch ( nSlotId )
203 {
204 case SID_ATTR_CHAR_FONT:
205 case SID_ATTR_CHAR_FONTHEIGHT:
206 case SID_ATTR_CHAR_WEIGHT:
207 case SID_ATTR_CHAR_POSTURE:
208 case SID_ATTR_CHAR_SHADOWED:
209 case SID_ATTR_CHAR_STRIKEOUT:
210 {
211 SvxScriptSetItem aSetItem( nSlotId, GetPool() );
212 aSetItem.GetItemSet().Put( aAttrSet, sal_False );
213
214 sal_uInt16 nScriptType = mpView->GetScriptType();
215
216 if( (nSlotId == SID_ATTR_CHAR_FONT) || (nSlotId == SID_ATTR_CHAR_FONTHEIGHT) )
217 {
218 // #42732# input language should be preferred over
219 // current cursor position to detect script type
220 OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
221
222 if (mpView->ISA(OutlineView))
223 {
224 pOLV = static_cast<OutlineView*>(mpView)->GetViewByWindow(
225 mpViewShell->GetActiveWindow());
226 }
227
228 if(pOLV && !pOLV->GetSelection().HasRange())
229 {
230 if( mpViewShell && mpViewShell->GetViewShell() && mpViewShell->GetViewShell()->GetWindow() )
231 {
232 LanguageType nInputLang = mpViewShell->GetViewShell()->GetWindow()->GetInputLanguage();
233 if(nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
234 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
235 }
236 }
237 }
238
239 const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScriptType );
240 if( pI )
241 aAttrSet.Put( *pI, nWhich );
242 else
243 aAttrSet.InvalidateItem( nWhich );
244 }
245 break;
246
247
248 case SID_STYLE_APPLY:
249 case SID_STYLE_FAMILY2:
250 {
251 SfxStyleSheet* pStyleSheet = mpView->GetStyleSheetFromMarked();
252 if( pStyleSheet )
253 rSet.Put( SfxTemplateItem( nWhich, pStyleSheet->GetName() ) );
254 else
255 {
256 rSet.Put( SfxTemplateItem( nWhich, String() ) );
257 }
258 bTemplate = sal_True;
259 }
260 break;
261
262 case SID_OUTLINE_LEFT:
263 case SID_OUTLINE_RIGHT:
264 case SID_OUTLINE_UP:
265 case SID_OUTLINE_DOWN:
266 {
267 sal_Bool bDisableLeft = sal_True;
268 sal_Bool bDisableRight = sal_True;
269 sal_Bool bDisableUp = sal_True;
270 sal_Bool bDisableDown = sal_True;
271 OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
272
273 if (mpView->ISA(OutlineView))
274 {
275 pOLV = static_cast<OutlineView*>(mpView)->GetViewByWindow(
276 mpViewShell->GetActiveWindow());
277 }
278
279 sal_Bool bOutlineViewSh = mpViewShell->ISA(OutlineViewShell);
280
281 if (pOLV &&
282 ( pOLV->GetOutliner()->GetMode() == OUTLINERMODE_OUTLINEOBJECT || bOutlineViewSh ) )
283 {
284 // Outliner im Gliederungsmodus
285 ::Outliner* pOutl = pOLV->GetOutliner();
286 List* pList = pOLV->CreateSelectionList();
287 Paragraph* pPara = (Paragraph*) pList->First();
288
289 // #96539# find out if we are a OutlineView
290 sal_Bool bIsOutlineView(OUTLINERMODE_OUTLINEVIEW == pOLV->GetOutliner()->GetMode());
291
292 // #96539# This is ONLY for OutlineViews
293 if(bIsOutlineView)
294 {
295 // #96250# and #78665#
296 // allow move up if position is 2 or greater OR it
297 // is a title object (and thus depth==1)
298 if(pOutl->GetAbsPos(pPara) > 1 || ( pOutl->HasParaFlag(pPara,PARAFLAG_ISPAGE) && pOutl->GetAbsPos(pPara) > 0 ) )
299 {
300 // Nicht ganz oben
301 bDisableUp = sal_False;
302 }
303 }
304 else
305 {
306 // #96539# old behaviour for OUTLINERMODE_OUTLINEOBJECT
307 if(pOutl->GetAbsPos(pPara) > 0)
308 {
309 // Nicht ganz oben
310 bDisableUp = sal_False;
311 }
312 }
313
314 while (pPara)
315 {
316 sal_Int16 nDepth = pOutl->GetDepth( (sal_uInt16) pOutl->GetAbsPos( pPara ) );
317
318 if (nDepth > 0 || (bOutlineViewSh && (nDepth <= 0) && !pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE )) )
319 {
320 // Nicht minimale Tiefe
321 bDisableLeft = sal_False;
322 }
323
324 if( (nDepth < pOLV->GetOutliner()->GetMaxDepth() && ( !bOutlineViewSh || pOutl->GetAbsPos(pPara) != 0 )) ||
325 (bOutlineViewSh && (nDepth <= 0) && pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE ) && pOutl->GetAbsPos(pPara) != 0) )
326 {
327 // Nicht maximale Tiefe und nicht ganz oben
328 bDisableRight = sal_False;
329 }
330
331 pPara = static_cast<Paragraph*>( pList->Next() );
332 }
333
334 if ( ( pOutl->GetAbsPos((Paragraph*) pList->Last()) < pOutl->GetParagraphCount() - 1 ) &&
335 ( pOutl->GetParagraphCount() > 1 || !bOutlineViewSh) )
336 {
337 // Nicht letzter Absatz
338 bDisableDown = sal_False;
339 }
340
341 // #96250# and #78665#
342 // disable when first para and 2nd is not a title
343 pPara = static_cast< Paragraph* >( pList->First() );
344 if(!bDisableDown && bIsOutlineView
345 && pPara
346 && 0 == pOutl->GetAbsPos(pPara)
347 && pOutl->GetParagraphCount() > 1
348 && !pOutl->HasParaFlag( pOutl->GetParagraph(1), PARAFLAG_ISPAGE ) )
349 {
350 // Needs to be disabled
351 bDisableDown = sal_True;
352 }
353
354 delete pList;
355 }
356
357 if (bDisableLeft)
358 rSet.DisableItem(SID_OUTLINE_LEFT);
359 if (bDisableRight)
360 rSet.DisableItem(SID_OUTLINE_RIGHT);
361 if (bDisableUp)
362 rSet.DisableItem(SID_OUTLINE_UP);
363 if (bDisableDown)
364 rSet.DisableItem(SID_OUTLINE_DOWN);
365 }
366 break;
367
368 case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
369 case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
370 {
371 if ( bDisableVerticalText )
372 {
373 rSet.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
374 rSet.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
375 }
376 else
377 {
378 sal_Bool bLeftToRight = sal_True;
379
380 SdrOutliner* pOutl = mpView->GetTextEditOutliner();
381 if( pOutl )
382 {
383 if( pOutl->IsVertical() )
384 bLeftToRight = sal_False;
385 }
386 else
387 bLeftToRight = ( (const SvxWritingModeItem&) aAttrSet.Get( SDRATTR_TEXTDIRECTION ) ).GetValue() == com::sun::star::text::WritingMode_LR_TB;
388
389 rSet.Put( SfxBoolItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT, bLeftToRight ) );
390 rSet.Put( SfxBoolItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM, !bLeftToRight ) );
391
392 if( !bLeftToRight )
393 bDisableParagraphTextDirection = sal_True;
394 }
395 }
396 break;
397
398 case SID_GROW_FONT_SIZE:
399 case SID_SHRINK_FONT_SIZE:
400 {
401 // todo
402 }
403 break;
404
405 case SID_THES:
406 {
407 if( mpView && mpView->GetTextEditOutlinerView() )
408 {
409 EditView & rEditView = mpView->GetTextEditOutlinerView()->GetEditView();;
410 String aStatusVal;
411 LanguageType nLang = LANGUAGE_NONE;
412 bool bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, rEditView );
413 rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
414
415 // disable "Thesaurus" context menu entry if there is nothing to look up
416 lang::Locale aLocale( SvxCreateLocale( nLang ) );
417 uno::Reference< linguistic2::XThesaurus > xThes( LinguMgr::GetThesaurus() );
418 if (!bIsLookUpWord ||
419 !xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( aLocale ))
420 rSet.DisableItem( SID_THES );
421 }
422 else
423 {
424 rSet.DisableItem( SID_THES );
425 }
426 //! avoid puting the same item as SfxBoolItem at the end of this function
427 nSlotId = 0;
428 }
429 break;
430
431 default:
432 break;
433 }
434
435 nWhich = aIter.NextWhich();
436 }
437
438 rSet.Put( aAttrSet, sal_False ); // <- sal_False, damit DontCare-Status uebernommen wird
439
440
441 // die sind im Gliederungsmodus disabled
442 if (!mpViewShell->ISA(DrawViewShell))
443 {
444 rSet.DisableItem( SID_ATTR_PARA_ADJUST_LEFT );
445 rSet.DisableItem( SID_ATTR_PARA_ADJUST_RIGHT );
446 rSet.DisableItem( SID_ATTR_PARA_ADJUST_CENTER );
447 rSet.DisableItem( SID_ATTR_PARA_ADJUST_BLOCK );
448 rSet.DisableItem( SID_ATTR_PARA_LINESPACE_10 );
449 rSet.DisableItem( SID_ATTR_PARA_LINESPACE_15 );
450 rSet.DisableItem( SID_ATTR_PARA_LINESPACE_20 );
451 rSet.DisableItem( SID_PARASPACE_INCREASE );
452 rSet.DisableItem( SID_PARASPACE_DECREASE );
453 rSet.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
454 rSet.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
455 rSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
456 rSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
457 }
458 else
459 {
460 // Absatzabstand
461 OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
462 if( pOLV )
463 {
464 ESelection aSel = pOLV->GetSelection();
465 aSel.Adjust();
466 sal_uLong nStartPara = aSel.nStartPara;
467 sal_uLong nEndPara = aSel.nEndPara;
468 if( !aSel.HasRange() )
469 {
470 nStartPara = 0;
471 nEndPara = pOLV->GetOutliner()->GetParagraphCount() - 1;
472 }
473 long nUpper = 0L;
474 for( sal_uLong nPara = nStartPara; nPara <= nEndPara; nPara++ )
475 {
476 const SfxItemSet& rItems = pOLV->GetOutliner()->GetParaAttribs( (sal_uInt16)nPara );
477 const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) rItems.Get( EE_PARA_ULSPACE );
478 nUpper = Max( nUpper, (long)rItem.GetUpper() );
479 }
480 if( nUpper == 0L )
481 rSet.DisableItem( SID_PARASPACE_DECREASE );
482 }
483 else
484 {
485 // Wird zur Zeit nie disabled !
486 //rSet.DisableItem( SID_PARASPACE_INCREASE );
487 //rSet.DisableItem( SID_PARASPACE_DECREASE );
488 }
489
490 // Absatzausrichtung
491 SvxLRSpaceItem aLR = ( (const SvxLRSpaceItem&) aAttrSet.Get( EE_PARA_LRSPACE ) );
492 rSet.Put(aLR);
493 SvxAdjust eAdj = ( (const SvxAdjustItem&) aAttrSet.Get( EE_PARA_JUST ) ).GetAdjust();
494 switch( eAdj )
495 {
496 case SVX_ADJUST_LEFT:
497 rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_LEFT, sal_True ) );
498 break;
499 case SVX_ADJUST_CENTER:
500 rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True ) );
501 break;
502 case SVX_ADJUST_RIGHT:
503 rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True ) );
504 break;
505 case SVX_ADJUST_BLOCK:
506 rSet.Put( SfxBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True ) );
507 break;
508 default:
509 break;
510 }
511
512 Invalidate(SID_ATTR_PARA_ADJUST_LEFT);
513 Invalidate(SID_ATTR_PARA_ADJUST_CENTER);
514 Invalidate(SID_ATTR_PARA_ADJUST_RIGHT);
515 Invalidate(SID_ATTR_PARA_ADJUST_BLOCK);
516 Invalidate(SID_ATTR_PARA_LINESPACE);
517 Invalidate(SID_ATTR_PARA_ULSPACE);
518
519 // paragraph text direction
520 if( bDisableParagraphTextDirection )
521 {
522 rSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
523 rSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
524 }
525 else
526 {
527 switch( ( ( (SvxFrameDirectionItem&) aAttrSet.Get( EE_PARA_WRITINGDIR ) ) ).GetValue() )
528 {
529 case FRMDIR_VERT_TOP_LEFT:
530 case FRMDIR_VERT_TOP_RIGHT:
531 {
532 rSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
533 rSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
534 }
535 break;
536
537 case FRMDIR_HORI_LEFT_TOP:
538 rSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, sal_True ) );
539 rSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, sal_False ) );
540 break;
541
542 case FRMDIR_HORI_RIGHT_TOP:
543 rSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, sal_False ) );
544 rSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, sal_True ) );
545 break;
546
547 // #107865#
548 // The case for the superordinate object is missing.
549 case FRMDIR_ENVIRONMENT:
550 {
551 SdDrawDocument* pDoc = mpView->GetDoc();
552 ::com::sun::star::text::WritingMode eMode = pDoc->GetDefaultWritingMode();
553 sal_Bool bIsLeftToRight(sal_False);
554
555 if(::com::sun::star::text::WritingMode_LR_TB == eMode
556 || ::com::sun::star::text::WritingMode_TB_RL == eMode)
557 {
558 bIsLeftToRight = sal_True;
559 }
560
561 rSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, bIsLeftToRight ) );
562 rSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, !bIsLeftToRight ) );
563 }
564 break;
565 }
566 }
567
568 /* #i35937#
569 if (aAttrSet.GetItemState(EE_PARA_BULLETSTATE) == SFX_ITEM_ON)
570 {
571 SfxUInt16Item aBulletState((const SfxUInt16Item&) aAttrSet.Get(EE_PARA_BULLETSTATE));
572
573 if (aBulletState.GetValue() != 0)
574 {
575 rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, sal_True));
576 }
577 else
578 {
579 rSet.Put(SfxBoolItem(FN_NUM_BULLET_ON, sal_False));
580 }
581 }
582 */
583 SvxLRSpaceItem aLRSpace = ( (const SvxLRSpaceItem&) aAttrSet.Get( EE_PARA_LRSPACE ) );
584 aLRSpace.SetWhich(SID_ATTR_PARA_LRSPACE);
585 rSet.Put(aLRSpace);
586 Invalidate(SID_ATTR_PARA_LRSPACE);
587 //Added by xuxu
588 SfxItemState eState = aAttrSet.GetItemState( EE_PARA_LRSPACE );
589 if ( eState == SFX_ITEM_DONTCARE )
590 {
591 rSet.InvalidateItem(EE_PARA_LRSPACE);
592 rSet.InvalidateItem(SID_ATTR_PARA_LRSPACE);
593 }
594 sal_uInt16 nLineSpace = (sal_uInt16) ( (const SvxLineSpacingItem&) aAttrSet.
595 Get( EE_PARA_SBL ) ).GetPropLineSpace();
596 switch( nLineSpace )
597 {
598 case 100:
599 rSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_10, sal_True ) );
600 break;
601 case 150:
602 rSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_15, sal_True ) );
603 break;
604 case 200:
605 rSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_20, sal_True ) );
606 break;
607 }
608 }
609
610 // Ausrichtung (hoch/tief) wird auch im Gliederungsmodus gebraucht
611 SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
612 aAttrSet.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
613
614 if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
615 rSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) );
616 else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
617 rSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) );
618 }
619
620 /*************************************************************************
621 |*
622 |* Command event
623 |*
624 \************************************************************************/
625
Command(const CommandEvent &)626 void TextObjectBar::Command( const CommandEvent& )
627 {
628 }
629
630
631 } // end of namespace sd
632