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

Generated by: LCOV version 1.10