LCOV - code coverage report
Current view: top level - sw/source/uibase/shells - drwtxtex.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 538 0.2 %
Date: 2015-06-13 12:38:46 Functions: 2 8 25.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/ui/dialogs/XSLTFilterDialog.hpp>
      21             : 
      22             : #include <comphelper/processfactory.hxx>
      23             : #include <comphelper/string.hxx>
      24             : #include <i18nlangtag/mslangid.hxx>
      25             : #include <sfx2/bindings.hxx>
      26             : #include <sfx2/dispatch.hxx>
      27             : #include <sfx2/request.hxx>
      28             : #include <svx/svdview.hxx>
      29             : #include <editeng/spltitem.hxx>
      30             : #include <editeng/lrspitem.hxx>
      31             : #include <editeng/ulspitem.hxx>
      32             : #include <editeng/orphitem.hxx>
      33             : #include <editeng/formatbreakitem.hxx>
      34             : #include <editeng/widwitem.hxx>
      35             : #include <editeng/kernitem.hxx>
      36             : #include <editeng/escapementitem.hxx>
      37             : #include <editeng/lspcitem.hxx>
      38             : #include <editeng/adjustitem.hxx>
      39             : #include <editeng/crossedoutitem.hxx>
      40             : #include <editeng/shdditem.hxx>
      41             : #include <editeng/udlnitem.hxx>
      42             : #include <editeng/fontitem.hxx>
      43             : #include <editeng/fhgtitem.hxx>
      44             : #include <editeng/colritem.hxx>
      45             : #include <editeng/wghtitem.hxx>
      46             : #include <editeng/contouritem.hxx>
      47             : #include <editeng/postitem.hxx>
      48             : #include <editeng/frmdiritem.hxx>
      49             : #include <svx/svdoutl.hxx>
      50             : #include <sfx2/viewfrm.hxx>
      51             : #include <svl/whiter.hxx>
      52             : #include <svl/cjkoptions.hxx>
      53             : #include <svl/ctloptions.hxx>
      54             : #include <svtools/langtab.hxx>
      55             : #include <svl/languageoptions.hxx>
      56             : #include <vcl/msgbox.hxx>
      57             : #include <editeng/flditem.hxx>
      58             : #include <editeng/editstat.hxx>
      59             : #include <svx/hlnkitem.hxx>
      60             : #include <sfx2/htmlmode.hxx>
      61             : #include <svl/slstitm.hxx>
      62             : #include <editeng/langitem.hxx>
      63             : #include <editeng/unolingu.hxx>
      64             : #include <editeng/scripttypeitem.hxx>
      65             : #include <editeng/writingmodeitem.hxx>
      66             : #include <editeng/eeitem.hxx>
      67             : #include <editeng/editeng.hxx>
      68             : #include <editeng/editdata.hxx>
      69             : #include <editeng/outliner.hxx>
      70             : #include <vcl/window.hxx>
      71             : #include <editeng/editview.hxx>
      72             : #include <vcl/outdev.hxx>
      73             : #include <editeng/hyphenzoneitem.hxx>
      74             : #include <tools/diagnose_ex.h>
      75             : 
      76             : #include <cmdid.h>
      77             : #include <doc.hxx>
      78             : #include <docstat.hxx>
      79             : #include <drwtxtsh.hxx>
      80             : #include <edtwin.hxx>
      81             : #include <globals.hrc>
      82             : #include <hintids.hxx>
      83             : #include <initui.hxx>
      84             : #include <langhelper.hxx>
      85             : #include <chrdlgmodes.hxx>
      86             : #include <pardlg.hxx>
      87             : #include <shells.hrc>
      88             : #include <string.h>
      89             : #include <swdtflvr.hxx>
      90             : #include <swmodule.hxx>
      91             : #include <swwait.hxx>
      92             : #include <uitool.hxx>
      93             : #include <viewopt.hxx>
      94             : #include <wrtsh.hxx>
      95             : #include <wview.hxx>
      96             : 
      97             : #include "swabstdlg.hxx"
      98             : #include "chrdlg.hrc"
      99             : #include "misc.hrc"
     100             : #include <boost/scoped_ptr.hpp>
     101             : 
     102             : const sal_uInt32 nFontInc = 40;      // 2pt
     103             : const sal_uInt32 nFontMaxSz = 19998; // 999.9pt
     104             : 
     105             : using namespace ::com::sun::star;
     106             : 
     107           0 : void SwDrawTextShell::Execute( SfxRequest &rReq )
     108             : {
     109           0 :     SwWrtShell &rSh = GetShell();
     110           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     111           0 :     SfxItemSet aEditAttr(pOLV->GetAttribs());
     112           0 :     SfxItemSet aNewAttr(*aEditAttr.GetPool(), aEditAttr.GetRanges());
     113             : 
     114           0 :     const sal_uInt16 nSlot = rReq.GetSlot();
     115             : 
     116           0 :     const sal_uInt16 nWhich = GetPool().GetWhich(nSlot);
     117           0 :     const SfxItemSet *pNewAttrs = rReq.GetArgs();
     118             : 
     119           0 :     bool bRestoreSelection = false;
     120           0 :     ESelection aOldSelection;
     121             : 
     122           0 :     sal_uInt16 nEEWhich = 0;
     123           0 :     switch (nSlot)
     124             :     {
     125             :         case SID_LANGUAGE_STATUS:
     126             :         {
     127           0 :             aOldSelection = pOLV->GetSelection();
     128           0 :             if (!pOLV->GetEditView().HasSelection())
     129             :             {
     130           0 :                 pOLV->GetEditView().SelectCurrentWord();
     131             :             }
     132             : 
     133           0 :             bRestoreSelection = SwLangHelper::SetLanguageStatus(pOLV,rReq,GetView(),rSh);
     134           0 :             break;
     135             :         }
     136             : 
     137             :         case SID_THES:
     138             :         {
     139           0 :             OUString aReplaceText;
     140           0 :             SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, false );
     141           0 :             if (pItem2)
     142           0 :                 aReplaceText = pItem2->GetValue();
     143           0 :             if (!aReplaceText.isEmpty())
     144           0 :                 ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText );
     145           0 :             break;
     146             :         }
     147             : 
     148             :         case SID_ATTR_CHAR_FONT:
     149             :         case SID_ATTR_CHAR_FONTHEIGHT:
     150             :         case SID_ATTR_CHAR_WEIGHT:
     151             :         case SID_ATTR_CHAR_POSTURE:
     152             :         {
     153           0 :             SfxItemPool* pPool2 = aEditAttr.GetPool()->GetSecondaryPool();
     154           0 :             if( !pPool2 )
     155           0 :                 pPool2 = aEditAttr.GetPool();
     156           0 :             SvxScriptSetItem aSetItem( nSlot, *pPool2 );
     157             : 
     158             :             // #i78017 establish the same behaviour as in Writer
     159           0 :             SvtScriptType nScriptTypes = SvtScriptType::LATIN | SvtScriptType::ASIAN | SvtScriptType::COMPLEX;
     160           0 :             if (nSlot == SID_ATTR_CHAR_FONT)
     161           0 :                 nScriptTypes = pOLV->GetSelectedScriptType();
     162             : 
     163           0 :             if (pNewAttrs)
     164             :             {
     165           0 :                 aSetItem.PutItemForScriptType( nScriptTypes, pNewAttrs->Get( nWhich ) );
     166           0 :                 aNewAttr.Put( aSetItem.GetItemSet() );
     167           0 :             }
     168             :         }
     169           0 :         break;
     170             : 
     171           0 :         case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break;
     172             : 
     173             :         case SID_ATTR_CHAR_UNDERLINE:
     174             :         {
     175           0 :             if ( pNewAttrs )
     176             :             {
     177           0 :                 const SvxTextLineItem& rTextLineItem = static_cast< const SvxTextLineItem& >( pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich(nSlot) ) );
     178           0 :                 aNewAttr.Put( SvxUnderlineItem( rTextLineItem.GetLineStyle(), EE_CHAR_UNDERLINE ) );
     179             :             }
     180             :             else
     181             :             {
     182           0 :                 FontUnderline eFU = static_cast<const SvxUnderlineItem&>(aEditAttr.Get(EE_CHAR_UNDERLINE)).GetLineStyle();
     183           0 :                 aNewAttr.Put( SvxUnderlineItem(eFU == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE) );
     184             :             }
     185             :         }
     186           0 :         break;
     187             : 
     188             :         case SID_ATTR_CHAR_OVERLINE:
     189             :         {
     190           0 :              FontUnderline eFO = static_cast<const SvxOverlineItem&>(aEditAttr.Get(EE_CHAR_OVERLINE)).GetLineStyle();
     191           0 :             aNewAttr.Put(SvxOverlineItem(eFO == UNDERLINE_SINGLE ? UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_OVERLINE));
     192             :         }
     193           0 :         break;
     194             : 
     195           0 :         case SID_ATTR_CHAR_CONTOUR:     nEEWhich = EE_CHAR_OUTLINE; break;
     196           0 :         case SID_ATTR_CHAR_SHADOWED:    nEEWhich = EE_CHAR_SHADOW; break;
     197           0 :         case SID_ATTR_CHAR_STRIKEOUT:   nEEWhich = EE_CHAR_STRIKEOUT; break;
     198           0 :         case SID_ATTR_CHAR_WORDLINEMODE: nEEWhich = EE_CHAR_WLM; break;
     199           0 :         case SID_ATTR_CHAR_RELIEF      : nEEWhich = EE_CHAR_RELIEF;  break;
     200           0 :         case SID_ATTR_CHAR_LANGUAGE    : nEEWhich = EE_CHAR_LANGUAGE;break;
     201           0 :         case SID_ATTR_CHAR_KERNING     : nEEWhich = EE_CHAR_KERNING; break;
     202           0 :         case SID_ATTR_CHAR_SCALEWIDTH:   nEEWhich = EE_CHAR_FONTWIDTH; break;
     203           0 :         case SID_ATTR_CHAR_AUTOKERN  :   nEEWhich = EE_CHAR_PAIRKERNING; break;
     204           0 :         case SID_ATTR_CHAR_ESCAPEMENT:   nEEWhich = EE_CHAR_ESCAPEMENT; break;
     205             :         case SID_ATTR_PARA_ADJUST_LEFT:
     206           0 :             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_LEFT, EE_PARA_JUST));
     207           0 :         break;
     208             :         case SID_ATTR_PARA_ADJUST_CENTER:
     209           0 :             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_CENTER, EE_PARA_JUST));
     210           0 :         break;
     211             :         case SID_ATTR_PARA_ADJUST_RIGHT:
     212           0 :             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_RIGHT, EE_PARA_JUST));
     213           0 :         break;
     214             :         case SID_ATTR_PARA_ADJUST_BLOCK:
     215           0 :             aNewAttr.Put(SvxAdjustItem(SVX_ADJUST_BLOCK, EE_PARA_JUST));
     216           0 :         break;
     217             :         case SID_ATTR_PARA_LRSPACE:
     218             :             {
     219             :                 SvxLRSpaceItem aParaMargin(static_cast<const SvxLRSpaceItem&>(rReq.
     220           0 :                                         GetArgs()->Get(nSlot)));
     221           0 :                 aParaMargin.SetWhich( EE_PARA_LRSPACE );
     222           0 :                 aNewAttr.Put(aParaMargin);
     223           0 :                 rReq.Done();
     224             :             }
     225           0 :             break;
     226             :         case SID_ATTR_PARA_LINESPACE:
     227             :             {
     228             :                 SvxLineSpacingItem aLineSpace = static_cast<const SvxLineSpacingItem&>(pNewAttrs->Get(
     229           0 :                                                             GetPool().GetWhich(nSlot)));
     230           0 :                 aLineSpace.SetWhich( EE_PARA_SBL );
     231           0 :                 aNewAttr.Put( aLineSpace );
     232           0 :                 rReq.Done();
     233             :             }
     234           0 :             break;
     235             :         case SID_ATTR_PARA_ULSPACE:
     236             :             {
     237             :                 SvxULSpaceItem aULSpace = static_cast<const SvxULSpaceItem&>(pNewAttrs->Get(
     238           0 :                     GetPool().GetWhich(nSlot)));
     239           0 :                 aULSpace.SetWhich( EE_PARA_ULSPACE );
     240           0 :                 aNewAttr.Put( aULSpace );
     241           0 :                 rReq.Done();
     242             :             }
     243           0 :             break;
     244             :         case SID_PARASPACE_INCREASE:
     245             :         case SID_PARASPACE_DECREASE:
     246             :         {
     247             :             SvxULSpaceItem aULSpace(
     248           0 :                 static_cast< const SvxULSpaceItem& >( aEditAttr.Get( EE_PARA_ULSPACE ) ) );
     249           0 :             sal_uInt16 nUpper = aULSpace.GetUpper();
     250           0 :             sal_uInt16 nLower = aULSpace.GetLower();
     251             : 
     252           0 :             if ( nSlot == SID_PARASPACE_INCREASE )
     253             :             {
     254           0 :                 nUpper = std::min< sal_uInt16 >( nUpper + 57, 5670 );
     255           0 :                 nLower = std::min< sal_uInt16 >( nLower + 57, 5670 );
     256             :             }
     257             :             else
     258             :             {
     259           0 :                 nUpper = std::max< sal_Int16 >( nUpper - 57, 0 );
     260           0 :                 nLower = std::max< sal_Int16 >( nLower - 57, 0 );
     261             :             }
     262             : 
     263           0 :             aULSpace.SetUpper( nUpper );
     264           0 :             aULSpace.SetLower( nLower );
     265           0 :             aNewAttr.Put( aULSpace );
     266           0 :             rReq.Done();
     267             :         }
     268           0 :         break;
     269             :         case SID_ATTR_PARA_LINESPACE_10:
     270             :         {
     271           0 :             SvxLineSpacingItem aItem(SVX_LINESPACE_ONE_LINE, EE_PARA_SBL);
     272           0 :             aItem.SetPropLineSpace(100);
     273           0 :             aNewAttr.Put(aItem);
     274             :         }
     275           0 :         break;
     276             :         case SID_ATTR_PARA_LINESPACE_15:
     277             :         {
     278           0 :             SvxLineSpacingItem aItem(SVX_LINESPACE_ONE_POINT_FIVE_LINES, EE_PARA_SBL);
     279           0 :             aItem.SetPropLineSpace(150);
     280           0 :             aNewAttr.Put(aItem);
     281             :         }
     282           0 :         break;
     283             :         case SID_ATTR_PARA_LINESPACE_20:
     284             :         {
     285           0 :             SvxLineSpacingItem aItem(SVX_LINESPACE_TWO_LINES, EE_PARA_SBL);
     286           0 :             aItem.SetPropLineSpace(200);
     287           0 :             aNewAttr.Put(aItem);
     288             :         }
     289           0 :         break;
     290             : 
     291             :         case FN_SET_SUPER_SCRIPT:
     292             :         {
     293           0 :             SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
     294             :             SvxEscapement eEsc = (SvxEscapement ) static_cast<const SvxEscapementItem&>(
     295           0 :                             aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
     296             : 
     297           0 :             if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT )
     298           0 :                 aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
     299             :             else
     300           0 :                 aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT );
     301           0 :             aNewAttr.Put( aItem, EE_CHAR_ESCAPEMENT );
     302             :         }
     303           0 :         break;
     304             :         case FN_SET_SUB_SCRIPT:
     305             :         {
     306           0 :             SvxEscapementItem aItem(EE_CHAR_ESCAPEMENT);
     307             :             SvxEscapement eEsc = (SvxEscapement ) static_cast<const SvxEscapementItem&>(
     308           0 :                             aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue();
     309             : 
     310           0 :             if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT )
     311           0 :                 aItem.SetEscapement( SVX_ESCAPEMENT_OFF );
     312             :             else
     313           0 :                 aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT );
     314           0 :             aNewAttr.Put( aItem, EE_CHAR_ESCAPEMENT );
     315             :         }
     316           0 :         break;
     317             : 
     318             :         case SID_CHAR_DLG_EFFECT:
     319             :         case SID_CHAR_DLG:
     320             :         case SID_CHAR_DLG_FOR_PARAGRAPH:
     321             :         {
     322           0 :             const SfxItemSet* pArgs = rReq.GetArgs();
     323           0 :             SFX_REQUEST_ARG(rReq, pItem, SfxStringItem, FN_PARAM_1, false);
     324             : 
     325           0 :             if( !pArgs || pItem )
     326             :             {
     327           0 :                 aOldSelection = pOLV->GetSelection();
     328           0 :                 if (nSlot == SID_CHAR_DLG_FOR_PARAGRAPH)
     329             :                 {
     330             :                     // select current paragraph (and restore selection later on...)
     331           0 :                     EditView & rEditView = pOLV->GetEditView();
     332           0 :                     SwLangHelper::SelectPara( rEditView, rEditView.GetSelection() );
     333           0 :                     bRestoreSelection = true;
     334             :                 }
     335             : 
     336           0 :                 SwView* pView = &GetView();
     337           0 :                 FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, pView));
     338           0 :                 SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)) );
     339           0 :                 SfxItemSet aDlgAttr(GetPool(), EE_ITEMS_START, EE_ITEMS_END);
     340             : 
     341             :                 // util::Language does not exists in the EditEngine! That is why not in set.
     342             : 
     343           0 :                 aDlgAttr.Put( aEditAttr );
     344           0 :                 aDlgAttr.Put( SvxKerningItem(0, RES_CHRATR_KERNING) );
     345             : 
     346           0 :                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
     347             :                 assert(pFact && "SwAbstractDialogFactory fail!");
     348             : 
     349           0 :                 boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSwCharDlg(pView->GetWindow(), *pView, aDlgAttr, DLG_CHAR_DRAW));
     350             :                 assert(pDlg && "Dialog creation failed!");
     351           0 :                 if (nSlot == SID_CHAR_DLG_EFFECT)
     352             :                 {
     353           0 :                     pDlg->SetCurPageId("fonteffects");
     354             :                 }
     355           0 :                 else if (nSlot == SID_CHAR_DLG_FOR_PARAGRAPH)
     356             :                 {
     357           0 :                     pDlg->SetCurPageId("font");
     358             :                 }
     359           0 :                 else if (pItem)
     360             :                 {
     361           0 :                     pDlg->SetCurPageId(OUStringToOString(pItem->GetValue(), RTL_TEXTENCODING_UTF8));
     362             :                 }
     363             : 
     364           0 :                 sal_uInt16 nRet = pDlg->Execute();
     365           0 :                 if(RET_OK == nRet )
     366             :                 {
     367           0 :                     rReq.Done( *( pDlg->GetOutputItemSet() ) );
     368           0 :                     aNewAttr.Put(*pDlg->GetOutputItemSet());
     369             :                 }
     370           0 :                 if(RET_OK != nRet)
     371           0 :                     return ;
     372             :             }
     373             :             else
     374           0 :                 aNewAttr.Put(*pArgs);
     375             :         }
     376           0 :         break;
     377             :         case FN_FORMAT_FOOTNOTE_DLG:
     378             :         {
     379           0 :             GetView().ExecFormatFootnote();
     380           0 :             break;
     381             :         }
     382             :         case FN_NUMBERING_OUTLINE_DLG:
     383             :         {
     384           0 :             GetView().ExecNumberingOutline(GetPool());
     385           0 :             rReq.Done();
     386             :         }
     387           0 :         break;
     388             :         case SID_OPEN_XML_FILTERSETTINGS:
     389             :         {
     390           0 :             HandleOpenXmlFilterSettings(rReq);
     391             :         }
     392           0 :         break;
     393             :         case FN_WORDCOUNT_DIALOG:
     394             :         {
     395           0 :             GetView().UpdateWordCount(this, nSlot);
     396             :         }
     397           0 :         break;
     398             :         case SID_PARA_DLG:
     399             :         {
     400           0 :             const SfxItemSet* pArgs = rReq.GetArgs();
     401             : 
     402           0 :             if (!pArgs)
     403             :             {
     404           0 :                 SwView* pView = &GetView();
     405           0 :                 FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, pView));
     406           0 :                 SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)) );
     407           0 :                 SfxItemSet aDlgAttr(GetPool(),
     408             :                                     EE_ITEMS_START, EE_ITEMS_END,
     409             :                                     SID_ATTR_PARA_HYPHENZONE, SID_ATTR_PARA_HYPHENZONE,
     410             :                                     SID_ATTR_PARA_SPLIT, SID_ATTR_PARA_SPLIT,
     411             :                                     SID_ATTR_PARA_WIDOWS, SID_ATTR_PARA_WIDOWS,
     412             :                                     SID_ATTR_PARA_ORPHANS, SID_ATTR_PARA_ORPHANS,
     413           0 :                                     0);
     414             : 
     415           0 :                 aDlgAttr.Put(aEditAttr);
     416             : 
     417           0 :                 aDlgAttr.Put( SvxHyphenZoneItem( false, RES_PARATR_HYPHENZONE) );
     418           0 :                 aDlgAttr.Put( SvxFormatBreakItem( SVX_BREAK_NONE, RES_BREAK ) );
     419           0 :                 aDlgAttr.Put( SvxFormatSplitItem( true, RES_PARATR_SPLIT ) );
     420           0 :                 aDlgAttr.Put( SvxWidowsItem( 0, RES_PARATR_WIDOWS ) );
     421           0 :                 aDlgAttr.Put( SvxOrphansItem( 0, RES_PARATR_ORPHANS ) );
     422             : 
     423           0 :                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
     424             :                 assert(pFact && "SwAbstractDialogFactory fail!");
     425             : 
     426           0 :                 boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateSwParaDlg( GetView().GetWindow(), GetView(), aDlgAttr,DLG_STD, 0, true ));
     427             :                 assert(pDlg && "Dialog creation failed!");
     428           0 :                 sal_uInt16 nRet = pDlg->Execute();
     429           0 :                 if(RET_OK == nRet)
     430             :                 {
     431           0 :                     rReq.Done( *( pDlg->GetOutputItemSet() ) );
     432           0 :                     aNewAttr.Put(*pDlg->GetOutputItemSet());
     433             :                 }
     434           0 :                 if(RET_OK != nRet)
     435           0 :                     return;
     436             :             }
     437             :             else
     438           0 :                 aNewAttr.Put(*pArgs);
     439             :         }
     440           0 :         break;
     441             :         case SID_AUTOSPELL_CHECK:
     442             :         {
     443             : //!! JP 16.03.2001: why??           pSdrView = rSh.GetDrawView();
     444             : //!! JP 16.03.2001: why??           pOutliner = pSdrView->GetTextEditOutliner();
     445           0 :             SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     446           0 :             EEControlBits nCtrl = pOutliner->GetControlWord();
     447             : 
     448             :             bool bSet = static_cast<const SfxBoolItem&>(rReq.GetArgs()->Get(
     449           0 :                                                     nSlot)).GetValue();
     450           0 :             if(bSet)
     451           0 :                 nCtrl |= EEControlBits::ONLINESPELLING|EEControlBits::ALLOWBIGOBJS;
     452             :             else
     453           0 :                 nCtrl &= ~EEControlBits::ONLINESPELLING;
     454           0 :             pOutliner->SetControlWord(nCtrl);
     455             : 
     456           0 :             rView.ExecuteSlot(rReq);
     457             :         }
     458           0 :         break;
     459             :         case SID_HYPERLINK_SETLINK:
     460             :         {
     461           0 :             const SfxPoolItem* pItem = 0;
     462           0 :             if(pNewAttrs)
     463           0 :                 pNewAttrs->GetItemState(nSlot, false, &pItem);
     464             : 
     465           0 :             if(pItem)
     466             :             {
     467           0 :                 const SvxHyperlinkItem& rHLinkItem = *static_cast<const SvxHyperlinkItem *>(pItem);
     468           0 :                 SvxURLField aField(rHLinkItem.GetURL(), rHLinkItem.GetName(), SVXURLFORMAT_APPDEFAULT);
     469           0 :                 aField.SetTargetFrame(rHLinkItem.GetTargetFrame());
     470             : 
     471           0 :                 const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
     472             : 
     473           0 :                 if (pFieldItem && pFieldItem->GetField()->ISA(SvxURLField))
     474             :                 {
     475             :                     // Select field so that it will be deleted during insert
     476           0 :                     ESelection aSel = pOLV->GetSelection();
     477           0 :                     aSel.nEndPos++;
     478           0 :                     pOLV->SetSelection(aSel);
     479             :                 }
     480           0 :                 pOLV->InsertField(SvxFieldItem(aField, EE_FEATURE_FIELD));
     481             :             }
     482             :         }
     483           0 :         break;
     484             : 
     485             :         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
     486             :         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
     487             :             // Shell switch!
     488             :             {
     489           0 :                 SdrObject* pTmpObj = pSdrView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
     490           0 :                 SdrPageView* pTmpPV = pSdrView->GetSdrPageView();
     491           0 :                 SdrView* pTmpView = pSdrView;
     492             : 
     493           0 :                 pSdrView->SdrEndTextEdit(true);
     494             : 
     495           0 :                 SfxItemSet aAttr( *aNewAttr.GetPool(),
     496             :                             SDRATTR_TEXTDIRECTION,
     497           0 :                             SDRATTR_TEXTDIRECTION );
     498             : 
     499             :                 aAttr.Put( SvxWritingModeItem(
     500             :                     nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ?
     501             :                         text::WritingMode_LR_TB
     502           0 :                         : text::WritingMode_TB_RL, SDRATTR_TEXTDIRECTION ) );
     503           0 :                 pTmpView->SetAttributes( aAttr );
     504             : 
     505           0 :                 rSh.GetView().BeginTextEdit( pTmpObj, pTmpPV, &rSh.GetView().GetEditWin(), false);
     506           0 :                 rSh.GetView().AttrChangedNotify( &rSh );
     507             :             }
     508           0 :             return;
     509             : 
     510             :         case SID_ATTR_PARA_LEFT_TO_RIGHT:
     511             :         case SID_ATTR_PARA_RIGHT_TO_LEFT:
     512             :         {
     513           0 :             SdrObject* pTmpObj = pSdrView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
     514           0 :             SdrPageView* pTmpPV = pSdrView->GetSdrPageView();
     515           0 :             SdrView* pTmpView = pSdrView;
     516             : 
     517           0 :             pSdrView->SdrEndTextEdit(true);
     518           0 :             bool bLeftToRight = nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT;
     519             : 
     520             :             const SfxPoolItem* pPoolItem;
     521           0 :             if( pNewAttrs && SfxItemState::SET == pNewAttrs->GetItemState( nSlot, true, &pPoolItem ) )
     522             :             {
     523           0 :                 if( !static_cast<const SfxBoolItem*>(pPoolItem)->GetValue() )
     524           0 :                     bLeftToRight = !bLeftToRight;
     525             :             }
     526           0 :             SfxItemSet aAttr( *aNewAttr.GetPool(),
     527             :                         EE_PARA_JUST, EE_PARA_JUST,
     528             :                         EE_PARA_WRITINGDIR, EE_PARA_WRITINGDIR,
     529           0 :                         0 );
     530             : 
     531           0 :             sal_uInt16 nAdjust = SVX_ADJUST_LEFT;
     532           0 :             if( SfxItemState::SET == aEditAttr.GetItemState(EE_PARA_JUST, true, &pPoolItem ) )
     533           0 :                 nAdjust = static_cast<const SvxAdjustItem*>(pPoolItem)->GetEnumValue();
     534             : 
     535           0 :             if( bLeftToRight )
     536             :             {
     537           0 :                 aAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_LEFT_TOP, EE_PARA_WRITINGDIR ) );
     538           0 :                 if( nAdjust == SVX_ADJUST_RIGHT )
     539           0 :                     aAttr.Put( SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST ) );
     540             :             }
     541             :             else
     542             :             {
     543           0 :                 aAttr.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
     544           0 :                 if( nAdjust == SVX_ADJUST_LEFT )
     545           0 :                     aAttr.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
     546             :             }
     547           0 :             pTmpView->SetAttributes( aAttr );
     548           0 :             rSh.GetView().BeginTextEdit( pTmpObj, pTmpPV, &rSh.GetView().GetEditWin(), false );
     549           0 :             rSh.GetView().AttrChangedNotify( &rSh );
     550             :         }
     551           0 :         return;
     552             : 
     553             :         case FN_GROW_FONT_SIZE:
     554             :         case FN_SHRINK_FONT_SIZE:
     555             :         {
     556           0 :             SfxItemPool* pPool2 = aEditAttr.GetPool()->GetSecondaryPool();
     557           0 :             if( !pPool2 )
     558           0 :                 pPool2 = aEditAttr.GetPool();
     559             : 
     560           0 :             SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONTHEIGHT, *pPool2 );
     561           0 :             aSetItem.GetItemSet().Put( aEditAttr, false );
     562             : 
     563           0 :             SvtScriptType nScriptTypes = pOLV->GetSelectedScriptType();
     564           0 :             const SvxFontHeightItem* pSize( static_cast<const SvxFontHeightItem*>( aSetItem.GetItemOfScript( nScriptTypes ) ) );
     565             : 
     566           0 :             if (pSize)
     567             :             {
     568           0 :                 SvxFontHeightItem aSize(*pSize);
     569             : 
     570           0 :                 sal_uInt32 nSize = aSize.GetHeight();
     571             : 
     572           0 :                 if( nSlot == FN_GROW_FONT_SIZE && ( nSize += nFontInc ) > nFontMaxSz )
     573           0 :                     nSize = nFontMaxSz;
     574           0 :                 else if( nSlot == FN_SHRINK_FONT_SIZE && ( nSize -= nFontInc ) < nFontInc )
     575           0 :                     nSize = nFontInc;
     576             : 
     577           0 :                 aSize.SetHeight( nSize );
     578           0 :                 aSetItem.PutItemForScriptType( nScriptTypes, aSize );
     579           0 :                 aNewAttr.Put( aSetItem.GetItemSet() );
     580           0 :             }
     581             :         }
     582           0 :         break;
     583             : 
     584             :         default:
     585             :             assert(false && "wrong dispatcher");
     586           0 :             return;
     587             :     }
     588           0 :     if(nEEWhich && pNewAttrs)
     589           0 :         aNewAttr.Put(pNewAttrs->Get(nWhich), nEEWhich);
     590             : 
     591           0 :     SetAttrToMarked(aNewAttr);
     592             : 
     593           0 :     GetView().GetViewFrame()->GetBindings().InvalidateAll(false);
     594             : 
     595           0 :     if (IsTextEdit() && pOLV->GetOutliner()->IsModified())
     596           0 :         rSh.SetModified();
     597             : 
     598           0 :     if (bRestoreSelection)
     599             :     {
     600             :         // restore selection
     601           0 :         pOLV->GetEditView().SetSelection( aOldSelection );
     602           0 :     }
     603             : }
     604             : 
     605           0 : void SwDrawTextShell::GetState(SfxItemSet& rSet)
     606             : {
     607           0 :     if (!IsTextEdit())  // Otherwise sometimes crash!
     608           0 :         return;
     609             : 
     610           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     611           0 :     SfxWhichIter aIter(rSet);
     612           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
     613             : 
     614           0 :     SfxItemSet aEditAttr( pOLV->GetAttribs() );
     615           0 :     const SfxPoolItem *pAdjust = 0, *pLSpace = 0, *pEscItem = 0;
     616             :     int eAdjust, nLSpace, nEsc;
     617             : 
     618           0 :     while(nWhich)
     619             :     {
     620           0 :         sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich );
     621           0 :         bool bFlag = false;
     622           0 :         switch( nSlotId )
     623             :         {
     624             :             case SID_LANGUAGE_STATUS://20412:
     625             :             {
     626           0 :                 nSlotId = SwLangHelper::GetLanguageStatus(pOLV,rSet);
     627           0 :                 break;
     628             :             }
     629             : 
     630             :             case SID_THES:
     631             :             {
     632           0 :                 OUString        aStatusVal;
     633           0 :                 LanguageType    nLang = LANGUAGE_NONE;
     634           0 :                 bool bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, pOLV->GetEditView() );
     635           0 :                 rSet.Put( SfxStringItem( SID_THES, aStatusVal ) );
     636             : 
     637             :                 // disable "Thesaurus" context menu entry if there is nothing to look up
     638           0 :                 uno::Reference< linguistic2::XThesaurus >  xThes( ::GetThesaurus() );
     639           0 :                 if (!bIsLookUpWord ||
     640           0 :                     !xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( LanguageTag::convertToLocale( nLang ) ))
     641           0 :                     rSet.DisableItem( SID_THES );
     642             : 
     643             :                 //! avoid putting the same item as SfxBoolItem at the end of this function
     644           0 :                 nSlotId = 0;
     645           0 :                 break;
     646             :             }
     647             : 
     648           0 :         case SID_ATTR_PARA_ADJUST_LEFT:     eAdjust = SVX_ADJUST_LEFT; goto ASK_ADJUST;
     649           0 :         case SID_ATTR_PARA_ADJUST_RIGHT:    eAdjust = SVX_ADJUST_RIGHT; goto ASK_ADJUST;
     650           0 :         case SID_ATTR_PARA_ADJUST_CENTER:   eAdjust = SVX_ADJUST_CENTER; goto ASK_ADJUST;
     651           0 :         case SID_ATTR_PARA_ADJUST_BLOCK:    eAdjust = SVX_ADJUST_BLOCK; goto ASK_ADJUST;
     652             : ASK_ADJUST:
     653             :             {
     654           0 :                 if( !pAdjust )
     655           0 :                     aEditAttr.GetItemState( EE_PARA_JUST, false, &pAdjust);
     656             : 
     657           0 :                 if( !pAdjust || IsInvalidItem( pAdjust ))
     658           0 :                     rSet.InvalidateItem( nSlotId ), nSlotId = 0;
     659             :                 else
     660           0 :                     bFlag = eAdjust == static_cast<const SvxAdjustItem*>(pAdjust)->GetAdjust();
     661             :             }
     662           0 :             break;
     663             : 
     664             :         case SID_ATTR_PARA_LRSPACE:
     665             :             {
     666           0 :                 SfxItemState eState = aEditAttr.GetItemState(EE_PARA_LRSPACE);
     667           0 :                 if( eState >= SfxItemState::DEFAULT )
     668             :                 {
     669           0 :                     SvxLRSpaceItem aLR = static_cast<const SvxLRSpaceItem&>( aEditAttr.Get( EE_PARA_LRSPACE ) );
     670           0 :                     aLR.SetWhich(SID_ATTR_PARA_LRSPACE);
     671           0 :                     rSet.Put(aLR);
     672             :                 }
     673             :                 else
     674           0 :                     rSet.InvalidateItem(nSlotId);
     675           0 :                 nSlotId = 0;
     676             :             }
     677           0 :             break;
     678             :         case SID_ATTR_PARA_LINESPACE:
     679             :             {
     680           0 :                 SfxItemState eState = aEditAttr.GetItemState(EE_PARA_SBL);
     681           0 :                 if( eState >= SfxItemState::DEFAULT )
     682             :                 {
     683           0 :                     SvxLineSpacingItem aLR = static_cast<const SvxLineSpacingItem&>( aEditAttr.Get( EE_PARA_SBL ) );
     684           0 :                     rSet.Put(aLR);
     685             :                 }
     686             :                 else
     687           0 :                     rSet.InvalidateItem(nSlotId);
     688           0 :                 nSlotId = 0;
     689             :             }
     690           0 :             break;
     691             :         case SID_ATTR_PARA_ULSPACE:
     692             :         case SID_PARASPACE_INCREASE:
     693             :         case SID_PARASPACE_DECREASE:
     694             :             {
     695           0 :                 SfxItemState eState = aEditAttr.GetItemState(EE_PARA_ULSPACE);
     696           0 :                 if( eState >= SfxItemState::DEFAULT )
     697             :                 {
     698           0 :                     SvxULSpaceItem aULSpace = static_cast<const SvxULSpaceItem&>( aEditAttr.Get( EE_PARA_ULSPACE ) );
     699           0 :                     if ( !aULSpace.GetUpper() && !aULSpace.GetLower() )
     700           0 :                         rSet.DisableItem( SID_PARASPACE_DECREASE );
     701           0 :                     else if ( aULSpace.GetUpper() >= 5670 && aULSpace.GetLower() >= 5670 )
     702           0 :                         rSet.DisableItem( SID_PARASPACE_INCREASE );
     703           0 :                     if ( nSlotId == SID_ATTR_PARA_ULSPACE )
     704             :                     {
     705           0 :                         aULSpace.SetWhich(SID_ATTR_PARA_ULSPACE);
     706           0 :                         rSet.Put(aULSpace);
     707           0 :                     }
     708             :                 }
     709             :                 else
     710             :                 {
     711           0 :                     rSet.DisableItem( SID_PARASPACE_INCREASE );
     712           0 :                     rSet.DisableItem( SID_PARASPACE_DECREASE );
     713           0 :                     rSet.InvalidateItem( SID_ATTR_PARA_ULSPACE );
     714             :                 }
     715           0 :                 nSlotId = 0;
     716             :             }
     717           0 :             break;
     718             : 
     719           0 :         case SID_ATTR_PARA_LINESPACE_10:    nLSpace = 100;  goto ASK_LINESPACE;
     720           0 :         case SID_ATTR_PARA_LINESPACE_15:    nLSpace = 150;  goto ASK_LINESPACE;
     721           0 :         case SID_ATTR_PARA_LINESPACE_20:    nLSpace = 200;  goto ASK_LINESPACE;
     722             : ASK_LINESPACE:
     723             :             {
     724           0 :                 if( !pLSpace )
     725           0 :                     aEditAttr.GetItemState( EE_PARA_SBL, false, &pLSpace );
     726             : 
     727           0 :                 if( !pLSpace || IsInvalidItem( pLSpace ))
     728           0 :                     rSet.InvalidateItem( nSlotId ), nSlotId = 0;
     729           0 :                 else if( nLSpace == static_cast<const SvxLineSpacingItem*>(pLSpace)->
     730           0 :                                                 GetPropLineSpace() )
     731           0 :                     bFlag = true;
     732             :                 else
     733           0 :                     nSlotId = 0;
     734             :             }
     735           0 :             break;
     736             : 
     737           0 :         case FN_SET_SUPER_SCRIPT:   nEsc = SVX_ESCAPEMENT_SUPERSCRIPT;
     738           0 :                                     goto ASK_ESCAPE;
     739           0 :         case FN_SET_SUB_SCRIPT:     nEsc = SVX_ESCAPEMENT_SUBSCRIPT;
     740           0 :                                     goto ASK_ESCAPE;
     741             : ASK_ESCAPE:
     742             :             {
     743           0 :                 if( !pEscItem )
     744           0 :                     pEscItem = &aEditAttr.Get( EE_CHAR_ESCAPEMENT );
     745             : 
     746           0 :                 if( nEsc == static_cast<const SvxEscapementItem*>(
     747           0 :                                                 pEscItem)->GetEnumValue() )
     748           0 :                     bFlag = true;
     749             :                 else
     750           0 :                     nSlotId = 0;
     751             :             }
     752           0 :             break;
     753             : 
     754             :         case SID_THESAURUS:
     755             :         {
     756             :             // disable "Thesaurus" if the language is not supported
     757           0 :             const SfxPoolItem &rItem = GetShell().GetDoc()->GetDefault(
     758             :                             GetWhichOfScript( RES_CHRATR_LANGUAGE,
     759           0 :                             SvtLanguageOptions::GetI18NScriptTypeOfLanguage( GetAppLanguage())) );
     760           0 :             LanguageType nLang = static_cast<const SvxLanguageItem &>(rItem).GetLanguage();
     761             : 
     762           0 :             uno::Reference< linguistic2::XThesaurus >  xThes( ::GetThesaurus() );
     763           0 :             if (!xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( LanguageTag::convertToLocale( nLang ) ))
     764           0 :                 rSet.DisableItem( SID_THESAURUS );
     765           0 :             nSlotId = 0;
     766             :         }
     767           0 :         break;
     768             :         case SID_HANGUL_HANJA_CONVERSION:
     769             :         case SID_CHINESE_CONVERSION:
     770             :         {
     771           0 :             if (!SvtCJKOptions().IsAnyEnabled())
     772             :             {
     773           0 :                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, false );
     774           0 :                 rSet.DisableItem(nWhich);
     775             :             }
     776             :             else
     777           0 :                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, true );
     778             :         }
     779           0 :         break;
     780             : 
     781             :         case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
     782             :         case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
     783           0 :             if ( !SvtLanguageOptions().IsVerticalTextEnabled() )
     784             :             {
     785           0 :                 rSet.DisableItem( nSlotId );
     786           0 :                 nSlotId = 0;
     787             :             }
     788             :             else
     789             :             {
     790           0 :                 SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     791           0 :                 if( pOutliner )
     792           0 :                     bFlag = pOutliner->IsVertical() ==
     793           0 :                             (SID_TEXTDIRECTION_TOP_TO_BOTTOM == nSlotId);
     794             :                 else
     795             :                 {
     796             :                     text::WritingMode eMode = (text::WritingMode)
     797           0 :                                     static_cast<const SvxWritingModeItem&>( aEditAttr.Get( SDRATTR_TEXTDIRECTION ) ).GetValue();
     798             : 
     799           0 :                     if( nSlotId == SID_TEXTDIRECTION_LEFT_TO_RIGHT )
     800             :                     {
     801           0 :                         bFlag = eMode == text::WritingMode_LR_TB;
     802             :                     }
     803             :                     else
     804             :                     {
     805           0 :                         bFlag = eMode != text::WritingMode_TB_RL;
     806             :                     }
     807             :                 }
     808             :             }
     809           0 :             break;
     810             :         case SID_ATTR_PARA_LEFT_TO_RIGHT:
     811             :         case SID_ATTR_PARA_RIGHT_TO_LEFT:
     812             :         {
     813           0 :             if ( !SvtLanguageOptions().IsCTLFontEnabled() )
     814             :             {
     815           0 :                 rSet.DisableItem( nWhich );
     816           0 :                 nSlotId = 0;
     817             :             }
     818             :             else
     819             :             {
     820           0 :                 SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     821           0 :                 if(pOutliner && pOutliner->IsVertical())
     822             :                 {
     823           0 :                     rSet.DisableItem( nWhich );
     824           0 :                     nSlotId = 0;
     825             :                 }
     826             :                 else
     827             :                 {
     828           0 :                     switch( static_cast<const SvxFrameDirectionItem&>( aEditAttr.Get( EE_PARA_WRITINGDIR ) ).GetValue() )
     829             :                     {
     830             :                         case FRMDIR_HORI_LEFT_TOP:
     831           0 :                             bFlag = nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT;
     832           0 :                         break;
     833             : 
     834             :                         case FRMDIR_HORI_RIGHT_TOP:
     835           0 :                             bFlag = nWhich != SID_ATTR_PARA_LEFT_TO_RIGHT;
     836           0 :                         break;
     837             :                     }
     838             :                 }
     839             :             }
     840             :         }
     841           0 :         break;
     842             :         case SID_TRANSLITERATE_HALFWIDTH:
     843             :         case SID_TRANSLITERATE_FULLWIDTH:
     844             :         case SID_TRANSLITERATE_HIRAGANA:
     845             :         case SID_TRANSLITERATE_KATAGANA:
     846             :         {
     847           0 :             SvtCJKOptions aCJKOptions;
     848           0 :             if(!aCJKOptions.IsChangeCaseMapEnabled())
     849             :             {
     850           0 :                 rSet.DisableItem(nWhich);
     851           0 :                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, false );
     852             :             }
     853             :             else
     854           0 :                 GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, true );
     855             :         }
     856           0 :         break;
     857             :         case SID_INSERT_RLM :
     858             :         case SID_INSERT_LRM :
     859             :         case SID_INSERT_ZWNBSP :
     860             :         case SID_INSERT_ZWSP:
     861             :         {
     862           0 :             SvtCTLOptions aCTLOptions;
     863           0 :             bool bEnabled = aCTLOptions.IsCTLFontEnabled();
     864           0 :             GetView().GetViewFrame()->GetBindings().SetVisibleState( nWhich, bEnabled );
     865           0 :             if(!bEnabled)
     866           0 :                 rSet.DisableItem(nWhich);
     867             :         }
     868           0 :         break;
     869             :         default:
     870           0 :             nSlotId = 0;                // don't know this slot
     871           0 :             break;
     872             :         }
     873             : 
     874           0 :         if( nSlotId )
     875           0 :             rSet.Put( SfxBoolItem( nWhich, bFlag ));
     876             : 
     877           0 :         nWhich = aIter.NextWhich();
     878           0 :     }
     879             : }
     880             : 
     881           0 : void SwDrawTextShell::GetDrawTextCtrlState(SfxItemSet& rSet)
     882             : {
     883           0 :     if (!IsTextEdit())  // Otherwise crash!
     884           0 :         return;
     885             : 
     886           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     887           0 :     SfxItemSet aEditAttr(pOLV->GetAttribs());
     888             : 
     889           0 :     SfxWhichIter aIter(rSet);
     890           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
     891           0 :     SvtScriptType nScriptType = pOLV->GetSelectedScriptType();
     892           0 :     while(nWhich)
     893             :     {
     894           0 :         sal_uInt16 nEEWhich = 0;
     895           0 :         sal_uInt16 nSlotId = GetPool().GetSlotId( nWhich );
     896           0 :         switch( nSlotId )
     897             :         {
     898             :             case SID_ATTR_CHAR_FONT:
     899             :             case SID_ATTR_CHAR_FONTHEIGHT:
     900             :             case SID_ATTR_CHAR_WEIGHT:
     901             :             case SID_ATTR_CHAR_POSTURE:
     902             :             {
     903           0 :                 SfxItemPool* pEditPool = aEditAttr.GetPool()->GetSecondaryPool();
     904           0 :                 if( !pEditPool )
     905           0 :                     pEditPool = aEditAttr.GetPool();
     906           0 :                 SvxScriptSetItem aSetItem( nSlotId, *pEditPool );
     907           0 :                 aSetItem.GetItemSet().Put( aEditAttr, false );
     908           0 :                 const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScriptType );
     909           0 :                 if( pI )
     910           0 :                     rSet.Put( *pI, nWhich );
     911             :                 else
     912           0 :                     rSet.InvalidateItem( nWhich );
     913             :             }
     914           0 :             break;
     915           0 :             case SID_ATTR_CHAR_COLOR: nEEWhich = EE_CHAR_COLOR; break;
     916           0 :             case SID_ATTR_CHAR_UNDERLINE: nEEWhich = EE_CHAR_UNDERLINE;break;
     917           0 :             case SID_ATTR_CHAR_OVERLINE: nEEWhich = EE_CHAR_OVERLINE;break;
     918           0 :             case SID_ATTR_CHAR_CONTOUR: nEEWhich = EE_CHAR_OUTLINE; break;
     919           0 :             case SID_ATTR_CHAR_SHADOWED:  nEEWhich = EE_CHAR_SHADOW;break;
     920           0 :             case SID_ATTR_CHAR_STRIKEOUT: nEEWhich = EE_CHAR_STRIKEOUT;break;
     921             :             case SID_AUTOSPELL_CHECK:
     922             :             {
     923           0 :                 const SfxPoolItem* pState = rView.GetSlotState(nWhich);
     924           0 :                 if (pState)
     925           0 :                     rSet.Put(SfxBoolItem(nWhich, static_cast<const SfxBoolItem*>(pState)->GetValue()));
     926             :                 else
     927           0 :                     rSet.DisableItem( nWhich );
     928           0 :                 break;
     929             :             }
     930           0 :             case SID_ATTR_CHAR_WORDLINEMODE: nEEWhich = EE_CHAR_WLM; break;
     931           0 :             case SID_ATTR_CHAR_RELIEF      : nEEWhich = EE_CHAR_RELIEF;  break;
     932           0 :             case SID_ATTR_CHAR_LANGUAGE    : nEEWhich = EE_CHAR_LANGUAGE;break;
     933           0 :             case SID_ATTR_CHAR_KERNING     : nEEWhich = EE_CHAR_KERNING; break;
     934           0 :             case SID_ATTR_CHAR_SCALEWIDTH:   nEEWhich = EE_CHAR_FONTWIDTH;break;
     935           0 :             case SID_ATTR_CHAR_AUTOKERN  :   nEEWhich = EE_CHAR_PAIRKERNING; break;
     936           0 :             case SID_ATTR_CHAR_ESCAPEMENT:   nEEWhich = EE_CHAR_ESCAPEMENT; break;
     937             :             case FN_GROW_FONT_SIZE:
     938             :             case FN_SHRINK_FONT_SIZE:
     939             :             {
     940           0 :                 SfxItemPool* pEditPool = aEditAttr.GetPool()->GetSecondaryPool();
     941           0 :                 if( !pEditPool )
     942           0 :                     pEditPool = aEditAttr.GetPool();
     943             : 
     944           0 :                 SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONTHEIGHT, *pEditPool );
     945           0 :                 aSetItem.GetItemSet().Put( aEditAttr, false );
     946           0 :                 const SvxFontHeightItem* pSize( static_cast<const SvxFontHeightItem*>( aSetItem.GetItemOfScript( nScriptType ) ) );
     947             : 
     948           0 :                 if( !pSize )
     949           0 :                     rSet.DisableItem( nSlotId );
     950             :                 else
     951             :                 {
     952           0 :                     sal_uInt32 nSize = pSize->GetHeight();
     953           0 :                     if( nSize == nFontMaxSz )
     954           0 :                         rSet.DisableItem( FN_GROW_FONT_SIZE );
     955           0 :                     else if( nSize == nFontInc )
     956           0 :                         rSet.DisableItem( FN_SHRINK_FONT_SIZE );
     957           0 :                 }
     958             :             }
     959             :         }
     960           0 :         if(nEEWhich)
     961           0 :             rSet.Put(aEditAttr.Get(nEEWhich, true), nWhich);
     962             : 
     963           0 :         nWhich = aIter.NextWhich();
     964           0 :     }
     965             : }
     966             : 
     967           0 : void SwDrawTextShell::ExecClpbrd(SfxRequest &rReq)
     968             : {
     969           0 :     if (!IsTextEdit())  // Otherwise crash!
     970           0 :         return;
     971             : 
     972           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     973             : 
     974           0 :     ESelection aSel(pOLV->GetSelection());
     975           0 :     const bool bCopy = (aSel.nStartPara != aSel.nEndPara) || (aSel.nStartPos != aSel.nEndPos);
     976           0 :     sal_uInt16 nId = rReq.GetSlot();
     977           0 :     switch( nId )
     978             :     {
     979             :         case SID_CUT:
     980           0 :             if (bCopy)
     981           0 :                 pOLV->Cut();
     982           0 :             return;
     983             : 
     984             :         case SID_COPY:
     985           0 :             if (bCopy)
     986           0 :                 pOLV->Copy();
     987           0 :             return;
     988             : 
     989             :         case SID_PASTE:
     990           0 :             pOLV->PasteSpecial();
     991           0 :             break;
     992             : 
     993             :         default:
     994             :             OSL_FAIL("wrong dispatcher");
     995           0 :             return;
     996             :     }
     997             : }
     998             : 
     999           0 : void SwDrawTextShell::StateClpbrd(SfxItemSet &rSet)
    1000             : {
    1001           0 :     if (!IsTextEdit())  // Otherwise crash!
    1002           0 :         return;
    1003             : 
    1004           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
    1005           0 :     ESelection aSel(pOLV->GetSelection());
    1006           0 :     const bool bCopy = (aSel.nStartPara != aSel.nEndPara) ||
    1007           0 :         (aSel.nStartPos != aSel.nEndPos);
    1008             : 
    1009           0 :     SfxWhichIter aIter(rSet);
    1010           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1011             : 
    1012           0 :     while(nWhich)
    1013             :     {
    1014           0 :         switch(nWhich)
    1015             :         {
    1016             :         case SID_CUT:
    1017             :         case SID_COPY:
    1018           0 :             if( !bCopy )
    1019           0 :                 rSet.DisableItem( nWhich );
    1020           0 :             break;
    1021             : 
    1022             :         case SID_PASTE:
    1023             :             {
    1024             :                 TransferableDataHelper aDataHelper(
    1025           0 :                     TransferableDataHelper::CreateFromSystemClipboard( &GetView().GetEditWin() ) );
    1026             : 
    1027           0 :                 if( !aDataHelper.GetXTransferable().is()
    1028           0 :                     || !SwTransferable::IsPaste( GetShell(), aDataHelper ) )
    1029             :                 {
    1030           0 :                     rSet.DisableItem( nWhich );
    1031           0 :                 }
    1032             :             }
    1033           0 :             break;
    1034             : 
    1035             :         case SID_PASTE_SPECIAL:
    1036             :         case SID_CLIPBOARD_FORMAT_ITEMS:
    1037           0 :             rSet.DisableItem( nWhich );
    1038           0 :             break;
    1039             :         }
    1040             : 
    1041           0 :         nWhich = aIter.NextWhich();
    1042           0 :     }
    1043             : }
    1044             : 
    1045             : // Hyperlink status
    1046             : 
    1047           0 : void SwDrawTextShell::StateInsert(SfxItemSet &rSet)
    1048             : {
    1049           0 :     if (!IsTextEdit())  // Otherwise crash!
    1050           0 :         return;
    1051             : 
    1052           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
    1053           0 :     SfxWhichIter aIter(rSet);
    1054           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1055             : 
    1056           0 :     while(nWhich)
    1057             :     {
    1058           0 :         switch(nWhich)
    1059             :         {
    1060             :             case SID_HYPERLINK_GETLINK:
    1061             :                 {
    1062           0 :                     SvxHyperlinkItem aHLinkItem;
    1063           0 :                     aHLinkItem.SetInsertMode(HLINK_FIELD);
    1064             : 
    1065           0 :                     const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
    1066             : 
    1067           0 :                     if (pFieldItem)
    1068             :                     {
    1069           0 :                         const SvxFieldData* pField = pFieldItem->GetField();
    1070             : 
    1071           0 :                         if (pField->ISA(SvxURLField))
    1072             :                         {
    1073           0 :                             aHLinkItem.SetName(static_cast<const SvxURLField*>( pField)->GetRepresentation());
    1074           0 :                             aHLinkItem.SetURL(static_cast<const SvxURLField*>( pField)->GetURL());
    1075           0 :                             aHLinkItem.SetTargetFrame(static_cast<const SvxURLField*>( pField)->GetTargetFrame());
    1076             :                         }
    1077             :                     }
    1078             :                     else
    1079             :                     {
    1080           0 :                         OUString sSel(pOLV->GetSelected());
    1081           0 :                         sSel = sSel.copy(0, std::min<sal_Int32>(255, sSel.getLength()));
    1082           0 :                         aHLinkItem.SetName(comphelper::string::stripEnd(sSel, ' '));
    1083             :                     }
    1084             : 
    1085           0 :                     sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
    1086           0 :                     aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() |
    1087           0 :                         ((nHtmlMode & HTMLMODE_ON) != 0 ? HLINK_HTMLMODE : 0)));
    1088             : 
    1089           0 :                     rSet.Put(aHLinkItem);
    1090             :                 }
    1091           0 :                 break;
    1092             :         }
    1093           0 :         nWhich = aIter.NextWhich();
    1094           0 :     }
    1095         177 : }
    1096             : 
    1097             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11