LCOV - code coverage report
Current view: top level - sw/source/uibase/shells - textsh.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 62 591 10.5 %
Date: 2015-06-13 12:38:46 Functions: 14 21 66.7 %
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 <config_features.h>
      21             : 
      22             : #include <hintids.hxx>
      23             : #include <comphelper/string.hxx>
      24             : #include <svl/globalnameitem.hxx>
      25             : #include <svl/ownlist.hxx>
      26             : #include <sfx2/frmdescr.hxx>
      27             : #include <sfx2/objface.hxx>
      28             : #include <sfx2/lnkbase.hxx>
      29             : 
      30             : #include <tools/errinf.hxx>
      31             : #include <svx/svdview.hxx>
      32             : #include <svl/ptitem.hxx>
      33             : #include <svl/stritem.hxx>
      34             : #include <unotools/moduleoptions.hxx>
      35             : #include <vcl/msgbox.hxx>
      36             : #include <sfx2/fcontnr.hxx>
      37             : #include <svx/hlnkitem.hxx>
      38             : #include <svl/srchitem.hxx>
      39             : #include <sfx2/dispatch.hxx>
      40             : #include <sfx2/docfile.hxx>
      41             : #include <svl/urihelper.hxx>
      42             : #include <basic/sbxvar.hxx>
      43             : #include <svl/whiter.hxx>
      44             : #include <sfx2/request.hxx>
      45             : #include <editeng/opaqitem.hxx>
      46             : #include <editeng/fontitem.hxx>
      47             : #include <editeng/adjustitem.hxx>
      48             : #include <editeng/boxitem.hxx>
      49             : #include <editeng/sizeitem.hxx>
      50             : #include <editeng/svxacorr.hxx>
      51             : #include <editeng/scripttypeitem.hxx>
      52             : #include <vcl/graphicfilter.hxx>
      53             : #include <sfx2/htmlmode.hxx>
      54             : #include <svx/pfiledlg.hxx>
      55             : #include <svtools/htmlcfg.hxx>
      56             : #include <com/sun/star/i18n/TransliterationModules.hpp>
      57             : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
      58             : #include <com/sun/star/embed/Aspects.hpp>
      59             : 
      60             : #include <comphelper/classids.hxx>
      61             : #include <editeng/acorrcfg.hxx>
      62             : #include <wdocsh.hxx>
      63             : #include <fmtinfmt.hxx>
      64             : #include <fmtclds.hxx>
      65             : #include <fmtsrnd.hxx>
      66             : #include <fmtfsize.hxx>
      67             : #include <swmodule.hxx>
      68             : #include <wrtsh.hxx>
      69             : #include <view.hxx>
      70             : #include <docsh.hxx>
      71             : #include <doc.hxx>
      72             : #include <IDocumentChartDataProviderAccess.hxx>
      73             : #include <uitool.hxx>
      74             : #include <cmdid.h>
      75             : #include <globals.hrc>
      76             : #include <frmmgr.hxx>
      77             : #include <textsh.hxx>
      78             : #include <frmfmt.hxx>
      79             : #include <tablemgr.hxx>
      80             : #include <swundo.hxx>
      81             : #include <shellio.hxx>
      82             : #include <frmdlg.hxx>
      83             : #include <usrpref.hxx>
      84             : #include <swtable.hxx>
      85             : #include <tblafmt.hxx>
      86             : #include <caption.hxx>
      87             : #include <idxmrk.hxx>
      88             : #include <poolfmt.hxx>
      89             : #include <breakit.hxx>
      90             : #include <crsskip.hxx>
      91             : #include <modcfg.hxx>
      92             : #include <column.hxx>
      93             : #include <edtwin.hxx>
      94             : #include <shells.hrc>
      95             : #include <popup.hrc>
      96             : #include <swerror.h>
      97             : #include <unochart.hxx>
      98             : 
      99             : #include <chartins.hxx>
     100             : 
     101             : #define SwTextShell
     102             : #include <sfx2/msg.hxx>
     103             : #include <sfx2/sidebar/EnumContext.hxx>
     104             : #include <swslots.hxx>
     105             : #include <SwRewriter.hxx>
     106             : #include <comcore.hrc>
     107             : 
     108             : using namespace ::com::sun::star;
     109             : 
     110             : #include <svx/svxdlg.hxx>
     111             : #include <svx/dialogs.hrc>
     112             : #include "swabstdlg.hxx"
     113             : #include <misc.hrc>
     114             : #include <table.hrc>
     115             : #include <frmui.hrc>
     116             : #include <unomid.h>
     117             : #include <boost/scoped_ptr.hpp>
     118             : 
     119      322888 : SFX_IMPL_INTERFACE(SwTextShell, SwBaseShell)
     120             : 
     121          59 : void SwTextShell::InitInterface_Impl()
     122             : {
     123          59 :     GetStaticInterface()->RegisterPopupMenu(SW_RES(MN_TEXT_POPUPMENU));
     124             : 
     125          59 :     GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, RID_TEXT_TOOLBOX);
     126             : 
     127          59 :     GetStaticInterface()->RegisterChildWindow(FN_EDIT_FORMULA);
     128          59 :     GetStaticInterface()->RegisterChildWindow(FN_INSERT_FIELD);
     129          59 :     GetStaticInterface()->RegisterChildWindow(FN_INSERT_IDX_ENTRY_DLG);
     130          59 :     GetStaticInterface()->RegisterChildWindow(FN_INSERT_AUTH_ENTRY_DLG);
     131          59 :     GetStaticInterface()->RegisterChildWindow(SID_RUBY_DIALOG);
     132          59 :     GetStaticInterface()->RegisterChildWindow(FN_WORDCOUNT_DIALOG);
     133          59 : }
     134             : 
     135       43182 : TYPEINIT1(SwTextShell,SwBaseShell)
     136             : 
     137           2 : void SwTextShell::ExecInsert(SfxRequest &rReq)
     138             : {
     139           2 :     SwWrtShell &rSh = GetShell();
     140             : 
     141             :     OSL_ENSURE( !rSh.IsObjSelected() && !rSh.IsFrmSelected(),
     142             :             "wrong shell on dispatcher" );
     143             : 
     144           2 :     const SfxItemSet *pArgs = rReq.GetArgs();
     145           2 :     const SfxPoolItem* pItem = 0;
     146           2 :     const sal_uInt16 nSlot = rReq.GetSlot();
     147           2 :     if(pArgs)
     148           2 :         pArgs->GetItemState(nSlot, false, &pItem );
     149             : 
     150           2 :     switch( nSlot )
     151             :     {
     152             :     case FN_INSERT_STRING:
     153           2 :         if( pItem )
     154           2 :             rSh.InsertByWord(static_cast<const SfxStringItem *>(pItem)->GetValue());
     155           2 :         break;
     156             : 
     157             :     case FN_INSERT_SOFT_HYPHEN:
     158           0 :         if( CHAR_SOFTHYPHEN != rSh.SwCrsrShell::GetChar( true, 0 ) &&
     159           0 :             CHAR_SOFTHYPHEN != rSh.SwCrsrShell::GetChar( true, -1 ))
     160           0 :             rSh.Insert( OUString( CHAR_SOFTHYPHEN ) );
     161           0 :         break;
     162             : 
     163             :     case FN_INSERT_HARDHYPHEN:
     164             :     case FN_INSERT_HARD_SPACE:
     165             :         {
     166           0 :             const sal_Unicode cIns = FN_INSERT_HARD_SPACE == nSlot ? CHAR_HARDBLANK : CHAR_HARDHYPHEN;
     167             : 
     168           0 :             SvxAutoCorrCfg& rACfg = SvxAutoCorrCfg::Get();
     169           0 :             SvxAutoCorrect* pACorr = rACfg.GetAutoCorrect();
     170           0 :             if( pACorr && rACfg.IsAutoFormatByInput()
     171           0 :                 && pACorr->IsAutoCorrFlag(
     172           0 :                     CapitalStartSentence | CapitalStartWord | AddNonBrkSpace | ChgOrdinalNumber | ChgToEnEmDash | SetINetAttr | Autocorrect ) )
     173             :             {
     174           0 :                 rSh.AutoCorrect( *pACorr, cIns );
     175             :             }
     176             :             else
     177             :             {
     178           0 :                 rSh.Insert( OUString( cIns ) );
     179             :             }
     180             :         }
     181           0 :         break;
     182             : 
     183             :     case SID_INSERT_RLM :
     184             :     case SID_INSERT_LRM :
     185             :     case SID_INSERT_ZWNBSP :
     186             :     case SID_INSERT_ZWSP:
     187             :     {
     188           0 :         sal_Unicode cIns = 0;
     189           0 :         switch(nSlot)
     190             :         {
     191           0 :             case SID_INSERT_RLM : cIns = CHAR_RLM ; break;
     192           0 :             case SID_INSERT_LRM : cIns = CHAR_LRM ; break;
     193           0 :             case SID_INSERT_ZWSP : cIns = CHAR_ZWSP ; break;
     194           0 :             case SID_INSERT_ZWNBSP: cIns = CHAR_ZWNBSP; break;
     195             :         }
     196           0 :         rSh.Insert( OUString( cIns ) );
     197             :     }
     198           0 :     break;
     199             : 
     200             :     case FN_INSERT_BREAK:
     201             :         {
     202           0 :             if( !rSh.CrsrInsideInputField() )
     203             :             {
     204           0 :                 rSh.SplitNode();
     205             :             }
     206             :             else
     207             :             {
     208           0 :                 rSh.InsertLineBreak();
     209             :             }
     210             :         }
     211           0 :         rReq.Done();
     212           0 :         break;
     213             : 
     214             :     case FN_INSERT_PAGEBREAK:
     215           0 :         rSh.InsertPageBreak();
     216           0 :         rReq.Done();
     217           0 :         break;
     218             : 
     219             :     case FN_INSERT_LINEBREAK:
     220           0 :         rSh.InsertLineBreak();
     221           0 :         rReq.Done();
     222           0 :         break;
     223             : 
     224             :     case FN_INSERT_COLUMN_BREAK:
     225           0 :         rSh.InsertColumnBreak();
     226           0 :         rReq.Done();
     227           0 :         break;
     228             : 
     229             :     case SID_HYPERLINK_SETLINK:
     230           0 :         if (pItem)
     231           0 :             InsertHyperlink(*static_cast<const SvxHyperlinkItem *>(pItem));
     232           0 :         rReq.Done();
     233           0 :         break;
     234             : 
     235             : #if HAVE_FEATURE_AVMEDIA
     236             :     case SID_INSERT_AVMEDIA:
     237           0 :         rReq.SetReturnValue(SfxBoolItem(nSlot, InsertMediaDlg( rReq )));
     238           0 :         break;
     239             : 
     240             :     case  SID_INSERT_SOUND:
     241             :     case  SID_INSERT_VIDEO:
     242             :     {
     243           0 :         SvxPluginFileDlg aDlg( &GetView().GetViewFrame()->GetWindow(), nSlot );
     244           0 :         aDlg.SetContext( nSlot == SID_INSERT_SOUND? sfx2::FileDialogHelper::SW_INSERT_SOUND : sfx2::FileDialogHelper::SW_INSERT_VIDEO );
     245             : 
     246           0 :         if ( ERRCODE_NONE == aDlg.Execute() )
     247             :         {
     248             :             // Determine URL
     249           0 :             OUString aStrURL( aDlg.GetPath() );
     250           0 :             aStrURL = URIHelper::SmartRel2Abs(
     251           0 :                 INetURLObject(), aStrURL, URIHelper::GetMaybeFileHdl() );
     252             : 
     253           0 :             INetURLObject url;
     254           0 :             url.SetSmartProtocol( INetProtocol::File );
     255             : 
     256           0 :             if ( url.SetURL( aStrURL, INetURLObject::WAS_ENCODED ) )
     257             :             {
     258           0 :                 OUString aName;
     259           0 :                 comphelper::EmbeddedObjectContainer aCnt;
     260           0 :                 svt::EmbeddedObjectRef xObj( aCnt.CreateEmbeddedObject( SvGlobalName( SO3_PLUGIN_CLASSID ).GetByteSequence(), aName ), embed::Aspects::MSOLE_CONTENT );
     261           0 :                 if ( xObj.is() )
     262             :                 {
     263           0 :                     svt::EmbeddedObjectRef::TryRunningState( xObj.GetObject() );
     264             : 
     265             :                     // set properties from dialog
     266           0 :                     uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
     267           0 :                     if ( xSet.is() )
     268             :                     {
     269           0 :                         xSet->setPropertyValue("PluginURL",
     270           0 :                                 uno::makeAny( OUString( url.GetMainURL( INetURLObject::NO_DECODE ) ) ) );
     271           0 :                     }
     272             :                 }
     273             : 
     274           0 :                 rSh.InsertObject( xObj, 0, true, nSlot);
     275           0 :             }
     276           0 :         }
     277             :     }
     278           0 :     break;
     279             : #endif
     280             : 
     281             :     case SID_INSERT_OBJECT:
     282             :     case SID_INSERT_PLUGIN:
     283             :     {
     284           0 :         SFX_REQUEST_ARG( rReq, pNameItem, SfxGlobalNameItem, SID_INSERT_OBJECT, false );
     285           0 :         SvGlobalName *pName = NULL;
     286           0 :         SvGlobalName aName;
     287           0 :         if ( pNameItem )
     288             :         {
     289           0 :             aName = pNameItem->GetValue();
     290           0 :             pName = &aName;
     291             :         }
     292             : 
     293           0 :         SFX_REQUEST_ARG( rReq, pClassLocationItem,  SfxStringItem, FN_PARAM_2, false );
     294           0 :         SFX_REQUEST_ARG( rReq, pCommandsItem,       SfxStringItem, FN_PARAM_3, false );
     295             :         //TODO/LATER: recording currently not working, need code for Commandlist
     296           0 :         svt::EmbeddedObjectRef xObj;
     297           0 :         if( nSlot == SID_INSERT_PLUGIN && ( pClassLocationItem || pCommandsItem ) )
     298             :         {
     299           0 :             OUString sClassLocation;
     300           0 :             if(pClassLocationItem)
     301           0 :                 sClassLocation = pClassLocationItem->GetValue();
     302             : 
     303           0 :             SvCommandList aCommandList;
     304           0 :             if(pCommandsItem)
     305             :             {
     306             :                 sal_Int32 nTemp;
     307           0 :                 aCommandList.AppendCommands( pCommandsItem->GetValue(), &nTemp );
     308             :             }
     309             : 
     310             :             {
     311           0 :                 comphelper::EmbeddedObjectContainer aCnt;
     312           0 :                 OUString sName;
     313             :                 xObj.Assign( aCnt.CreateEmbeddedObject( SvGlobalName( SO3_PLUGIN_CLASSID ).GetByteSequence(), sName ),
     314           0 :                             embed::Aspects::MSOLE_CONTENT );
     315           0 :                 svt::EmbeddedObjectRef::TryRunningState( xObj.GetObject() );
     316           0 :                 uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
     317           0 :                 if ( xSet.is() )
     318             :                 {
     319             :                     try
     320             :                     {
     321           0 :                         if ( !sClassLocation.isEmpty() )
     322           0 :                             xSet->setPropertyValue("PluginURL",
     323             :                                 uno::makeAny(
     324             :                                     OUString(
     325             :                                         URIHelper::SmartRel2Abs(
     326             :                                             INetURLObject(), sClassLocation,
     327           0 :                                             URIHelper::GetMaybeFileHdl()) ) ) );
     328           0 :                         uno::Sequence< beans::PropertyValue > aSeq;
     329           0 :                         if ( aCommandList.size() )
     330             :                         {
     331           0 :                             aCommandList.FillSequence( aSeq );
     332           0 :                             xSet->setPropertyValue("PluginCommands", uno::makeAny( aSeq ) );
     333           0 :                         }
     334             :                     }
     335           0 :                     catch (const uno::Exception&)
     336             :                     {
     337             :                     }
     338           0 :                 }
     339             :             }
     340             : 
     341           0 :             if(xObj.is())
     342           0 :                 rSh.InsertOleObject( xObj );
     343             :         }
     344             :         else
     345             :         {
     346             :             OSL_ENSURE( !pNameItem || nSlot == SID_INSERT_OBJECT, "Superfluous argument!" );
     347           0 :             rSh.InsertObject( xObj, pName, true, nSlot);
     348           0 :             rReq.Done();
     349             :         }
     350           0 :         break;
     351             :     }
     352             :     case SID_INSERT_FLOATINGFRAME:
     353             :     {
     354           0 :         svt::EmbeddedObjectRef xObj;
     355           0 :         SFX_REQUEST_ARG( rReq, pNameItem,   SfxStringItem, FN_PARAM_1, false );
     356           0 :         SFX_REQUEST_ARG( rReq, pURLItem,    SfxStringItem, FN_PARAM_2, false );
     357           0 :         SFX_REQUEST_ARG( rReq, pMarginItem, SvxSizeItem, FN_PARAM_3, false );
     358           0 :         SFX_REQUEST_ARG( rReq, pScrollingItem, SfxByteItem, FN_PARAM_4, false );
     359           0 :         SFX_REQUEST_ARG( rReq, pBorderItem, SfxBoolItem, FN_PARAM_5, false );
     360             : 
     361           0 :         if(pURLItem) // URL is a _must_
     362             :         {
     363           0 :             comphelper::EmbeddedObjectContainer aCnt;
     364           0 :             OUString aName;
     365             :             xObj.Assign( aCnt.CreateEmbeddedObject( SvGlobalName( SO3_IFRAME_CLASSID ).GetByteSequence(), aName ),
     366           0 :                         embed::Aspects::MSOLE_CONTENT );
     367           0 :             svt::EmbeddedObjectRef::TryRunningState( xObj.GetObject() );
     368           0 :             uno::Reference < beans::XPropertySet > xSet( xObj->getComponent(), uno::UNO_QUERY );
     369           0 :             if ( xSet.is() )
     370             :             {
     371             :                 try
     372             :                 {
     373           0 :                     ScrollingMode eScroll = ScrollingAuto;
     374           0 :                     if( pScrollingItem && pScrollingItem->GetValue() <= ScrollingAuto )
     375           0 :                         eScroll = (ScrollingMode) pScrollingItem->GetValue();
     376             : 
     377           0 :                     Size aMargin;
     378           0 :                     if ( pMarginItem )
     379           0 :                         aMargin = pMarginItem->GetSize();
     380             : 
     381           0 :                     if ( pURLItem )
     382           0 :                         xSet->setPropertyValue("FrameURL", uno::makeAny( OUString( pURLItem->GetValue() ) ) );
     383           0 :                     if ( pNameItem )
     384           0 :                         xSet->setPropertyValue("FrameName", uno::makeAny( OUString( pNameItem->GetValue() ) ) );
     385             : 
     386           0 :                     if ( eScroll == ScrollingAuto )
     387           0 :                         xSet->setPropertyValue("FrameIsAutoScroll",
     388           0 :                             uno::makeAny( true ) );
     389             :                     else
     390           0 :                         xSet->setPropertyValue("FrameIsScrollingMode",
     391           0 :                             uno::makeAny( eScroll == ScrollingYes ) );
     392             : 
     393           0 :                     if ( pBorderItem )
     394           0 :                         xSet->setPropertyValue("FrameIsBorder",
     395           0 :                             uno::makeAny( pBorderItem->GetValue() ) );
     396             : 
     397           0 :                     if ( pMarginItem )
     398             :                     {
     399           0 :                         xSet->setPropertyValue("FrameMarginWidth",
     400           0 :                             uno::makeAny( sal_Int32( aMargin.Width() ) ) );
     401             : 
     402           0 :                         xSet->setPropertyValue("FrameMarginHeight",
     403           0 :                             uno::makeAny( sal_Int32( aMargin.Height() ) ) );
     404             :                     }
     405             :                 }
     406           0 :                 catch (const uno::Exception&)
     407             :                 {
     408             :                 }
     409             :             }
     410             : 
     411           0 :             rSh.InsertOleObject( xObj );
     412             :         }
     413             :         else
     414             :         {
     415           0 :             rSh.InsertObject( xObj, 0, true, nSlot);
     416           0 :             rReq.Done();
     417           0 :         }
     418             :     }
     419           0 :     break;
     420             :     case SID_INSERT_DIAGRAM:
     421             :         {
     422           0 :             SvtModuleOptions aMOpt;
     423           0 :             if ( !aMOpt.IsChart() )
     424           0 :                 break;
     425           0 :             if(!rReq.IsAPI())
     426             :             {
     427           0 :                 SfxViewFrame* pVFrame = GetView().GetViewFrame();
     428           0 :                 SwInsertChart( &GetView().GetEditWin(), &pVFrame->GetBindings() );
     429             :             }
     430             :             else
     431             :             {
     432           0 :                 uno::Reference< chart2::data::XDataProvider > xDataProvider;
     433           0 :                 bool bFillWithData = true;
     434           0 :                 OUString aRangeString;
     435           0 :                 if (!GetShell().IsTableComplexForChart())
     436             :                 {
     437           0 :                     SwFrameFormat* pTableFormat = GetShell().GetTableFormat();
     438           0 :                     aRangeString = pTableFormat->GetName();
     439           0 :                     aRangeString += OUString( '.' );
     440           0 :                     aRangeString += GetShell().GetBoxNms();
     441             : 
     442             :                     // get table data provider
     443           0 :                     xDataProvider.set( GetView().GetDocShell()->getIDocumentChartDataProviderAccess()->GetChartDataProvider() );
     444             :                 }
     445             :                 else
     446           0 :                     bFillWithData = false;  // will create chart with only it's default image
     447             : 
     448           0 :                 SwTableFUNC( &rSh, false ).InsertChart( xDataProvider, bFillWithData, aRangeString );
     449           0 :                 rSh.LaunchOLEObj();
     450             : 
     451           0 :                 svt::EmbeddedObjectRef& xObj = rSh.GetOLEObject();
     452           0 :                 if(pItem && xObj.is())
     453             :                 {
     454           0 :                     Size aSize(static_cast<const SvxSizeItem*>(pItem)->GetSize());
     455             :                     aSize = OutputDevice::LogicToLogic
     456           0 :                                     ( aSize, MapMode( MAP_TWIP ), MapMode( MAP_100TH_MM ) );
     457             : 
     458           0 :                     if(aSize.Width() > MINLAY&& aSize.Height()> MINLAY)
     459             :                     {
     460           0 :                         awt::Size aSz;
     461           0 :                         aSz.Width = aSize.Width();
     462           0 :                         aSz.Height = aSize.Height();
     463           0 :                         xObj->setVisualAreaSize( xObj.GetViewAspect(), aSz );
     464             :                     }
     465           0 :                 }
     466           0 :             }
     467             :         }
     468           0 :         break;
     469             : 
     470             :     case FN_INSERT_SMA:
     471             :         {
     472             :             // #i34343# Inserting a math object into an autocompletion crashes
     473             :             // the suggestion has to be removed before
     474           0 :             GetView().GetEditWin().StopQuickHelp();
     475           0 :             SvGlobalName aGlobalName( SO3_SM_CLASSID );
     476           0 :             rSh.InsertObject( svt::EmbeddedObjectRef(), &aGlobalName, true, 0 );
     477             :         }
     478           0 :         break;
     479             : 
     480             :     case FN_INSERT_TABLE:
     481           0 :         InsertTable( rReq );
     482           0 :         break;
     483             : 
     484             :     case FN_INSERT_FRAME_INTERACT_NOCOL:
     485             :     case FN_INSERT_FRAME_INTERACT:
     486             :     {
     487           0 :         sal_uInt16 nCols = 1;
     488           0 :         bool bModifier1 = rReq.GetModifier() == KEY_MOD1;
     489           0 :         if(pArgs)
     490             :         {
     491           0 :             if(FN_INSERT_FRAME_INTERACT_NOCOL != nSlot &&
     492           0 :                 pArgs->GetItemState(SID_ATTR_COLUMNS, false, &pItem) == SfxItemState::SET)
     493           0 :                 nCols = static_cast<const SfxUInt16Item *>(pItem)->GetValue();
     494           0 :             if(pArgs->GetItemState(SID_MODIFIER, false, &pItem) == SfxItemState::SET)
     495           0 :                 bModifier1 |= KEY_MOD1 == static_cast<const SfxUInt16Item *>(pItem)->GetValue();
     496             :         }
     497           0 :         if(bModifier1 )
     498             :         {
     499           0 :             SwEditWin& rEdtWin = GetView().GetEditWin();
     500           0 :             Size aWinSize = rEdtWin.GetSizePixel();
     501           0 :             Point aStartPos(aWinSize.Width()/2, aWinSize.Height() / 2);
     502           0 :             aStartPos = rEdtWin.PixelToLogic(aStartPos);
     503           0 :             aStartPos.X() -= 8 * MM50;
     504           0 :             aStartPos.Y() -= 4 * MM50;
     505           0 :             Size aSize(16 * MM50, 8 * MM50);
     506           0 :             GetShell().LockPaint();
     507           0 :             GetShell().StartAllAction();
     508           0 :             SwFlyFrmAttrMgr aMgr( true, GetShellPtr(), FRMMGR_TYPE_TEXT );
     509           0 :             if(nCols > 1)
     510             :             {
     511           0 :                 SwFormatCol aCol;
     512           0 :                 aCol.Init( nCols, aCol.GetGutterWidth(), aCol.GetWishWidth() );
     513           0 :                 aMgr.SetCol( aCol );
     514             :             }
     515           0 :             aMgr.InsertFlyFrm(FLY_AT_PARA, aStartPos, aSize);
     516           0 :             GetShell().EndAllAction();
     517           0 :             GetShell().UnlockPaint();
     518             :         }
     519             :         else
     520             :         {
     521           0 :             GetView().InsFrmMode(nCols);
     522             :         }
     523           0 :         rReq.Ignore();
     524             :     }
     525           0 :     break;
     526             :     case FN_INSERT_FRAME:
     527             :     {
     528           0 :         bool bSingleCol = false;
     529           0 :         if( 0!= dynamic_cast< SwWebDocShell*>( GetView().GetDocShell()) )
     530             :         {
     531           0 :             SvxHtmlOptions& rHtmlOpt = SvxHtmlOptions::Get();
     532           0 :             if( HTML_CFG_MSIE == rHtmlOpt.GetExportMode() )
     533             :             {
     534           0 :                 bSingleCol = true;
     535             :             }
     536             : 
     537             :         }
     538             :         // Create new border
     539           0 :         SwFlyFrmAttrMgr aMgr( true, GetShellPtr(), FRMMGR_TYPE_TEXT );
     540           0 :         if(pArgs)
     541             :         {
     542           0 :             Size aSize(aMgr.GetSize());
     543           0 :             aSize.Width() = GetShell().GetAnyCurRect(RECT_PAGE_PRT).Width();
     544           0 :             Point aPos = aMgr.GetPos();
     545           0 :             RndStdIds eAnchor = FLY_AT_PARA;
     546           0 :             if(pArgs->GetItemState(nSlot, false, &pItem) == SfxItemState::SET)
     547           0 :                 eAnchor = (RndStdIds)static_cast<const SfxUInt16Item *>(pItem)->GetValue();
     548           0 :             if(pArgs->GetItemState(FN_PARAM_1, false, &pItem)  == SfxItemState::SET)
     549           0 :                 aPos = static_cast<const SfxPointItem *>(pItem)->GetValue();
     550           0 :             if(pArgs->GetItemState(FN_PARAM_2, false, &pItem)  == SfxItemState::SET)
     551           0 :                 aSize = static_cast<const SvxSizeItem *>(pItem)->GetSize();
     552           0 :             if(pArgs->GetItemState(SID_ATTR_COLUMNS, false, &pItem)  == SfxItemState::SET)
     553             :             {
     554           0 :                 const sal_uInt16 nCols = static_cast<const SfxUInt16Item *>(pItem)->GetValue();
     555           0 :                 if( !bSingleCol && 1 < nCols )
     556             :                 {
     557           0 :                     SwFormatCol aFormatCol;
     558           0 :                     aFormatCol.Init( nCols , (rReq.IsAPI() ? 0
     559           0 :                                         : DEF_GUTTER_WIDTH), USHRT_MAX );
     560           0 :                     aMgr.SetCol(aFormatCol);
     561             :                 }
     562             :             }
     563             : 
     564           0 :             GetShell().LockPaint();
     565           0 :             GetShell().StartAllAction();
     566             : 
     567           0 :             aMgr.InsertFlyFrm(eAnchor, aPos, aSize);
     568             : 
     569           0 :             GetShell().EndAllAction();
     570           0 :             GetShell().UnlockPaint();
     571             :         }
     572             :         else
     573             :         {
     574             :             static const sal_uInt16 aFrmAttrRange[] =
     575             :             {
     576             :                 RES_FRMATR_BEGIN,       RES_FRMATR_END-1,
     577             :                 SID_ATTR_BORDER_INNER,  SID_ATTR_BORDER_INNER,
     578             :                 FN_GET_PRINT_AREA,      FN_GET_PRINT_AREA,
     579             :                 SID_ATTR_PAGE_SIZE,     SID_ATTR_PAGE_SIZE,
     580             :                 FN_SET_FRM_NAME,        FN_SET_FRM_NAME,
     581             :                 SID_HTML_MODE,          SID_HTML_MODE,
     582             :                 0
     583             :             };
     584             : 
     585           0 :             SfxItemSet aSet(GetPool(), aFrmAttrRange );
     586           0 :             aSet.Put(SfxUInt16Item(SID_HTML_MODE, ::GetHtmlMode(GetView().GetDocShell())));
     587           0 :             const SwRect &rPg = GetShell().GetAnyCurRect(RECT_PAGE);
     588           0 :             SwFormatFrmSize aFrmSize(ATT_VAR_SIZE, rPg.Width(), rPg.Height());
     589           0 :             aFrmSize.SetWhich(GetPool().GetWhich(SID_ATTR_PAGE_SIZE));
     590           0 :             aSet.Put(aFrmSize);
     591             : 
     592           0 :             const SwRect &rPr = GetShell().GetAnyCurRect(RECT_PAGE_PRT);
     593           0 :             SwFormatFrmSize aPrtSize(ATT_VAR_SIZE, rPr.Width(), rPr.Height());
     594           0 :             aPrtSize.SetWhich(GetPool().GetWhich(FN_GET_PRINT_AREA));
     595           0 :             aSet.Put(aPrtSize);
     596             : 
     597           0 :             aSet.Put(aMgr.GetAttrSet());
     598           0 :             aSet.SetParent( aMgr.GetAttrSet().GetParent() );
     599             : 
     600             :             // Delete minimum size in columns.
     601           0 :             SvxBoxInfoItem aBoxInfo(static_cast<const SvxBoxInfoItem &>(aSet.Get(SID_ATTR_BORDER_INNER)));
     602           0 :             const SvxBoxItem& rBox = static_cast<const SvxBoxItem&>(aSet.Get(RES_BOX));
     603           0 :             aBoxInfo.SetMinDist(false);
     604           0 :             aBoxInfo.SetDefDist(rBox.GetDistance(SvxBoxItemLine::LEFT));
     605           0 :             aSet.Put(aBoxInfo);
     606             : 
     607           0 :             FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebDocShell, GetView().GetDocShell()));
     608           0 :             SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)));
     609           0 :             SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
     610             :             OSL_ENSURE(pFact, "Dialog creation failed!");
     611             :             boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateFrmTabDialog("FrameDialog",
     612           0 :                                                     GetView().GetViewFrame(),
     613           0 :                                                     &GetView().GetViewFrame()->GetWindow(),
     614           0 :                                                     aSet, true));
     615             :             OSL_ENSURE(pDlg, "Dialog creation failed!");
     616           0 :             if(pDlg->Execute() == RET_OK && pDlg->GetOutputItemSet())
     617             :             {
     618             :                 //local variable necessary at least after call of .AutoCaption() because this could be deleted at this point
     619           0 :                 SwWrtShell& rShell = GetShell();
     620           0 :                 rShell.LockPaint();
     621           0 :                 rShell.StartAllAction();
     622           0 :                 rShell.StartUndo(UNDO_INSERT);
     623             : 
     624           0 :                 const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
     625           0 :                 aMgr.SetAttrSet(*pOutSet);
     626             : 
     627             :                 // At first delete the selection at the ClickToEditField.
     628           0 :                 if( rShell.IsInClickToEdit() )
     629           0 :                     rShell.DelRight();
     630             : 
     631           0 :                 aMgr.InsertFlyFrm();
     632             : 
     633             :                 uno::Reference< frame::XDispatchRecorder > xRecorder =
     634           0 :                         GetView().GetViewFrame()->GetBindings().GetRecorder();
     635           0 :                 if ( xRecorder.is() )
     636             :                 {
     637             :                     //FN_INSERT_FRAME
     638           0 :                     sal_uInt16 nAnchor = (sal_uInt16)aMgr.GetAnchor();
     639           0 :                         rReq.AppendItem(SfxUInt16Item(nSlot, nAnchor));
     640           0 :                         rReq.AppendItem(SfxPointItem(FN_PARAM_1, rShell.GetObjAbsPos()));
     641           0 :                         rReq.AppendItem(SvxSizeItem(FN_PARAM_2, rShell.GetObjSize()));
     642           0 :                     rReq.Done();
     643             :                 }
     644             : 
     645           0 :                 GetView().AutoCaption(FRAME_CAP);
     646             : 
     647             :                 {
     648           0 :                     SwRewriter aRewriter;
     649             : 
     650           0 :                     aRewriter.AddRule(UndoArg1, SW_RESSTR(STR_FRAME));
     651             : 
     652           0 :                     rShell.EndUndo(UNDO_INSERT, &aRewriter);
     653             :                 }
     654           0 :                 rShell.EndAllAction();
     655           0 :                 rShell.UnlockPaint();
     656           0 :             }
     657             :         }
     658           0 :         break;
     659             :     }
     660             :     case FN_FORMAT_COLUMN :
     661             :     {
     662           0 :         SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
     663             :         OSL_ENSURE(pFact, "Dialog creation failed!");
     664           0 :         boost::scoped_ptr<VclAbstractDialog> pColDlg(pFact->CreateVclAbstractDialog( GetView().GetWindow(), rSh, DLG_COLUMN));
     665             :         OSL_ENSURE(pColDlg, "Dialog creation failed!");
     666           0 :         pColDlg->Execute();
     667             :     }
     668           0 :     break;
     669             : 
     670             :     default:
     671             :         OSL_ENSURE(false, "wrong  dispatcher");
     672           0 :         return;
     673             :     }
     674             : }
     675             : 
     676           0 : static bool lcl_IsMarkInSameSection( SwWrtShell& rWrtSh, const SwSection* pSect )
     677             : {
     678           0 :     rWrtSh.SwapPam();
     679           0 :     bool bRet = pSect == rWrtSh.GetCurrSection();
     680           0 :     rWrtSh.SwapPam();
     681           0 :     return bRet;
     682             : }
     683             : 
     684        1066 : void SwTextShell::StateInsert( SfxItemSet &rSet )
     685             : {
     686        1066 :     const bool bHtmlModeOn = ::GetHtmlMode(GetView().GetDocShell()) & HTMLMODE_ON;
     687        1066 :     SfxWhichIter aIter( rSet );
     688        1066 :     SwWrtShell &rSh = GetShell();
     689        1066 :     sal_uInt16 nWhich = aIter.FirstWhich();
     690        2132 :     SvtModuleOptions aMOpt;
     691             :     SfxObjectCreateMode eCreateMode =
     692        1066 :                         GetView().GetDocShell()->GetCreateMode();
     693             : 
     694        1066 :     rSh.Push();
     695        1066 :     const bool bCrsrInHidden = rSh.SelectHiddenRange();
     696        1066 :     rSh.Pop();
     697             : 
     698        3588 :     while ( nWhich )
     699             :     {
     700        1456 :         switch ( nWhich )
     701             :         {
     702             :         case SID_INSERT_AVMEDIA:
     703             :         case SID_INSERT_SOUND:
     704             :         case SID_INSERT_VIDEO:
     705           0 :             if ( GetShell().IsSelFrmMode()
     706           0 :                  || GetShell().CrsrInsideInputField()
     707           0 :                  || SfxObjectCreateMode::EMBEDDED == eCreateMode
     708           0 :                  || bCrsrInHidden )
     709             :             {
     710           0 :                 rSet.DisableItem( nWhich );
     711             :             }
     712           0 :             break;
     713             : 
     714             :         case SID_INSERT_DIAGRAM:
     715        1456 :             if( !aMOpt.IsChart()
     716         728 :                 || GetShell().CrsrInsideInputField()
     717         728 :                 || eCreateMode == SfxObjectCreateMode::EMBEDDED
     718        1456 :                 || bCrsrInHidden )
     719             :             {
     720           0 :                 rSet.DisableItem( nWhich );
     721             :             }
     722         728 :             break;
     723             : 
     724             :             case FN_INSERT_SMA:
     725        1454 :                 if( !aMOpt.IsMath()
     726         727 :                     || eCreateMode == SfxObjectCreateMode::EMBEDDED
     727         727 :                     || bCrsrInHidden
     728        1454 :                     || rSh.CrsrInsideInputField() )
     729             :                 {
     730           0 :                     rSet.DisableItem( nWhich );
     731             :                 }
     732         727 :                 break;
     733             : 
     734             :             case SID_INSERT_FLOATINGFRAME:
     735             :             case SID_INSERT_OBJECT:
     736             :             case SID_INSERT_PLUGIN:
     737             :                 {
     738           1 :                     if( eCreateMode == SfxObjectCreateMode::EMBEDDED || bCrsrInHidden )
     739             :                     {
     740           0 :                         rSet.DisableItem( nWhich );
     741             :                     }
     742           2 :                     else if( GetShell().IsSelFrmMode()
     743           1 :                              || GetShell().CrsrInsideInputField() )
     744             :                     {
     745           0 :                         rSet.DisableItem( nWhich );
     746             :                     }
     747           1 :                     else if(SID_INSERT_FLOATINGFRAME == nWhich && bHtmlModeOn)
     748             :                     {
     749           0 :                         SvxHtmlOptions& rHtmlOpt = SvxHtmlOptions::Get();
     750           0 :                         const sal_uInt16 nExport = rHtmlOpt.GetExportMode();
     751           0 :                         if(HTML_CFG_MSIE != nExport && HTML_CFG_WRITER != nExport )
     752           0 :                             rSet.DisableItem(nWhich);
     753             :                     }
     754             :                 }
     755           1 :                 break;
     756             : 
     757             :             case FN_INSERT_FRAME_INTERACT_NOCOL :
     758             :             case FN_INSERT_FRAME_INTERACT:
     759             :                 {
     760           0 :                     if( GetShell().IsSelFrmMode()
     761           0 :                         || GetShell().CrsrInsideInputField()
     762           0 :                         || bCrsrInHidden )
     763           0 :                         rSet.DisableItem(nWhich);
     764             :                 }
     765           0 :                 break;
     766             : 
     767             :             case SID_HYPERLINK_GETLINK:
     768             :                 {
     769           0 :                     SfxItemSet aSet(GetPool(), RES_TXTATR_INETFMT, RES_TXTATR_INETFMT);
     770           0 :                     rSh.GetCurAttr( aSet );
     771             : 
     772           0 :                     SvxHyperlinkItem aHLinkItem;
     773             :                     const SfxPoolItem* pItem;
     774           0 :                     if(SfxItemState::SET == aSet.GetItemState(RES_TXTATR_INETFMT, false, &pItem))
     775             :                     {
     776           0 :                         const SwFormatINetFormat* pINetFormat = static_cast<const SwFormatINetFormat*>(pItem);
     777           0 :                         aHLinkItem.SetURL(pINetFormat->GetValue());
     778           0 :                         aHLinkItem.SetTargetFrame(pINetFormat->GetTargetFrame());
     779           0 :                         aHLinkItem.SetIntName(pINetFormat->GetName());
     780           0 :                         const SvxMacro *pMacro = pINetFormat->GetMacro( SFX_EVENT_MOUSEOVER_OBJECT );
     781           0 :                         if( pMacro )
     782           0 :                             aHLinkItem.SetMacro(HYPERDLG_EVENT_MOUSEOVER_OBJECT, *pMacro);
     783             : 
     784           0 :                         pMacro = pINetFormat->GetMacro( SFX_EVENT_MOUSECLICK_OBJECT );
     785           0 :                         if( pMacro )
     786           0 :                             aHLinkItem.SetMacro(HYPERDLG_EVENT_MOUSECLICK_OBJECT, *pMacro);
     787             : 
     788           0 :                         pMacro = pINetFormat->GetMacro( SFX_EVENT_MOUSEOUT_OBJECT );
     789           0 :                         if( pMacro )
     790           0 :                             aHLinkItem.SetMacro(HYPERDLG_EVENT_MOUSEOUT_OBJECT, *pMacro);
     791             : 
     792             :                         // Get the text of the Link.
     793           0 :                         rSh.StartAction();
     794           0 :                         rSh.CreateCrsr();
     795           0 :                         rSh.SwCrsrShell::SelectTextAttr(RES_TXTATR_INETFMT,true);
     796           0 :                         OUString sLinkName = rSh.GetSelText();
     797           0 :                         aHLinkItem.SetName(sLinkName);
     798           0 :                         aHLinkItem.SetInsertMode(HLINK_FIELD);
     799           0 :                         rSh.DestroyCrsr();
     800           0 :                         rSh.EndAction();
     801             :                     }
     802             :                     else
     803             :                     {
     804           0 :                         OUString sReturn = rSh.GetSelText();
     805           0 :                         sReturn = sReturn.copy(0, std::min<sal_Int32>(255, sReturn.getLength()));
     806           0 :                         aHLinkItem.SetName(comphelper::string::stripEnd(sReturn, ' '));
     807             :                     }
     808             : 
     809           0 :                     aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() |
     810           0 :                         (bHtmlModeOn ? HLINK_HTMLMODE : 0)));
     811             :                     aHLinkItem.SetMacroEvents ( HYPERDLG_EVENT_MOUSEOVER_OBJECT|
     812           0 :                         HYPERDLG_EVENT_MOUSECLICK_OBJECT | HYPERDLG_EVENT_MOUSEOUT_OBJECT );
     813             : 
     814           0 :                     rSet.Put(aHLinkItem);
     815             :                 }
     816           0 :                 break;
     817             : 
     818             :             case FN_INSERT_FRAME:
     819           0 :                 if (rSh.IsSelFrmMode() )
     820             :                 {
     821           0 :                     const int nSel = rSh.GetSelectionType();
     822           0 :                     if( ((nsSelectionType::SEL_GRF | nsSelectionType::SEL_OLE ) & nSel ) || bCrsrInHidden )
     823           0 :                         rSet.DisableItem(nWhich);
     824             :                 }
     825           0 :                 else if ( rSh.CrsrInsideInputField() )
     826             :                 {
     827           0 :                     rSet.DisableItem(nWhich);
     828             :                 }
     829           0 :                 break;
     830             : 
     831             :             case FN_FORMAT_COLUMN :
     832             :             {
     833             :                 //#i80458# column dialog cannot work if the selection contains different page styles and different sections
     834           0 :                 bool bDisable = true;
     835           0 :                 if( rSh.GetFlyFrameFormat() || rSh.GetSelectedPageDescs() )
     836           0 :                     bDisable = false;
     837           0 :                 if( bDisable )
     838             :                 {
     839           0 :                     const SwSection* pCurrSection = rSh.GetCurrSection();
     840           0 :                     const sal_uInt16 nFullSectCnt = rSh.GetFullSelectedSectionCount();
     841           0 :                     if( pCurrSection && ( !rSh.HasSelection() || 0 != nFullSectCnt ))
     842           0 :                         bDisable = false;
     843           0 :                     else if(
     844           0 :                         rSh.HasSelection() && rSh.IsInsRegionAvailable() &&
     845           0 :                             ( !pCurrSection || ( 1 != nFullSectCnt &&
     846           0 :                                 lcl_IsMarkInSameSection( rSh, pCurrSection ) )))
     847           0 :                         bDisable = false;
     848             :                 }
     849           0 :                 if(bDisable)
     850           0 :                     rSet.DisableItem(nWhich);
     851             :             }
     852           0 :             break;
     853             :         }
     854        1456 :         nWhich = aIter.NextWhich();
     855        1066 :     }
     856        1066 : }
     857             : 
     858           0 : void  SwTextShell::ExecDelete(SfxRequest &rReq)
     859             : {
     860           0 :     SwWrtShell &rSh = GetShell();
     861           0 :     switch( rReq.GetSlot() )
     862             :     {
     863             :         case FN_DELETE_SENT:
     864           0 :             if( rSh.IsTableMode() )
     865             :             {
     866           0 :                 rSh.DeleteRow();
     867           0 :                 rSh.EnterStdMode();
     868             :             }
     869             :             else
     870           0 :                 rSh.DelToEndOfSentence();
     871           0 :             break;
     872             :         case FN_DELETE_BACK_SENT:
     873           0 :             rSh.DelToStartOfSentence();
     874           0 :             break;
     875             :         case FN_DELETE_WORD:
     876           0 :             rSh.DelNxtWord();
     877           0 :             break;
     878             :         case FN_DELETE_BACK_WORD:
     879           0 :             rSh.DelPrvWord();
     880           0 :             break;
     881             :         case FN_DELETE_LINE:
     882           0 :             rSh.DelToEndOfLine();
     883           0 :             break;
     884             :         case FN_DELETE_BACK_LINE:
     885           0 :             rSh.DelToStartOfLine();
     886           0 :             break;
     887             :         case FN_DELETE_PARA:
     888           0 :             rSh.DelToEndOfPara();
     889           0 :             break;
     890             :         case FN_DELETE_BACK_PARA:
     891           0 :             rSh.DelToStartOfPara();
     892           0 :             break;
     893             :         case FN_DELETE_WHOLE_LINE:
     894           0 :             rSh.DelLine();
     895           0 :             break;
     896             :         default:
     897             :             OSL_ENSURE(false, "wrong dispatcher");
     898           0 :             return;
     899             :     }
     900           0 :     rReq.Done();
     901             : }
     902             : 
     903           0 : void SwTextShell::ExecTransliteration( SfxRequest & rReq )
     904             : {
     905             :     using namespace ::com::sun::star::i18n;
     906           0 :     sal_uInt32 nMode = 0;
     907             : 
     908           0 :     switch( rReq.GetSlot() )
     909             :     {
     910             :     case SID_TRANSLITERATE_SENTENCE_CASE:
     911           0 :         nMode = TransliterationModulesExtra::SENTENCE_CASE;
     912           0 :         break;
     913             :     case SID_TRANSLITERATE_TITLE_CASE:
     914           0 :         nMode = TransliterationModulesExtra::TITLE_CASE;
     915           0 :         break;
     916             :     case SID_TRANSLITERATE_TOGGLE_CASE:
     917           0 :         nMode = TransliterationModulesExtra::TOGGLE_CASE;
     918           0 :         break;
     919             :     case SID_TRANSLITERATE_UPPER:
     920           0 :         nMode = TransliterationModules_LOWERCASE_UPPERCASE;
     921           0 :         break;
     922             :     case SID_TRANSLITERATE_LOWER:
     923           0 :         nMode = TransliterationModules_UPPERCASE_LOWERCASE;
     924           0 :         break;
     925             : 
     926             :     case SID_TRANSLITERATE_HALFWIDTH:
     927           0 :         nMode = TransliterationModules_FULLWIDTH_HALFWIDTH;
     928           0 :         break;
     929             :     case SID_TRANSLITERATE_FULLWIDTH:
     930           0 :         nMode = TransliterationModules_HALFWIDTH_FULLWIDTH;
     931           0 :         break;
     932             : 
     933             :     case SID_TRANSLITERATE_HIRAGANA:
     934           0 :         nMode = TransliterationModules_KATAKANA_HIRAGANA;
     935           0 :         break;
     936             :     case SID_TRANSLITERATE_KATAGANA:
     937           0 :         nMode = TransliterationModules_HIRAGANA_KATAKANA;
     938           0 :         break;
     939             : 
     940             :     default:
     941             :         OSL_ENSURE(false, "wrong dispatcher");
     942             :     }
     943             : 
     944           0 :     if( nMode )
     945           0 :         GetShell().TransliterateText( nMode );
     946           0 : }
     947             : 
     948           0 : void SwTextShell::ExecRotateTransliteration( SfxRequest & rReq )
     949             : {
     950           0 :     if( rReq.GetSlot() == SID_TRANSLITERATE_ROTATE_CASE )
     951           0 :         GetShell().TransliterateText( m_aRotateCase.getNextMode() );
     952           0 : }
     953             : 
     954        2778 : SwTextShell::SwTextShell(SwView &_rView) :
     955        2778 :     SwBaseShell(_rView), pPostItFieldMgr( 0 )
     956             : {
     957        2778 :     SetName(OUString("Text"));
     958        2778 :     SetHelpId(SW_TEXTSHELL);
     959        2778 :     SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Text));
     960        2778 : }
     961             : 
     962        5546 : SwTextShell::~SwTextShell()
     963             : {
     964        5546 : }
     965             : 
     966           0 : void SwTextShell::InsertSymbol( SfxRequest& rReq )
     967             : {
     968           0 :     const SfxItemSet *pArgs = rReq.GetArgs();
     969           0 :     const SfxPoolItem* pItem = 0;
     970           0 :     if( pArgs )
     971           0 :         pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), false, &pItem);
     972             : 
     973           0 :     OUString aChars, aFontName;
     974           0 :     if ( pItem )
     975             :     {
     976           0 :         aChars = static_cast<const SfxStringItem*>(pItem)->GetValue();
     977           0 :         const SfxPoolItem* pFtItem = NULL;
     978           0 :         pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), false, &pFtItem);
     979           0 :         const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
     980           0 :         if ( pFontItem )
     981           0 :             aFontName = pFontItem->GetValue();
     982             :     }
     983             : 
     984           0 :     SwWrtShell &rSh = GetShell();
     985           0 :     SfxItemSet aSet( GetPool(), RES_CHRATR_FONT, RES_CHRATR_FONT,
     986             :                                 RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONT,
     987             :                                 RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONT,
     988           0 :                                 0 );
     989           0 :     rSh.GetCurAttr( aSet );
     990           0 :     SvtScriptType nScript = rSh.GetScriptType();
     991             : 
     992           0 :     SvxFontItem aFont( RES_CHRATR_FONT );
     993             :     {
     994           0 :         SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, *aSet.GetPool() );
     995           0 :         aSetItem.GetItemSet().Put( aSet, false );
     996           0 :         const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScript );
     997           0 :         if( pI )
     998           0 :             aFont = *static_cast<const SvxFontItem*>(pI);
     999             :         else
    1000             :             aFont = static_cast<const SvxFontItem&>(
    1001             :                         aSet.Get(
    1002             :                             GetWhichOfScript(
    1003             :                                 RES_CHRATR_FONT,
    1004           0 :                                 SvtLanguageOptions::GetI18NScriptTypeOfLanguage( GetAppLanguage() ) )));
    1005           0 :         if (aFontName.isEmpty())
    1006           0 :             aFontName = aFont.GetFamilyName();
    1007             :     }
    1008             : 
    1009           0 :     vcl::Font aNewFont(aFontName, Size(1,1)); // Size only because CTOR.
    1010           0 :     if( aChars.isEmpty() )
    1011             :     {
    1012             :         // Set selected font as default.
    1013           0 :         SfxAllItemSet aAllSet( rSh.GetAttrPool() );
    1014           0 :         aAllSet.Put( SfxBoolItem( FN_PARAM_1, false ) );
    1015             : 
    1016           0 :         SwViewOption aOpt(*GetShell().GetViewOptions());
    1017           0 :         OUString sSymbolFont = aOpt.GetSymbolFont();
    1018           0 :         if( aFontName.isEmpty() && !sSymbolFont.isEmpty() )
    1019           0 :             aAllSet.Put( SfxStringItem( SID_FONT_NAME, sSymbolFont ) );
    1020             :         else
    1021           0 :             aAllSet.Put( SfxStringItem( SID_FONT_NAME, aFont.GetFamilyName() ) );
    1022             : 
    1023           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    1024           0 :         boost::scoped_ptr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog( GetView().GetWindow(), aAllSet,
    1025           0 :             GetView().GetViewFrame()->GetFrame().GetFrameInterface(), RID_SVXDLG_CHARMAP ));
    1026           0 :         if( RET_OK == pDlg->Execute() )
    1027             :         {
    1028           0 :             SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pCItem, SfxStringItem, SID_CHARMAP, false );
    1029           0 :             SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pFontItem, SvxFontItem, SID_ATTR_CHAR_FONT, false );
    1030           0 :             if ( pFontItem )
    1031             :             {
    1032           0 :                 aNewFont.SetName( pFontItem->GetFamilyName() );
    1033           0 :                 aNewFont.SetStyleName( pFontItem->GetStyleName() );
    1034           0 :                 aNewFont.SetCharSet( pFontItem->GetCharSet() );
    1035           0 :                 aNewFont.SetPitch( pFontItem->GetPitch() );
    1036             :             }
    1037             : 
    1038           0 :             if ( pCItem )
    1039             :             {
    1040           0 :                 aChars  = pCItem->GetValue();
    1041           0 :                 aOpt.SetSymbolFont(aNewFont.GetName());
    1042           0 :                 SW_MOD()->ApplyUsrPref(aOpt, &GetView());
    1043             :             }
    1044           0 :         }
    1045             :     }
    1046             : 
    1047           0 :     if( !aChars.isEmpty() )
    1048             :     {
    1049           0 :         rSh.StartAllAction();
    1050             : 
    1051             :         // Delete selected content.
    1052           0 :         SwRewriter aRewriter;
    1053           0 :         aRewriter.AddRule(UndoArg1, SW_RESSTR(STR_SPECIALCHAR));
    1054             : 
    1055           0 :         rSh.StartUndo( UNDO_INSERT, &aRewriter );
    1056           0 :         if ( rSh.HasSelection() )
    1057             :         {
    1058           0 :             rSh.DelRight();
    1059           0 :             aSet.ClearItem();
    1060           0 :             rSh.GetCurAttr( aSet );
    1061             : 
    1062           0 :             SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, *aSet.GetPool() );
    1063           0 :             aSetItem.GetItemSet().Put( aSet, false );
    1064           0 :             const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScript );
    1065           0 :             if( pI )
    1066           0 :                 aFont = *static_cast<const SvxFontItem*>(pI);
    1067             :             else
    1068             :                 aFont = static_cast<const SvxFontItem&>(aSet.Get( GetWhichOfScript(
    1069             :                             RES_CHRATR_FONT,
    1070           0 :                             SvtLanguageOptions::GetI18NScriptTypeOfLanguage( GetAppLanguage() ) )));
    1071             :         }
    1072             : 
    1073             :         // Insert character.
    1074           0 :         rSh.Insert( aChars );
    1075             : 
    1076             :         // #108876# a font attribute has to be set always due to a guessed script type
    1077           0 :         if( !aNewFont.GetName().isEmpty() )
    1078             :         {
    1079           0 :             SvxFontItem aNewFontItem( aFont );
    1080           0 :             aNewFontItem.SetFamilyName( aNewFont.GetName());
    1081           0 :             aNewFontItem.SetFamily(  aNewFont.GetFamily());
    1082           0 :             aNewFontItem.SetPitch(   aNewFont.GetPitch());
    1083           0 :             aNewFontItem.SetCharSet( aNewFont.GetCharSet() );
    1084             : 
    1085           0 :             SfxItemSet aRestoreSet( GetPool(), RES_CHRATR_FONT, RES_CHRATR_FONT,
    1086             :                                                RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONT,
    1087           0 :                                                RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONT, 0 );
    1088             : 
    1089           0 :             nScript = g_pBreakIt->GetAllScriptsOfText( aChars );
    1090           0 :             if( SvtScriptType::LATIN & nScript )
    1091             :             {
    1092           0 :                 aRestoreSet.Put( aSet.Get( RES_CHRATR_FONT, true ) );
    1093           0 :                 aSet.Put( aNewFontItem, RES_CHRATR_FONT);
    1094             :             }
    1095           0 :             if( SvtScriptType::ASIAN & nScript )
    1096             :             {
    1097           0 :                 aRestoreSet.Put( aSet.Get( RES_CHRATR_CJK_FONT, true ) );
    1098           0 :                 aSet.Put( aNewFontItem, RES_CHRATR_CJK_FONT );
    1099             :             }
    1100           0 :             if( SvtScriptType::COMPLEX & nScript )
    1101             :             {
    1102           0 :                 aRestoreSet.Put( aSet.Get( RES_CHRATR_CTL_FONT, true ) );
    1103           0 :                 aSet.Put( aNewFontItem, RES_CHRATR_CTL_FONT );
    1104             :             }
    1105             : 
    1106           0 :             rSh.SetMark();
    1107           0 :             rSh.ExtendSelection( false, aChars.getLength() );
    1108           0 :             rSh.SetAttrSet( aSet, SetAttrMode::DONTEXPAND | SetAttrMode::NOFORMATATTR );
    1109           0 :             if( !rSh.IsCrsrPtAtEnd() )
    1110           0 :                 rSh.SwapPam();
    1111             : 
    1112           0 :             rSh.ClearMark();
    1113             : 
    1114             :             // #i75891#
    1115             :             // SETATTR_DONTEXPAND does not work if there are already hard attributes.
    1116             :             // Therefore we have to restore the font attributes.
    1117           0 :             rSh.SetMark();
    1118           0 :             rSh.SetAttrSet( aRestoreSet );
    1119           0 :             rSh.ClearMark();
    1120             : 
    1121           0 :             rSh.UpdateAttr();
    1122           0 :             aFont = aNewFontItem;
    1123             :         }
    1124             : 
    1125           0 :         rSh.EndAllAction();
    1126           0 :         rSh.EndUndo();
    1127             : 
    1128           0 :         if ( !aChars.isEmpty() )
    1129             :         {
    1130           0 :             rReq.AppendItem( SfxStringItem( GetPool().GetWhich(SID_CHARMAP), aChars ) );
    1131           0 :             rReq.AppendItem( SfxStringItem( SID_ATTR_SPECIALCHAR, aNewFont.GetName() ) );
    1132           0 :             rReq.Done();
    1133           0 :         }
    1134           0 :     }
    1135         177 : }
    1136             : 
    1137             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11