LCOV - code coverage report
Current view: top level - sw/source/uibase/uno - unotxvw.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 469 957 49.0 %
Date: 2015-06-13 12:38:46 Functions: 61 100 61.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "viscrs.hxx"
      21             : #include <sfx2/frame.hxx>
      22             : #include <sfx2/printer.hxx>
      23             : #include <cmdid.h>
      24             : #include <hintids.hxx>
      25             : #include <docsh.hxx>
      26             : #include <rubylist.hxx>
      27             : #include <doc.hxx>
      28             : #include <IDocumentDeviceAccess.hxx>
      29             : #include <unotxvw.hxx>
      30             : #include <unodispatch.hxx>
      31             : #include <unomap.hxx>
      32             : #include <unostyle.hxx>
      33             : #include <unoprnms.hxx>
      34             : #include <view.hxx>
      35             : #include <viewopt.hxx>
      36             : #include <unomod.hxx>
      37             : #include <unoframe.hxx>
      38             : #include <unocrsr.hxx>
      39             : #include <wrtsh.hxx>
      40             : #include <unotbl.hxx>
      41             : #include <svx/fmshell.hxx>
      42             : #include <svx/svdview.hxx>
      43             : #include <svx/svdpage.hxx>
      44             : #include <svx/svdouno.hxx>
      45             : #include <svx/svdogrp.hxx>
      46             : #include <editeng/pbinitem.hxx>
      47             : #include <pagedesc.hxx>
      48             : #include <editeng/lrspitem.hxx>
      49             : #include <editeng/ulspitem.hxx>
      50             : #include <sfx2/bindings.hxx>
      51             : #include <sfx2/request.hxx>
      52             : #include <frmatr.hxx>
      53             : #include <osl/mutex.hxx>
      54             : #include <IMark.hxx>
      55             : #include <unotxdoc.hxx>
      56             : #include <unodraw.hxx>
      57             : #include <svx/unoshape.hxx>
      58             : #include <svx/svdpagv.hxx>
      59             : #include <swerror.h>
      60             : #include <shellio.hxx>
      61             : #include <ndtxt.hxx>
      62             : #include <SwStyleNameMapper.hxx>
      63             : #include <crsskip.hxx>
      64             : #include <com/sun/star/beans/PropertyAttribute.hpp>
      65             : #include <com/sun/star/drawing/ShapeCollection.hpp>
      66             : #include <editeng/outliner.hxx>
      67             : #include <editeng/editview.hxx>
      68             : #include <unoparagraph.hxx>
      69             : #include <unocrsrhelper.hxx>
      70             : #include <unotextrange.hxx>
      71             : #include <sfx2/docfile.hxx>
      72             : #include <calbck.hxx>
      73             : #include "swdtflvr.hxx"
      74             : #include <vcl/svapp.hxx>
      75             : #include <comphelper/processfactory.hxx>
      76             : #include <comphelper/servicehelper.hxx>
      77             : #include <cppuhelper/supportsservice.hxx>
      78             : 
      79             : using namespace ::com::sun::star;
      80             : using namespace ::com::sun::star::uno;
      81             : using namespace ::com::sun::star::lang;
      82             : using namespace ::com::sun::star::beans;
      83             : using namespace ::com::sun::star::text;
      84             : using namespace ::com::sun::star::view;
      85             : using namespace ::com::sun::star::frame;
      86             : 
      87             : using ::com::sun::star::util::URL;
      88             : using comphelper::HelperBaseNoState;
      89             : 
      90        2761 : SwXTextView::SwXTextView(SwView* pSwView) :
      91             :     SfxBaseController(pSwView),
      92             :     m_SelChangedListeners(m_aMutex),
      93             :     m_pView(pSwView),
      94        2761 :     m_pPropSet( aSwMapProvider.GetPropertySet( PROPERTY_MAP_TEXT_VIEW ) ),
      95             :     pxViewSettings(0),
      96        5522 :     pxTextViewCursor(0)
      97             : {
      98             : 
      99        2761 : }
     100             : 
     101        7971 : SwXTextView::~SwXTextView()
     102             : {
     103        2657 :     Invalidate();
     104        5314 : }
     105             : 
     106        8171 : void SwXTextView::Invalidate()
     107             : {
     108        8171 :     if(pxViewSettings)
     109             :     {
     110          15 :          HelperBaseNoState *pSettings = static_cast < HelperBaseNoState * > ( pxViewSettings->get() );
     111          15 :         static_cast < SwXViewSettings* > ( pSettings )->Invalidate();
     112          15 :         DELETEZ(pxViewSettings);
     113             :     }
     114        8171 :     if(pxTextViewCursor)
     115             :     {
     116          58 :         text::XTextViewCursor* pCrsr = pxTextViewCursor->get();
     117          58 :         static_cast<SwXTextViewCursor*>(pCrsr)->Invalidate();
     118          58 :         DELETEZ(pxTextViewCursor);
     119             :     }
     120             : 
     121        8171 :     m_refCount++; //prevent second d'tor call
     122             : 
     123             :     {
     124             :         uno::Reference<uno::XInterface> const xInt(static_cast<
     125        8171 :                 cppu::OWeakObject*>(static_cast<SfxBaseController*>(this)));
     126       16342 :         lang::EventObject aEvent(xInt);
     127       16342 :         m_SelChangedListeners.disposeAndClear(aEvent);
     128             :     }
     129             : 
     130        8171 :     m_refCount--;
     131        8171 :     m_pView = 0;
     132        8171 : }
     133             : 
     134           0 : Sequence< uno::Type > SAL_CALL SwXTextView::getTypes(  ) throw(uno::RuntimeException, std::exception)
     135             : {
     136           0 :     uno::Sequence< uno::Type > aBaseTypes = SfxBaseController::getTypes();
     137             : 
     138           0 :     long nIndex = aBaseTypes.getLength();
     139             :     aBaseTypes.realloc(
     140           0 :         aBaseTypes.getLength() + 8 );
     141             : 
     142           0 :     uno::Type* pBaseTypes = aBaseTypes.getArray();
     143           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XSelectionSupplier>::get();
     144           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XServiceInfo>::get();
     145           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XFormLayerAccess>::get();
     146           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XTextViewCursorSupplier>::get();
     147           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XViewSettingsSupplier>::get();
     148           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XRubySelection>::get();
     149           0 :     pBaseTypes[nIndex++] = cppu::UnoType<XPropertySet>::get();
     150           0 :     pBaseTypes[nIndex++] = cppu::UnoType<datatransfer::XTransferableSupplier>::get();
     151           0 :     return aBaseTypes;
     152             : }
     153             : 
     154           0 : Sequence< sal_Int8 > SAL_CALL SwXTextView::getImplementationId(  ) throw(uno::RuntimeException, std::exception)
     155             : {
     156           0 :     return css::uno::Sequence<sal_Int8>();
     157             : }
     158             : 
     159     1712059 : void SAL_CALL SwXTextView::acquire(  )throw()
     160             : {
     161     1712059 :     SfxBaseController::acquire();
     162     1712059 : }
     163             : 
     164     1717457 : void SAL_CALL SwXTextView::release(  )throw()
     165             : {
     166     1717457 :     SfxBaseController::release();
     167     1717457 : }
     168             : 
     169      308395 : uno::Any SAL_CALL SwXTextView::queryInterface( const uno::Type& aType )
     170             :     throw (RuntimeException, std::exception)
     171             : {
     172      308395 :     uno::Any aRet;
     173      308395 :     if(aType == cppu::UnoType<view::XSelectionSupplier>::get())
     174             :     {
     175           9 :         uno::Reference<view::XSelectionSupplier> xRet = this;
     176           9 :         aRet.setValue(&xRet, aType);
     177             :     }
     178      308386 :     else if(aType == cppu::UnoType<lang::XServiceInfo>::get())
     179             :     {
     180           0 :         uno::Reference<lang::XServiceInfo> xRet = this;
     181           0 :         aRet.setValue(&xRet, aType);
     182             :     }
     183      308386 :     else if(aType == cppu::UnoType<view::XControlAccess>::get())
     184             :     {
     185          34 :         uno::Reference<view::XControlAccess> xRet = this;
     186          34 :         aRet.setValue(&xRet, aType);
     187             :     }
     188      308352 :     else if(aType == cppu::UnoType<view::XFormLayerAccess>::get())
     189             :     {
     190          22 :         uno::Reference<view::XFormLayerAccess> xRet = this;
     191          22 :         aRet.setValue(&xRet, aType);
     192             :     }
     193      308330 :     else if(aType == cppu::UnoType<text::XTextViewCursorSupplier>::get())
     194             :     {
     195          64 :         uno::Reference<text::XTextViewCursorSupplier> xRet = this;
     196          64 :         aRet.setValue(&xRet, aType);
     197             :     }
     198      308266 :     else if(aType == cppu::UnoType<view::XViewSettingsSupplier>::get())
     199             :     {
     200          15 :         uno::Reference<view::XViewSettingsSupplier> xRet = this;
     201          15 :         aRet.setValue(&xRet, aType);
     202             :     }
     203      308251 :     else if(aType == cppu::UnoType<XRubySelection>::get())
     204             :     {
     205           0 :         uno::Reference<XRubySelection> xRet = this;
     206           0 :         aRet.setValue(&xRet, aType);
     207             :     }
     208      308251 :     else if(aType == cppu::UnoType<XPropertySet>::get())
     209             :     {
     210        8312 :         uno::Reference<XPropertySet> xRet = this;
     211        8312 :         aRet.setValue(&xRet, aType);
     212             :     }
     213      299939 :     else if(aType == cppu::UnoType<datatransfer::XTransferableSupplier>::get())
     214             :     {
     215           0 :         uno::Reference<datatransfer::XTransferableSupplier> xRet = this;
     216           0 :         aRet.setValue(&xRet, aType);
     217             :     }
     218             :     else
     219      299939 :         aRet = SfxBaseController::queryInterface(aType);
     220      308395 :     return aRet;
     221             : }
     222             : 
     223           8 : sal_Bool SwXTextView::select(const uno::Any& aInterface)
     224             :     throw (lang::IllegalArgumentException, uno::RuntimeException,
     225             :            std::exception)
     226             : {
     227           8 :     SolarMutexGuard aGuard;
     228             : 
     229          16 :     uno::Reference< uno::XInterface >  xInterface;
     230           8 :     if (!GetView() || !(aInterface >>= xInterface))
     231             :     {
     232           0 :         return sal_False;
     233             :     }
     234             : 
     235           8 :     SwWrtShell& rSh = GetView()->GetWrtShell();
     236           8 :     SwDoc* pDoc = GetView()->GetDocShell()->GetDoc();
     237          16 :     std::vector<SdrObject *> sdrObjects;
     238             :     uno::Reference<awt::XControlModel> const xCtrlModel(xInterface,
     239          16 :             UNO_QUERY);
     240           8 :     if (xCtrlModel.is())
     241             :     {
     242           0 :         uno::Reference<awt::XControl> xControl;
     243           0 :         SdrObject *const pSdrObject = GetControl(xCtrlModel, xControl);
     244           0 :         if (pSdrObject) // hmm... needs view to verify it's in right doc...
     245             :         {
     246           0 :             sdrObjects.push_back(pSdrObject);
     247           0 :         }
     248             :     }
     249             :     else
     250             :     {
     251           8 :         SwPaM * pPaM(0);
     252           8 :         std::pair<OUString, FlyCntType> frame;
     253           8 :         OUString tableName;
     254           8 :         SwUnoTableCrsr const* pTableCursor(0);
     255           8 :         ::sw::mark::IMark const* pMark(0);
     256             :         SwUnoCursorHelper::GetSelectableFromAny(xInterface, *pDoc,
     257           8 :                 pPaM, frame, tableName, pTableCursor, pMark, sdrObjects);
     258           8 :         if (pPaM)
     259             :         {
     260           0 :             rSh.EnterStdMode();
     261           0 :             rSh.SetSelection(*pPaM);
     262             :             // the pPaM has been copied - delete it
     263           0 :             while (pPaM->GetNext() != pPaM)
     264           0 :                 delete pPaM->GetNext();
     265           0 :             delete pPaM;
     266           0 :             return sal_True;
     267             :         }
     268           8 :         else if (!frame.first.isEmpty())
     269             :         {
     270           0 :             bool const bSuccess(rSh.GotoFly(frame.first, frame.second));
     271           0 :             if (bSuccess)
     272             :             {
     273           0 :                 rSh.HideCrsr();
     274           0 :                 rSh.EnterSelFrmMode();
     275             :             }
     276           0 :             return sal_True;
     277             :         }
     278           8 :         else if (!tableName.isEmpty())
     279             :         {
     280           8 :             rSh.EnterStdMode();
     281           8 :             rSh.GotoTable(tableName);
     282           8 :             return sal_True;
     283             :         }
     284           0 :         else if (pTableCursor)
     285             :         {
     286           0 :             UnoActionRemoveContext const aContext(pDoc);
     287           0 :             rSh.EnterStdMode();
     288           0 :             rSh.SetSelection(*pTableCursor);
     289           0 :             return sal_True;
     290             :         }
     291           0 :         else if (pMark)
     292             :         {
     293           0 :             rSh.EnterStdMode();
     294           0 :             rSh.GotoMark(pMark);
     295           0 :             return sal_True;
     296           0 :         }
     297             :         // sdrObjects handled below
     298             :     }
     299           0 :     bool bRet(false);
     300           0 :     if (sdrObjects.size())
     301             :     {
     302             : 
     303           0 :         SdrView *const pDrawView = rSh.GetDrawView();
     304           0 :         SdrPageView *const pPV = pDrawView->GetSdrPageView();
     305             : 
     306           0 :         pDrawView->SdrEndTextEdit();
     307           0 :         pDrawView->UnmarkAll();
     308             : 
     309           0 :         for (size_t i = 0; i < sdrObjects.size(); ++i)
     310             :         {
     311           0 :             SdrObject *const pSdrObject(sdrObjects[i]);
     312             :             // GetSelectableFromAny did not check pSdrObject is in right doc!
     313           0 :             if (pPV && pSdrObject->GetPage() == pPV->GetPage())
     314             :             {
     315           0 :                 pDrawView->MarkObj(pSdrObject, pPV);
     316           0 :                 bRet = true;
     317             :             }
     318             :         }
     319             :     }
     320           8 :     return bRet;
     321             : }
     322             : 
     323           1 : uno::Any SwXTextView::getSelection()
     324             :     throw (uno::RuntimeException, std::exception)
     325             : {
     326           1 :     SolarMutexGuard aGuard;
     327           2 :     uno::Reference< uno::XInterface >  aRef;
     328           1 :     if(GetView())
     329             :     {
     330             :         //force immediat shell update
     331           1 :         m_pView->StopShellTimer();
     332             :         //Generating an interface from the current selection.
     333           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
     334           1 :         ShellModes  eSelMode = m_pView->GetShellMode();
     335           1 :         switch(eSelMode)
     336             :         {
     337             :             case SHELL_MODE_TABLE_TEXT      :
     338             :             {
     339           0 :                 if(rSh.GetTableCrsr())
     340             :                 {
     341             :                     OSL_ENSURE(rSh.GetTableFormat(), "not a table format?");
     342           0 :                     uno::Reference< text::XTextTableCursor >  xCrsr = new SwXTextTableCursor(*rSh.GetTableFormat(),
     343           0 :                                                     rSh.GetTableCrsr());
     344           0 :                     aRef = uno::Reference< uno::XInterface >  (xCrsr, uno::UNO_QUERY);
     345           0 :                     break;
     346             :                 }
     347             : 
     348             :             }
     349             :             //Without a table selection the text will be delivered.
     350             :             //break;
     351             :             case SHELL_MODE_LIST_TEXT       :
     352             :             case SHELL_MODE_TABLE_LIST_TEXT:
     353             :             case SHELL_MODE_TEXT            :
     354             :             {
     355           1 :                 uno::Reference< container::XIndexAccess > xPos = SwXTextRanges::Create(rSh.GetCrsr());
     356           1 :                 aRef = uno::Reference< uno::XInterface >(xPos, uno::UNO_QUERY);
     357             :             }
     358           1 :             break;
     359             :             case SHELL_MODE_FRAME           :
     360             :             {
     361           0 :                 SwFrameFormat *const pFormat = rSh.GetFlyFrameFormat();
     362           0 :                 if (pFormat)
     363             :                 {
     364           0 :                     aRef = SwXTextFrame::CreateXTextFrame(
     365           0 :                             *pFormat->GetDoc(), pFormat);
     366             :                 }
     367             :             }
     368           0 :             break;
     369             :             case SHELL_MODE_GRAPHIC         :
     370             :             {
     371           0 :                 SwFrameFormat *const pFormat = rSh.GetFlyFrameFormat();
     372           0 :                 if (pFormat)
     373             :                 {
     374           0 :                     aRef = SwXTextGraphicObject::CreateXTextGraphicObject(
     375           0 :                             *pFormat->GetDoc(), pFormat);
     376             :                 }
     377             :             }
     378           0 :             break;
     379             :             case SHELL_MODE_OBJECT          :
     380             :             {
     381           0 :                 SwFrameFormat *const pFormat = rSh.GetFlyFrameFormat();
     382           0 :                 if (pFormat)
     383             :                 {
     384           0 :                     aRef = SwXTextEmbeddedObject::CreateXTextEmbeddedObject(
     385           0 :                             *pFormat->GetDoc(), pFormat);
     386             :                 }
     387             :             }
     388           0 :             break;
     389             :             case SHELL_MODE_DRAW            :
     390             :             case SHELL_MODE_DRAW_CTRL       :
     391             :             case SHELL_MODE_DRAW_FORM       :
     392             :             case SHELL_MODE_DRAWTEXT        :
     393             :             case SHELL_MODE_BEZIER          :
     394             :             {
     395           0 :                 uno::Reference< drawing::XDrawPageSupplier >  xPageSupp;
     396           0 :                 uno::Reference< frame::XModel > xModel = m_pView->GetDocShell()->GetBaseModel();
     397           0 :                 uno::Reference< lang::XUnoTunnel > xModelTunnel(xModel, uno::UNO_QUERY);
     398             : 
     399             :                 uno::Reference< drawing::XShapes >  xShCol = drawing::ShapeCollection::create(
     400           0 :                         comphelper::getProcessComponentContext());
     401             : 
     402           0 :                 const SdrMarkList& rMarkList = rSh.GetDrawView()->GetMarkedObjectList();
     403           0 :                 for(size_t i = 0; i < rMarkList.GetMarkCount(); ++i)
     404             :                 {
     405           0 :                     SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
     406           0 :                     uno::Reference< uno::XInterface >  xInt = SwFmDrawPage::GetInterface( pObj );
     407           0 :                     uno::Reference< drawing::XShape >  xShape(xInt, uno::UNO_QUERY);
     408           0 :                     xShCol->add(xShape);
     409           0 :                 }
     410           0 :                 aRef = uno::Reference< uno::XInterface >(xShCol, uno::UNO_QUERY);
     411             :             }
     412           0 :             break;
     413             :             default:;//prevent warning
     414             :         }
     415             :     }
     416           1 :     uno::Any aRet(&aRef, cppu::UnoType<uno::XInterface>::get());
     417           2 :     return aRet;
     418             : }
     419             : 
     420           1 : void SwXTextView::addSelectionChangeListener(
     421             :                                     const uno::Reference< view::XSelectionChangeListener > & rxListener)
     422             :                                     throw( uno::RuntimeException, std::exception )
     423             : {
     424           1 :     SolarMutexGuard aGuard;
     425           1 :     m_SelChangedListeners.addInterface(rxListener);
     426           1 : }
     427             : 
     428           1 : void SwXTextView::removeSelectionChangeListener(
     429             :                                         const uno::Reference< view::XSelectionChangeListener > & rxListener)
     430             :                                         throw( uno::RuntimeException, std::exception )
     431             : {
     432           1 :     SolarMutexGuard aGuard;
     433           1 :     m_SelChangedListeners.removeInterface(rxListener);
     434           1 : }
     435             : 
     436          94 : SdrObject* SwXTextView::GetControl(
     437             :         const uno::Reference< awt::XControlModel > & xModel,
     438             :         uno::Reference< awt::XControl >& xToFill  )
     439             : {
     440          94 :     SwView* pView2 = GetView();
     441          94 :     FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
     442          94 :     SdrView* pDrawView = pView2 ? pView2->GetDrawView() : NULL;
     443          94 :     vcl::Window* pWindow = pView2 ? pView2->GetWrtShell().GetWin() : NULL;
     444             : 
     445             :     OSL_ENSURE( pFormShell && pDrawView && pWindow, "SwXTextView::GetControl: how could I?" );
     446             : 
     447          94 :     SdrObject* pControl = NULL;
     448          94 :     if ( pFormShell && pDrawView && pWindow )
     449          94 :         pControl = pFormShell->GetFormControl( xModel, *pDrawView, *pWindow, xToFill );
     450          94 :     return pControl;
     451             : }
     452             : 
     453          94 : uno::Reference< awt::XControl >  SwXTextView::getControl(const uno::Reference< awt::XControlModel > & xModel)
     454             :         throw( container::NoSuchElementException, uno::RuntimeException, std::exception )
     455             : {
     456          94 :     SolarMutexGuard aGuard;
     457          94 :     uno::Reference< awt::XControl >  xRet;
     458          94 :     GetControl(xModel, xRet);
     459          94 :     return xRet;
     460             : }
     461             : 
     462           0 : uno::Reference< form::runtime::XFormController > SAL_CALL SwXTextView::getFormController( const uno::Reference< form::XForm >& _Form ) throw (RuntimeException, std::exception)
     463             : {
     464           0 :     SolarMutexGuard aGuard;
     465             : 
     466           0 :     SwView* pView2 = GetView();
     467           0 :     FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
     468           0 :     SdrView* pDrawView = pView2 ? pView2->GetDrawView() : NULL;
     469           0 :     vcl::Window* pWindow = pView2 ? pView2->GetWrtShell().GetWin() : NULL;
     470             :     OSL_ENSURE( pFormShell && pDrawView && pWindow, "SwXTextView::getFormController: how could I?" );
     471             : 
     472           0 :     uno::Reference< form::runtime::XFormController > xController;
     473           0 :     if ( pFormShell && pDrawView && pWindow )
     474           0 :         xController = FmFormShell::GetFormController( _Form, *pDrawView, *pWindow );
     475           0 :     return xController;
     476             : }
     477             : 
     478           1 : sal_Bool SAL_CALL SwXTextView::isFormDesignMode(  ) throw (uno::RuntimeException, std::exception)
     479             : {
     480           1 :     SolarMutexGuard aGuard;
     481           1 :     SwView* pView2 = GetView();
     482           1 :     FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
     483           1 :     return !pFormShell || pFormShell->IsDesignMode();
     484             : }
     485             : 
     486          21 : void SAL_CALL SwXTextView::setFormDesignMode( sal_Bool _DesignMode ) throw (RuntimeException, std::exception)
     487             : {
     488          21 :     SolarMutexGuard aGuard;
     489          21 :     SwView* pView2 = GetView();
     490          21 :     FmFormShell* pFormShell = pView2 ? pView2->GetFormShell() : NULL;
     491          21 :     if ( pFormShell )
     492          21 :         pFormShell->SetDesignMode( _DesignMode );
     493          21 : }
     494             : 
     495          64 : uno::Reference< text::XTextViewCursor >  SwXTextView::getViewCursor() throw( uno::RuntimeException, std::exception )
     496             : {
     497          64 :     SolarMutexGuard aGuard;
     498          64 :     if(GetView())
     499             :     {
     500          64 :         if(!pxTextViewCursor)
     501             :         {
     502          58 :             static_cast<SwXTextView*>(this)->pxTextViewCursor = new uno::Reference< text::XTextViewCursor > ;
     503          58 :             *pxTextViewCursor = new  SwXTextViewCursor(GetView());
     504             :         }
     505         128 :         return *pxTextViewCursor;
     506             :     }
     507             :     else
     508           0 :         throw uno::RuntimeException();
     509             : }
     510             : 
     511          16 : uno::Reference< beans::XPropertySet >  SwXTextView::getViewSettings() throw( uno::RuntimeException, std::exception )
     512             : {
     513          16 :     SolarMutexGuard aGuard;
     514          16 :     if(m_pView)
     515             :     {
     516          16 :         if(!pxViewSettings)
     517             :         {
     518          15 :             static_cast<SwXTextView*>(this)->pxViewSettings = new uno::Reference< beans::XPropertySet > ;
     519          15 :             *pxViewSettings = static_cast < HelperBaseNoState * > ( new SwXViewSettings( false, m_pView ) );
     520             :         }
     521             :     }
     522             :     else
     523           0 :         throw uno::RuntimeException();
     524          16 :     return *pxViewSettings;
     525             : }
     526             : 
     527           0 : Sequence< Sequence< PropertyValue > > SwXTextView::getRubyList( sal_Bool /*bAutomatic*/ )
     528             :     throw (RuntimeException, std::exception)
     529             : {
     530           0 :     SolarMutexGuard aGuard;
     531             : 
     532           0 :     if(!GetView())
     533           0 :         throw RuntimeException();
     534           0 :     SwWrtShell& rSh = m_pView->GetWrtShell();
     535           0 :     ShellModes  eSelMode = m_pView->GetShellMode();
     536           0 :     if (eSelMode != SHELL_MODE_LIST_TEXT      &&
     537           0 :         eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
     538           0 :         eSelMode != SHELL_MODE_TABLE_TEXT      &&
     539             :         eSelMode != SHELL_MODE_TEXT           )
     540           0 :         return Sequence< Sequence< PropertyValue > > ();
     541             : 
     542           0 :     SwRubyList aList;
     543             : 
     544           0 :     const sal_uInt16 nCount = SwDoc::FillRubyList( *rSh.GetCrsr(), aList, 0 );
     545           0 :     Sequence< Sequence< PropertyValue > > aRet(nCount);
     546           0 :     Sequence< PropertyValue >* pRet = aRet.getArray();
     547           0 :     OUString aString;
     548           0 :     for(sal_uInt16 n = 0; n < nCount; n++)
     549             :     {
     550           0 :         const SwRubyListEntry* pEntry = &aList[n];
     551             : 
     552           0 :         const OUString& rEntryText = pEntry->GetText();
     553           0 :         const SwFormatRuby& rAttr = pEntry->GetRubyAttr();
     554             : 
     555           0 :         pRet[n].realloc(5);
     556           0 :         PropertyValue* pValues = pRet[n].getArray();
     557           0 :         pValues[0].Name = UNO_NAME_RUBY_BASE_TEXT;
     558           0 :         pValues[0].Value <<= rEntryText;
     559           0 :         pValues[1].Name = UNO_NAME_RUBY_TEXT;
     560           0 :         pValues[1].Value <<= rAttr.GetText();
     561           0 :         pValues[2].Name = UNO_NAME_RUBY_CHAR_STYLE_NAME;
     562           0 :         SwStyleNameMapper::FillProgName(rAttr.GetCharFormatName(), aString, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, true );
     563           0 :         pValues[2].Value <<= aString;
     564           0 :         pValues[3].Name = UNO_NAME_RUBY_ADJUST;
     565           0 :         pValues[3].Value <<= (sal_Int16)rAttr.GetAdjustment();
     566           0 :         pValues[4].Name = UNO_NAME_RUBY_IS_ABOVE;
     567           0 :         sal_Bool bVal = !rAttr.GetPosition();
     568           0 :         pValues[4].Value.setValue(&bVal, cppu::UnoType<bool>::get());
     569           0 :     }
     570           0 :     return aRet;
     571             : }
     572             : 
     573           0 : void SAL_CALL SwXTextView::setRubyList(
     574             :     const Sequence< Sequence< PropertyValue > >& rRubyList, sal_Bool /*bAutomatic*/ )
     575             :         throw (RuntimeException, std::exception)
     576             : {
     577           0 :     SolarMutexGuard aGuard;
     578             : 
     579           0 :     if(!GetView() || !rRubyList.getLength())
     580           0 :         throw RuntimeException();
     581           0 :     SwWrtShell& rSh = m_pView->GetWrtShell();
     582           0 :     ShellModes  eSelMode = m_pView->GetShellMode();
     583           0 :     if (eSelMode != SHELL_MODE_LIST_TEXT      &&
     584           0 :         eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
     585           0 :         eSelMode != SHELL_MODE_TABLE_TEXT      &&
     586             :         eSelMode != SHELL_MODE_TEXT           )
     587           0 :         throw RuntimeException();
     588             : 
     589           0 :     SwRubyList aList;
     590             : 
     591           0 :     const Sequence<PropertyValue>* pRubyList = rRubyList.getConstArray();
     592           0 :     for(sal_Int32 nPos = 0; nPos < rRubyList.getLength(); nPos++)
     593             :     {
     594           0 :         SwRubyListEntry* pEntry = new SwRubyListEntry;
     595           0 :         const PropertyValue* pProperties = pRubyList[nPos].getConstArray();
     596           0 :         OUString sTmp;
     597           0 :         for(sal_Int32 nProp = 0; nProp < pRubyList[nPos].getLength(); nProp++)
     598             :         {
     599           0 :             if(pProperties[nProp].Name == UNO_NAME_RUBY_BASE_TEXT)
     600             :             {
     601           0 :                 pProperties[nProp].Value >>= sTmp;
     602           0 :                 pEntry->SetText(sTmp);
     603             :             }
     604           0 :             else if(pProperties[nProp].Name == UNO_NAME_RUBY_TEXT)
     605             :             {
     606           0 :                 pProperties[nProp].Value >>= sTmp;
     607           0 :                 pEntry->GetRubyAttr().SetText(sTmp);
     608             :             }
     609           0 :             else if(pProperties[nProp].Name == UNO_NAME_RUBY_CHAR_STYLE_NAME)
     610             :             {
     611           0 :                 if((pProperties[nProp].Value >>= sTmp))
     612             :                 {
     613           0 :                     OUString sName;
     614           0 :                     SwStyleNameMapper::FillUIName(sTmp, sName, nsSwGetPoolIdFromName::GET_POOLID_CHRFMT, true );
     615           0 :                     const sal_uInt16 nPoolId = sName.isEmpty() ? 0
     616             :                         : SwStyleNameMapper::GetPoolIdFromUIName(sName,
     617           0 :                                 nsSwGetPoolIdFromName::GET_POOLID_CHRFMT );
     618             : 
     619           0 :                     pEntry->GetRubyAttr().SetCharFormatName( sName );
     620           0 :                     pEntry->GetRubyAttr().SetCharFormatId( nPoolId );
     621             :                 }
     622             :             }
     623           0 :             else if(pProperties[nProp].Name == UNO_NAME_RUBY_ADJUST)
     624             :             {
     625           0 :                 sal_Int16 nTmp = 0;
     626           0 :                 if((pProperties[nProp].Value >>= nTmp))
     627           0 :                     pEntry->GetRubyAttr().SetAdjustment(nTmp);
     628             :             }
     629           0 :             else if(pProperties[nProp].Name == UNO_NAME_RUBY_IS_ABOVE)
     630             :             {
     631           0 :                 bool bValue = !pProperties[nProp].Value.hasValue() ||
     632           0 :                     *static_cast<sal_Bool const *>(pProperties[nProp].Value.getValue());
     633           0 :                 pEntry->GetRubyAttr().SetPosition(bValue ? 0 : 1);
     634             :             }
     635             :         }
     636           0 :         aList.insert(aList.begin() + nPos, pEntry);
     637           0 :     }
     638           0 :     SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
     639           0 :     pDoc->SetRubyList( *rSh.GetCrsr(), aList, 0 );
     640           0 : }
     641             : 
     642           0 : SfxObjectShellLock SwXTextView::BuildTmpSelectionDoc()
     643             : {
     644           0 :     SwWrtShell& rOldSh = m_pView->GetWrtShell();
     645           0 :     SfxPrinter *pPrt = rOldSh.getIDocumentDeviceAccess()->getPrinter( false );
     646             :     SwDocShell* pDocSh;
     647           0 :     SfxObjectShellLock xDocSh( pDocSh = new SwDocShell( /*pPrtDoc, */SfxObjectCreateMode::STANDARD ) );
     648           0 :     xDocSh->DoInitNew( 0 );
     649           0 :     SwDoc *const pTempDoc( pDocSh->GetDoc() );
     650             :     // #i103634#, #i112425#: do not expand numbering and fields on PDF export
     651           0 :     pTempDoc->SetClipBoard(true);
     652           0 :     rOldSh.FillPrtDoc(pTempDoc,  pPrt);
     653           0 :     SfxViewFrame* pDocFrame = SfxViewFrame::LoadHiddenDocument( *xDocSh, 0 );
     654           0 :     SwView* pDocView = static_cast<SwView*>( pDocFrame->GetViewShell() );
     655           0 :     pDocView->AttrChangedNotify( &pDocView->GetWrtShell() );//So that SelectShell is called.
     656           0 :     SwWrtShell* pSh = pDocView->GetWrtShellPtr();
     657             : 
     658           0 :     IDocumentDeviceAccess* pIDDA = pSh->getIDocumentDeviceAccess();
     659           0 :     SfxPrinter* pTempPrinter = pIDDA->getPrinter( true );
     660             : 
     661           0 :     const SwPageDesc& rCurPageDesc = rOldSh.GetPageDesc(rOldSh.GetCurPageDesc());
     662             : 
     663           0 :     IDocumentDeviceAccess* pIDDA_old = rOldSh.getIDocumentDeviceAccess();
     664             : 
     665           0 :     if( pIDDA_old->getPrinter( false ) )
     666             :     {
     667           0 :         pIDDA->setJobsetup( *pIDDA_old->getJobsetup() );
     668             :         //#69563# if it isn't the same printer then the pointer has been invalidated!
     669           0 :         pTempPrinter = pIDDA->getPrinter( true );
     670             :     }
     671             : 
     672           0 :     pTempPrinter->SetPaperBin(rCurPageDesc.GetMaster().GetPaperBin().GetValue());
     673             : 
     674           0 :     return xDocSh;
     675             : }
     676             : 
     677       14452 : void SwXTextView::NotifySelChanged()
     678             : {
     679             :     OSL_ENSURE( m_pView, "view is missing" );
     680             : 
     681             :     uno::Reference<uno::XInterface> const xInt(
     682       14452 :         static_cast<cppu::OWeakObject*>(static_cast<SfxBaseController*>(this)));
     683             : 
     684       28904 :     lang::EventObject const aEvent(xInt);
     685             :     m_SelChangedListeners.notifyEach(
     686       28904 :             &view::XSelectionChangeListener::selectionChanged, aEvent);
     687       14452 : }
     688             : 
     689             : namespace {
     690             :     struct DispatchListener
     691             :     {
     692             :         URL const & m_rURL;
     693             :         Sequence<PropertyValue> const& m_rSeq;
     694           8 :         explicit DispatchListener(URL const& rURL,
     695             :                 Sequence<PropertyValue> const& rSeq)
     696           8 :             : m_rURL(rURL), m_rSeq(rSeq) { }
     697           0 :         void operator()(uno::Reference<XDispatch> const & xListener) const
     698             :         {
     699           0 :             xListener->dispatch(m_rURL, m_rSeq);
     700           0 :         }
     701             :     };
     702             : }
     703             : 
     704           8 : void SwXTextView::NotifyDBChanged()
     705             : {
     706           8 :     URL aURL;
     707           8 :     aURL.Complete = OUString::createFromAscii(SwXDispatch::GetDBChangeURL());
     708             : 
     709             :     m_SelChangedListeners.forEach<XDispatch>(
     710           8 :             DispatchListener(aURL, Sequence<PropertyValue>(0)));
     711           8 : }
     712             : 
     713        8312 : uno::Reference< beans::XPropertySetInfo > SAL_CALL SwXTextView::getPropertySetInfo(  )
     714             :     throw (uno::RuntimeException, std::exception)
     715             : {
     716        8312 :     SolarMutexGuard aGuard;
     717        8312 :     static uno::Reference< XPropertySetInfo > aRef = m_pPropSet->getPropertySetInfo();
     718        8312 :     return aRef;
     719             : }
     720             : 
     721           0 : void SAL_CALL SwXTextView::setPropertyValue(
     722             :         const OUString& rPropertyName, const uno::Any& rValue )
     723             :     throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
     724             : {
     725           0 :     SolarMutexGuard aGuard;
     726           0 :     const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName( rPropertyName );
     727           0 :     if (!pEntry)
     728           0 :         throw UnknownPropertyException();
     729           0 :     else if (pEntry->nFlags & PropertyAttribute::READONLY)
     730           0 :         throw PropertyVetoException();
     731             :     else
     732             :     {
     733           0 :         switch (pEntry->nWID)
     734             :         {
     735             :             case WID_IS_HIDE_SPELL_MARKS :
     736             :                 // deprecated #i91949
     737           0 :             break;
     738             :             case WID_IS_CONSTANT_SPELLCHECK :
     739             :             {
     740           0 :                 bool bVal = false;
     741           0 :                 const SwViewOption *pOpt = m_pView->GetWrtShell().GetViewOptions();
     742           0 :                 if (!pOpt || !(rValue >>= bVal))
     743           0 :                     throw RuntimeException();
     744           0 :                 SwViewOption aNewOpt( *pOpt );
     745           0 :                 if (pEntry->nWID == WID_IS_CONSTANT_SPELLCHECK)
     746           0 :                     aNewOpt.SetOnlineSpell(bVal);
     747           0 :                 m_pView->GetWrtShell().ApplyViewOptions( aNewOpt );
     748             :             }
     749           0 :             break;
     750             :             default :
     751             :                 OSL_FAIL("unknown WID");
     752             :         }
     753           0 :     }
     754           0 : }
     755             : 
     756           0 : uno::Any SAL_CALL SwXTextView::getPropertyValue(
     757             :         const OUString& rPropertyName )
     758             :     throw (beans::UnknownPropertyException,
     759             :            lang::WrappedTargetException,
     760             :            uno::RuntimeException,
     761             :            std::exception)
     762             : {
     763           0 :     SolarMutexGuard aGuard;
     764             : 
     765           0 :     Any aRet;
     766             : 
     767           0 :     const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName( rPropertyName );
     768           0 :     if (!pEntry)
     769           0 :         throw UnknownPropertyException();
     770             :     else
     771             :     {
     772           0 :         sal_Int16 nWID = pEntry->nWID;
     773           0 :         switch (nWID)
     774             :         {
     775             :             case WID_PAGE_COUNT :
     776             :             case WID_LINE_COUNT :
     777             :             {
     778             :                 // format document completely in order to get meaningful
     779             :                 // values for page count and line count
     780           0 :                 m_pView->GetWrtShell().CalcLayout();
     781             : 
     782           0 :                 sal_Int32 nCount = -1;
     783           0 :                 if (nWID == WID_PAGE_COUNT)
     784           0 :                     nCount = m_pView->GetWrtShell().GetPageCount();
     785             :                 else // WID_LINE_COUNT
     786           0 :                     nCount = m_pView->GetWrtShell().GetLineCount( false /*of whole document*/ );
     787           0 :                 aRet <<= nCount;
     788             :             }
     789           0 :             break;
     790             :             case WID_IS_HIDE_SPELL_MARKS :
     791             :                 // deprecated #i91949
     792           0 :             break;
     793             :             case WID_IS_CONSTANT_SPELLCHECK :
     794             :             {
     795           0 :                 const SwViewOption *pOpt = m_pView->GetWrtShell().GetViewOptions();
     796           0 :                 if (!pOpt)
     797           0 :                     throw RuntimeException();
     798           0 :                 sal_uInt32 nFlag = VIEWOPT_1_ONLINESPELL;
     799           0 :                 bool bVal = 0 != (pOpt->GetCoreOptions() & nFlag);
     800           0 :                 aRet <<= bVal;
     801             :             }
     802           0 :             break;
     803             :             default :
     804             :                 OSL_FAIL("unknown WID");
     805             :         }
     806             :     }
     807             : 
     808           0 :     return aRet;
     809             : }
     810             : 
     811           0 : void SAL_CALL SwXTextView::addPropertyChangeListener(
     812             :         const OUString& /*rPropertyName*/,
     813             :         const uno::Reference< beans::XPropertyChangeListener >& /*rxListener*/ )
     814             :     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
     815             : {
     816             :     OSL_FAIL("not implemented");
     817           0 : }
     818             : 
     819           0 : void SAL_CALL SwXTextView::removePropertyChangeListener(
     820             :         const OUString& /*rPropertyName*/,
     821             :         const uno::Reference< beans::XPropertyChangeListener >& /*rxListener*/ )
     822             :     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
     823             : {
     824             :     OSL_FAIL("not implemented");
     825           0 : }
     826             : 
     827           0 : void SAL_CALL SwXTextView::addVetoableChangeListener(
     828             :         const OUString& /*rPropertyName*/,
     829             :         const uno::Reference< beans::XVetoableChangeListener >& /*rxListener*/ )
     830             :     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
     831             : {
     832             :     OSL_FAIL("not implemented");
     833           0 : }
     834             : 
     835           0 : void SAL_CALL SwXTextView::removeVetoableChangeListener(
     836             :         const OUString& /*rPropertyName*/,
     837             :         const uno::Reference< beans::XVetoableChangeListener >& /*rxListener*/ )
     838             :     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
     839             : {
     840             :     OSL_FAIL("not implemented");
     841           0 : }
     842             : 
     843           0 : OUString SwXTextView::getImplementationName() throw( RuntimeException, std::exception )
     844             : {
     845           0 :     return OUString("SwXTextView");
     846             : }
     847             : 
     848           0 : sal_Bool SwXTextView::supportsService(const OUString& rServiceName) throw( RuntimeException, std::exception )
     849             : {
     850           0 :     return cppu::supportsService(this, rServiceName);
     851             : }
     852             : 
     853           0 : Sequence< OUString > SwXTextView::getSupportedServiceNames() throw( RuntimeException, std::exception )
     854             : {
     855           0 :     Sequence< OUString > aRet(2);
     856           0 :     OUString* pArray = aRet.getArray();
     857           0 :     pArray[0] = "com.sun.star.text.TextDocumentView";
     858           0 :     pArray[1] = "com.sun.star.view.OfficeDocumentView";
     859           0 :     return aRet;
     860             : }
     861             : 
     862          58 : SwXTextViewCursor::SwXTextViewCursor(SwView* pVw) :
     863             :     m_pView(pVw),
     864          58 :     m_pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR))
     865             : {
     866          58 : }
     867             : 
     868         116 : SwXTextViewCursor::~SwXTextViewCursor()
     869             : {
     870         116 : }
     871             : 
     872             : // used to determine if there is a text selection or not.
     873             : // If there is no text selection the functions that need a working
     874             : // cursor will be disabled (throw RuntimeException). This will be the case
     875             : // for the following interfaces:
     876             : // - XViewCursor
     877             : // - XTextCursor
     878             : // - XTextRange
     879             : // - XLineCursor
     880          46 : bool SwXTextViewCursor::IsTextSelection( bool bAllowTables ) const
     881             : {
     882             : 
     883          46 :     bool bRes = false;
     884             :     OSL_ENSURE(m_pView, "m_pView is NULL ???");
     885          46 :     if(m_pView)
     886             :     {
     887             :         //! m_pView->GetShellMode() will only work after the shell
     888             :         //! has already changed and thus can not be used here!
     889          46 :         SelectionType eSelType = m_pView->GetWrtShell().GetSelectionType();
     890          46 :         bRes =  ( (nsSelectionType::SEL_TXT & eSelType) ||
     891         138 :                   (nsSelectionType::SEL_NUM & eSelType) )  &&
     892          92 :                 (!(nsSelectionType::SEL_TBL_CELLS & eSelType) || bAllowTables);
     893             :     }
     894          46 :     return bRes;
     895             : }
     896             : 
     897           0 : sal_Bool SwXTextViewCursor::isVisible() throw( uno::RuntimeException, std::exception )
     898             : {
     899           0 :     SolarMutexGuard aGuard;
     900             :     OSL_FAIL("not implemented");
     901           0 :     return sal_True;
     902             : }
     903             : 
     904           0 : void SwXTextViewCursor::setVisible(sal_Bool /*bVisible*/) throw( uno::RuntimeException, std::exception )
     905             : {
     906           0 :     SolarMutexGuard aGuard;
     907           0 :     OSL_FAIL("not implemented");
     908           0 : }
     909             : 
     910           8 : awt::Point SwXTextViewCursor::getPosition() throw( uno::RuntimeException, std::exception )
     911             : {
     912           8 :     SolarMutexGuard aGuard;
     913           8 :     awt::Point aRet;
     914           8 :     if(m_pView)
     915             :     {
     916           8 :         const SwWrtShell& rSh = m_pView->GetWrtShell();
     917           8 :         const SwRect aCharRect(rSh.GetCharRect());
     918             : 
     919           8 :         const SwFrameFormat& rMaster = rSh.GetPageDesc( rSh.GetCurPageDesc() ).GetMaster();
     920             : 
     921           8 :         const SvxULSpaceItem& rUL = rMaster.GetULSpace();
     922           8 :         const long nY = aCharRect.Top() - (rUL.GetUpper() + DOCUMENTBORDER);
     923           8 :         aRet.Y = convertTwipToMm100(nY);
     924             : 
     925           8 :         const SvxLRSpaceItem& rLR = rMaster.GetLRSpace();
     926           8 :         const long nX = aCharRect.Left() - (rLR.GetLeft() + DOCUMENTBORDER);
     927           8 :         aRet.X = convertTwipToMm100(nX);
     928             :     }
     929             :     else
     930           0 :         throw uno::RuntimeException();
     931           8 :     return aRet;
     932             : }
     933             : 
     934           1 : void SwXTextViewCursor::collapseToStart()
     935             :     throw(uno::RuntimeException, std::exception)
     936             : {
     937           1 :     SolarMutexGuard aGuard;
     938           1 :     if(m_pView)
     939             :     {
     940           1 :         if (!IsTextSelection())
     941           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
     942             : 
     943           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
     944           1 :         if(rSh.HasSelection())
     945             :         {
     946           1 :             SwPaM* pShellCrsr = rSh.GetCrsr();
     947           1 :             if(*pShellCrsr->GetPoint() > *pShellCrsr->GetMark())
     948           1 :                 pShellCrsr->Exchange();
     949           1 :             pShellCrsr->DeleteMark();
     950           1 :             rSh.EnterStdMode();
     951           1 :             rSh.SetSelection(*pShellCrsr);
     952             :         }
     953             :     }
     954             :     else
     955           0 :         throw uno::RuntimeException();
     956           1 : }
     957             : 
     958           1 : void SwXTextViewCursor::collapseToEnd()
     959             :     throw (uno::RuntimeException, std::exception)
     960             : {
     961           1 :     SolarMutexGuard aGuard;
     962           1 :     if(m_pView)
     963             :     {
     964           1 :         if (!IsTextSelection())
     965           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
     966             : 
     967           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
     968           1 :         if(rSh.HasSelection())
     969             :         {
     970           1 :             SwPaM* pShellCrsr = rSh.GetCrsr();
     971           1 :             if(*pShellCrsr->GetPoint() < *pShellCrsr->GetMark())
     972           0 :                 pShellCrsr->Exchange();
     973           1 :             pShellCrsr->DeleteMark();
     974           1 :             rSh.EnterStdMode();
     975           1 :             rSh.SetSelection(*pShellCrsr);
     976             :         }
     977             :     }
     978             :     else
     979           0 :         throw uno::RuntimeException();
     980           1 : }
     981             : 
     982           2 : sal_Bool SwXTextViewCursor::isCollapsed()
     983             :     throw (uno::RuntimeException, std::exception)
     984             : {
     985           2 :     SolarMutexGuard aGuard;
     986           2 :     bool bRet = false;
     987           2 :     if(m_pView)
     988             :     {
     989           2 :         if (!IsTextSelection())
     990           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
     991             : 
     992           2 :         const SwWrtShell& rSh = m_pView->GetWrtShell();
     993           2 :         bRet = !rSh.HasSelection();
     994             :     }
     995             :     else
     996           0 :         throw uno::RuntimeException();
     997           2 :     return bRet;
     998             : 
     999             : }
    1000             : 
    1001           2 : sal_Bool SwXTextViewCursor::goLeft(sal_Int16 nCount, sal_Bool bExpand)
    1002             :     throw (uno::RuntimeException, std::exception)
    1003             : {
    1004           2 :     SolarMutexGuard aGuard;
    1005           2 :     bool bRet = false;
    1006           2 :     if(m_pView)
    1007             :     {
    1008           2 :         if (!IsTextSelection())
    1009           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1010             : 
    1011           8 :         for( sal_uInt16 i = 0; i < nCount; i++ )
    1012           6 :             bRet = m_pView->GetWrtShell().Left( CRSR_SKIP_CHARS, bExpand, 1, true );
    1013             :     }
    1014             :     else
    1015           0 :         throw uno::RuntimeException();
    1016           2 :     return bRet;
    1017             : }
    1018             : 
    1019           3 : sal_Bool SwXTextViewCursor::goRight(sal_Int16 nCount, sal_Bool bExpand)
    1020             :     throw (uno::RuntimeException, std::exception)
    1021             : {
    1022           3 :     SolarMutexGuard aGuard;
    1023           3 :     bool bRet = false;
    1024           3 :     if(m_pView)
    1025             :     {
    1026           3 :         if (!IsTextSelection())
    1027           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1028             : 
    1029          14 :         for( sal_uInt16 i = 0; i < nCount; i++ )
    1030          11 :             bRet = m_pView->GetWrtShell().Right( CRSR_SKIP_CHARS, bExpand, 1, true );
    1031             :     }
    1032             :     else
    1033           0 :         throw uno::RuntimeException();
    1034           3 :     return bRet;
    1035             : 
    1036             : }
    1037             : 
    1038           1 : void SwXTextViewCursor::gotoRange(
    1039             :     const uno::Reference< text::XTextRange > & xRange,
    1040             :     sal_Bool bExpand)
    1041             :         throw (RuntimeException, std::exception)
    1042             : {
    1043           1 :     SolarMutexGuard aGuard;
    1044           1 :     if(m_pView && xRange.is())
    1045             :     {
    1046           1 :         if (!IsTextSelection())
    1047           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1048             : 
    1049           1 :         SwUnoInternalPaM rDestPam(*m_pView->GetDocShell()->GetDoc());
    1050           1 :         if (!::sw::XTextRangeToSwPaM(rDestPam, xRange))
    1051             :         {
    1052           0 :             throw uno::RuntimeException();
    1053             :         }
    1054             : 
    1055           1 :         ShellModes  eSelMode = m_pView->GetShellMode();
    1056           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1057             :         // call EnterStdMode in non-text selections only
    1058           1 :         if(!bExpand ||
    1059           0 :            (eSelMode != SHELL_MODE_TABLE_TEXT &&
    1060           0 :             eSelMode != SHELL_MODE_LIST_TEXT &&
    1061           0 :             eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
    1062             :             eSelMode != SHELL_MODE_TEXT ))
    1063           1 :                 rSh.EnterStdMode();
    1064           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1065           2 :         SwPaM aOwnPaM(*pShellCrsr->GetPoint());
    1066           1 :         if(pShellCrsr->HasMark())
    1067             :         {
    1068           0 :             aOwnPaM.SetMark();
    1069           0 :             *aOwnPaM.GetMark() = *pShellCrsr->GetMark();
    1070             :         }
    1071             : 
    1072           2 :         uno::Reference<lang::XUnoTunnel> xRangeTunnel( xRange, uno::UNO_QUERY);
    1073           1 :         SwXTextRange* pRange = 0;
    1074           1 :         SwXParagraph* pPara = 0;
    1075           1 :         OTextCursorHelper* pCursor = 0;
    1076           1 :         if(xRangeTunnel.is())
    1077             :         {
    1078           1 :             pRange = reinterpret_cast<SwXTextRange*>(xRangeTunnel->getSomething(
    1079           1 :                                     SwXTextRange::getUnoTunnelId()));
    1080           1 :             pCursor = reinterpret_cast<OTextCursorHelper*>(xRangeTunnel->getSomething(
    1081           1 :                                     OTextCursorHelper::getUnoTunnelId()));
    1082           1 :             pPara = reinterpret_cast<SwXParagraph*>(xRangeTunnel->getSomething(
    1083           1 :                                     SwXParagraph::getUnoTunnelId()));
    1084             :         }
    1085             : 
    1086           1 :         const FrmTypeFlags nFrmType = rSh.GetFrmType(0,true);
    1087             : 
    1088           1 :         SwStartNodeType eSearchNodeType = SwNormalStartNode;
    1089           1 :         if(nFrmType & FrmTypeFlags::FLY_ANY)
    1090           0 :             eSearchNodeType = SwFlyStartNode;
    1091           1 :         else if(nFrmType &FrmTypeFlags::HEADER)
    1092           0 :             eSearchNodeType = SwHeaderStartNode;
    1093           1 :         else if(nFrmType & FrmTypeFlags::FOOTER)
    1094           0 :             eSearchNodeType = SwFooterStartNode;
    1095           1 :         else if(nFrmType & FrmTypeFlags::TABLE)
    1096           0 :             eSearchNodeType = SwTableBoxStartNode;
    1097           1 :         else if(nFrmType & FrmTypeFlags::FOOTNOTE)
    1098           0 :             eSearchNodeType = SwFootnoteStartNode;
    1099             : 
    1100           1 :         const SwStartNode* pOwnStartNode = aOwnPaM.GetNode().
    1101           1 :                                                 FindSttNodeByType(eSearchNodeType);
    1102             : 
    1103           1 :         const SwNode* pSrcNode = 0;
    1104           1 :         if(pCursor && pCursor->GetPaM())
    1105             :         {
    1106           0 :             pSrcNode = &pCursor->GetPaM()->GetNode();
    1107             :         }
    1108           1 :         else if (pRange)
    1109             :         {
    1110           1 :             SwPaM aPam(pRange->GetDoc()->GetNodes());
    1111           1 :             if (pRange->GetPositions(aPam))
    1112             :             {
    1113           1 :                 pSrcNode = &aPam.GetNode();
    1114           1 :             }
    1115             :         }
    1116           0 :         else if (pPara && pPara->GetTextNode())
    1117             :         {
    1118           0 :             pSrcNode = pPara->GetTextNode();
    1119             :         }
    1120           1 :         const SwStartNode* pTmp = pSrcNode ? pSrcNode->FindSttNodeByType(eSearchNodeType) : 0;
    1121             : 
    1122             :         //Skip SectionNodes
    1123           2 :         while(pTmp && pTmp->IsSectionNode())
    1124             :         {
    1125           0 :             pTmp = pTmp->StartOfSectionNode();
    1126             :         }
    1127           2 :         while(pOwnStartNode && pOwnStartNode->IsSectionNode())
    1128             :         {
    1129           0 :             pOwnStartNode = pOwnStartNode->StartOfSectionNode();
    1130             :         }
    1131             :         //Without Expand it is allowed to jump out with the ViewCursor everywhere,
    1132             :         //with Expand only in the same environment
    1133           1 :         if(bExpand &&
    1134           0 :             (pOwnStartNode != pTmp ||
    1135           0 :             (eSelMode != SHELL_MODE_TABLE_TEXT &&
    1136           0 :                 eSelMode != SHELL_MODE_LIST_TEXT &&
    1137           0 :                 eSelMode != SHELL_MODE_TABLE_LIST_TEXT &&
    1138             :                 eSelMode != SHELL_MODE_TEXT)))
    1139           0 :             throw uno::RuntimeException();
    1140             : 
    1141             :         //Now, the selection must be expanded.
    1142           1 :         if(bExpand)
    1143             :         {
    1144             :             // The cursor should include everything that has been included
    1145             :             // by him and the transferred Range.
    1146           0 :             SwPosition aOwnLeft(*aOwnPaM.Start());
    1147           0 :             SwPosition aOwnRight(*aOwnPaM.End());
    1148           0 :             SwPosition* pParamLeft = rDestPam.Start();
    1149           0 :             SwPosition* pParamRight = rDestPam.End();
    1150             :             // Now four SwPositions are there, two of them are needed, but which?
    1151           0 :             if(aOwnRight > *pParamRight)
    1152           0 :                 *aOwnPaM.GetPoint() = aOwnRight;
    1153             :             else
    1154           0 :                 *aOwnPaM.GetPoint() = *pParamRight;
    1155           0 :             aOwnPaM.SetMark();
    1156           0 :             if(aOwnLeft < *pParamLeft)
    1157           0 :                 *aOwnPaM.GetMark() = aOwnLeft;
    1158             :             else
    1159           0 :                 *aOwnPaM.GetMark() = *pParamLeft;
    1160             :         }
    1161             :         else
    1162             :         {
    1163             :             //The cursor shall match the passed range.
    1164           1 :             *aOwnPaM.GetPoint() = *rDestPam.GetPoint();
    1165           1 :             if(rDestPam.HasMark())
    1166             :             {
    1167           0 :                 aOwnPaM.SetMark();
    1168           0 :                 *aOwnPaM.GetMark() = *rDestPam.GetMark();
    1169             :             }
    1170             :             else
    1171           1 :                 aOwnPaM.DeleteMark();
    1172             :         }
    1173           2 :         rSh.SetSelection(aOwnPaM);
    1174             :     }
    1175             :     else
    1176           0 :         throw uno::RuntimeException();
    1177             : 
    1178           1 : }
    1179             : 
    1180           8 : void SwXTextViewCursor::gotoStart(sal_Bool bExpand)
    1181             :     throw (uno::RuntimeException, std::exception)
    1182             : {
    1183           8 :     SolarMutexGuard aGuard;
    1184           8 :     if(m_pView)
    1185             :     {
    1186           8 :         if (!IsTextSelection())
    1187           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1188             : 
    1189           8 :         m_pView->GetWrtShell().SttDoc( bExpand );
    1190             :     }
    1191             :     else
    1192           0 :         throw uno::RuntimeException();
    1193           8 : }
    1194             : 
    1195           8 : void SwXTextViewCursor::gotoEnd(sal_Bool bExpand)
    1196             :     throw (uno::RuntimeException, std::exception)
    1197             : {
    1198           8 :     SolarMutexGuard aGuard;
    1199           8 :     if(m_pView)
    1200             :     {
    1201           8 :         if (!IsTextSelection())
    1202           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1203             : 
    1204           8 :         m_pView->GetWrtShell().EndDoc( bExpand );
    1205             :     }
    1206             :     else
    1207           0 :         throw uno::RuntimeException();
    1208           8 : }
    1209             : 
    1210           3 : sal_Bool SwXTextViewCursor::jumpToFirstPage()
    1211             :     throw (uno::RuntimeException, std::exception)
    1212             : {
    1213           3 :     SolarMutexGuard aGuard;
    1214           3 :     bool bRet = false;
    1215           3 :     if(m_pView)
    1216             :     {
    1217           3 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1218           3 :         if (rSh.IsSelFrmMode())
    1219             :         {
    1220           0 :             rSh.UnSelectFrm();
    1221           0 :             rSh.LeaveSelFrmMode();
    1222             :         }
    1223           3 :         rSh.EnterStdMode();
    1224           3 :         bRet = rSh.SttEndDoc(true);
    1225             :     }
    1226             :     else
    1227           0 :         throw uno::RuntimeException();
    1228           3 :     return bRet;
    1229             : }
    1230             : 
    1231          51 : sal_Bool SwXTextViewCursor::jumpToLastPage()
    1232             :     throw(uno::RuntimeException, std::exception)
    1233             : {
    1234          51 :     SolarMutexGuard aGuard;
    1235          51 :     bool bRet = false;
    1236          51 :     if(m_pView)
    1237             :     {
    1238          51 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1239          51 :         if (rSh.IsSelFrmMode())
    1240             :         {
    1241           0 :             rSh.UnSelectFrm();
    1242           0 :             rSh.LeaveSelFrmMode();
    1243             :         }
    1244          51 :         rSh.EnterStdMode();
    1245          51 :         bRet = rSh.SttEndDoc(false);
    1246          51 :         rSh.SttPg();
    1247             :     }
    1248             :     else
    1249           0 :         throw uno::RuntimeException();
    1250          51 :     return bRet;
    1251             : }
    1252             : 
    1253           3 : sal_Bool SwXTextViewCursor::jumpToPage(sal_Int16 nPage) throw( uno::RuntimeException, std::exception )
    1254             : {
    1255           3 :     SolarMutexGuard aGuard;
    1256           3 :     bool bRet = false;
    1257           3 :     if(m_pView)
    1258           3 :         bRet = m_pView->GetWrtShell().GotoPage(nPage, true);
    1259             :     else
    1260           0 :         throw uno::RuntimeException();
    1261           3 :     return bRet;
    1262             : }
    1263             : 
    1264           1 : sal_Bool SwXTextViewCursor::jumpToNextPage() throw( uno::RuntimeException, std::exception )
    1265             : {
    1266           1 :     SolarMutexGuard aGuard;
    1267           1 :     bool bRet = false;
    1268           1 :     if(m_pView)
    1269           1 :         bRet = m_pView->GetWrtShell().SttNxtPg();
    1270             :     else
    1271           0 :         throw uno::RuntimeException();
    1272           1 :     return bRet;
    1273             : }
    1274             : 
    1275           1 : sal_Bool SwXTextViewCursor::jumpToPreviousPage() throw( uno::RuntimeException, std::exception )
    1276             : {
    1277           1 :     SolarMutexGuard aGuard;
    1278           1 :     bool bRet = false;
    1279           1 :     if(m_pView)
    1280           1 :         bRet = m_pView->GetWrtShell().EndPrvPg();
    1281             :     else
    1282           0 :         throw uno::RuntimeException();
    1283           1 :     return bRet;
    1284             : }
    1285             : 
    1286           1 : sal_Bool SwXTextViewCursor::jumpToEndOfPage() throw( uno::RuntimeException, std::exception )
    1287             : {
    1288           1 :     SolarMutexGuard aGuard;
    1289           1 :     bool bRet = false;
    1290           1 :     if(m_pView)
    1291           1 :         bRet = m_pView->GetWrtShell().EndPg();
    1292             :     else
    1293           0 :         throw uno::RuntimeException();
    1294           1 :     return bRet;
    1295             : }
    1296             : 
    1297           1 : sal_Bool SwXTextViewCursor::jumpToStartOfPage() throw( uno::RuntimeException, std::exception )
    1298             : {
    1299           1 :     SolarMutexGuard aGuard;
    1300           1 :     bool bRet = false;
    1301           1 :     if(m_pView)
    1302           1 :         bRet = m_pView->GetWrtShell().SttPg();
    1303             :     else
    1304           0 :         throw uno::RuntimeException();
    1305           1 :     return bRet;
    1306             : }
    1307             : 
    1308          51 : sal_Int16 SwXTextViewCursor::getPage()
    1309             :     throw (uno::RuntimeException, std::exception)
    1310             : {
    1311          51 :     SolarMutexGuard aGuard;
    1312          51 :     sal_Int16 nRet = 0;
    1313          51 :     if(m_pView)
    1314             :     {
    1315          51 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1316          51 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1317          51 :         nRet = static_cast<sal_Int16>(pShellCrsr->GetPageNum( true, 0 ));
    1318             :     }
    1319             :     else
    1320           0 :         throw uno::RuntimeException();
    1321          51 :     return nRet;
    1322             : }
    1323             : 
    1324           0 : sal_Bool SwXTextViewCursor::screenDown()
    1325             :     throw (uno::RuntimeException, std::exception)
    1326             : {
    1327           0 :     SolarMutexGuard aGuard;
    1328           0 :     bool bRet = false;
    1329           0 :     if(m_pView)
    1330             :     {
    1331           0 :         SfxRequest aReq(FN_PAGEDOWN, SfxCallMode::SLOT, m_pView->GetPool());
    1332           0 :         m_pView->Execute(aReq);
    1333           0 :         const SfxPoolItem* pRet = aReq.GetReturnValue();
    1334           0 :         bRet = pRet && static_cast<const SfxBoolItem*>(pRet)->GetValue();
    1335             :     }
    1336             :     else
    1337           0 :         throw uno::RuntimeException();
    1338           0 :     return bRet;
    1339             : }
    1340             : 
    1341           0 : sal_Bool SwXTextViewCursor::screenUp()
    1342             :     throw (uno::RuntimeException, std::exception)
    1343             : {
    1344           0 :     SolarMutexGuard aGuard;
    1345           0 :     bool bRet = false;
    1346           0 :     if(m_pView)
    1347             :     {
    1348           0 :         SfxRequest aReq(FN_PAGEUP, SfxCallMode::SLOT, m_pView->GetPool());
    1349           0 :         m_pView->Execute(aReq);
    1350           0 :         const SfxPoolItem* pRet = aReq.GetReturnValue();
    1351           0 :         bRet = pRet && static_cast<const SfxBoolItem*>(pRet)->GetValue();
    1352             :     }
    1353             :     else
    1354           0 :         throw uno::RuntimeException();
    1355           0 :     return bRet;
    1356             : }
    1357             : 
    1358           1 : uno::Reference< text::XText >  SwXTextViewCursor::getText()
    1359             :     throw (uno::RuntimeException, std::exception)
    1360             : {
    1361           1 :     SolarMutexGuard aGuard;
    1362           1 :     uno::Reference< text::XText >  xRet;
    1363           1 :     if(m_pView)
    1364             :     {
    1365           1 :         if (!IsTextSelection( false ))
    1366           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1367             : 
    1368           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1369           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1370           1 :         SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
    1371           1 :         xRet = ::sw::CreateParentXText(*pDoc, *pShellCrsr->Start());
    1372             :     }
    1373             :     else
    1374           0 :         throw uno::RuntimeException();
    1375           1 :     return xRet;
    1376             : }
    1377             : 
    1378           2 : uno::Reference< text::XTextRange >  SwXTextViewCursor::getStart()
    1379             :     throw (uno::RuntimeException, std::exception)
    1380             : {
    1381           2 :     SolarMutexGuard aGuard;
    1382           2 :     uno::Reference< text::XTextRange >  xRet;
    1383           2 :     if(m_pView)
    1384             :     {
    1385           2 :         if (!IsTextSelection())
    1386           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1387             : 
    1388           2 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1389           2 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1390           2 :         SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
    1391           2 :         xRet = SwXTextRange::CreateXTextRange(*pDoc, *pShellCrsr->Start(), 0);
    1392             :     }
    1393             :     else
    1394           0 :         throw uno::RuntimeException();
    1395           2 :     return xRet;
    1396             : }
    1397             : 
    1398           1 : uno::Reference< text::XTextRange >  SwXTextViewCursor::getEnd()
    1399             :     throw (uno::RuntimeException, std::exception)
    1400             : {
    1401           1 :     SolarMutexGuard aGuard;
    1402           1 :     uno::Reference< text::XTextRange >  xRet;
    1403           1 :     if(m_pView)
    1404             :     {
    1405           1 :         if (!IsTextSelection())
    1406           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1407             : 
    1408           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1409           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1410           1 :         SwDoc* pDoc = m_pView->GetDocShell()->GetDoc();
    1411           1 :         xRet = SwXTextRange::CreateXTextRange(*pDoc, *pShellCrsr->End(), 0);
    1412             :     }
    1413             :     else
    1414           0 :         throw uno::RuntimeException();
    1415           1 :     return xRet;
    1416             : }
    1417             : 
    1418           8 : OUString SwXTextViewCursor::getString()
    1419             :     throw (uno::RuntimeException, std::exception)
    1420             : {
    1421           8 :     SolarMutexGuard aGuard;
    1422           8 :     OUString uRet;
    1423           8 :     if(m_pView)
    1424             :     {
    1425           8 :         if (!IsTextSelection( false ))
    1426           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1427             : 
    1428           8 :         ShellModes  eSelMode = m_pView->GetShellMode();
    1429           8 :         switch(eSelMode)
    1430             :         {
    1431             :             //! since setString for SEL_TABLE_TEXT (with possible
    1432             :             //! multi selection of cells) would not work properly we
    1433             :             //! will ignore this case for both
    1434             :             //! functions (setString AND getString) because of symmetrie.
    1435             : 
    1436             :             case SHELL_MODE_LIST_TEXT       :
    1437             :             case SHELL_MODE_TABLE_LIST_TEXT:
    1438             :             case SHELL_MODE_TEXT            :
    1439             :             {
    1440           8 :                 SwWrtShell& rSh = m_pView->GetWrtShell();
    1441           8 :                 SwPaM* pShellCrsr = rSh.GetCrsr();
    1442           8 :                 SwUnoCursorHelper::GetTextFromPam(*pShellCrsr, uRet);
    1443             :             }
    1444             :             default:;//prevent warning
    1445             :         }
    1446             :     }
    1447           8 :     return uRet;
    1448             : }
    1449             : 
    1450           8 : void SwXTextViewCursor::setString(const OUString& aString)
    1451             :     throw (uno::RuntimeException, std::exception)
    1452             : {
    1453           8 :     SolarMutexGuard aGuard;
    1454           8 :     if(m_pView)
    1455             :     {
    1456           8 :         if (!IsTextSelection( false ))
    1457           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1458             : 
    1459           8 :         ShellModes  eSelMode = m_pView->GetShellMode();
    1460           8 :         switch(eSelMode)
    1461             :         {
    1462             :             //! since setString for SEL_TABLE_TEXT (with possible
    1463             :             //! multi selection of cells) would not work properly we
    1464             :             //! will ignore this case for both
    1465             :             //! functions (setString AND getString) because of symmetrie.
    1466             : 
    1467             :             case SHELL_MODE_LIST_TEXT       :
    1468             :             case SHELL_MODE_TABLE_LIST_TEXT :
    1469             :             case SHELL_MODE_TEXT            :
    1470             :             {
    1471           8 :                 SwWrtShell& rSh = m_pView->GetWrtShell();
    1472           8 :                 SwCursor* pShellCrsr = rSh.GetSwCrsr();
    1473           8 :                 SwUnoCursorHelper::SetString(*pShellCrsr, aString);
    1474             :             }
    1475             :             default:;//prevent warning
    1476             :         }
    1477           8 :     }
    1478           8 : }
    1479             : 
    1480         166 : uno::Reference< XPropertySetInfo >  SwXTextViewCursor::getPropertySetInfo(  ) throw(RuntimeException, std::exception)
    1481             : {
    1482         166 :     static uno::Reference< XPropertySetInfo >  xRef = m_pPropSet->getPropertySetInfo();
    1483         166 :     return xRef;
    1484             : }
    1485             : 
    1486          83 : void  SwXTextViewCursor::setPropertyValue( const OUString& rPropertyName, const Any& aValue )
    1487             :     throw (UnknownPropertyException, PropertyVetoException,
    1488             :            IllegalArgumentException, WrappedTargetException,
    1489             :            RuntimeException, std::exception)
    1490             : {
    1491          83 :     SolarMutexGuard aGuard;
    1492          83 :     if(m_pView)
    1493             :     {
    1494          83 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1495          83 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1496          83 :         SwNode& rNode = pShellCrsr->GetNode();
    1497          83 :         if (rNode.IsTextNode())
    1498             :         {
    1499             :             SwUnoCursorHelper::SetPropertyValue(
    1500          83 :                 *pShellCrsr, *m_pPropSet, rPropertyName, aValue );
    1501             :         }
    1502             :         else
    1503           0 :             throw RuntimeException();
    1504             :     }
    1505             :     else
    1506           0 :         throw RuntimeException();
    1507          83 : }
    1508             : 
    1509         171 : Any  SwXTextViewCursor::getPropertyValue( const OUString& rPropertyName )
    1510             :     throw (UnknownPropertyException, WrappedTargetException,
    1511             :            RuntimeException, std::exception)
    1512             : {
    1513         171 :     SolarMutexGuard aGuard;
    1514         171 :     Any aRet;
    1515         171 :     if(m_pView)
    1516             :     {
    1517         171 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1518         171 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1519         342 :         aRet = SwUnoCursorHelper::GetPropertyValue(
    1520         171 :                 *pShellCrsr, *m_pPropSet, rPropertyName);
    1521             :     }
    1522             :     else
    1523           0 :         throw RuntimeException();
    1524         171 :     return aRet;
    1525             : }
    1526             : 
    1527           0 : void  SwXTextViewCursor::addPropertyChangeListener(
    1528             :     const OUString& /*aPropertyName*/, const uno::Reference< XPropertyChangeListener >& /*xListener*/ )
    1529             :         throw(UnknownPropertyException, WrappedTargetException, RuntimeException, std::exception)
    1530             : {
    1531           0 : }
    1532             : 
    1533           0 : void  SwXTextViewCursor::removePropertyChangeListener(
    1534             :     const OUString& /*aPropertyName*/, const uno::Reference< XPropertyChangeListener >& /*aListener*/ )
    1535             :         throw(UnknownPropertyException, WrappedTargetException, RuntimeException, std::exception)
    1536             : {
    1537           0 : }
    1538             : 
    1539           0 : void  SwXTextViewCursor::addVetoableChangeListener(
    1540             :     const OUString& /*PropertyName*/, const uno::Reference< XVetoableChangeListener >& /*aListener*/ )
    1541             :         throw(UnknownPropertyException, WrappedTargetException, RuntimeException, std::exception)
    1542             : {
    1543           0 : }
    1544             : 
    1545           0 : void  SwXTextViewCursor::removeVetoableChangeListener(
    1546             :     const OUString& /*PropertyName*/, const uno::Reference< XVetoableChangeListener >& /*aListener*/ ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException, std::exception)
    1547             : {
    1548           0 : }
    1549             : 
    1550           1 : PropertyState  SwXTextViewCursor::getPropertyState( const OUString& rPropertyName )
    1551             :     throw (UnknownPropertyException, RuntimeException,
    1552             :            std::exception)
    1553             : {
    1554           1 :     SolarMutexGuard aGuard;
    1555             :     PropertyState eState;
    1556           1 :     if(m_pView)
    1557             :     {
    1558           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1559           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1560             :         eState = SwUnoCursorHelper::GetPropertyState(
    1561           1 :                 *pShellCrsr, *m_pPropSet, rPropertyName);
    1562             :     }
    1563             :     else
    1564           0 :         throw RuntimeException();
    1565           1 :     return eState;
    1566             : }
    1567             : 
    1568           1 : Sequence< PropertyState >  SwXTextViewCursor::getPropertyStates(
    1569             :     const Sequence< OUString >& rPropertyNames )
    1570             :         throw (UnknownPropertyException, RuntimeException,
    1571             :                std::exception)
    1572             : {
    1573           1 :     SolarMutexGuard aGuard;
    1574           1 :     Sequence< PropertyState >  aRet;
    1575           1 :     if(m_pView)
    1576             :     {
    1577           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1578           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1579           2 :         aRet = SwUnoCursorHelper::GetPropertyStates(
    1580           1 :                 *pShellCrsr, *m_pPropSet,  rPropertyNames);
    1581             :     }
    1582           1 :     return aRet;
    1583             : }
    1584             : 
    1585           1 : void  SwXTextViewCursor::setPropertyToDefault( const OUString& rPropertyName )
    1586             :     throw (UnknownPropertyException, RuntimeException,
    1587             :            std::exception)
    1588             : {
    1589           1 :     SolarMutexGuard aGuard;
    1590           1 :     if(m_pView)
    1591             :     {
    1592           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1593           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1594             :         SwUnoCursorHelper::SetPropertyToDefault(
    1595           1 :                 *pShellCrsr, *m_pPropSet, rPropertyName);
    1596           1 :     }
    1597           1 : }
    1598             : 
    1599           1 : Any  SwXTextViewCursor::getPropertyDefault( const OUString& rPropertyName )
    1600             :     throw (UnknownPropertyException, WrappedTargetException,
    1601             :            RuntimeException, std::exception)
    1602             : {
    1603           1 :     Any aRet;
    1604           2 :     SolarMutexGuard aGuard;
    1605           1 :     if(m_pView)
    1606             :     {
    1607           1 :         SwWrtShell& rSh = m_pView->GetWrtShell();
    1608           1 :         SwPaM* pShellCrsr = rSh.GetCrsr();
    1609           2 :         aRet = SwUnoCursorHelper::GetPropertyDefault(
    1610           1 :                 *pShellCrsr, *m_pPropSet, rPropertyName);
    1611             :     }
    1612           2 :     return aRet;
    1613             : }
    1614             : 
    1615           0 : sal_Bool SwXTextViewCursor::goDown(sal_Int16 nCount, sal_Bool bExpand)
    1616             :     throw (uno::RuntimeException, std::exception)
    1617             : {
    1618           0 :     SolarMutexGuard aGuard;
    1619           0 :     bool bRet = false;
    1620           0 :     if(m_pView)
    1621             :     {
    1622           0 :         if (!IsTextSelection())
    1623           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1624             : 
    1625           0 :         for( sal_uInt16 i = 0; i < nCount; i++ )
    1626           0 :             bRet = m_pView->GetWrtShell().Down( bExpand, 1, true );
    1627             :     }
    1628             :     else
    1629           0 :         throw uno::RuntimeException();
    1630           0 :     return bRet;
    1631             : }
    1632             : 
    1633           0 : sal_Bool SwXTextViewCursor::goUp(sal_Int16 nCount, sal_Bool bExpand)
    1634             :     throw (uno::RuntimeException, std::exception)
    1635             : {
    1636           0 :     SolarMutexGuard aGuard;
    1637           0 :     bool bRet = false;
    1638           0 :     if(m_pView)
    1639             :     {
    1640           0 :         if (!IsTextSelection())
    1641           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1642             : 
    1643           0 :         for( sal_uInt16 i = 0; i < nCount; i++ )
    1644           0 :             bRet = m_pView->GetWrtShell().Up( bExpand, 1, true );
    1645             :     }
    1646             :     else
    1647           0 :         throw uno::RuntimeException();
    1648           0 :     return bRet;
    1649             : }
    1650             : 
    1651           0 : sal_Bool SwXTextViewCursor::isAtStartOfLine()
    1652             :     throw(uno::RuntimeException, std::exception)
    1653             : {
    1654           0 :     SolarMutexGuard aGuard;
    1655           0 :     bool bRet = false;
    1656           0 :     if(m_pView)
    1657             :     {
    1658           0 :         if (!IsTextSelection( false ))
    1659           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1660             : 
    1661           0 :         bRet = m_pView->GetWrtShell().IsAtLeftMargin();
    1662             :     }
    1663             :     else
    1664           0 :         throw uno::RuntimeException();
    1665           0 :     return bRet;
    1666             : }
    1667             : 
    1668           0 : sal_Bool SwXTextViewCursor::isAtEndOfLine()
    1669             :     throw(uno::RuntimeException, std::exception)
    1670             : {
    1671           0 :     SolarMutexGuard aGuard;
    1672           0 :     bool bRet = false;
    1673           0 :     if(m_pView)
    1674             :     {
    1675           0 :         if (!IsTextSelection( false ))
    1676           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1677             : 
    1678           0 :         bRet = m_pView->GetWrtShell().IsAtRightMargin(true);
    1679             :     }
    1680             :     else
    1681           0 :         throw uno::RuntimeException();
    1682           0 :     return bRet;
    1683             : }
    1684             : 
    1685           0 : void SwXTextViewCursor::gotoEndOfLine(sal_Bool bExpand)
    1686             :     throw (uno::RuntimeException, std::exception)
    1687             : {
    1688           0 :     SolarMutexGuard aGuard;
    1689           0 :     if(m_pView)
    1690             :     {
    1691           0 :         if (!IsTextSelection( false ))
    1692           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1693             : 
    1694           0 :         m_pView->GetWrtShell().RightMargin(bExpand, true);
    1695             :     }
    1696             :     else
    1697           0 :         throw uno::RuntimeException();
    1698           0 : }
    1699             : 
    1700           0 : void SwXTextViewCursor::gotoStartOfLine(sal_Bool bExpand)
    1701             :     throw (uno::RuntimeException, std::exception)
    1702             : {
    1703           0 :     SolarMutexGuard aGuard;
    1704           0 :     if(m_pView)
    1705             :     {
    1706           0 :         if (!IsTextSelection( false ))
    1707           0 :             throw  uno::RuntimeException("no text selection", static_cast < cppu::OWeakObject * > ( this ) );
    1708             : 
    1709           0 :         m_pView->GetWrtShell().LeftMargin(bExpand, true);
    1710             :     }
    1711             :     else
    1712           0 :         throw uno::RuntimeException();
    1713           0 : }
    1714             : 
    1715           0 : OUString SwXTextViewCursor::getImplementationName() throw( RuntimeException, std::exception )
    1716             : {
    1717           0 :     return OUString("SwXTextViewCursor");
    1718             : }
    1719             : 
    1720           5 : sal_Bool SwXTextViewCursor::supportsService(const OUString& rServiceName) throw( RuntimeException, std::exception )
    1721             : {
    1722           5 :     return cppu::supportsService(this, rServiceName);
    1723             : }
    1724             : 
    1725           5 : Sequence< OUString > SwXTextViewCursor::getSupportedServiceNames() throw( RuntimeException, std::exception )
    1726             : {
    1727           5 :     Sequence< OUString > aRet(7);
    1728           5 :     OUString* pArray = aRet.getArray();
    1729           5 :     pArray[0] = "com.sun.star.text.TextViewCursor";
    1730           5 :     pArray[1] = "com.sun.star.style.CharacterProperties";
    1731           5 :     pArray[2] = "com.sun.star.style.CharacterPropertiesAsian";
    1732           5 :     pArray[3] = "com.sun.star.style.CharacterPropertiesComplex";
    1733           5 :     pArray[4] = "com.sun.star.style.ParagraphProperties";
    1734           5 :     pArray[5] = "com.sun.star.style.ParagraphPropertiesAsian";
    1735           5 :     pArray[6] = "com.sun.star.style.ParagraphPropertiesComplex";
    1736           5 :     return aRet;
    1737             : }
    1738             : 
    1739             : namespace
    1740             : {
    1741             :     class theSwXTextViewCursorUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXTextViewCursorUnoTunnelId > {};
    1742             : }
    1743             : 
    1744           0 : const uno::Sequence< sal_Int8 > & SwXTextViewCursor::getUnoTunnelId()
    1745             : {
    1746           0 :     return theSwXTextViewCursorUnoTunnelId::get().getSeq();
    1747             : }
    1748             : 
    1749             : //XUnoTunnel
    1750           0 : sal_Int64 SAL_CALL SwXTextViewCursor::getSomething(
    1751             :     const uno::Sequence< sal_Int8 >& rId )
    1752             :         throw(uno::RuntimeException, std::exception)
    1753             : {
    1754           0 :     if( rId.getLength() == 16
    1755           0 :         && 0 == memcmp( getUnoTunnelId().getConstArray(),
    1756           0 :                                         rId.getConstArray(), 16 ) )
    1757             :         {
    1758           0 :                 return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( this ));
    1759             :         }
    1760           0 :     return OTextCursorHelper::getSomething(rId);
    1761             : }
    1762             : 
    1763         543 : IMPLEMENT_FORWARD_XINTERFACE2(SwXTextViewCursor,SwXTextViewCursor_Base,OTextCursorHelper)
    1764           0 : const SwDoc*        SwXTextViewCursor::GetDoc() const
    1765             : {
    1766           0 :     SwWrtShell& rSh = m_pView->GetWrtShell();
    1767           0 :     return   rSh.GetCrsr() ? rSh.GetCrsr()->GetDoc() : 0;
    1768             : }
    1769             : 
    1770           0 : SwDoc*  SwXTextViewCursor::GetDoc()
    1771             : {
    1772           0 :     SwWrtShell& rSh = m_pView->GetWrtShell();
    1773           0 :     return   rSh.GetCrsr() ? rSh.GetCrsr()->GetDoc() : 0;
    1774             : }
    1775             : 
    1776           0 : const SwPaM*    SwXTextViewCursor::GetPaM() const
    1777             : {
    1778           0 :     SwWrtShell& rSh = m_pView->GetWrtShell();
    1779           0 :     return rSh.GetCrsr();
    1780             : }
    1781             : 
    1782           0 : SwPaM*  SwXTextViewCursor::GetPaM()
    1783             : {
    1784           0 :     SwWrtShell& rSh = m_pView->GetWrtShell();
    1785           0 :     return rSh.GetCrsr();
    1786             : }
    1787             : 
    1788           0 : uno::Reference< datatransfer::XTransferable > SAL_CALL SwXTextView::getTransferable()
    1789             :     throw (uno::RuntimeException, std::exception)
    1790             : {
    1791           0 :     SolarMutexGuard aGuard;
    1792             : 
    1793             :     //force immediat shell update
    1794           0 :     GetView()->StopShellTimer();
    1795           0 :     SwWrtShell& rSh = GetView()->GetWrtShell();
    1796           0 :     if ( GetView()->GetShellMode() == SHELL_MODE_DRAWTEXT )
    1797             :     {
    1798           0 :         SdrView *pSdrView = rSh.GetDrawView();
    1799           0 :         OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
    1800           0 :         return pOLV->GetEditView().GetTransferable();
    1801             :     }
    1802             :     else
    1803             :     {
    1804           0 :         SwTransferable* pTransfer = new SwTransferable( rSh );
    1805           0 :         const bool bLockedView = rSh.IsViewLocked();
    1806           0 :         rSh.LockView( true );    //lock visible section
    1807           0 :         pTransfer->PrepareForCopy();
    1808           0 :         rSh.LockView( bLockedView );
    1809           0 :         return uno::Reference< datatransfer::XTransferable >( pTransfer );
    1810           0 :     }
    1811             : }
    1812             : 
    1813           0 : void SAL_CALL SwXTextView::insertTransferable( const uno::Reference< datatransfer::XTransferable >& xTrans ) throw (datatransfer::UnsupportedFlavorException, uno::RuntimeException, std::exception)
    1814             : {
    1815           0 :     SolarMutexGuard aGuard;
    1816             : 
    1817             :     //force immediat shell update
    1818           0 :     GetView()->StopShellTimer();
    1819           0 :     SwWrtShell& rSh = GetView()->GetWrtShell();
    1820           0 :     if ( GetView()->GetShellMode() == SHELL_MODE_DRAWTEXT )
    1821             :     {
    1822           0 :         SdrView *pSdrView = rSh.GetDrawView();
    1823           0 :         OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
    1824           0 :         pOLV->GetEditView().InsertText( xTrans, GetView()->GetDocShell()->GetMedium()->GetBaseURL(), false );
    1825             :     }
    1826             :     else
    1827             :     {
    1828           0 :         TransferableDataHelper aDataHelper( xTrans );
    1829           0 :         if ( SwTransferable::IsPaste( rSh, aDataHelper ) )
    1830             :         {
    1831           0 :             SwTransferable::Paste( rSh, aDataHelper );
    1832           0 :             if( rSh.IsFrmSelected() || rSh.IsObjSelected() )
    1833           0 :                 rSh.EnterSelFrmMode();
    1834           0 :             GetView()->AttrChangedNotify( &rSh );
    1835           0 :         }
    1836           0 :     }
    1837         177 : }
    1838             : 
    1839             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11