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

Generated by: LCOV version 1.10