LCOV - code coverage report
Current view: top level - sw/source/uibase/shells - drwtxtsh.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 8 448 1.8 %
Date: 2015-06-13 12:38:46 Functions: 6 32 18.8 %
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 <hintids.hxx>
      21             : #include <i18nlangtag/lang.h>
      22             : #include <svl/slstitm.hxx>
      23             : #include <svl/cjkoptions.hxx>
      24             : #include <editeng/fontitem.hxx>
      25             : #include <editeng/langitem.hxx>
      26             : #include <svx/svdview.hxx>
      27             : #include <vcl/msgbox.hxx>
      28             : #include <sfx2/viewfrm.hxx>
      29             : #include <sfx2/objface.hxx>
      30             : #include <svx/svdotext.hxx>
      31             : #include <editeng/editeng.hxx>
      32             : #include <editeng/editview.hxx>
      33             : #include <editeng/eeitem.hxx>
      34             : #include <editeng/scripttypeitem.hxx>
      35             : #include <sfx2/bindings.hxx>
      36             : #include <svx/fontwork.hxx>
      37             : #include <sfx2/request.hxx>
      38             : #include <sfx2/sidebar/EnumContext.hxx>
      39             : #include <svl/whiter.hxx>
      40             : #include <editeng/outliner.hxx>
      41             : #include <editeng/editstat.hxx>
      42             : #include <svx/svdoutl.hxx>
      43             : #include <com/sun/star/i18n/TransliterationModules.hpp>
      44             : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
      45             : #include <com/sun/star/i18n/TextConversionOption.hpp>
      46             : #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
      47             : #include <com/sun/star/lang/XInitialization.hpp>
      48             : #include <swtypes.hxx>
      49             : #include <view.hxx>
      50             : #include <wrtsh.hxx>
      51             : #include <viewopt.hxx>
      52             : #include <initui.hxx>
      53             : #include <drwtxtsh.hxx>
      54             : #include <swundo.hxx>
      55             : #include <breakit.hxx>
      56             : 
      57             : #include <cmdid.h>
      58             : #include <helpid.h>
      59             : #include <globals.hrc>
      60             : #include <shells.hrc>
      61             : 
      62             : #define SwDrawTextShell
      63             : #include <sfx2/msg.hxx>
      64             : #include <swslots.hxx>
      65             : #include <popup.hrc>
      66             : #include <uitool.hxx>
      67             : #include <wview.hxx>
      68             : #include <swmodule.hxx>
      69             : #include <svx/dialogs.hrc>
      70             : #include <svx/svdoashp.hxx>
      71             : #include <svx/svxdlg.hxx>
      72             : #include <svx/xtable.hxx>
      73             : #include <cppuhelper/bootstrap.hxx>
      74             : #include <comphelper/processfactory.hxx>
      75             : #include "swabstdlg.hxx"
      76             : #include "misc.hrc"
      77             : #include <boost/scoped_ptr.hpp>
      78             : 
      79             : using namespace ::com::sun::star;
      80             : using namespace ::com::sun::star::uno;
      81             : using namespace ::com::sun::star::beans;
      82             : using namespace ::com::sun::star::i18n;
      83             : 
      84         295 : SFX_IMPL_INTERFACE(SwDrawTextShell, SfxShell)
      85             : 
      86          59 : void SwDrawTextShell::InitInterface_Impl()
      87             : {
      88          59 :     GetStaticInterface()->RegisterPopupMenu(SW_RES(MN_DRWTXT_POPUPMENU));
      89             : 
      90          59 :     GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_OBJECT, RID_DRAW_TEXT_TOOLBOX);
      91             : 
      92          59 :     GetStaticInterface()->RegisterChildWindow(SvxFontWorkChildWindow::GetChildWindowId());
      93          59 : }
      94             : 
      95          48 : TYPEINIT1(SwDrawTextShell,SfxShell)
      96             : 
      97           0 : void SwDrawTextShell::Init()
      98             : {
      99           0 :     SwWrtShell &rSh = GetShell();
     100           0 :     pSdrView = rSh.GetDrawView();
     101           0 :     SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     102             :     //#97471# mouse click _and_ key input at the same time
     103           0 :     if( !pOutliner )
     104           0 :         return ;
     105           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     106           0 :     EEControlBits nCtrl = pOutliner->GetControlWord();
     107           0 :     nCtrl |= EEControlBits::AUTOCORRECT;
     108             : 
     109           0 :     SetUndoManager(&pOutliner->GetUndoManager());
     110             : 
     111             :     // Now let's try an AutoSpell.
     112             : 
     113           0 :     const SwViewOption* pVOpt = rSh.GetViewOptions();
     114           0 :     if(pVOpt->IsOnlineSpell())
     115             :     {
     116           0 :         nCtrl |= EEControlBits::ONLINESPELLING|EEControlBits::ALLOWBIGOBJS;
     117             :     }
     118             :     else
     119           0 :         nCtrl &= ~(EEControlBits::ONLINESPELLING);
     120             : 
     121           0 :     pOutliner->SetControlWord(nCtrl);
     122           0 :     pOLV->ShowCursor();
     123             : }
     124             : 
     125           0 : SwDrawTextShell::SwDrawTextShell(SwView &rV) :
     126             :     SfxShell(&rV),
     127           0 :     rView(rV)
     128             : {
     129           0 :     SwWrtShell &rSh = GetShell();
     130           0 :     SetPool(rSh.GetAttrPool().GetSecondaryPool());
     131             : 
     132           0 :     Init();
     133             : 
     134           0 :     rSh.NoEdit(true);
     135           0 :     SetName(OUString("ObjectText"));
     136           0 :     SetHelpId(SW_DRWTXTSHELL);
     137           0 :     SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_DrawText));
     138           0 : }
     139             : 
     140           0 : SwDrawTextShell::~SwDrawTextShell()
     141             : {
     142           0 :     if ( GetView().GetCurShell() == this )
     143           0 :         rView.ResetSubShell();
     144           0 : }
     145             : 
     146           0 : SwWrtShell& SwDrawTextShell::GetShell()
     147             : {
     148           0 :     return rView.GetWrtShell();
     149             : }
     150             : 
     151             : // Disable slots with this status method
     152             : 
     153           0 : void SwDrawTextShell::StateDisableItems( SfxItemSet &rSet )
     154             : {
     155           0 :     SfxWhichIter aIter(rSet);
     156           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
     157             : 
     158           0 :     while (nWhich)
     159             :     {
     160           0 :         rSet.DisableItem( nWhich );
     161           0 :         nWhich = aIter.NextWhich();
     162           0 :     }
     163           0 : }
     164             : 
     165           0 : void SwDrawTextShell::SetAttrToMarked(const SfxItemSet& rAttr)
     166             : {
     167           0 :     Rectangle aNullRect;
     168           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     169           0 :     Rectangle aOutRect = pOLV->GetOutputArea();
     170             : 
     171           0 :     if (aNullRect != aOutRect)
     172             :     {
     173           0 :         GetShell().GetDrawView()->SetAttributes(rAttr);
     174             :     }
     175           0 : }
     176             : 
     177           0 : bool SwDrawTextShell::IsTextEdit()
     178             : {
     179           0 :     return pSdrView->IsTextEdit();
     180             : }
     181             : 
     182           0 : void SwDrawTextShell::ExecFontWork(SfxRequest& rReq)
     183             : {
     184           0 :     SwWrtShell &rSh = GetShell();
     185           0 :     FieldUnit eMetric = ::GetDfltMetric(0 != PTR_CAST(SwWebView, &rSh.GetView()));
     186           0 :     SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)) );
     187           0 :     SfxViewFrame* pVFrame = GetView().GetViewFrame();
     188           0 :     if ( rReq.GetArgs() )
     189             :     {
     190           0 :         pVFrame->SetChildWindow(SvxFontWorkChildWindow::GetChildWindowId(),
     191             :                                 static_cast<const SfxBoolItem&>( (rReq.GetArgs()->
     192           0 :                                 Get(SID_FONTWORK))).GetValue());
     193             :     }
     194             :     else
     195           0 :         pVFrame->ToggleChildWindow(SvxFontWorkChildWindow::GetChildWindowId());
     196             : 
     197           0 :     pVFrame->GetBindings().Invalidate(SID_FONTWORK);
     198           0 : }
     199             : 
     200           0 : void SwDrawTextShell::StateFontWork(SfxItemSet& rSet)
     201             : {
     202           0 :     const sal_uInt16 nId = SvxFontWorkChildWindow::GetChildWindowId();
     203           0 :     rSet.Put(SfxBoolItem(SID_FONTWORK, GetView().GetViewFrame()->HasChildWindow(nId)));
     204           0 : }
     205             : 
     206             : // Edit SfxRequests for FontWork
     207             : 
     208           0 : void SwDrawTextShell::ExecFormText(SfxRequest& rReq)
     209             : {
     210           0 :     SwWrtShell &rSh = GetShell();
     211           0 :     SdrView* pDrView = rSh.GetDrawView();
     212             : 
     213           0 :     const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList();
     214             : 
     215           0 :     if ( rMarkList.GetMarkCount() == 1 && rReq.GetArgs() )
     216             :     {
     217           0 :         const SfxItemSet& rSet = *rReq.GetArgs();
     218             : 
     219           0 :         if ( pDrView->IsTextEdit() )
     220             :         {
     221             :             //#111733# Sometimes SdrEndTextEdit() initiates the change in selection and
     222             :             // 'this' is not valid anymore
     223           0 :             SwView& rTempView = GetView();
     224           0 :             pDrView->SdrEndTextEdit(true);
     225             :             //this removes the current shell from the dispatcher stack!!
     226           0 :             rTempView.AttrChangedNotify(&rSh);
     227             :         }
     228             : 
     229           0 :         pDrView->SetAttributes(rSet);
     230             :     }
     231             : 
     232           0 : }
     233             : 
     234             : // Return Status values back to FontWork
     235             : 
     236           0 : void SwDrawTextShell::GetFormTextState(SfxItemSet& rSet)
     237             : {
     238           0 :     SwWrtShell &rSh = GetShell();
     239           0 :     SdrView* pDrView = rSh.GetDrawView();
     240           0 :     const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList();
     241           0 :     const SdrObject* pObj = NULL;
     242           0 :     SvxFontWorkDialog* pDlg = NULL;
     243             : 
     244           0 :     const sal_uInt16 nId = SvxFontWorkChildWindow::GetChildWindowId();
     245             : 
     246           0 :     SfxViewFrame* pVFrame = GetView().GetViewFrame();
     247           0 :     if (pVFrame->HasChildWindow(nId))
     248             :     {
     249           0 :         SfxChildWindow* pWnd = pVFrame->GetChildWindow(nId);
     250           0 :         pDlg = pWnd ? static_cast<SvxFontWorkDialog*>(pWnd->GetWindow()) : NULL;
     251             :     }
     252             : 
     253           0 :     if ( rMarkList.GetMarkCount() == 1 )
     254           0 :         pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
     255             : 
     256           0 :     const SdrTextObj* pTextObj = dynamic_cast< const SdrTextObj* >(pObj);
     257             :     const bool bDeactivate(
     258           0 :         !pObj ||
     259           0 :         !pTextObj ||
     260           0 :         !pTextObj->HasText() ||
     261           0 :         dynamic_cast< const SdrObjCustomShape* >(pObj)); // #121538# no FontWork for CustomShapes
     262             : 
     263           0 :     if (bDeactivate)
     264             :     {
     265           0 :         rSet.DisableItem(XATTR_FORMTXTSTYLE);
     266           0 :         rSet.DisableItem(XATTR_FORMTXTADJUST);
     267           0 :         rSet.DisableItem(XATTR_FORMTXTDISTANCE);
     268           0 :         rSet.DisableItem(XATTR_FORMTXTSTART);
     269           0 :         rSet.DisableItem(XATTR_FORMTXTMIRROR);
     270           0 :         rSet.DisableItem(XATTR_FORMTXTHIDEFORM);
     271           0 :         rSet.DisableItem(XATTR_FORMTXTOUTLINE);
     272           0 :         rSet.DisableItem(XATTR_FORMTXTSHADOW);
     273           0 :         rSet.DisableItem(XATTR_FORMTXTSHDWCOLOR);
     274           0 :         rSet.DisableItem(XATTR_FORMTXTSHDWXVAL);
     275           0 :         rSet.DisableItem(XATTR_FORMTXTSHDWYVAL);
     276             :     }
     277             :     else
     278             :     {
     279           0 :         if ( pDlg )
     280           0 :             pDlg->SetColorList(XColorList::GetStdColorList());
     281             : 
     282           0 :         pDrView->GetAttributes( rSet );
     283             :     }
     284           0 : }
     285             : 
     286           0 : void SwDrawTextShell::ExecDrawLingu(SfxRequest &rReq)
     287             : {
     288           0 :     SwWrtShell &rSh = GetShell();
     289           0 :     OutlinerView* pOutlinerView = pSdrView->GetTextEditOutlinerView();
     290           0 :     if( rSh.GetDrawView()->GetMarkedObjectList().GetMarkCount() )
     291             :     {
     292           0 :         switch(rReq.GetSlot())
     293             :         {
     294             :         case SID_THESAURUS:
     295           0 :             pOutlinerView->StartThesaurus();
     296           0 :             break;
     297             : 
     298             :         case SID_HANGUL_HANJA_CONVERSION:
     299             :             pOutlinerView->StartTextConversion(LANGUAGE_KOREAN, LANGUAGE_KOREAN, NULL,
     300           0 :                     i18n::TextConversionOption::CHARACTER_BY_CHARACTER, true, false);
     301           0 :             break;
     302             : 
     303             :         case SID_CHINESE_CONVERSION:
     304             :             {
     305             :                 //open ChineseTranslationDialog
     306           0 :                 Reference<XComponentContext> xContext = comphelper::getProcessComponentContext();
     307           0 :                 if (!xContext.is())
     308           0 :                     return;
     309             : 
     310           0 :                 Reference<lang::XMultiComponentFactory> xMCF(xContext->getServiceManager());
     311           0 :                 if (!xMCF.is())
     312           0 :                     return;
     313             : 
     314           0 :                 OUString sService("com.sun.star.linguistic2.ChineseTranslationDialog");
     315             :                 Reference<ui::dialogs::XExecutableDialog> xDialog(
     316           0 :                         xMCF->createInstanceWithContext(sService, xContext), UNO_QUERY);
     317             : 
     318           0 :                 Reference<lang::XInitialization> xInit(xDialog, UNO_QUERY);
     319             : 
     320           0 :                 if (!xInit.is())
     321           0 :                     return;
     322             : 
     323             :                 //  initialize dialog
     324           0 :                 Reference<awt::XWindow> xDialogParentWindow(0);
     325           0 :                 Sequence<Any> aSequence(1);
     326           0 :                 Any* pArray = aSequence.getArray();
     327           0 :                 PropertyValue aParam;
     328           0 :                 aParam.Name = "ParentWindow";
     329           0 :                 aParam.Value <<= makeAny(xDialogParentWindow);
     330           0 :                 pArray[0] <<= makeAny(aParam);
     331           0 :                 xInit->initialize( aSequence );
     332             : 
     333             :                 //execute dialog
     334           0 :                 sal_Int16 nDialogRet = xDialog->execute();
     335           0 :                 if(RET_OK == nDialogRet)
     336             :                 {
     337             :                     //get some parameters from the dialog
     338           0 :                     bool bToSimplified = true;
     339           0 :                     bool bUseVariants = true;
     340           0 :                     bool bCommonTerms = true;
     341           0 :                     Reference<beans::XPropertySet> xPropertySet(xDialog, UNO_QUERY);
     342           0 :                     if (xPropertySet.is())
     343             :                     {
     344             :                         try
     345             :                         {
     346           0 :                             xPropertySet->getPropertyValue("IsDirectionToSimplified") >>= bToSimplified;
     347           0 :                             xPropertySet->getPropertyValue("IsUseCharacterVariants") >>= bUseVariants;
     348           0 :                             xPropertySet->getPropertyValue("IsTranslateCommonTerms") >>= bCommonTerms;
     349             :                         }
     350           0 :                         catch (const Exception&)
     351             :                         {
     352             :                         }
     353             :                     }
     354             : 
     355             :                     //execute translation
     356           0 :                     sal_Int16 nSourceLang = bToSimplified ? LANGUAGE_CHINESE_TRADITIONAL : LANGUAGE_CHINESE_SIMPLIFIED;
     357           0 :                     sal_Int16 nTargetLang = bToSimplified ? LANGUAGE_CHINESE_SIMPLIFIED : LANGUAGE_CHINESE_TRADITIONAL;
     358           0 :                     sal_Int32 nOptions    = bUseVariants ? i18n::TextConversionOption::USE_CHARACTER_VARIANTS : 0;
     359           0 :                     if(!bCommonTerms)
     360           0 :                         nOptions = nOptions | i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
     361             : 
     362           0 :                     vcl::Font aTargetFont = OutputDevice::GetDefaultFont(DefaultFontType::CJK_TEXT, nTargetLang, GetDefaultFontFlags::OnlyOne);
     363             : 
     364           0 :                     pOutlinerView->StartTextConversion(nSourceLang, nTargetLang, &aTargetFont, nOptions, false, false);
     365             :                 }
     366             : 
     367           0 :                 Reference<lang::XComponent> xComponent(xDialog, UNO_QUERY);
     368           0 :                 if (xComponent.is())
     369           0 :                     xComponent->dispose();
     370             :             }
     371           0 :             break;
     372             : 
     373             :         default:
     374             :             OSL_ENSURE(false, "unexpected slot-id");
     375             :         }
     376             :     }
     377             : }
     378             : 
     379           0 : void SwDrawTextShell::ExecDraw(SfxRequest &rReq)
     380             : {
     381           0 :     SwWrtShell &rSh = GetShell();
     382           0 :     pSdrView = rSh.GetDrawView();
     383           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     384             : 
     385           0 :     switch (rReq.GetSlot())
     386             :     {
     387             :         case FN_INSERT_SOFT_HYPHEN:
     388             :         case FN_INSERT_HARDHYPHEN:
     389             :         case FN_INSERT_HARD_SPACE:
     390             :         case SID_INSERT_RLM :
     391             :         case SID_INSERT_LRM :
     392             :         case SID_INSERT_ZWNBSP :
     393             :         case SID_INSERT_ZWSP:
     394             :         {
     395           0 :             sal_Unicode cIns = 0;
     396           0 :             switch(rReq.GetSlot())
     397             :             {
     398           0 :                 case FN_INSERT_SOFT_HYPHEN: cIns = CHAR_SOFTHYPHEN; break;
     399           0 :                 case FN_INSERT_HARDHYPHEN: cIns = CHAR_HARDHYPHEN; break;
     400           0 :                 case FN_INSERT_HARD_SPACE: cIns = CHAR_HARDBLANK; break;
     401           0 :                 case SID_INSERT_RLM : cIns = CHAR_RLM ; break;
     402           0 :                 case SID_INSERT_LRM : cIns = CHAR_LRM ; break;
     403           0 :                 case SID_INSERT_ZWSP : cIns = CHAR_ZWSP ; break;
     404           0 :                 case SID_INSERT_ZWNBSP: cIns = CHAR_ZWNBSP; break;
     405             :             }
     406           0 :             pOLV->InsertText( OUString(cIns));
     407           0 :             rReq.Done();
     408             :         }
     409           0 :         break;
     410             :         case SID_CHARMAP:
     411             :     {  // Insert special character
     412           0 :             InsertSymbol(rReq);
     413           0 :             break;
     414             :     }
     415             :           case FN_INSERT_STRING:
     416             :                 {
     417           0 :             const SfxItemSet *pNewAttrs = rReq.GetArgs();
     418           0 :                         sal_uInt16 nSlot = rReq.GetSlot();
     419           0 :             const SfxPoolItem* pItem = 0;
     420           0 :                         if(pNewAttrs)
     421             :             {
     422           0 :                                 pNewAttrs->GetItemState(nSlot, false, &pItem );
     423           0 :                              pOLV->InsertText(static_cast<const SfxStringItem *>(pItem)->GetValue());
     424             :             }
     425           0 :                         break;
     426             :                 }
     427             : 
     428             :         case SID_SELECTALL:
     429             :         {
     430           0 :             SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     431           0 :             if(pOutliner)
     432             :             {
     433           0 :                 sal_Int32 nParaCount = pOutliner->GetParagraphCount();
     434           0 :                 if (nParaCount > 0)
     435           0 :                     pOLV->SelectRange(0L, nParaCount );
     436             :             }
     437             :         }
     438           0 :         break;
     439             : 
     440             :         case FN_FORMAT_RESET:   // delete hard text attributes
     441             :         {
     442           0 :             pOLV->RemoveAttribsKeepLanguages( true );
     443           0 :             pOLV->GetEditView().GetEditEngine()->RemoveFields(true);
     444           0 :             rReq.Done();
     445             :         }
     446           0 :         break;
     447             : 
     448             :         case FN_ESCAPE:
     449           0 :             if (pSdrView->IsTextEdit())
     450             :             {
     451             :                 // Shell switch!
     452           0 :                 rSh.EndTextEdit();
     453           0 :                 SwView& rTempView = rSh.GetView();
     454           0 :                 rTempView.ExitDraw();
     455           0 :                 rSh.Edit();
     456           0 :                 return;
     457             :             }
     458           0 :             break;
     459             :         case FN_DRAWTEXT_ATTR_DLG:
     460             :             {
     461           0 :                 SfxItemSet aNewAttr( pSdrView->GetModel()->GetItemPool() );
     462           0 :                 pSdrView->GetAttributes( aNewAttr );
     463           0 :                 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     464           0 :                 if ( pFact )
     465             :                 {
     466             :                     boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateTextTabDialog(
     467           0 :                                 &(GetView().GetViewFrame()->GetWindow()),
     468           0 :                                 &aNewAttr, pSdrView ));
     469           0 :                     sal_uInt16 nResult = pDlg->Execute();
     470             : 
     471           0 :                     if (nResult == RET_OK)
     472             :                     {
     473           0 :                         if (pSdrView->AreObjectsMarked())
     474             :                         {
     475           0 :                             pSdrView->SetAttributes(*pDlg->GetOutputItemSet());
     476           0 :                             rReq.Done(*(pDlg->GetOutputItemSet()));
     477             :                         }
     478           0 :                     }
     479           0 :                 }
     480             :             }
     481           0 :             break;
     482             :         case SID_TABLE_VERT_NONE:
     483             :         case SID_TABLE_VERT_CENTER:
     484             :         case SID_TABLE_VERT_BOTTOM:
     485             :             {
     486           0 :                 sal_uInt16 nSId = rReq.GetSlot();
     487           0 :                 if (pSdrView->AreObjectsMarked())
     488             :                 {
     489           0 :                     SdrTextVertAdjust eTVA = SDRTEXTVERTADJUST_TOP;
     490           0 :                     if (nSId == SID_TABLE_VERT_CENTER)
     491           0 :                         eTVA = SDRTEXTVERTADJUST_CENTER;
     492           0 :                     else if (nSId == SID_TABLE_VERT_BOTTOM)
     493           0 :                         eTVA = SDRTEXTVERTADJUST_BOTTOM;
     494             : 
     495           0 :                     SfxItemSet aNewAttr( pSdrView->GetModel()->GetItemPool() );
     496           0 :                     pSdrView->GetAttributes( aNewAttr );
     497           0 :                     aNewAttr.Put(SdrTextVertAdjustItem(eTVA));
     498           0 :                     pSdrView->SetAttributes(aNewAttr);
     499           0 :                     rReq.Done();
     500             :                 }
     501             : 
     502             :             }
     503           0 :             break;
     504             : 
     505             :         default:
     506             :             OSL_ENSURE(false, "unexpected slot-id");
     507           0 :             return;
     508             :     }
     509             : 
     510           0 :     GetView().GetViewFrame()->GetBindings().InvalidateAll(false);
     511             : 
     512           0 :     if (IsTextEdit() && pOLV->GetOutliner()->IsModified())
     513           0 :         rSh.SetModified();
     514             : }
     515             : 
     516             : // Execute undo
     517             : 
     518           0 : void SwDrawTextShell::ExecUndo(SfxRequest &rReq)
     519             : {
     520           0 :     if( IsTextEdit() )
     521             :     {
     522           0 :         bool bCallBase = true;
     523           0 :         const SfxItemSet* pArgs = rReq.GetArgs();
     524           0 :         if( pArgs )
     525             :         {
     526           0 :             sal_uInt16 nId = rReq.GetSlot(), nCnt = 1;
     527             :             const SfxPoolItem* pItem;
     528           0 :             switch( nId )
     529             :             {
     530             :             case SID_UNDO:
     531             :             case SID_REDO:
     532           0 :                 if( SfxItemState::SET == pArgs->GetItemState( nId, false, &pItem ) &&
     533           0 :                     1 < (nCnt = static_cast<const SfxUInt16Item*>(pItem)->GetValue()) )
     534             :                 {
     535             :                     // then we make by ourself.
     536           0 :                     ::svl::IUndoManager* pUndoManager = GetUndoManager();
     537           0 :                     if( pUndoManager )
     538             :                     {
     539           0 :                         if( SID_UNDO == nId )
     540           0 :                             while( nCnt-- )
     541           0 :                                 pUndoManager->Undo();
     542             :                         else
     543           0 :                             while( nCnt-- )
     544           0 :                                 pUndoManager->Redo();
     545             :                     }
     546           0 :                     bCallBase = false;
     547           0 :                     GetView().GetViewFrame()->GetBindings().InvalidateAll(false);
     548             :                 }
     549           0 :                 break;
     550             :             }
     551             :         }
     552           0 :         if( bCallBase )
     553             :         {
     554           0 :             SfxViewFrame *pSfxViewFrame = GetView().GetViewFrame();
     555           0 :             pSfxViewFrame->ExecuteSlot(rReq, pSfxViewFrame->GetInterface());
     556             :         }
     557             :     }
     558           0 : }
     559             : 
     560             : // State of undo
     561             : 
     562           0 : void SwDrawTextShell::StateUndo(SfxItemSet &rSet)
     563             : {
     564           0 :     if ( !IsTextEdit() )
     565           0 :         return;
     566             : 
     567           0 :     SfxViewFrame *pSfxViewFrame = GetView().GetViewFrame();
     568           0 :     SfxWhichIter aIter(rSet);
     569           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
     570           0 :     while( nWhich )
     571             :     {
     572           0 :         switch ( nWhich )
     573             :         {
     574             :         case SID_GETUNDOSTRINGS:
     575             :         case SID_GETREDOSTRINGS:
     576             :             {
     577           0 :                 ::svl::IUndoManager* pUndoManager = GetUndoManager();
     578           0 :                 if( pUndoManager )
     579             :                 {
     580             :                     OUString (::svl::IUndoManager:: *fnGetComment)( size_t, bool const ) const;
     581             : 
     582             :                     sal_uInt16 nCount;
     583           0 :                     if( SID_GETUNDOSTRINGS == nWhich )
     584             :                     {
     585           0 :                         nCount = pUndoManager->GetUndoActionCount();
     586           0 :                         fnGetComment = &::svl::IUndoManager::GetUndoActionComment;
     587             :                     }
     588             :                     else
     589             :                     {
     590           0 :                         nCount = pUndoManager->GetRedoActionCount();
     591           0 :                         fnGetComment = &::svl::IUndoManager::GetRedoActionComment;
     592             :                     }
     593           0 :                     if( nCount )
     594             :                     {
     595           0 :                         OUString sList;
     596           0 :                         for( sal_uInt16 n = 0; n < nCount; ++n )
     597           0 :                             sList += (pUndoManager->*fnGetComment)( n, ::svl::IUndoManager::TopLevel ) + "\n";
     598             : 
     599           0 :                         SfxStringListItem aItem( nWhich );
     600           0 :                         aItem.SetString( sList );
     601           0 :                         rSet.Put( aItem );
     602             :                     }
     603             :                 }
     604             :                 else
     605           0 :                     rSet.DisableItem( nWhich );
     606             :             }
     607           0 :             break;
     608             : 
     609             :         default:
     610             :             pSfxViewFrame->GetSlotState( nWhich,
     611           0 :                                     pSfxViewFrame->GetInterface(), &rSet );
     612             :         }
     613             : 
     614           0 :         nWhich = aIter.NextWhich();
     615           0 :     }
     616             : }
     617             : 
     618           0 : void SwDrawTextShell::ExecTransliteration( SfxRequest & rReq )
     619             : {
     620           0 :     if (!pSdrView)
     621           0 :         return;
     622             : 
     623             :     using namespace i18n;
     624             : 
     625           0 :     sal_uInt32 nMode = 0;
     626             : 
     627           0 :     switch( rReq.GetSlot() )
     628             :     {
     629             :     case SID_TRANSLITERATE_SENTENCE_CASE:
     630           0 :         nMode = TransliterationModulesExtra::SENTENCE_CASE;
     631           0 :         break;
     632             :     case SID_TRANSLITERATE_TITLE_CASE:
     633           0 :         nMode = TransliterationModulesExtra::TITLE_CASE;
     634           0 :         break;
     635             :     case SID_TRANSLITERATE_TOGGLE_CASE:
     636           0 :         nMode = TransliterationModulesExtra::TOGGLE_CASE;
     637           0 :         break;
     638             :     case SID_TRANSLITERATE_UPPER:
     639           0 :         nMode = TransliterationModules_LOWERCASE_UPPERCASE;
     640           0 :         break;
     641             :     case SID_TRANSLITERATE_LOWER:
     642           0 :         nMode = TransliterationModules_UPPERCASE_LOWERCASE;
     643           0 :         break;
     644             : 
     645             :     case SID_TRANSLITERATE_HALFWIDTH:
     646           0 :         nMode = TransliterationModules_FULLWIDTH_HALFWIDTH;
     647           0 :         break;
     648             :     case SID_TRANSLITERATE_FULLWIDTH:
     649           0 :         nMode = TransliterationModules_HALFWIDTH_FULLWIDTH;
     650           0 :         break;
     651             : 
     652             :     case SID_TRANSLITERATE_HIRAGANA:
     653           0 :         nMode = TransliterationModules_KATAKANA_HIRAGANA;
     654           0 :         break;
     655             :     case SID_TRANSLITERATE_KATAGANA:
     656           0 :         nMode = TransliterationModules_HIRAGANA_KATAKANA;
     657           0 :         break;
     658             : 
     659             :     default:
     660             :         OSL_ENSURE(false, "wrong dispatcher");
     661             :     }
     662             : 
     663           0 :     if( nMode )
     664             :     {
     665           0 :         OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     666             : 
     667           0 :         if (!pOLV)
     668           0 :             return;
     669             : 
     670           0 :         pOLV->TransliterateText( nMode );
     671             :     }
     672             : }
     673             : 
     674           0 : void SwDrawTextShell::ExecRotateTransliteration( SfxRequest & rReq )
     675             : {
     676           0 :     if( rReq.GetSlot() == SID_TRANSLITERATE_ROTATE_CASE )
     677             :     {
     678           0 :         if (!pSdrView)
     679           0 :             return;
     680             : 
     681           0 :         OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     682             : 
     683           0 :         if (!pOLV)
     684           0 :             return;
     685             : 
     686           0 :         pOLV->TransliterateText( m_aRotateCase.getNextMode() );
     687             :     }
     688             : }
     689             : 
     690             : // Insert special character (see SDraw: FUBULLET.CXX)
     691             : 
     692           0 : void SwDrawTextShell::InsertSymbol(SfxRequest& rReq)
     693             : {
     694           0 :     OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
     695           0 :     if(!pOLV)
     696           0 :         return;
     697           0 :     const SfxItemSet *pArgs = rReq.GetArgs();
     698           0 :     const SfxPoolItem* pItem = 0;
     699           0 :     if( pArgs )
     700           0 :         pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), false, &pItem);
     701             : 
     702           0 :     OUString sSym;
     703           0 :     OUString sFontName;
     704           0 :     if ( pItem )
     705             :     {
     706           0 :         sSym = static_cast<const SfxStringItem*>(pItem)->GetValue();
     707           0 :         const SfxPoolItem* pFtItem = NULL;
     708           0 :         pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), false, &pFtItem);
     709           0 :         const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
     710           0 :         if ( pFontItem )
     711           0 :             sFontName = pFontItem->GetValue();
     712             :     }
     713             : 
     714           0 :     SfxItemSet aSet(pOLV->GetAttribs());
     715           0 :     SvtScriptType nScript = pOLV->GetSelectedScriptType();
     716           0 :     SvxFontItem aSetDlgFont( RES_CHRATR_FONT );
     717             :     {
     718           0 :         SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, *aSet.GetPool() );
     719           0 :         aSetItem.GetItemSet().Put( aSet, false );
     720           0 :         const SfxPoolItem* pI = aSetItem.GetItemOfScript( nScript );
     721           0 :         if( pI )
     722           0 :             aSetDlgFont = *static_cast<const SvxFontItem*>(pI);
     723             :         else
     724             :             aSetDlgFont = static_cast<const SvxFontItem&>(aSet.Get( GetWhichOfScript(
     725             :                         SID_ATTR_CHAR_FONT,
     726           0 :                         SvtLanguageOptions::GetI18NScriptTypeOfLanguage( GetAppLanguage() ) )));
     727           0 :         if (sFontName.isEmpty())
     728           0 :             sFontName = aSetDlgFont.GetFamilyName();
     729             :     }
     730             : 
     731           0 :     vcl::Font aFont(sFontName, Size(1,1));
     732           0 :     if(sSym.isEmpty())
     733             :     {
     734           0 :         SfxAllItemSet aAllSet( GetPool() );
     735           0 :         aAllSet.Put( SfxBoolItem( FN_PARAM_1, false ) );
     736             : 
     737           0 :         SwViewOption aOpt(*rView.GetWrtShell().GetViewOptions());
     738           0 :         OUString sSymbolFont = aOpt.GetSymbolFont();
     739           0 :         if( !sSymbolFont.isEmpty() )
     740           0 :             aAllSet.Put( SfxStringItem( SID_FONT_NAME, sSymbolFont ) );
     741             :         else
     742           0 :             aAllSet.Put( SfxStringItem( SID_FONT_NAME, aSetDlgFont.GetFamilyName() ) );
     743             : 
     744             :         // If character is selected, it can be shown
     745           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     746             :         boost::scoped_ptr<SfxAbstractDialog> pDlg(pFact->CreateSfxDialog( rView.GetWindow(), aAllSet,
     747           0 :             rView.GetViewFrame()->GetFrame().GetFrameInterface(), RID_SVXDLG_CHARMAP ));
     748           0 :         sal_uInt16 nResult = pDlg->Execute();
     749           0 :         if( nResult == RET_OK )
     750             :         {
     751           0 :             SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pCItem, SfxStringItem, SID_CHARMAP, false );
     752           0 :             SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pFontItem, SvxFontItem, SID_ATTR_CHAR_FONT, false );
     753           0 :             if ( pFontItem )
     754             :             {
     755           0 :                 aFont.SetName( pFontItem->GetFamilyName() );
     756           0 :                 aFont.SetStyleName( pFontItem->GetStyleName() );
     757           0 :                 aFont.SetCharSet( pFontItem->GetCharSet() );
     758           0 :                 aFont.SetPitch( pFontItem->GetPitch() );
     759             :             }
     760             : 
     761           0 :             if ( pCItem )
     762             :             {
     763           0 :                 sSym  = pCItem->GetValue();
     764           0 :                 aOpt.SetSymbolFont(aFont.GetName());
     765           0 :                 SW_MOD()->ApplyUsrPref(aOpt, &rView);
     766             :             }
     767           0 :         }
     768             :     }
     769             : 
     770           0 :     if( !sSym.isEmpty() )
     771             :     {
     772             :         // do not flicker
     773           0 :         pOLV->HideCursor();
     774           0 :         SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     775           0 :         pOutliner->SetUpdateMode(false);
     776             : 
     777           0 :         SfxItemSet aOldSet( pOLV->GetAttribs() );
     778           0 :         SfxItemSet aFontSet( *aOldSet.GetPool(),
     779             :                             EE_CHAR_FONTINFO, EE_CHAR_FONTINFO,
     780             :                             EE_CHAR_FONTINFO_CJK, EE_CHAR_FONTINFO_CJK,
     781             :                             EE_CHAR_FONTINFO_CTL, EE_CHAR_FONTINFO_CTL,
     782           0 :                             0 );
     783           0 :         aFontSet.Set( aOldSet );
     784             : 
     785             :         // Insert string
     786           0 :         pOLV->InsertText( sSym );
     787             : 
     788             :         // assign attributes (Set font)
     789           0 :         SfxItemSet aFontAttribSet( *aFontSet.GetPool(), aFontSet.GetRanges() );
     790           0 :         SvxFontItem aFontItem (aFont.GetFamily(),    aFont.GetName(),
     791           0 :                                 aFont.GetStyleName(), aFont.GetPitch(),
     792           0 :                                 aFont.GetCharSet(),
     793           0 :                                 EE_CHAR_FONTINFO );
     794           0 :         nScript = g_pBreakIt->GetAllScriptsOfText( sSym );
     795           0 :         if( SvtScriptType::LATIN & nScript )
     796           0 :             aFontAttribSet.Put( aFontItem, EE_CHAR_FONTINFO );
     797           0 :         if( SvtScriptType::ASIAN & nScript )
     798           0 :             aFontAttribSet.Put( aFontItem, EE_CHAR_FONTINFO_CJK );
     799           0 :         if( SvtScriptType::COMPLEX & nScript )
     800           0 :             aFontAttribSet.Put( aFontItem, EE_CHAR_FONTINFO_CTL );
     801           0 :         pOLV->SetAttribs(aFontAttribSet);
     802             : 
     803             :         // Remove selection
     804           0 :         ESelection aSel(pOLV->GetSelection());
     805           0 :         aSel.nStartPara = aSel.nEndPara;
     806           0 :         aSel.nStartPos = aSel.nEndPos;
     807           0 :         pOLV->SetSelection(aSel);
     808             : 
     809             :         // Restore old font
     810           0 :         pOLV->SetAttribs( aFontSet );
     811             : 
     812             :         // From now on show again
     813           0 :         pOutliner->SetUpdateMode(true);
     814           0 :         pOLV->ShowCursor();
     815             : 
     816           0 :         rReq.AppendItem( SfxStringItem( GetPool().GetWhich(SID_CHARMAP), sSym ) );
     817           0 :         if(!aFont.GetName().isEmpty())
     818           0 :             rReq.AppendItem( SfxStringItem( SID_ATTR_SPECIALCHAR, aFont.GetName() ) );
     819           0 :         rReq.Done();
     820           0 :     }
     821             : }
     822             : 
     823           0 : ::svl::IUndoManager* SwDrawTextShell::GetUndoManager()
     824             : {
     825           0 :     SwWrtShell &rSh = GetShell();
     826           0 :     pSdrView = rSh.GetDrawView();
     827           0 :     SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
     828           0 :     return &pOutliner->GetUndoManager();
     829             : }
     830             : 
     831           0 : void SwDrawTextShell::GetStatePropPanelAttr(SfxItemSet &rSet)
     832             : {
     833           0 :     SfxWhichIter    aIter( rSet );
     834           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
     835             : 
     836           0 :     SwWrtShell &rSh = GetShell();
     837           0 :     pSdrView = rSh.GetDrawView();
     838             : 
     839           0 :     SfxItemSet aAttrs( pSdrView->GetModel()->GetItemPool() );
     840           0 :     pSdrView->GetAttributes( aAttrs );
     841             : 
     842           0 :     while ( nWhich )
     843             :     {
     844           0 :         sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
     845           0 :             ? GetPool().GetSlotId(nWhich)
     846           0 :             : nWhich;
     847           0 :         switch ( nSlotId )
     848             :         {
     849             :             case SID_TABLE_VERT_NONE:
     850             :             case SID_TABLE_VERT_CENTER:
     851             :             case SID_TABLE_VERT_BOTTOM:
     852           0 :                 bool bContour = false;
     853           0 :                 SfxItemState eConState = aAttrs.GetItemState( SDRATTR_TEXT_CONTOURFRAME );
     854           0 :                 if( eConState != SfxItemState::DONTCARE )
     855             :                 {
     856           0 :                     bContour = static_cast<const SdrOnOffItem&>( aAttrs.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue();
     857             :                 }
     858           0 :                 if (bContour) break;
     859             : 
     860           0 :                 SfxItemState eVState = aAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST );
     861             :                 //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST );
     862             : 
     863             :                 //if(SfxItemState::DONTCARE != eVState && SfxItemState::DONTCARE != eHState)
     864           0 :                 if(SfxItemState::DONTCARE != eVState)
     865             :                 {
     866           0 :                     SdrTextVertAdjust eTVA = (SdrTextVertAdjust)static_cast<const SdrTextVertAdjustItem&>(aAttrs.Get(SDRATTR_TEXT_VERTADJUST)).GetValue();
     867           0 :                     bool bSet = (nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP) ||
     868           0 :                             (nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER) ||
     869           0 :                             (nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM);
     870           0 :                     rSet.Put(SfxBoolItem(nSlotId, bSet));
     871             :                 }
     872             :                 else
     873             :                 {
     874           0 :                     rSet.Put(SfxBoolItem(nSlotId, false));
     875             :                 }
     876           0 :                 break;
     877             :         }
     878           0 :         nWhich = aIter.NextWhich();
     879           0 :     }
     880         177 : }
     881             : 
     882             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11