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

Generated by: LCOV version 1.10