LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/drawfunc - drtxtob.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 7 520 1.3 %
Date: 2012-12-27 Functions: 5 25 20.0 %
Legend: Lines: hit not hit

          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 <com/sun/star/linguistic2/XThesaurus.hpp>
      21             : #include <com/sun/star/lang/Locale.hpp>
      22             : #include <comphelper/string.hxx>
      23             : #include "scitems.hxx"
      24             : 
      25             : #include <editeng/adjitem.hxx>
      26             : #include <svx/clipfmtitem.hxx>
      27             : #include <editeng/cntritem.hxx>
      28             : #include <editeng/crsditem.hxx>
      29             : #include <editeng/editeng.hxx>
      30             : #include <editeng/escpitem.hxx>
      31             : #include <editeng/flditem.hxx>
      32             : #include <editeng/fontitem.hxx>
      33             : #include <editeng/frmdiritem.hxx>
      34             : #include <svx/hlnkitem.hxx>
      35             : #include <editeng/lspcitem.hxx>
      36             : #include <svx/svdoutl.hxx>
      37             : #include <editeng/unolingu.hxx>
      38             : #include <editeng/outlobj.hxx>
      39             : #include <editeng/postitem.hxx>
      40             : #include <editeng/scripttypeitem.hxx>
      41             : #include <editeng/shdditem.hxx>
      42             : #include <svl/srchitem.hxx>
      43             : #include <editeng/udlnitem.hxx>
      44             : #include <editeng/wghtitem.hxx>
      45             : #include <editeng/writingmodeitem.hxx>
      46             : #include <sfx2/app.hxx>
      47             : #include <sfx2/dispatch.hxx>
      48             : #include <sfx2/objface.hxx>
      49             : #include <sfx2/objsh.hxx>
      50             : #include <sfx2/request.hxx>
      51             : #include <sfx2/viewfrm.hxx>
      52             : #include <svtools/cliplistener.hxx>
      53             : #include <svtools/transfer.hxx>
      54             : #include <svl/whiter.hxx>
      55             : #include <svl/languageoptions.hxx>
      56             : #include <vcl/msgbox.hxx>
      57             : 
      58             : #include <svx/svxdlg.hxx>
      59             : #include <svx/dialogs.hrc>
      60             : 
      61             : #include "sc.hrc"
      62             : #include "globstr.hrc"
      63             : #include "scmod.hxx"
      64             : #include "drtxtob.hxx"
      65             : #include "fudraw.hxx"
      66             : #include "viewdata.hxx"
      67             : #include "document.hxx"
      68             : #include "drawview.hxx"
      69             : #include "viewutil.hxx"
      70             : #include "scresid.hxx"
      71             : #include "tabvwsh.hxx"
      72             : 
      73             : #define ScDrawTextObjectBar
      74             : #include "scslots.hxx"
      75             : 
      76             : 
      77             : using namespace ::com::sun::star;
      78             : 
      79             : 
      80          30 : SFX_IMPL_INTERFACE( ScDrawTextObjectBar, SfxShell, ScResId(SCSTR_DRAWTEXTSHELL) )
      81             : {
      82          10 :     SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_OBJECT|SFX_VISIBILITY_STANDARD|SFX_VISIBILITY_SERVER,
      83           5 :                                 ScResId(RID_TEXT_TOOLBOX) );
      84           5 :     SFX_POPUPMENU_REGISTRATION( ScResId(RID_POPUP_DRAWTEXT) );
      85           5 :     SFX_CHILDWINDOW_REGISTRATION( ScGetFontWorkId() );
      86           5 : }
      87             : 
      88           0 : TYPEINIT1( ScDrawTextObjectBar, SfxShell );
      89             : 
      90             : 
      91             : 
      92             : // abschalten der nicht erwuenschten Acceleratoren:
      93             : 
      94           0 : void ScDrawTextObjectBar::StateDisableItems( SfxItemSet &rSet )
      95             : {
      96           0 :     SfxWhichIter aIter(rSet);
      97           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
      98             : 
      99           0 :     while (nWhich)
     100             :     {
     101           0 :         rSet.DisableItem( nWhich );
     102           0 :         nWhich = aIter.NextWhich();
     103           0 :     }
     104           0 : }
     105             : 
     106           0 : ScDrawTextObjectBar::ScDrawTextObjectBar(ScViewData* pData) :
     107           0 :     SfxShell(pData->GetViewShell()),
     108             :     pViewData(pData),
     109             :     pClipEvtLstnr(NULL),
     110           0 :     bPastePossible(false)
     111             : {
     112           0 :     SetPool( pViewData->GetScDrawView()->GetDefaultAttr().GetPool() );
     113             : 
     114             :     //  UndoManager wird beim Umschalten in den Edit-Modus umgesetzt...
     115           0 :     ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager();
     116           0 :     SetUndoManager( pMgr );
     117           0 :     if ( !pViewData->GetDocument()->IsUndoEnabled() )
     118             :     {
     119           0 :         pMgr->SetMaxUndoActionCount( 0 );
     120             :     }
     121             : 
     122           0 :     SetHelpId( HID_SCSHELL_DRTXTOB );
     123           0 :     SetName(rtl::OUString("DrawText"));
     124           0 : }
     125             : 
     126           0 : ScDrawTextObjectBar::~ScDrawTextObjectBar()
     127             : {
     128           0 :     if ( pClipEvtLstnr )
     129             :     {
     130           0 :         pClipEvtLstnr->AddRemoveListener( pViewData->GetActiveWin(), false );
     131             : 
     132             :         //  The listener may just now be waiting for the SolarMutex and call the link
     133             :         //  afterwards, in spite of RemoveListener. So the link has to be reset, too.
     134           0 :         pClipEvtLstnr->ClearCallbackLink();
     135             : 
     136           0 :         pClipEvtLstnr->release();
     137             :     }
     138           0 : }
     139             : 
     140             : //========================================================================
     141             : //
     142             : //          Funktionen
     143             : //
     144             : //========================================================================
     145             : 
     146           0 : void ScDrawTextObjectBar::Execute( SfxRequest &rReq )
     147             : {
     148           0 :     ScDrawView* pView = pViewData->GetScDrawView();
     149           0 :     OutlinerView* pOutView = pView->GetTextEditOutlinerView();
     150           0 :     Outliner* pOutliner = pView->GetTextEditOutliner();
     151             : 
     152           0 :     if (!pOutView || !pOutliner)
     153             :     {
     154           0 :         ExecuteGlobal( rReq );              // auf ganze Objekte
     155           0 :         return;
     156             :     }
     157             : 
     158           0 :     const SfxItemSet* pReqArgs = rReq.GetArgs();
     159           0 :     sal_uInt16 nSlot = rReq.GetSlot();
     160           0 :     switch ( nSlot )
     161             :     {
     162             :         case SID_COPY:
     163           0 :             pOutView->Copy();
     164           0 :             break;
     165             : 
     166             :         case SID_CUT:
     167           0 :             pOutView->Cut();
     168           0 :             break;
     169             : 
     170             :         case SID_PASTE:
     171           0 :             pOutView->PasteSpecial();
     172           0 :             break;
     173             : 
     174             :         case SID_CLIPBOARD_FORMAT_ITEMS:
     175             :             {
     176           0 :                 sal_uLong nFormat = 0;
     177             :                 const SfxPoolItem* pItem;
     178           0 :                 if ( pReqArgs &&
     179           0 :                      pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET &&
     180           0 :                      pItem->ISA(SfxUInt32Item) )
     181             :                 {
     182           0 :                     nFormat = ((const SfxUInt32Item*)pItem)->GetValue();
     183             :                 }
     184             : 
     185           0 :                 if ( nFormat )
     186             :                 {
     187           0 :                     if (nFormat == SOT_FORMAT_STRING)
     188           0 :                         pOutView->Paste();
     189             :                     else
     190           0 :                         pOutView->PasteSpecial();
     191             :                 }
     192             :             }
     193           0 :             break;
     194             : 
     195             :         case SID_PASTE_SPECIAL:
     196           0 :             ExecutePasteContents( rReq );
     197           0 :             break;
     198             : 
     199             :         case SID_SELECTALL:
     200             :             {
     201           0 :                 sal_uLong nCount = pOutliner->GetParagraphCount();
     202           0 :                 ESelection aSel( 0,0,(sal_uInt16)nCount,0 );
     203           0 :                 pOutView->SetSelection( aSel );
     204             :             }
     205           0 :             break;
     206             : 
     207             :         case SID_CHARMAP:
     208             :             {
     209             :                 const SvxFontItem& rItem = (const SvxFontItem&)
     210           0 :                             pOutView->GetAttribs().Get(EE_CHAR_FONTINFO);
     211             : 
     212           0 :                 String aString;
     213           0 :                 SvxFontItem aNewItem( EE_CHAR_FONTINFO );
     214             : 
     215           0 :                 const SfxItemSet *pArgs = rReq.GetArgs();
     216           0 :                 const SfxPoolItem* pItem = 0;
     217           0 :                 if( pArgs )
     218           0 :                     pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), false, &pItem);
     219             : 
     220           0 :                 if ( pItem )
     221             :                 {
     222           0 :                     aString = ((const SfxStringItem*)pItem)->GetValue();
     223           0 :                     const SfxPoolItem* pFtItem = NULL;
     224           0 :                     pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), false, &pFtItem);
     225           0 :                     const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
     226           0 :                     if ( pFontItem )
     227             :                     {
     228           0 :                         String aFontName(pFontItem->GetValue());
     229           0 :                         Font aFont(aFontName, Size(1,1)); // Size nur wg. CTOR
     230           0 :                         aNewItem = SvxFontItem( aFont.GetFamily(), aFont.GetName(),
     231           0 :                                     aFont.GetStyleName(), aFont.GetPitch(),
     232           0 :                                     aFont.GetCharSet(), ATTR_FONT  );
     233             :                     }
     234             :                     else
     235           0 :                         aNewItem = rItem;
     236             :                 }
     237             :                 else
     238           0 :                     ScViewUtil::ExecuteCharMap( rItem, *pViewData->GetViewShell()->GetViewFrame(), aNewItem, aString );
     239             : 
     240           0 :                 if ( aString.Len() )
     241             :                 {
     242           0 :                     SfxItemSet aSet( pOutliner->GetEmptyItemSet() );
     243           0 :                     aSet.Put( aNewItem );
     244             :                     //  SetAttribs an der View selektiert ein Wort, wenn nichts selektiert ist
     245           0 :                     pOutView->GetOutliner()->QuickSetAttribs( aSet, pOutView->GetSelection() );
     246           0 :                     pOutView->InsertText(aString);
     247             :                 }
     248             : 
     249           0 :                 Invalidate( SID_ATTR_CHAR_FONT );
     250             :             }
     251           0 :             break;
     252             : 
     253             :         case SID_HYPERLINK_SETLINK:
     254           0 :             if( pReqArgs )
     255             :             {
     256             :                 const SfxPoolItem* pItem;
     257           0 :                 if ( pReqArgs->GetItemState( SID_HYPERLINK_SETLINK, sal_True, &pItem ) == SFX_ITEM_SET )
     258             :                 {
     259           0 :                     const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem;
     260           0 :                     const String& rName     = pHyper->GetName();
     261           0 :                     const String& rURL      = pHyper->GetURL();
     262           0 :                     const String& rTarget   = pHyper->GetTargetFrame();
     263           0 :                     SvxLinkInsertMode eMode = pHyper->GetInsertMode();
     264             : 
     265           0 :                     sal_Bool bDone = false;
     266           0 :                     if ( pOutView && ( eMode == HLINK_DEFAULT || eMode == HLINK_FIELD ) )
     267             :                     {
     268           0 :                         const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
     269           0 :                         if (pFieldItem)
     270             :                         {
     271           0 :                             const SvxFieldData* pField = pFieldItem->GetField();
     272           0 :                             if ( pField && pField->ISA(SvxURLField) )
     273             :                             {
     274             :                                 //  altes Feld selektieren
     275             : 
     276           0 :                                 ESelection aSel = pOutView->GetSelection();
     277           0 :                                 aSel.Adjust();
     278           0 :                                 aSel.nEndPara = aSel.nStartPara;
     279           0 :                                 aSel.nEndPos = aSel.nStartPos + 1;
     280           0 :                                 pOutView->SetSelection( aSel );
     281             :                             }
     282             :                         }
     283             : 
     284             :                         //  neues Feld einfuegen
     285             : 
     286           0 :                         SvxURLField aURLField( rURL, rName, SVXURLFORMAT_REPR );
     287           0 :                         aURLField.SetTargetFrame( rTarget );
     288           0 :                         SvxFieldItem aURLItem( aURLField, EE_FEATURE_FIELD );
     289           0 :                         pOutView->InsertField( aURLItem );
     290             : 
     291             :                         //  select new field
     292             : 
     293           0 :                         ESelection aSel = pOutView->GetSelection();
     294           0 :                         if ( aSel.nStartPos == aSel.nEndPos && aSel.nStartPos > 0 )
     295             :                         {
     296             :                             //  Cursor is behind the inserted field -> extend selection to the left
     297             : 
     298           0 :                             --aSel.nStartPos;
     299           0 :                             pOutView->SetSelection( aSel );
     300             :                         }
     301             : 
     302           0 :                         bDone = sal_True;
     303             :                     }
     304             : 
     305           0 :                     if (!bDone)
     306           0 :                         ExecuteGlobal( rReq );      // normal an der View
     307             : 
     308             :                     //  InsertURL an der ViewShell schaltet bei "Text" die DrawShell ab !!!
     309             :                 }
     310             :             }
     311           0 :             break;
     312             : 
     313             :         case SID_OPEN_HYPERLINK:
     314             :             {
     315           0 :                 if ( pOutView )
     316             :                 {
     317           0 :                     const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
     318           0 :                     if ( pFieldItem )
     319             :                     {
     320           0 :                         const SvxFieldData* pField = pFieldItem->GetField();
     321           0 :                         if( pField && pField->ISA( SvxURLField ) )
     322             :                         {
     323           0 :                             const SvxURLField* pURLField = static_cast< const SvxURLField* >( pField );
     324           0 :                             ScGlobal::OpenURL( pURLField->GetURL(), pURLField->GetTargetFrame() );
     325             :                         }
     326             :                     }
     327             :                 }
     328             :             }
     329           0 :             break;
     330             : 
     331             :         case SID_ENABLE_HYPHENATION:
     332             :         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
     333             :         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
     334           0 :             pView->ScEndTextEdit(); // end text edit before switching direction
     335           0 :             ExecuteGlobal( rReq );
     336             :             // restore consistent state between shells and functions:
     337           0 :             pViewData->GetDispatcher().Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD);
     338           0 :             break;
     339             : 
     340             :         case SID_THES:
     341             :             {
     342           0 :                 String aReplaceText;
     343           0 :                 SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, false );
     344           0 :                 if (pItem2)
     345           0 :                     aReplaceText = pItem2->GetValue();
     346           0 :                 if (aReplaceText.Len() > 0)
     347           0 :                     ReplaceTextWithSynonym( pOutView->GetEditView(), aReplaceText );
     348             :             }
     349           0 :             break;
     350             : 
     351             :         case SID_THESAURUS:
     352             :             {
     353           0 :                 pOutView->StartThesaurus();
     354             :             }
     355           0 :             break;
     356             : 
     357             :     }
     358             : }
     359             : 
     360           0 : void ScDrawTextObjectBar::GetState( SfxItemSet& rSet )
     361             : {
     362           0 :     SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
     363           0 :     sal_Bool bHasFontWork = pViewFrm->HasChildWindow(SID_FONTWORK);
     364           0 :     sal_Bool bDisableFontWork = false;
     365             : 
     366           0 :     if (IsNoteEdit())
     367             :     {
     368             :         // #i21255# notes now support rich text formatting (#i74140# but not fontwork)
     369           0 :         bDisableFontWork = sal_True;
     370             :     }
     371             : 
     372           0 :     if ( bDisableFontWork )
     373           0 :         rSet.DisableItem( SID_FONTWORK  );
     374             :     else
     375           0 :         rSet.Put(SfxBoolItem(SID_FONTWORK, bHasFontWork));
     376             : 
     377           0 :     if ( rSet.GetItemState( SID_HYPERLINK_GETLINK ) != SFX_ITEM_UNKNOWN )
     378             :     {
     379           0 :         SvxHyperlinkItem aHLinkItem;
     380           0 :         SdrView* pView = pViewData->GetScDrawView();
     381           0 :         OutlinerView* pOutView = pView->GetTextEditOutlinerView();
     382           0 :         if ( pOutView )
     383             :         {
     384           0 :             sal_Bool bField = false;
     385           0 :             const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
     386           0 :             if (pFieldItem)
     387             :             {
     388           0 :                 const SvxFieldData* pField = pFieldItem->GetField();
     389           0 :                 if ( pField && pField->ISA(SvxURLField) )
     390             :                 {
     391           0 :                     const SvxURLField* pURLField = (const SvxURLField*) pField;
     392           0 :                     aHLinkItem.SetName( pURLField->GetRepresentation() );
     393           0 :                     aHLinkItem.SetURL( pURLField->GetURL() );
     394           0 :                     aHLinkItem.SetTargetFrame( pURLField->GetTargetFrame() );
     395           0 :                     bField = sal_True;
     396             :                 }
     397             :             }
     398           0 :             if (!bField)
     399             :             {
     400             :                 // use selected text as name for urls
     401           0 :                 String sReturn = pOutView->GetSelected();
     402           0 :                 sReturn.Erase(255);
     403           0 :                 aHLinkItem.SetName(comphelper::string::stripEnd(sReturn, ' '));
     404             :             }
     405             :         }
     406           0 :         rSet.Put(aHLinkItem);
     407             :     }
     408             : 
     409           0 :     if ( rSet.GetItemState( SID_OPEN_HYPERLINK ) != SFX_ITEM_UNKNOWN )
     410             :     {
     411           0 :         SdrView* pView = pViewData->GetScDrawView();
     412           0 :         OutlinerView* pOutView = pView->GetTextEditOutlinerView();
     413           0 :         bool bEnable = false;
     414           0 :         if ( pOutView )
     415             :         {
     416           0 :             const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
     417           0 :             if ( pFieldItem )
     418             :             {
     419           0 :                 const SvxFieldData* pField = pFieldItem->GetField();
     420           0 :                 bEnable = pField && pField->ISA( SvxURLField );
     421             :             }
     422             :         }
     423           0 :         if( !bEnable )
     424           0 :             rSet.DisableItem( SID_OPEN_HYPERLINK );
     425             :     }
     426             : 
     427           0 :     if( rSet.GetItemState( SID_TRANSLITERATE_HALFWIDTH ) != SFX_ITEM_UNKNOWN )
     428           0 :         ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HALFWIDTH );
     429           0 :     if( rSet.GetItemState( SID_TRANSLITERATE_FULLWIDTH ) != SFX_ITEM_UNKNOWN )
     430           0 :         ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_FULLWIDTH );
     431           0 :     if( rSet.GetItemState( SID_TRANSLITERATE_HIRAGANA ) != SFX_ITEM_UNKNOWN )
     432           0 :         ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_HIRAGANA );
     433           0 :     if( rSet.GetItemState( SID_TRANSLITERATE_KATAGANA ) != SFX_ITEM_UNKNOWN )
     434           0 :         ScViewUtil::HideDisabledSlot( rSet, pViewFrm->GetBindings(), SID_TRANSLITERATE_KATAGANA );
     435             : 
     436           0 :     if ( rSet.GetItemState( SID_ENABLE_HYPHENATION ) != SFX_ITEM_UNKNOWN )
     437             :     {
     438           0 :         SdrView* pView = pViewData->GetScDrawView();
     439           0 :         SfxItemSet aAttrs( pView->GetModel()->GetItemPool() );
     440           0 :         pView->GetAttributes( aAttrs );
     441           0 :         if( aAttrs.GetItemState( EE_PARA_HYPHENATE ) >= SFX_ITEM_AVAILABLE )
     442             :         {
     443           0 :             sal_Bool bValue = ( (const SfxBoolItem&) aAttrs.Get( EE_PARA_HYPHENATE ) ).GetValue();
     444           0 :             rSet.Put( SfxBoolItem( SID_ENABLE_HYPHENATION, bValue ) );
     445           0 :         }
     446             :     }
     447             : 
     448           0 :     if ( rSet.GetItemState( SID_THES ) != SFX_ITEM_UNKNOWN  ||
     449           0 :          rSet.GetItemState( SID_THESAURUS ) != SFX_ITEM_UNKNOWN )
     450             :     {
     451           0 :         SdrView * pView = pViewData->GetScDrawView();
     452           0 :         OutlinerView* pOutView = pView->GetTextEditOutlinerView();
     453             : 
     454           0 :         String          aStatusVal;
     455           0 :         LanguageType    nLang = LANGUAGE_NONE;
     456           0 :         bool bIsLookUpWord = false;
     457           0 :         if ( pOutView )
     458             :         {
     459           0 :             EditView& rEditView = pOutView->GetEditView();
     460           0 :             bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, rEditView );
     461             :         }
     462           0 :         rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
     463             : 
     464             :         // disable thesaurus main menu and context menu entry if there is nothing to look up
     465           0 :         sal_Bool bCanDoThesaurus = ScModule::HasThesaurusLanguage( nLang );
     466           0 :         if (!bIsLookUpWord || !bCanDoThesaurus)
     467           0 :             rSet.DisableItem( SID_THES );
     468           0 :         if (!bCanDoThesaurus)
     469           0 :             rSet.DisableItem( SID_THESAURUS );
     470             :     }
     471           0 : }
     472             : 
     473           0 : IMPL_LINK( ScDrawTextObjectBar, ClipboardChanged, TransferableDataHelper*, pDataHelper )
     474             : {
     475           0 :     if ( pDataHelper )
     476             :     {
     477           0 :         bPastePossible = ( pDataHelper->HasFormat( SOT_FORMAT_STRING ) || pDataHelper->HasFormat( SOT_FORMAT_RTF ) );
     478             : 
     479           0 :         SfxBindings& rBindings = pViewData->GetBindings();
     480           0 :         rBindings.Invalidate( SID_PASTE );
     481           0 :         rBindings.Invalidate( SID_PASTE_SPECIAL );
     482           0 :         rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
     483             :     }
     484           0 :     return 0;
     485             : }
     486             : 
     487           0 : void ScDrawTextObjectBar::GetClipState( SfxItemSet& rSet )
     488             : {
     489           0 :     SdrView* pView = pViewData->GetScDrawView();
     490           0 :     if ( !pView->GetTextEditOutlinerView() )
     491             :     {
     492           0 :         GetGlobalClipState( rSet );
     493           0 :         return;
     494             :     }
     495             : 
     496           0 :     if ( !pClipEvtLstnr )
     497             :     {
     498             :         // create listener
     499           0 :         pClipEvtLstnr = new TransferableClipboardListener( LINK( this, ScDrawTextObjectBar, ClipboardChanged ) );
     500           0 :         pClipEvtLstnr->acquire();
     501           0 :         Window* pWin = pViewData->GetActiveWin();
     502           0 :         pClipEvtLstnr->AddRemoveListener( pWin, sal_True );
     503             : 
     504             :         // get initial state
     505           0 :         TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) );
     506           0 :         bPastePossible = ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) || aDataHelper.HasFormat( SOT_FORMAT_RTF ) );
     507             :     }
     508             : 
     509           0 :     SfxWhichIter aIter( rSet );
     510           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
     511           0 :     while (nWhich)
     512             :     {
     513           0 :         switch (nWhich)
     514             :         {
     515             :             case SID_PASTE:
     516             :             case SID_PASTE_SPECIAL:
     517           0 :                 if( !bPastePossible )
     518           0 :                     rSet.DisableItem( nWhich );
     519           0 :                 break;
     520             :             case SID_CLIPBOARD_FORMAT_ITEMS:
     521           0 :                 if ( bPastePossible )
     522             :                 {
     523           0 :                     SvxClipboardFmtItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
     524             :                     TransferableDataHelper aDataHelper(
     525           0 :                             TransferableDataHelper::CreateFromSystemClipboard( pViewData->GetActiveWin() ) );
     526             : 
     527           0 :                     if ( aDataHelper.HasFormat( SOT_FORMAT_STRING ) )
     528           0 :                         aFormats.AddClipbrdFormat( SOT_FORMAT_STRING );
     529           0 :                     if ( aDataHelper.HasFormat( SOT_FORMAT_RTF ) )
     530           0 :                         aFormats.AddClipbrdFormat( SOT_FORMAT_RTF );
     531             : 
     532           0 :                     rSet.Put( aFormats );
     533             :                 }
     534             :                 else
     535           0 :                     rSet.DisableItem( nWhich );
     536           0 :                 break;
     537             :         }
     538           0 :         nWhich = aIter.NextWhich();
     539           0 :     }
     540             : }
     541             : 
     542             : //========================================================================
     543             : //
     544             : //          Attribute
     545             : //
     546             : //========================================================================
     547             : 
     548           0 : void ScDrawTextObjectBar::ExecuteToggle( SfxRequest &rReq )
     549             : {
     550             :     //  Unterstreichung
     551             : 
     552           0 :     SdrView* pView = pViewData->GetScDrawView();
     553             : 
     554           0 :     sal_uInt16 nSlot = rReq.GetSlot();
     555             : 
     556           0 :     SfxItemSet aSet( pView->GetDefaultAttr() );
     557             : 
     558           0 :     SfxItemSet aViewAttr(pView->GetModel()->GetItemPool());
     559           0 :     pView->GetAttributes(aViewAttr);
     560             : 
     561             :     //  Unterstreichung
     562             :     FontUnderline eOld = ((const SvxUnderlineItem&) aViewAttr.
     563           0 :                                         Get(EE_CHAR_UNDERLINE)).GetLineStyle();
     564           0 :     FontUnderline eNew = eOld;
     565           0 :     switch (nSlot)
     566             :     {
     567             :         case SID_ULINE_VAL_NONE:
     568           0 :             eNew = UNDERLINE_NONE;
     569           0 :             break;
     570             :         case SID_ULINE_VAL_SINGLE:
     571           0 :             eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
     572           0 :             break;
     573             :         case SID_ULINE_VAL_DOUBLE:
     574           0 :             eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE;
     575           0 :             break;
     576             :         case SID_ULINE_VAL_DOTTED:
     577           0 :             eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED;
     578           0 :             break;
     579             :         default:
     580           0 :             break;
     581             :     }
     582           0 :     aSet.Put( SvxUnderlineItem( eNew, EE_CHAR_UNDERLINE ) );
     583             : 
     584           0 :     pView->SetAttributes( aSet );
     585           0 :     rReq.Done();
     586           0 :     pViewData->GetScDrawView()->InvalidateDrawTextAttrs();
     587           0 : }
     588             : 
     589           0 : static void lcl_RemoveFields( OutlinerView& rOutView )
     590             : {
     591             :     //! Outliner should have RemoveFields with a selection
     592             : 
     593           0 :     Outliner* pOutliner = rOutView.GetOutliner();
     594           0 :     if (!pOutliner) return;
     595             : 
     596           0 :     ESelection aOldSel = rOutView.GetSelection();
     597           0 :     ESelection aSel = aOldSel;
     598           0 :     aSel.Adjust();
     599           0 :     xub_StrLen nNewEnd = aSel.nEndPos;
     600             : 
     601           0 :     sal_Bool bUpdate = pOutliner->GetUpdateMode();
     602           0 :     sal_Bool bChanged = false;
     603             : 
     604             :     //! GetPortions and GetAttribs should be const!
     605           0 :     EditEngine& rEditEng = (EditEngine&)pOutliner->GetEditEngine();
     606             : 
     607           0 :     sal_uLong nParCount = pOutliner->GetParagraphCount();
     608           0 :     for (sal_uLong nPar=0; nPar<nParCount; nPar++)
     609           0 :         if ( nPar >= aSel.nStartPara && nPar <= aSel.nEndPara )
     610             :         {
     611           0 :             std::vector<sal_uInt16> aPortions;
     612           0 :             rEditEng.GetPortions( (sal_uInt16)nPar, aPortions );
     613             :             //! GetPortions should use xub_StrLen instead of USHORT
     614             : 
     615           0 :             for ( size_t nPos = aPortions.size(); nPos; )
     616             :             {
     617           0 :                 --nPos;
     618           0 :                 sal_uInt16 nEnd = aPortions[ nPos ];
     619           0 :                 sal_uInt16 nStart = nPos ? aPortions[ nPos - 1 ] : 0;
     620             :                 // fields are single characters
     621           0 :                 if ( nEnd == nStart+1 &&
     622             :                      ( nPar > aSel.nStartPara || nStart >= aSel.nStartPos ) &&
     623             :                      ( nPar < aSel.nEndPara   || nEnd   <= aSel.nEndPos ) )
     624             :                 {
     625           0 :                     ESelection aFieldSel( (sal_uInt16)nPar, nStart, (sal_uInt16)nPar, nEnd );
     626           0 :                     SfxItemSet aSet = rEditEng.GetAttribs( aFieldSel );
     627           0 :                     if ( aSet.GetItemState( EE_FEATURE_FIELD ) == SFX_ITEM_ON )
     628             :                     {
     629           0 :                         if (!bChanged)
     630             :                         {
     631           0 :                             if (bUpdate)
     632           0 :                                 pOutliner->SetUpdateMode( false );
     633           0 :                             String aName = ScGlobal::GetRscString( STR_UNDO_DELETECONTENTS );
     634           0 :                             pOutliner->GetUndoManager().EnterListAction( aName, aName );
     635           0 :                             bChanged = sal_True;
     636             :                         }
     637             : 
     638           0 :                         String aFieldText = rEditEng.GetText( aFieldSel );
     639           0 :                         pOutliner->QuickInsertText( aFieldText, aFieldSel );
     640           0 :                         if ( nPar == aSel.nEndPara )
     641             :                         {
     642           0 :                             nNewEnd = sal::static_int_cast<xub_StrLen>( nNewEnd + aFieldText.Len() );
     643           0 :                             --nNewEnd;
     644           0 :                         }
     645           0 :                     }
     646             :                 }
     647           0 :             }
     648             :         }
     649             : 
     650           0 :     if (bUpdate && bChanged)
     651             :     {
     652           0 :         pOutliner->GetUndoManager().LeaveListAction();
     653           0 :         pOutliner->SetUpdateMode( sal_True );
     654             :     }
     655             : 
     656           0 :     if ( aOldSel.IsEqual( aSel ) )          // aSel is adjusted
     657           0 :         aOldSel.nEndPos = nNewEnd;
     658             :     else
     659           0 :         aOldSel.nStartPos = nNewEnd;        // if aOldSel is backwards
     660           0 :     rOutView.SetSelection( aOldSel );
     661             : }
     662             : 
     663           0 : void ScDrawTextObjectBar::ExecuteAttr( SfxRequest &rReq )
     664             : {
     665           0 :     SdrView*            pView = pViewData->GetScDrawView();
     666           0 :     const SfxItemSet*   pArgs = rReq.GetArgs();
     667           0 :     sal_uInt16              nSlot = rReq.GetSlot();
     668             : 
     669           0 :     sal_Bool bArgsInReq = ( pArgs != NULL );
     670           0 :     if ( !bArgsInReq )
     671             :     {
     672           0 :         SfxItemSet aEditAttr(pView->GetModel()->GetItemPool());
     673           0 :         pView->GetAttributes(aEditAttr);
     674           0 :         SfxItemSet  aNewAttr( *aEditAttr.GetPool(), aEditAttr.GetRanges() );
     675           0 :         sal_Bool        bDone = sal_True;
     676             : 
     677           0 :         switch ( nSlot )
     678             :         {
     679             :             case SID_TEXT_STANDARD: // Harte Textattributierung loeschen
     680             :             {
     681           0 :                 OutlinerView* pOutView = pView->IsTextEdit() ?
     682           0 :                                 pView->GetTextEditOutlinerView() : NULL;
     683           0 :                 if ( pOutView )
     684           0 :                     pOutView->Paint( Rectangle() );
     685             : 
     686           0 :                 SfxItemSet aEmptyAttr( *aEditAttr.GetPool(), EE_ITEMS_START, EE_ITEMS_END );
     687           0 :                 pView->SetAttributes( aEmptyAttr, sal_True );
     688             : 
     689           0 :                 if ( pOutView )
     690             :                 {
     691           0 :                     lcl_RemoveFields( *pOutView );
     692           0 :                     pOutView->ShowCursor();
     693             :                 }
     694             : 
     695           0 :                 rReq.Done( aEmptyAttr );
     696           0 :                 pViewData->GetScDrawView()->InvalidateDrawTextAttrs();
     697           0 :                 bDone = false; // bereits hier passiert
     698             :             }
     699           0 :             break;
     700             : 
     701             :             case SID_CHAR_DLG:                      // Dialog-Button
     702             :             case SID_ATTR_CHAR_FONT:                // Controller nicht angezeigt
     703             :             case SID_ATTR_CHAR_FONTHEIGHT:
     704           0 :                 bDone = ExecuteCharDlg( aEditAttr, aNewAttr );
     705           0 :                 break;
     706             : 
     707             :             case SID_PARA_DLG:
     708           0 :                 bDone = ExecuteParaDlg( aEditAttr, aNewAttr );
     709           0 :                 break;
     710             : 
     711             :             case SID_ATTR_CHAR_WEIGHT:
     712           0 :                 aNewAttr.Put( (const SvxWeightItem&)aEditAttr.Get( EE_CHAR_WEIGHT ) );
     713           0 :                 break;
     714             : 
     715             :             case SID_ATTR_CHAR_POSTURE:
     716           0 :                 aNewAttr.Put( (const SvxPostureItem&)aEditAttr.Get( EE_CHAR_ITALIC ) );
     717           0 :                 break;
     718             : 
     719             :             case SID_ATTR_CHAR_UNDERLINE:
     720           0 :                 aNewAttr.Put( (const SvxUnderlineItem&)aEditAttr.Get( EE_CHAR_UNDERLINE ) );
     721           0 :                 break;
     722             : 
     723             :             case SID_ATTR_CHAR_OVERLINE:
     724           0 :                 aNewAttr.Put( (const SvxOverlineItem&)aEditAttr.Get( EE_CHAR_OVERLINE ) );
     725           0 :                 break;
     726             : 
     727             :             case SID_ATTR_CHAR_CONTOUR:
     728           0 :                 aNewAttr.Put( (const SvxContourItem&)aEditAttr.Get( EE_CHAR_OUTLINE ) );
     729           0 :                 break;
     730             : 
     731             :             case SID_ATTR_CHAR_SHADOWED:
     732           0 :                 aNewAttr.Put( (const SvxShadowedItem&)aEditAttr.Get( EE_CHAR_SHADOW ) );
     733           0 :                 break;
     734             : 
     735             :             case SID_ATTR_CHAR_STRIKEOUT:
     736           0 :                 aNewAttr.Put( (const SvxCrossedOutItem&)aEditAttr.Get( EE_CHAR_STRIKEOUT ) );
     737           0 :                 break;
     738             : 
     739             :             case SID_ALIGNLEFT:
     740             :             case SID_ALIGN_ANY_LEFT:
     741           0 :                 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
     742           0 :                 break;
     743             : 
     744             :             case SID_ALIGNCENTERHOR:
     745             :             case SID_ALIGN_ANY_HCENTER:
     746           0 :                 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST ) );
     747           0 :                 break;
     748             : 
     749             :             case SID_ALIGNRIGHT:
     750             :             case SID_ALIGN_ANY_RIGHT:
     751           0 :                 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
     752           0 :                 break;
     753             : 
     754             :             case SID_ALIGNBLOCK:
     755             :             case SID_ALIGN_ANY_JUSTIFIED:
     756           0 :                 aNewAttr.Put( SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST ) );
     757           0 :                 break;
     758             : 
     759             :             case SID_ATTR_PARA_LINESPACE_10:
     760             :                 {
     761           0 :                     SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_LINE, EE_PARA_SBL );
     762           0 :                     aItem.SetPropLineSpace( 100 );
     763           0 :                     aNewAttr.Put( aItem );
     764             :                 }
     765           0 :                 break;
     766             : 
     767             :             case SID_ATTR_PARA_LINESPACE_15:
     768             :                 {
     769           0 :                     SvxLineSpacingItem aItem( SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL );
     770           0 :                     aItem.SetPropLineSpace( 150 );
     771           0 :                     aNewAttr.Put( aItem );
     772             :                 }
     773           0 :                 break;
     774             : 
     775             :             case SID_ATTR_PARA_LINESPACE_20:
     776             :                 {
     777           0 :                     SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
     778           0 :                     aItem.SetPropLineSpace( 200 );
     779           0 :                     aNewAttr.Put( aItem );
     780             :                 }
     781           0 :                 break;
     782             : 
     783             :             case SID_SET_SUPER_SCRIPT:
     784             :                 {
     785           0 :                     SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
     786             :                     SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
     787           0 :                                     aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
     788             : 
     789           0 :                     if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
     790           0 :                         aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
     791             :                     else
     792           0 :                         aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
     793           0 :                     aNewAttr.Put( aItem );
     794             :                 }
     795           0 :                 break;
     796             :             case SID_SET_SUB_SCRIPT:
     797             :                 {
     798           0 :                     SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
     799             :                     SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
     800           0 :                                     aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
     801             : 
     802           0 :                     if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
     803           0 :                         aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
     804             :                     else
     805           0 :                         aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
     806           0 :                     aNewAttr.Put( aItem );
     807             :                 }
     808           0 :                 break;
     809             : 
     810             :             case SID_DRAWTEXT_ATTR_DLG:
     811             :                 {
     812           0 :                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     813           0 :                     SfxAbstractTabDialog *pDlg = pFact->CreateTextTabDialog( pViewData->GetDialogParent(), &aEditAttr, pView );
     814             : 
     815           0 :                     bDone = ( RET_OK == pDlg->Execute() );
     816             : 
     817           0 :                     if ( bDone )
     818           0 :                         aNewAttr.Put( *pDlg->GetOutputItemSet() );
     819             : 
     820           0 :                     delete pDlg;
     821             :                 }
     822           0 :                 break;
     823             :         }
     824             : 
     825           0 :         if ( bDone ) // wurden Attribute geaendert?
     826             :         {
     827           0 :             rReq.Done( aNewAttr );
     828           0 :             pArgs = rReq.GetArgs();
     829           0 :         }
     830             :     }
     831             : 
     832           0 :     if ( pArgs )
     833             :     {
     834           0 :         if ( bArgsInReq &&
     835             :             ( nSlot == SID_ATTR_CHAR_FONT || nSlot == SID_ATTR_CHAR_FONTHEIGHT ||
     836             :               nSlot == SID_ATTR_CHAR_WEIGHT || nSlot == SID_ATTR_CHAR_POSTURE ) )
     837             :         {
     838             :             // font items from toolbox controller have to be applied for the right script type
     839             : 
     840             :             // #i78017 establish the same behaviour as in Writer
     841           0 :             sal_uInt16 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
     842           0 :             if (nSlot == SID_ATTR_CHAR_FONT)
     843           0 :                 nScript = pView->GetScriptType();
     844             : 
     845           0 :             SfxItemPool& rPool = GetPool();
     846           0 :             SvxScriptSetItem aSetItem( nSlot, rPool );
     847           0 :             sal_uInt16 nWhich = rPool.GetWhich( nSlot );
     848           0 :             aSetItem.PutItemForScriptType( nScript, pArgs->Get( nWhich ) );
     849             : 
     850           0 :             pView->SetAttributes( aSetItem.GetItemSet() );
     851             :         }
     852             :         else
     853             :         {
     854             :             // use args directly
     855             : 
     856           0 :             pView->SetAttributes( *pArgs );
     857             :         }
     858           0 :         pViewData->GetScDrawView()->InvalidateDrawTextAttrs();
     859             :     }
     860           0 : }
     861             : 
     862           0 : void ScDrawTextObjectBar::GetAttrState( SfxItemSet& rDestSet )
     863             : {
     864           0 :     if ( IsNoteEdit() )
     865             :     {
     866             :         // issue 21255 - Notes now support rich text formatting.
     867             :     }
     868             : 
     869           0 :     SvtLanguageOptions  aLangOpt;
     870           0 :     sal_Bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
     871           0 :     sal_Bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
     872             : 
     873           0 :     SdrView* pView = pViewData->GetScDrawView();
     874           0 :     SfxItemSet aAttrSet(pView->GetModel()->GetItemPool());
     875           0 :     pView->GetAttributes(aAttrSet);
     876             : 
     877             :     //  direkte Attribute
     878             : 
     879           0 :     rDestSet.Put( aAttrSet );
     880             : 
     881             :     //  choose font info according to selection script type
     882             : 
     883           0 :     sal_uInt16 nScript = pView->GetScriptType();
     884             : 
     885             :     // #i55929# input-language-dependent script type (depends on input language if nothing selected)
     886           0 :     sal_uInt16 nInputScript = nScript;
     887           0 :     OutlinerView* pOutView = pView->GetTextEditOutlinerView();
     888           0 :     if (pOutView && !pOutView->GetSelection().HasRange())
     889             :     {
     890           0 :         LanguageType nInputLang = pViewData->GetActiveWin()->GetInputLanguage();
     891           0 :         if (nInputLang != LANGUAGE_DONTKNOW && nInputLang != LANGUAGE_SYSTEM)
     892           0 :             nInputScript = SvtLanguageOptions::GetScriptTypeOfLanguage( nInputLang );
     893             :     }
     894             : 
     895             :     // #i55929# according to spec, nInputScript is used for font and font height only
     896           0 :     if ( rDestSet.GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_UNKNOWN )
     897           0 :         ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTINFO, nInputScript );
     898           0 :     if ( rDestSet.GetItemState( EE_CHAR_FONTHEIGHT ) != SFX_ITEM_UNKNOWN )
     899           0 :         ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_FONTHEIGHT, nInputScript );
     900           0 :     if ( rDestSet.GetItemState( EE_CHAR_WEIGHT ) != SFX_ITEM_UNKNOWN )
     901           0 :         ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_WEIGHT, nScript );
     902           0 :     if ( rDestSet.GetItemState( EE_CHAR_ITALIC ) != SFX_ITEM_UNKNOWN )
     903           0 :         ScViewUtil::PutItemScript( rDestSet, aAttrSet, EE_CHAR_ITALIC, nScript );
     904             : 
     905             :     //  Ausrichtung
     906             : 
     907           0 :     SvxAdjust eAdj = ((const SvxAdjustItem&)aAttrSet.Get(EE_PARA_JUST)).GetAdjust();
     908           0 :     switch( eAdj )
     909             :     {
     910             :         case SVX_ADJUST_LEFT:
     911           0 :             rDestSet.Put( SfxBoolItem( SID_ALIGNLEFT, sal_True ) );
     912           0 :             break;
     913             :         case SVX_ADJUST_CENTER:
     914           0 :             rDestSet.Put( SfxBoolItem( SID_ALIGNCENTERHOR, sal_True ) );
     915           0 :             break;
     916             :         case SVX_ADJUST_RIGHT:
     917           0 :             rDestSet.Put( SfxBoolItem( SID_ALIGNRIGHT, sal_True ) );
     918           0 :             break;
     919             :         case SVX_ADJUST_BLOCK:
     920           0 :             rDestSet.Put( SfxBoolItem( SID_ALIGNBLOCK, sal_True ) );
     921           0 :             break;
     922             :         default:
     923             :         {
     924             :             // added to avoid warnings
     925             :         }
     926             :     }
     927             :     // pseudo slots for Format menu
     928           0 :     rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_LEFT,      eAdj == SVX_ADJUST_LEFT ) );
     929           0 :     rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_HCENTER,   eAdj == SVX_ADJUST_CENTER ) );
     930           0 :     rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_RIGHT,     eAdj == SVX_ADJUST_RIGHT ) );
     931           0 :     rDestSet.Put( SfxBoolItem( SID_ALIGN_ANY_JUSTIFIED, eAdj == SVX_ADJUST_BLOCK ) );
     932             : 
     933             :     //  Zeilenabstand
     934             : 
     935             :     sal_uInt16 nLineSpace = (sal_uInt16)
     936             :                 ((const SvxLineSpacingItem&)aAttrSet.
     937           0 :                         Get( EE_PARA_SBL )).GetPropLineSpace();
     938           0 :     switch( nLineSpace )
     939             :     {
     940             :         case 100:
     941           0 :             rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_10, sal_True ) );
     942           0 :             break;
     943             :         case 150:
     944           0 :             rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_15, sal_True ) );
     945           0 :             break;
     946             :         case 200:
     947           0 :             rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LINESPACE_20, sal_True ) );
     948           0 :             break;
     949             :     }
     950             : 
     951             :     //  hoch-/tiefgestellt
     952             : 
     953             :     SvxEscapement eEsc = (SvxEscapement) ( (const SvxEscapementItem&)
     954           0 :                     aAttrSet.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
     955           0 :     if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
     956           0 :         rDestSet.Put( SfxBoolItem( SID_SET_SUPER_SCRIPT, sal_True ) );
     957           0 :     else if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
     958           0 :         rDestSet.Put( SfxBoolItem( SID_SET_SUB_SCRIPT, sal_True ) );
     959             : 
     960             :     //  Unterstreichung
     961             : 
     962           0 :     SfxItemState eState = aAttrSet.GetItemState( EE_CHAR_UNDERLINE, sal_True );
     963           0 :     if ( eState == SFX_ITEM_DONTCARE )
     964             :     {
     965           0 :         rDestSet.InvalidateItem( SID_ULINE_VAL_NONE );
     966           0 :         rDestSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
     967           0 :         rDestSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
     968           0 :         rDestSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
     969             :     }
     970             :     else
     971             :     {
     972             :         FontUnderline eUnderline = ((const SvxUnderlineItem&)
     973           0 :                     aAttrSet.Get(EE_CHAR_UNDERLINE)).GetLineStyle();
     974           0 :         sal_uInt16 nId = SID_ULINE_VAL_NONE;
     975           0 :         switch (eUnderline)
     976             :         {
     977           0 :             case UNDERLINE_SINGLE:  nId = SID_ULINE_VAL_SINGLE; break;
     978           0 :             case UNDERLINE_DOUBLE:  nId = SID_ULINE_VAL_DOUBLE; break;
     979           0 :             case UNDERLINE_DOTTED:  nId = SID_ULINE_VAL_DOTTED; break;
     980             :             default:
     981           0 :                 break;
     982             :         }
     983           0 :         rDestSet.Put( SfxBoolItem( nId, sal_True ) );
     984             :     }
     985             : 
     986             :     //  horizontal / vertical
     987             : 
     988           0 :     sal_Bool bLeftToRight = sal_True;
     989             : 
     990           0 :     SdrOutliner* pOutl = pView->GetTextEditOutliner();
     991           0 :     if( pOutl )
     992             :     {
     993           0 :         if( pOutl->IsVertical() )
     994           0 :             bLeftToRight = false;
     995             :     }
     996             :     else
     997           0 :         bLeftToRight = ( (const SvxWritingModeItem&) aAttrSet.Get( SDRATTR_TEXTDIRECTION ) ).GetValue() == com::sun::star::text::WritingMode_LR_TB;
     998             : 
     999           0 :     if ( bDisableVerticalText )
    1000             :     {
    1001           0 :         rDestSet.DisableItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
    1002           0 :         rDestSet.DisableItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
    1003             :     }
    1004             :     else
    1005             :     {
    1006           0 :         rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_LEFT_TO_RIGHT, bLeftToRight ) );
    1007           0 :         rDestSet.Put( SfxBoolItem( SID_TEXTDIRECTION_TOP_TO_BOTTOM, !bLeftToRight ) );
    1008             :     }
    1009             : 
    1010             :     //  left-to-right or right-to-left
    1011             : 
    1012           0 :     if ( !bLeftToRight || bDisableCTLFont )
    1013             :     {
    1014             :         //  disabled if vertical
    1015           0 :         rDestSet.DisableItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
    1016           0 :         rDestSet.DisableItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
    1017             :     }
    1018           0 :     else if ( aAttrSet.GetItemState( EE_PARA_WRITINGDIR ) == SFX_ITEM_DONTCARE )
    1019             :     {
    1020           0 :         rDestSet.InvalidateItem( SID_ATTR_PARA_LEFT_TO_RIGHT );
    1021           0 :         rDestSet.InvalidateItem( SID_ATTR_PARA_RIGHT_TO_LEFT );
    1022             :     }
    1023             :     else
    1024             :     {
    1025             :         SvxFrameDirection eAttrDir = (SvxFrameDirection)((const SvxFrameDirectionItem&)
    1026           0 :                                         aAttrSet.Get( EE_PARA_WRITINGDIR )).GetValue();
    1027           0 :         if ( eAttrDir == FRMDIR_ENVIRONMENT )
    1028             :         {
    1029             :             //  get "environment" direction from page style
    1030           0 :             if ( pViewData->GetDocument()->GetEditTextDirection( pViewData->GetTabNo() ) == EE_HTEXTDIR_R2L )
    1031           0 :                 eAttrDir = FRMDIR_HORI_RIGHT_TOP;
    1032             :             else
    1033           0 :                 eAttrDir = FRMDIR_HORI_LEFT_TOP;
    1034             :         }
    1035           0 :         rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_LEFT_TO_RIGHT, ( eAttrDir == FRMDIR_HORI_LEFT_TOP ) ) );
    1036           0 :         rDestSet.Put( SfxBoolItem( SID_ATTR_PARA_RIGHT_TO_LEFT, ( eAttrDir == FRMDIR_HORI_RIGHT_TOP ) ) );
    1037           0 :     }
    1038           0 : }
    1039             : 
    1040           0 : void ScDrawTextObjectBar::ExecuteTrans( SfxRequest& rReq )
    1041             : {
    1042           0 :     sal_Int32 nType = ScViewUtil::GetTransliterationType( rReq.GetSlot() );
    1043           0 :     if ( nType )
    1044             :     {
    1045           0 :         ScDrawView* pView = pViewData->GetScDrawView();
    1046           0 :         OutlinerView* pOutView = pView->GetTextEditOutlinerView();
    1047           0 :         if ( pOutView )
    1048             :         {
    1049             :             //  change selected text in object
    1050           0 :             pOutView->TransliterateText( nType );
    1051             :         }
    1052             :         else
    1053             :         {
    1054             :             //! apply to whole objects?
    1055             :         }
    1056             :     }
    1057          15 : }
    1058             : 
    1059             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10