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

Generated by: LCOV version 1.10