xref: /aoo42x/main/sd/source/ui/view/drtxtob1.cxx (revision 3bfccf5b)
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  
30  #include <svx/svxids.hrc>
31  
32  #include <editeng/editview.hxx>
33  #include <editeng/editeng.hxx>
34  #include <editeng/unolingu.hxx>
35  #include <editeng/outliner.hxx>
36  #include <editeng/ulspitem.hxx>
37  #include <editeng/lspcitem.hxx>
38  #include <editeng/adjitem.hxx>
39  #include <vcl/vclenum.hxx>
40  #include <sfx2/app.hxx>
41  #include <svl/whiter.hxx>
42  #include <svl/itempool.hxx>
43  #include <svl/style.hxx>
44  #include <sfx2/tplpitem.hxx>
45  #include <sfx2/request.hxx>
46  #include <sfx2/viewfrm.hxx>
47  #include <sfx2/dispatch.hxx>
48  #include <editeng/escpitem.hxx>
49  #include <editeng/wghtitem.hxx>
50  #include <editeng/postitem.hxx>
51  #include <editeng/udlnitem.hxx>
52  #include <editeng/crsditem.hxx>
53  #include <editeng/cntritem.hxx>
54  #include <editeng/shdditem.hxx>
55  #include <svx/xtable.hxx>
56  #include <svx/svdobj.hxx>
57  #include <editeng/outlobj.hxx>
58  #include <editeng/flstitem.hxx>
59  #include <editeng/editeng.hxx>
60  #include <svl/intitem.hxx>
61  #include <editeng/scripttypeitem.hxx>
62  #include <svx/svdoutl.hxx>
63  #include <editeng/writingmodeitem.hxx>
64  #include <editeng/frmdiritem.hxx>
65  #include <svl/itemiter.hxx>
66  
67  
68  #include "app.hrc"
69  
70  #include "eetext.hxx"
71  #include "ViewShell.hxx"
72  #include "drawview.hxx"
73  #include "drawdoc.hxx"
74  #include "OutlineView.hxx"
75  #include "Window.hxx"
76  #include "futempl.hxx"
77  #include "DrawDocShell.hxx"
78  #include "Outliner.hxx"
79  #include "futext.hxx"
80  
81  namespace sd {
82  
83  /*************************************************************************
84  |*
85  |* Bearbeitung der SfxRequests
86  |*
87  \************************************************************************/
88  
89  void TextObjectBar::Execute( SfxRequest &rReq )
90  {
91  	const SfxItemSet* pArgs = rReq.GetArgs();
92  	const SfxPoolItem* pPoolItem = NULL;
93  	sal_uInt16 nSlot = rReq.GetSlot();
94  	sal_Bool bOutlineMode = sal_False;
95  	OutlinerView* pOLV = mpView->GetTextEditOutlinerView();
96  
97  	std::auto_ptr< OutlineViewModelChangeGuard > aGuard;
98  
99  	if (mpView->ISA(OutlineView))
100  	{
101  		bOutlineMode = sal_True;
102  		pOLV = static_cast<OutlineView*>(mpView)
103              ->GetViewByWindow(mpViewShell->GetActiveWindow());
104  
105  		aGuard.reset( new OutlineViewModelChangeGuard( static_cast<OutlineView&>(*mpView) ) );
106  	}
107  
108  	switch (nSlot)
109  	{
110  		case SID_STYLE_APPLY:
111  		{
112  			if( pArgs )
113  			{
114  				SdDrawDocument* pDoc = mpView->GetDoc();
115                  OSL_ASSERT (mpViewShell->GetViewShell()!=NULL);
116  				FunctionReference xFunc( FuTemplate::Create( mpViewShell, static_cast< ::sd::Window*>( mpViewShell->GetViewShell()->GetWindow()), mpView, pDoc, rReq ) );
117  
118  				if(xFunc.is())
119  				{
120  					xFunc->Activate();
121  					xFunc->Deactivate();
122  
123  					if( rReq.GetSlot() == SID_STYLE_APPLY )
124  					{
125  						if( mpViewShell && mpViewShell->GetViewFrame() )
126  							mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_APPLY );
127  					}
128  				}
129  			}
130  			else
131  			{
132  				if( mpViewShell && mpViewShell->GetViewFrame() )
133  					mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON );
134  			}
135  
136  			rReq.Done();
137  		}
138  		break;
139  
140  		case SID_PARASPACE_INCREASE:
141  		case SID_PARASPACE_DECREASE:
142  		{
143  			if( pOLV )
144  			{
145  				ESelection aSel = pOLV->GetSelection();
146  				aSel.Adjust();
147  				sal_uLong nStartPara = aSel.nStartPara;
148  				sal_uLong nEndPara = aSel.nEndPara;
149  				if( !aSel.HasRange() )
150  				{
151  					nStartPara = 0;
152  					nEndPara = pOLV->GetOutliner()->GetParagraphCount() - 1;
153  				}
154  				for( sal_uLong nPara = nStartPara; nPara <= nEndPara; nPara++ )
155  				{
156                      SfxStyleSheet* pStyleSheet = NULL;
157  					if (pOLV->GetOutliner() != NULL)
158                          pStyleSheet = pOLV->GetOutliner()->GetStyleSheet(nPara);
159                      if (pStyleSheet != NULL)
160                      {
161                          SfxItemSet aAttr( pStyleSheet->GetItemSet() );
162                          SfxItemSet aTmpSet( pOLV->GetOutliner()->GetParaAttribs( (sal_uInt16) nPara ) );
163                          aAttr.Put( aTmpSet, sal_False ); // sal_False= InvalidItems nicht als Default, sondern als "Loecher" betrachten
164                          const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) aAttr.Get( EE_PARA_ULSPACE );
165                          SvxULSpaceItem* pNewItem = (SvxULSpaceItem*) rItem.Clone();
166  
167                          long nUpper = pNewItem->GetUpper();
168                          if( nSlot == SID_PARASPACE_INCREASE )
169                              nUpper += 100;
170                          else
171                          {
172                              nUpper -= 100;
173                              nUpper = Max( (long) nUpper, 0L );
174                          }
175                          pNewItem->SetUpper( (sal_uInt16) nUpper );
176  
177                          long nLower = pNewItem->GetLower();
178                          if( nSlot == SID_PARASPACE_INCREASE )
179                              nLower += 100;
180                          else
181                          {
182                              nLower -= 100;
183                              nLower = Max( (long) nLower, 0L );
184                          }
185                          pNewItem->SetLower( (sal_uInt16) nLower );
186  
187                          SfxItemSet aNewAttrs( aAttr );
188                          aNewAttrs.Put( *pNewItem );
189                          delete pNewItem;
190                          pOLV->GetOutliner()->SetParaAttribs( (sal_uInt16)nPara, aNewAttrs );
191                      }
192  				}
193  			}
194  			else
195  			{
196  				// Der folgende Code kann enabled werden, wenn ich von
197  				// JOE einen richtigen Status (DontCare) bekomme;
198  
199  				// Wird enabled, obwohl es nicht richtig funktioniert (s.o.)
200  				SfxItemSet aEditAttr( mpView->GetDoc()->GetPool() );
201  				mpView->GetAttributes( aEditAttr );
202                  if( aEditAttr.GetItemState( EE_PARA_ULSPACE ) >= SFX_ITEM_AVAILABLE )
203  				{
204  					SfxItemSet aNewAttrs(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
205                      const SvxULSpaceItem& rItem = (const SvxULSpaceItem&) aEditAttr.Get( EE_PARA_ULSPACE );
206  					SvxULSpaceItem* pNewItem = (SvxULSpaceItem*) rItem.Clone();
207  					long nUpper = pNewItem->GetUpper();
208  
209  					if( nSlot == SID_PARASPACE_INCREASE )
210  						nUpper += 100;
211  					else
212  					{
213  						nUpper -= 100;
214  						nUpper = Max( (long) nUpper, 0L );
215  					}
216  					pNewItem->SetUpper( (sal_uInt16) nUpper );
217  
218  					long nLower = pNewItem->GetLower();
219  					if( nSlot == SID_PARASPACE_INCREASE )
220  						nLower += 100;
221  					else
222  					{
223  						nLower -= 100;
224  						nLower = Max( (long) nLower, 0L );
225  					}
226  					pNewItem->SetLower( (sal_uInt16) nLower );
227  
228  					aNewAttrs.Put( *pNewItem );
229  					delete pNewItem;
230  
231  					mpView->SetAttributes( aNewAttrs );
232  				}
233  			}
234  			rReq.Done();
235  
236  			Invalidate();
237  			// Um die Preview (im Gliederungsmodus) zu aktualisieren muss
238  			// der Slot invalidiert werden:
239  			mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
240  		}
241  		break;
242  
243  		case SID_OUTLINE_LEFT:
244  		{
245  			if (pOLV)
246  			{
247  				pOLV->AdjustDepth( -1 );
248  
249                  // Ensure bold/italic etc. icon state updates
250  				Invalidate();
251  				// #96551# trigger preview refresh
252  				mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
253  			}
254  			rReq.Done();
255  		}
256  		break;
257  
258  		case SID_OUTLINE_RIGHT:
259  		{
260  			if (pOLV)
261  			{
262  				pOLV->AdjustDepth( 1 );
263  
264                  // Ensure bold/italic etc. icon state updates
265  				Invalidate();
266  				// #96551# trigger preview refresh
267  				mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
268  			}
269  			rReq.Done();
270  		}
271  		break;
272  
273  		case SID_ATTR_PARA_LRSPACE:
274  		{
275  			sal_uInt16 nSlot = SID_ATTR_PARA_LRSPACE;
276  			SvxLRSpaceItem aLRSpace = (const SvxLRSpaceItem&)pArgs->Get(
277  				GetPool().GetWhich(nSlot));
278  
279  			SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE );
280  			aLRSpace.SetWhich( EE_PARA_LRSPACE );
281  
282  			aEditAttr.Put( aLRSpace );
283  			mpView->SetAttributes( aEditAttr );
284  
285  			Invalidate(SID_ATTR_PARA_LRSPACE);
286  		}
287  		break;
288  
289  		case SID_OUTLINE_UP:
290  		{
291  			if (pOLV)
292  			{
293  				pOLV->AdjustHeight( -1 );
294  
295  				// #96551# trigger preview refresh
296  				mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
297  			}
298  			rReq.Done();
299  		}
300  		break;
301  
302  		case SID_OUTLINE_DOWN:
303  		{
304  			if (pOLV)
305  			{
306  				pOLV->AdjustHeight( 1 );
307  
308  				// #96551# trigger preview refresh
309  				mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
310  			}
311  			rReq.Done();
312  		}
313  		break;
314  
315  		case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
316  		case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
317  		{
318  			mpView->SdrEndTextEdit();
319  			SfxItemSet aAttr( mpView->GetDoc()->GetPool(), SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, 0 );
320              aAttr.Put( SvxWritingModeItem(
321                  nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ?
322                      com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL,
323                      SDRATTR_TEXTDIRECTION ) );
324  			rReq.Done( aAttr );
325  			mpView->SetAttributes( aAttr );
326  			Invalidate();
327  			mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
328  		}
329  		break;
330  
331  		case FN_NUM_BULLET_ON:
332              if( pOLV )
333  			    pOLV->ToggleBullets();
334  		break;
335  
336          case SID_GROW_FONT_SIZE:
337          case SID_SHRINK_FONT_SIZE:
338          {
339              const SvxFontListItem* pFonts =	(const SvxFontListItem*)mpViewShell->GetDocSh()->GetItem( SID_ATTR_CHAR_FONTLIST );
340              const FontList* pFontList = pFonts ? pFonts->GetFontList(): 0;
341              if( pFontList )
342              {
343                  FuText::ChangeFontSize( nSlot == SID_GROW_FONT_SIZE, pOLV, pFontList, mpView );
344                  mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
345              }
346              rReq.Done();
347          }
348          break;
349  
350          case SID_THES:
351          {
352              String aReplaceText;
353              SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, sal_False );
354              if (pItem2)
355                  aReplaceText = pItem2->GetValue();
356              if (aReplaceText.Len() > 0)
357                  ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
358          }
359          break;
360  
361  		default:
362  		{
363  			SfxItemSet aEditAttr( mpView->GetDoc()->GetPool() );
364  			mpView->GetAttributes( aEditAttr );
365  			SfxItemSet aNewAttr(*(aEditAttr.GetPool()), aEditAttr.GetRanges());
366  
367  			if( !pArgs )
368  			{
369  				//aNewAttr.InvalidateAllItems(); <- Macht Probleme (#35465#)
370  
371  				switch ( nSlot )
372  				{
373  					case SID_ATTR_CHAR_WEIGHT:
374  					{
375  						FontWeight eFW = ( (const SvxWeightItem&) aEditAttr.
376                                          Get( EE_CHAR_WEIGHT ) ).GetWeight();
377  						aNewAttr.Put( SvxWeightItem( eFW == WEIGHT_NORMAL ?
378                                              WEIGHT_BOLD : WEIGHT_NORMAL,
379                                              EE_CHAR_WEIGHT ) );
380  					}
381  					break;
382  					case SID_ATTR_CHAR_POSTURE:
383  					{
384  						FontItalic eFI = ( (const SvxPostureItem&) aEditAttr.
385                                          Get( EE_CHAR_ITALIC ) ).GetPosture();
386  						aNewAttr.Put( SvxPostureItem( eFI == ITALIC_NORMAL ?
387                                              ITALIC_NONE : ITALIC_NORMAL,
388                                              EE_CHAR_ITALIC ) );
389  					}
390  					break;
391  					case SID_ATTR_CHAR_UNDERLINE:
392  					{
393  						FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr.
394                                          Get( EE_CHAR_UNDERLINE ) ).GetLineStyle();
395  						aNewAttr.Put( SvxUnderlineItem( eFU == UNDERLINE_SINGLE ?
396                                              UNDERLINE_NONE : UNDERLINE_SINGLE,
397                                              EE_CHAR_UNDERLINE ) );
398  					}
399  					break;
400  					case SID_ATTR_CHAR_OVERLINE:
401  					{
402  						FontUnderline eFO = ( (const SvxOverlineItem&) aEditAttr.
403                                          Get( EE_CHAR_OVERLINE ) ).GetLineStyle();
404  						aNewAttr.Put( SvxOverlineItem( eFO == UNDERLINE_SINGLE ?
405                                              UNDERLINE_NONE : UNDERLINE_SINGLE,
406                                              EE_CHAR_OVERLINE ) );
407  					}
408  					break;
409  					case SID_ATTR_CHAR_CONTOUR:
410  					{
411  						aNewAttr.Put( SvxContourItem( !( (const SvxContourItem&) aEditAttr.
412                                          Get( EE_CHAR_OUTLINE ) ).GetValue(), EE_CHAR_OUTLINE ) );
413  					}
414  					break;
415  					case SID_ATTR_CHAR_SHADOWED:
416  					{
417  						aNewAttr.Put( SvxShadowedItem( !( (const SvxShadowedItem&) aEditAttr.
418                                          Get( EE_CHAR_SHADOW ) ).GetValue(), EE_CHAR_SHADOW ) );
419  					}
420  					break;
421  					case SID_ATTR_CHAR_STRIKEOUT:
422  					{
423  						FontStrikeout eFSO = ( ( (const SvxCrossedOutItem&) aEditAttr.
424                                          Get( EE_CHAR_STRIKEOUT ) ).GetStrikeout() );
425  						aNewAttr.Put( SvxCrossedOutItem( eFSO == STRIKEOUT_SINGLE ?
426                                              STRIKEOUT_NONE : STRIKEOUT_SINGLE, EE_CHAR_STRIKEOUT ) );
427  					}
428  					break;
429  
430  					case SID_ATTR_PARA_ADJUST_LEFT:
431  					{
432                          aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
433  					}
434  					break;
435  					case SID_ATTR_PARA_ADJUST_CENTER:
436  					{
437                          aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
438  					}
439  					break;
440  					case SID_ATTR_PARA_ADJUST_RIGHT:
441  					{
442                          aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
443  					}
444  					break;
445  					case SID_ATTR_PARA_ADJUST_BLOCK:
446  					{
447                          aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
448  					}
449  					break;
450  					case SID_ATTR_PARA_LINESPACE_10:
451  					{
452                          SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL );
453  						aItem.SetPropLineSpace( 100 );
454  						aNewAttr.Put( aItem );
455  					}
456  					break;
457  					case SID_ATTR_PARA_LINESPACE_15:
458  					{
459                          SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL );
460  						aItem.SetPropLineSpace( 150 );
461  						aNewAttr.Put( aItem );
462  					}
463  					break;
464  					case SID_ATTR_PARA_LINESPACE_20:
465  					{
466                          SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
467  						aItem.SetPropLineSpace( 200 );
468  						aNewAttr.Put( aItem );
469  					}
470      				break;
471  					case SID_SET_SUPER_SCRIPT:
472  					{
473                          SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
474  						SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
475                                          aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
476  
477  						if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
478  							aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
479  						else
480  							aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
481  						aNewAttr.Put( aItem );
482  					}
483  					break;
484  					case SID_SET_SUB_SCRIPT:
485  					{
486                          SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT );
487  						SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&)
488                                          aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
489  
490  						if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
491  							aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
492  						else
493  							aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
494  						aNewAttr.Put( aItem );
495  					}
496  					break;
497  
498  					// Attribute fuer die TextObjectBar
499  					case SID_ATTR_CHAR_FONT:
500  					{
501  						if( pArgs )
502  						{
503                              if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTINFO, sal_True, &pPoolItem ) )
504  								aNewAttr.Put( *pPoolItem );
505  						}
506  						else
507  							mpViewShell->GetViewFrame()->GetDispatcher()->
508  							Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON );
509  					}
510  					break;
511  					case SID_ATTR_CHAR_FONTHEIGHT:
512  					{
513  						if( pArgs )
514  						{
515                              if( SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_FONTHEIGHT, sal_True, &pPoolItem ) )
516  								aNewAttr.Put( *pPoolItem );
517  						}
518  						else
519  							mpViewShell->GetViewFrame()->GetDispatcher()->
520  							Execute( SID_CHAR_DLG, SFX_CALLMODE_ASYNCHRON );
521  					}
522  					break;
523  					case SID_ATTR_CHAR_COLOR:
524  					{
525                          if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( EE_CHAR_COLOR, sal_True, &pPoolItem ) )
526  							aNewAttr.Put( *pPoolItem );
527  					}
528  					break;
529  /* #i35937#
530  					case FN_NUM_BULLET_ON:
531  					{
532  						if (aEditAttr.GetItemState(EE_PARA_BULLETSTATE) == SFX_ITEM_ON)
533  						{
534  							SfxUInt16Item aBulletState((const SfxUInt16Item&) aEditAttr.Get(EE_PARA_BULLETSTATE));
535  
536  							if (aBulletState.GetValue() != 0)
537  							{
538  								// Ausschalten
539  								aNewAttr.Put(SfxUInt16Item(EE_PARA_BULLETSTATE, 0));
540  							}
541  							else
542  							{
543  								// Einschalten
544  								aNewAttr.Put(SfxUInt16Item(EE_PARA_BULLETSTATE, 1));
545  							}
546  						}
547  						else
548  						{
549  							// Einschalten
550  							aNewAttr.Put(SfxUInt16Item(EE_PARA_BULLETSTATE, 1));
551  						}
552  					}
553  					break;
554  */
555  				}
556  
557  				rReq.Done( aNewAttr );
558  				pArgs = rReq.GetArgs();
559  			}
560  			else if ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ||
561  					  nSlot == SID_ATTR_PARA_RIGHT_TO_LEFT )
562  			{
563  				sal_Bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
564  
565  				sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
566                  if( SFX_ITEM_ON == aEditAttr.GetItemState(EE_PARA_JUST, sal_True, &pPoolItem ) )
567  					nAdjust = ( (SvxAdjustItem*)pPoolItem)->GetEnumValue();
568  
569  				if( bLeftToRight )
570  				{
571  					aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
572  					if( nAdjust == SVX_ADJUST_RIGHT )
573                          aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
574  				}
575  				else
576  				{
577  					aNewAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
578  					if( nAdjust == SVX_ADJUST_LEFT )
579                          aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
580  				}
581  
582  				rReq.Done( aNewAttr );
583  				pArgs = rReq.GetArgs();
584  
585  				Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT );
586  			}
587  			else if ( nSlot == SID_ATTR_CHAR_FONT       ||
588                  	  nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
589                  	  nSlot == SID_ATTR_CHAR_POSTURE    ||
590                  	  nSlot == SID_ATTR_CHAR_WEIGHT )
591              {
592  				// #i78017 establish the same behaviour as in Writer
593  				sal_uInt16 nScriptType = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
594  				if (nSlot == SID_ATTR_CHAR_FONT)
595  					nScriptType = mpView->GetScriptType();
596  
597  				SfxItemPool& rPool = mpView->GetDoc()->GetPool();
598                  SvxScriptSetItem aSvxScriptSetItem( nSlot, rPool );
599                  aSvxScriptSetItem.PutItemForScriptType( nScriptType, pArgs->Get( rPool.GetWhich( nSlot ) ) );
600  				aNewAttr.Put( aSvxScriptSetItem.GetItemSet() );
601  				rReq.Done( aNewAttr );
602  				pArgs = rReq.GetArgs();
603  			}
604  			else if (nSlot == SID_ATTR_PARA_ADJUST_LEFT ||
605  				nSlot == SID_ATTR_PARA_ADJUST_CENTER ||
606  				nSlot == SID_ATTR_PARA_ADJUST_RIGHT ||
607  				nSlot == SID_ATTR_PARA_ADJUST_BLOCK)
608  			{
609  				switch( nSlot )
610  				{
611  				case SID_ATTR_PARA_ADJUST_LEFT:
612  					{
613  						aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
614  					}
615  					break;
616  				case SID_ATTR_PARA_ADJUST_CENTER:
617  					{
618  						aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
619  					}
620  					break;
621  				case SID_ATTR_PARA_ADJUST_RIGHT:
622  					{
623  						aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
624  					}
625  					break;
626  				case SID_ATTR_PARA_ADJUST_BLOCK:
627  					{
628  						aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
629  					}
630  					break;
631  				}
632  				rReq.Done( aNewAttr );
633  				pArgs = rReq.GetArgs();
634  			}
635  			else if(nSlot == SID_ATTR_CHAR_KERNING)
636  			{
637  				aNewAttr.Put(pArgs->Get(pArgs->GetPool()->GetWhich(nSlot)));
638  				rReq.Done( aNewAttr );
639  				pArgs = rReq.GetArgs();
640  			}
641  			else if(nSlot ==  SID_SET_SUPER_SCRIPT )
642  			{
643  				SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
644  				SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
645  								aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
646  
647  				if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
648  					aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
649  				else
650  					aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
651  				aNewAttr.Put( aItem );
652  				rReq.Done( aNewAttr );
653  				pArgs = rReq.GetArgs();
654  			}
655  			else if( nSlot ==  SID_SET_SUB_SCRIPT )
656  			{
657  				SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
658  				SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
659  								aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
660  
661  				if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
662  					aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
663  				else
664  					aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
665  				aNewAttr.Put( aItem );
666  				rReq.Done( aNewAttr );
667  				pArgs = rReq.GetArgs();
668  			}
669  
670  			mpView->SetAttributes(*pArgs);
671  
672  			// Aus Performance- und Erweiterungsgruenden wird
673  			// jetzt die komplette Shell invalidiert
674  			Invalidate();
675  
676  			// Um die Preview (im Gliederungsmodus) zu aktualisieren muss
677  			// der Slot invalidiert werden:
678  			mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_PREVIEW_STATE, sal_True, sal_False );
679  		}
680  		break;
681  	}
682  
683  	Invalidate( SID_OUTLINE_LEFT );
684  	Invalidate( SID_OUTLINE_RIGHT );
685  	Invalidate( SID_OUTLINE_UP );
686  	Invalidate( SID_OUTLINE_DOWN );
687  }
688  
689  } // end of namespace sd
690