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

Generated by: LCOV version 1.10