diff options
Diffstat (limited to 'sw/source/ui/uno/unotxdoc.cxx')
-rw-r--r-- | sw/source/ui/uno/unotxdoc.cxx | 3898 |
1 files changed, 0 insertions, 3898 deletions
diff --git a/sw/source/ui/uno/unotxdoc.cxx b/sw/source/ui/uno/unotxdoc.cxx deleted file mode 100644 index 1011e783e6..0000000000 --- a/sw/source/ui/uno/unotxdoc.cxx +++ /dev/null @@ -1,3898 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sw.hxx" - -#include <osl/mutex.hxx> -#include <vcl/image.hxx> -#include <vcl/virdev.hxx> -#include <vcl/svapp.hxx> -#include <vcl/print.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/sfxbasecontroller.hxx> -#include <sfx2/docfile.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <toolkit/awt/vclxdevice.hxx> -#include <cmdid.h> -#include <swtypes.hxx> -#include <wdocsh.hxx> -#include <wrtsh.hxx> -#include <pview.hxx> -#include <viewsh.hxx> -#include <pvprtdat.hxx> -#include <printdata.hxx> -#include <svl/stritem.hxx> -#include <unotxdoc.hxx> -#include <svl/numuno.hxx> -#include <fldbas.hxx> -#include <unotextbodyhf.hxx> -#include <unotextrange.hxx> -#include <unotextcursor.hxx> -#include <unosett.hxx> -#include <unocoll.hxx> -#include <unoredlines.hxx> -#include <unosrch.hxx> -#include <sfx2/dispatch.hxx> -#include <sfx2/request.hxx> -#include <sfx2/objsh.hxx> // SfxObjectShellRef <-> SV_DECL_REF(SfxObjectShell) -#include <unoprnms.hxx> -#include <unostyle.hxx> -#include <unodraw.hxx> -#include <svl/eitem.hxx> -#include <pagedesc.hxx> -#include <svtools/txtcmp.hxx> -#include <unocrsr.hxx> -#include <unofield.hxx> -#include <unoidx.hxx> -#include <unoflatpara.hxx> -#include <unotxvw.hxx> -#include <poolfmt.hxx> -#include <globdoc.hxx> -#include <viewopt.hxx> -#include <unochart.hxx> -#include <charatr.hxx> -#include <svx/xmleohlp.hxx> -#include <globals.hrc> -#include <unomid.h> -#include <unotools/printwarningoptions.hxx> -#include <com/sun/star/util/SearchOptions.hpp> -#include <com/sun/star/lang/ServiceNotRegisteredException.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/util/XNumberFormatsSupplier.hpp> -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <com/sun/star/beans/XFastPropertySet.hpp> -#include <com/sun/star/document/RedlineDisplayType.hpp> -#include <com/sun/star/document/XDocumentEventBroadcaster.hpp> -#include <com/sun/star/frame/XController.hpp> -#include <com/sun/star/frame/XFrame.hpp> -#include <com/sun/star/script/XInvocation.hpp> -#include <com/sun/star/reflection/XIdlClassProvider.hpp> -#include <sfx2/linkmgr.hxx> -#include <svx/unofill.hxx> -#include <editeng/unolingu.hxx> -#include <sfx2/progress.hxx> -#include <swmodule.hxx> -#include <docstat.hxx> -#include <modcfg.hxx> -#include <ndtxt.hxx> -#include <utlui.hrc> -#include <swcont.hxx> -#include <unodefaults.hxx> -#include <SwXDocumentSettings.hxx> -#include <doc.hxx> -#include <editeng/forbiddencharacterstable.hxx> -#include <svl/zforlist.hxx> -#include <drawdoc.hxx> -#include <SwStyleNameMapper.hxx> -#include <osl/file.hxx> -#include <comphelper/storagehelper.hxx> - -// #i12836# enhanced pdf export -#include <EnhancedPDFExportHelper.hxx> -#include <numrule.hxx> - -#include <editeng/langitem.hxx> -#include <docary.hxx> //SwCharFmts -#include <i18npool/mslangid.hxx> - -#include <format.hxx> -#include <charfmt.hxx> //SwCharFmt -#include <fmtcol.hxx> //SwTxtFmtColl -#include <unostyle.hxx> //SwAutoStyleFamily -#include <istyleaccess.hxx> // handling of automatic styles - -#include <svl/stylepool.hxx> -#include <swatrset.hxx> -#include <view.hxx> -#include <srcview.hxx> - -#include <svtools/langtab.hxx> -#include <map> -#include <set> -#include <vector> - -#include <editeng/eeitem.hxx> -#include <editeng/editeng.hxx> -#include <svx/svdoutl.hxx> -#include <svl/languageoptions.hxx> -#include <svx/svdview.hxx> -#include <comphelper/processfactory.hxx> -#include <comphelper/servicehelper.hxx> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::text; -using namespace ::com::sun::star::i18n; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::document; -using namespace ::com::sun::star::i18n; -using ::rtl::OUString; -using ::osl::FileBase; - -#define SW_CREATE_DASH_TABLE 0x01 -#define SW_CREATE_GRADIENT_TABLE 0x02 -#define SW_CREATE_HATCH_TABLE 0x03 -#define SW_CREATE_BITMAP_TABLE 0x04 -#define SW_CREATE_TRANSGRADIENT_TABLE 0x05 -#define SW_CREATE_MARKER_TABLE 0x06 -#define SW_CREATE_DRAW_DEFAULTS 0x07 - -/****************************************************************************** - * - ******************************************************************************/ - -extern bool lcl_GetPostIts( IDocumentFieldsAccess* pIDFA, _SetGetExpFlds * pSrtLst ); - -SwPrintUIOptions * lcl_GetPrintUIOptions( - SwDocShell * pDocShell, - const SfxViewShell * pView ) -{ - if (!pDocShell) - return NULL; - - const sal_Bool bWebDoc = NULL != dynamic_cast< const SwWebDocShell * >(pDocShell); - const bool bSwSrcView = NULL != dynamic_cast< const SwSrcView * >(pView); - const SwView * pSwView = dynamic_cast< const SwView * >(pView); - const bool bHasSelection = pSwView ? pSwView->HasSelection( sal_False ) : false; // check for any selection, not just text selection - const bool bHasPostIts = lcl_GetPostIts( pDocShell->GetDoc(), 0 ); - - // get default values to use in dialog from documents SwPrintData - const SwPrintData &rPrintData = pDocShell->GetDoc()->getPrintData(); - - return new SwPrintUIOptions( bWebDoc, bSwSrcView, bHasSelection, bHasPostIts, rPrintData ); -} - -SwTxtFmtColl *lcl_GetParaStyle(const String& rCollName, SwDoc* pDoc) -{ - SwTxtFmtColl* pColl = pDoc->FindTxtFmtCollByName( rCollName ); - if( !pColl ) - { - sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( rCollName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ); - if( USHRT_MAX != nId ) - pColl = pDoc->GetTxtCollFromPool( nId ); - } - return pColl; -} - -void lcl_DisposeView( SfxViewFrame* pToClose, SwDocShell* pDocShell ) -{ - // check if the view frame still exists - SfxViewFrame* pFound = SfxViewFrame::GetFirst( pDocShell, - sal_False ); - while(pFound) - { - if( pFound == pToClose) - { - pToClose->DoClose(); - break; - } - pFound = SfxViewFrame::GetNext( *pFound, - pDocShell, - sal_False ); - } -} - -namespace -{ - class theSwXTextDocumentUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXTextDocumentUnoTunnelId > {}; -} - -const Sequence< sal_Int8 > & SwXTextDocument::getUnoTunnelId() -{ - return theSwXTextDocumentUnoTunnelId::get().getSeq(); -} - -sal_Int64 SAL_CALL SwXTextDocument::getSomething( const Sequence< sal_Int8 >& rId ) - throw(RuntimeException) -{ - if( rId.getLength() == 16 - && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), - rId.getConstArray(), 16 ) ) - { - return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >( this )); - } - if( rId.getLength() == 16 - && 0 == rtl_compareMemory( SfxObjectShell::getUnoTunnelId().getConstArray(), - rId.getConstArray(), 16 ) ) - { - return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(pDocShell )); - } - - sal_Int64 nRet = SfxBaseModel::getSomething( rId ); - if ( nRet ) - return nRet; - else - { - GetNumberFormatter(); - Any aNumTunnel = xNumFmtAgg->queryAggregation(::getCppuType((Reference<XUnoTunnel>*)0)); - Reference<XUnoTunnel> xNumTunnel; - aNumTunnel >>= xNumTunnel; - if(xNumTunnel.is()) - return xNumTunnel->getSomething(rId); - } - - return SfxBaseModel::getSomething( rId ); -} - -Any SAL_CALL SwXTextDocument::queryInterface( const uno::Type& rType ) throw(RuntimeException) -{ - Any aRet = SwXTextDocumentBaseClass::queryInterface(rType); - if ( !aRet.hasValue() ) - aRet = SfxBaseModel::queryInterface(rType); - if ( !aRet.hasValue() && - rType == ::getCppuType((Reference<lang::XMultiServiceFactory>*)0)) - { - Reference<lang::XMultiServiceFactory> xTmp = this; - aRet <<= xTmp; - } - - if ( !aRet.hasValue() - && rType != ::getCppuType((Reference< com::sun::star::document::XDocumentEventBroadcaster>*)0) - && rType != ::getCppuType((Reference< com::sun::star::frame::XController>*)0) - && rType != ::getCppuType((Reference< com::sun::star::frame::XFrame>*)0) - && rType != ::getCppuType((Reference< com::sun::star::script::XInvocation>*)0) - && rType != ::getCppuType((Reference< com::sun::star::reflection::XIdlClassProvider>*)0) - && rType != ::getCppuType((Reference< com::sun::star::beans::XFastPropertySet>*)0) - && rType != ::getCppuType((Reference< com::sun::star::awt::XWindow>*)0)) - { - GetNumberFormatter(); - if(xNumFmtAgg.is()) - aRet = xNumFmtAgg->queryAggregation(rType); - } - return aRet; -} - -void SAL_CALL SwXTextDocument::acquire()throw() -{ - SfxBaseModel::acquire(); -} - -void SAL_CALL SwXTextDocument::release()throw() -{ - SfxBaseModel::release(); -} - -Reference< XAdapter > SwXTextDocument::queryAdapter( ) throw(RuntimeException) -{ - return SfxBaseModel::queryAdapter(); -} - -Sequence< uno::Type > SAL_CALL SwXTextDocument::getTypes() throw(RuntimeException) -{ - Sequence< uno::Type > aBaseTypes = SfxBaseModel::getTypes(); - Sequence< uno::Type > aTextTypes = SwXTextDocumentBaseClass::getTypes(); - - Sequence< uno::Type > aNumTypes; - GetNumberFormatter(); - if(xNumFmtAgg.is()) - { - const uno::Type& rProvType = ::getCppuType((Reference <XTypeProvider>*)0); - Any aNumProv = xNumFmtAgg->queryAggregation(rProvType); - Reference<XTypeProvider> xNumProv; - if(aNumProv >>= xNumProv) - { - aNumTypes = xNumProv->getTypes(); - } - } - long nIndex = aBaseTypes.getLength(); - // don't forget the lang::XMultiServiceFactory - aBaseTypes.realloc(aBaseTypes.getLength() + aTextTypes.getLength() + aNumTypes.getLength() + 1); - uno::Type* pBaseTypes = aBaseTypes.getArray(); - const uno::Type* pTextTypes = aTextTypes.getConstArray(); - long nPos; - for(nPos = 0; nPos < aTextTypes.getLength(); nPos++) - { - pBaseTypes[nIndex++] = pTextTypes[nPos]; - } - const uno::Type* pNumTypes = aNumTypes.getConstArray(); - for(nPos = 0; nPos < aNumTypes.getLength(); nPos++) - { - pBaseTypes[nIndex++] = pNumTypes[nPos]; - } - pBaseTypes[nIndex++] = ::getCppuType((Reference<lang::XMultiServiceFactory>*)0); - return aBaseTypes; -} - -SwXTextDocument::SwXTextDocument(SwDocShell* pShell) : - SfxBaseModel(pShell), - - aRefreshCont ( static_cast < XTextDocument* > ( this ) ), - - pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_DOCUMENT)), - - pDocShell(pShell), - - bObjectValid(pShell != 0), - - pDrawPage(0), - pxXDrawPage(0), - - pxXNumberingRules(0), - pxXFootnotes(0), - pxXFootnoteSettings(0), - pxXEndnotes(0), - pxXEndnoteSettings(0), - pxXReferenceMarks(0), - pxXTextFieldTypes(0), - pxXTextFieldMasters(0), - pxXTextSections(0), - pxXBookmarks(0), - pxXTextTables(0), - pxXTextFrames(0), - pxXGraphicObjects(0), - pxXEmbeddedObjects(0), - pxXStyleFamilies(0), - pxXAutoStyles(0), - pxXChapterNumbering(0), - pxXDocumentIndexes(0), - - pxXLineNumberingProperties(0), - pxLinkTargetSupplier(0), - pxXRedlines(0), - m_pHiddenViewFrame(0), - m_pPrintUIOptions( NULL ), - m_pRenderData( NULL ) -{ - uno::Reference< document::XDocumentProperties > xWriterProps( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.writer.DocumentProperties") ), uno::UNO_QUERY_THROW); - - SfxBaseModel::setDocumentProperties( xWriterProps ); -} - -SwXTextDocument::~SwXTextDocument() -{ - InitNewDoc(); - if(xNumFmtAgg.is()) - { - Reference< XInterface > x0; - xNumFmtAgg->setDelegator(x0); - xNumFmtAgg = 0; - } - delete m_pPrintUIOptions; - delete m_pRenderData; -} - -SwXDocumentPropertyHelper * SwXTextDocument::GetPropertyHelper () -{ - if(!xPropertyHelper.is()) - { - pPropertyHelper = new SwXDocumentPropertyHelper(*pDocShell->GetDoc()); - xPropertyHelper = (cppu::OWeakObject*)pPropertyHelper; - } - return pPropertyHelper; -} - -void SwXTextDocument::GetNumberFormatter() -{ - if(IsValid()) - { - if(!xNumFmtAgg.is()) - { - if ( pDocShell->GetDoc() ) - { - SvNumberFormatsSupplierObj* pNumFmt = new SvNumberFormatsSupplierObj( - pDocShell->GetDoc()->GetNumberFormatter( sal_True )); - Reference< util::XNumberFormatsSupplier > xTmp = pNumFmt; - xNumFmtAgg = Reference< XAggregation >(xTmp, UNO_QUERY); - } - if(xNumFmtAgg.is()) - xNumFmtAgg->setDelegator((cppu::OWeakObject*)(SwXTextDocumentBaseClass*)this); - } - else - { - const uno::Type& rTunnelType = ::getCppuType((Reference <XUnoTunnel>*)0); - Any aNumTunnel = xNumFmtAgg->queryAggregation(rTunnelType); - SvNumberFormatsSupplierObj* pNumFmt = 0; - Reference< XUnoTunnel > xNumTunnel; - if(aNumTunnel >>= xNumTunnel) - { - pNumFmt = reinterpret_cast<SvNumberFormatsSupplierObj*>( - xNumTunnel->getSomething(SvNumberFormatsSupplierObj::getUnoTunnelId())); - - } - OSL_ENSURE(pNumFmt, "No number formatter available"); - if(!pNumFmt->GetNumberFormatter()) - pNumFmt->SetNumberFormatter(pDocShell->GetDoc()->GetNumberFormatter( sal_True )); - } - } -} - -Reference< XText > SwXTextDocument::getText(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!xBodyText.is()) - { - pBodyText = new SwXBodyText(pDocShell->GetDoc()); - xBodyText = pBodyText; - } - return xBodyText; -} - -void SwXTextDocument::reformat(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); -} - -void SwXTextDocument::lockControllers(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(IsValid()) - { - UnoActionContext* pContext = new UnoActionContext(pDocShell->GetDoc()); - aActionArr.Insert(pContext, 0); - } - else - throw RuntimeException(); -} - -void SwXTextDocument::unlockControllers(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(aActionArr.Count()) - { - UnoActionContext* pContext = aActionArr.GetObject(0); - aActionArr.Remove(0); - delete pContext; - } - else - throw RuntimeException(); -} - -sal_Bool SwXTextDocument::hasControllersLocked(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - return aActionArr.Count() > 0; -} - -Reference< frame::XController > SwXTextDocument::getCurrentController(void) throw( RuntimeException ) -{ - return SfxBaseModel::getCurrentController(); -} - -void SwXTextDocument::setCurrentController(const Reference< frame::XController > & xController) - throw( NoSuchElementException, RuntimeException ) -{ - SfxBaseModel::setCurrentController(xController); -} - -Reference< XInterface > SwXTextDocument::getCurrentSelection() throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< XInterface > xRef; - if(IsValid()) - { - - const TypeId aTypeId = TYPE(SwView); - SwView* pView = (SwView*)SfxViewShell::GetFirst(&aTypeId); - while(pView && pView->GetObjectShell() != pDocShell) - { - pView = (SwView*)SfxViewShell::GetNext(*pView, &aTypeId); - } - if(pView) - { - Any aRef = pView->GetUNOObject()->getSelection(); - aRef >>= xRef; - } - } - return xRef; -} - -sal_Bool SwXTextDocument::attachResource(const OUString& aURL, const Sequence< beans::PropertyValue >& aArgs) - throw( RuntimeException ) -{ - return SfxBaseModel::attachResource(aURL, aArgs); -} - -OUString SwXTextDocument::getURL(void) throw( RuntimeException ) -{ - return SfxBaseModel::getURL(); -} - -Sequence< beans::PropertyValue > SwXTextDocument::getArgs(void) throw( RuntimeException ) -{ - return SfxBaseModel::getArgs(); -} - -void SwXTextDocument::connectController(const Reference< frame::XController > & xController) throw( RuntimeException ) -{ - SfxBaseModel::connectController(xController); -} - -void SwXTextDocument::disconnectController(const Reference< frame::XController > & xController) throw( RuntimeException ) -{ - SfxBaseModel::disconnectController(xController); -} - -void SwXTextDocument::dispose(void) throw( RuntimeException ) -{ - SfxBaseModel::dispose(); -} - -void SwXTextDocument::close( sal_Bool bDeliverOwnership ) throw( util::CloseVetoException, RuntimeException ) -{ - if(IsValid() && m_pHiddenViewFrame) - lcl_DisposeView( m_pHiddenViewFrame, pDocShell); - SfxBaseModel::close(bDeliverOwnership); -} - -void SwXTextDocument::addEventListener(const Reference< lang::XEventListener > & aListener) throw( RuntimeException ) -{ - SfxBaseModel::addEventListener(aListener); -} - -void SwXTextDocument::removeEventListener(const Reference< lang::XEventListener > & aListener) throw( RuntimeException ) -{ - SfxBaseModel::removeEventListener(aListener); -} - -Reference< XPropertySet > SwXTextDocument::getLineNumberingProperties(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(IsValid()) - { - if(!pxXLineNumberingProperties) - { - pxXLineNumberingProperties = new Reference<XPropertySet>; - (*pxXLineNumberingProperties) = new SwXLineNumberingProperties(pDocShell->GetDoc()); - } - } - else - throw RuntimeException(); - return *pxXLineNumberingProperties; -} - -Reference< XIndexReplace > SwXTextDocument::getChapterNumberingRules(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXChapterNumbering) - { - pxXChapterNumbering = new Reference< XIndexReplace > ; - *pxXChapterNumbering = new SwXChapterNumbering(*pDocShell); - } - return *pxXChapterNumbering; -} - -Reference< XIndexAccess > SwXTextDocument::getNumberingRules(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXNumberingRules ) - { - ((SwXTextDocument*)this)->pxXNumberingRules = new Reference< XIndexAccess > ; - *pxXNumberingRules = new SwXNumberingRulesCollection( pDocShell->GetDoc() ); - } - return *pxXNumberingRules; -} - -Reference< XIndexAccess > SwXTextDocument::getFootnotes(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXFootnotes) - { - ((SwXTextDocument*)this)->pxXFootnotes = new Reference< XIndexAccess > ; - *pxXFootnotes = new SwXFootnotes(sal_False, pDocShell->GetDoc()); - } - return *pxXFootnotes; -} - -Reference< XPropertySet > SAL_CALL - SwXTextDocument::getFootnoteSettings(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXFootnoteSettings) - { - ((SwXTextDocument*)this)->pxXFootnoteSettings = new Reference< XPropertySet > ; - *pxXFootnoteSettings = new SwXFootnoteProperties(pDocShell->GetDoc()); - } - return *pxXFootnoteSettings; -} - -Reference< XIndexAccess > SwXTextDocument::getEndnotes(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXEndnotes) - { - ((SwXTextDocument*)this)->pxXEndnotes = new Reference< XIndexAccess > ; - *pxXEndnotes = new SwXFootnotes(sal_True, pDocShell->GetDoc()); - } - return *pxXEndnotes; -} - -Reference< XPropertySet > SwXTextDocument::getEndnoteSettings(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXEndnoteSettings) - { - ((SwXTextDocument*)this)->pxXEndnoteSettings = new Reference< XPropertySet > ; - *pxXEndnoteSettings = new SwXEndnoteProperties(pDocShell->GetDoc()); - } - return *pxXEndnoteSettings; -} - -Reference< util::XReplaceDescriptor > SwXTextDocument::createReplaceDescriptor(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< util::XReplaceDescriptor > xRet = new SwXTextSearch; - return xRet; -} - -SwUnoCrsr* SwXTextDocument::CreateCursorForSearch(Reference< XTextCursor > & xCrsr) -{ - getText(); - XText *const pText = xBodyText.get(); - SwXBodyText* pBText = (SwXBodyText*)pText; - SwXTextCursor *const pXTextCursor = pBText->CreateTextCursor(true); - xCrsr.set( static_cast<text::XWordCursor*>(pXTextCursor) ); - - SwUnoCrsr *const pUnoCrsr = pXTextCursor->GetCursor(); - pUnoCrsr->SetRemainInSection(sal_False); - return pUnoCrsr; -} - -sal_Int32 SwXTextDocument::replaceAll(const Reference< util::XSearchDescriptor > & xDesc) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< XUnoTunnel > xDescTunnel(xDesc, UNO_QUERY); - if(!IsValid() || !xDescTunnel.is() || !xDescTunnel->getSomething(SwXTextSearch::getUnoTunnelId())) - throw RuntimeException(); - - Reference< XTextCursor > xCrsr; - SwUnoCrsr* pUnoCrsr = CreateCursorForSearch(xCrsr); - - const SwXTextSearch* pSearch = reinterpret_cast<const SwXTextSearch*>( - xDescTunnel->getSomething(SwXTextSearch::getUnoTunnelId())); - - int eRanges(FND_IN_BODY|FND_IN_SELALL); - - util::SearchOptions aSearchOpt; - pSearch->FillSearchOptions( aSearchOpt ); - - SwDocPositions eStart = pSearch->bBack ? DOCPOS_END : DOCPOS_START; - SwDocPositions eEnd = pSearch->bBack ? DOCPOS_START : DOCPOS_END; - - // Suche soll ueberall stattfinden - pUnoCrsr->SetRemainInSection(sal_False); - sal_uInt32 nResult; - UnoActionContext aContext(pDocShell->GetDoc()); - //try attribute search first - if(pSearch->HasSearchAttributes()||pSearch->HasReplaceAttributes()) - { - SfxItemSet aSearch(pDocShell->GetDoc()->GetAttrPool(), - RES_CHRATR_BEGIN, RES_CHRATR_END-1, - RES_PARATR_BEGIN, RES_PARATR_END-1, - RES_FRMATR_BEGIN, RES_FRMATR_END-1, - 0); - SfxItemSet aReplace(pDocShell->GetDoc()->GetAttrPool(), - RES_CHRATR_BEGIN, RES_CHRATR_END-1, - RES_PARATR_BEGIN, RES_PARATR_END-1, - RES_FRMATR_BEGIN, RES_FRMATR_END-1, - 0); - pSearch->FillSearchItemSet(aSearch); - pSearch->FillReplaceItemSet(aReplace); - sal_Bool bCancel; - nResult = (sal_Int32)pUnoCrsr->Find( aSearch, !pSearch->bStyles, - eStart, eEnd, bCancel, - (FindRanges)eRanges, - pSearch->sSearchText.Len() ? &aSearchOpt : 0, - &aReplace ); - } - else if(pSearch->bStyles) - { - SwTxtFmtColl *pSearchColl = lcl_GetParaStyle(pSearch->sSearchText, pUnoCrsr->GetDoc()); - SwTxtFmtColl *pReplaceColl = lcl_GetParaStyle(pSearch->sReplaceText, pUnoCrsr->GetDoc());; - - sal_Bool bCancel; - nResult = pUnoCrsr->Find( *pSearchColl, - eStart, eEnd, bCancel, - (FindRanges)eRanges, pReplaceColl ); - - } - else - { - //todo/mba: assuming that notes should be omitted - sal_Bool bSearchInNotes = sal_False; - sal_Bool bCancel; - nResult = pUnoCrsr->Find( aSearchOpt, bSearchInNotes, - eStart, eEnd, bCancel, - (FindRanges)eRanges, - sal_True ); - } - return (sal_Int32)nResult; - -} - -Reference< util::XSearchDescriptor > SwXTextDocument::createSearchDescriptor(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< util::XSearchDescriptor > xRet = new SwXTextSearch; - return xRet; - -} - -/* -------------------------------------------------- - * wird fuer findAll/First/Next verwendet - * --------------------------------------------------*/ -SwUnoCrsr* SwXTextDocument::FindAny(const Reference< util::XSearchDescriptor > & xDesc, - Reference< XTextCursor > & xCrsr, sal_Bool bAll, - sal_Int32& nResult, - Reference< XInterface > xLastResult) -{ - Reference< XUnoTunnel > xDescTunnel(xDesc, UNO_QUERY); - if(!IsValid() || !xDescTunnel.is() || !xDescTunnel->getSomething(SwXTextSearch::getUnoTunnelId())) - return 0; - - SwUnoCrsr* pUnoCrsr = CreateCursorForSearch(xCrsr); - const SwXTextSearch* pSearch = reinterpret_cast<const SwXTextSearch*>( - xDescTunnel->getSomething(SwXTextSearch::getUnoTunnelId())); - - sal_Bool bParentInExtra = sal_False; - if(xLastResult.is()) - { - Reference<XUnoTunnel> xCursorTunnel( xLastResult, UNO_QUERY); - OTextCursorHelper* pPosCrsr = 0; - if(xCursorTunnel.is()) - { - pPosCrsr = reinterpret_cast<OTextCursorHelper*>(xCursorTunnel->getSomething( - OTextCursorHelper::getUnoTunnelId())); - } - SwPaM* pCrsr = pPosCrsr ? pPosCrsr->GetPaM() : 0; - if(pCrsr) - { - *pUnoCrsr->GetPoint() = *pCrsr->End(); - pUnoCrsr->DeleteMark(); - } - else - { - SwXTextRange* pRange = 0; - if(xCursorTunnel.is()) - { - pRange = reinterpret_cast<SwXTextRange*>(xCursorTunnel->getSomething( - SwXTextRange::getUnoTunnelId())); - } - if(!pRange) - return 0; - pRange->GetPositions(*pUnoCrsr); - if(pUnoCrsr->HasMark()) - { - if(*pUnoCrsr->GetPoint() < *pUnoCrsr->GetMark()) - pUnoCrsr->Exchange(); - pUnoCrsr->DeleteMark(); - } - } - const SwNode* pRangeNode = pUnoCrsr->GetNode(); - bParentInExtra = pRangeNode->FindFlyStartNode() || - pRangeNode->FindFootnoteStartNode() || - pRangeNode->FindHeaderStartNode() || - pRangeNode->FindFooterStartNode() ; - } - - util::SearchOptions aSearchOpt; - pSearch->FillSearchOptions( aSearchOpt ); - -/* - * folgende Kombinationen sind erlaubt: - * - suche einen im Body: -> FND_IN_BODY - * - suche alle im Body: -> FND_IN_BODYONLY | FND_IN_SELALL - * - suche in Selectionen: einen / alle -> FND_IN_SEL [ | FND_IN_SELALL ] - * - suche im nicht Body: einen / alle -> FND_IN_OTHER [ | FND_IN_SELALL ] - * - suche ueberall alle: -> FND_IN_SELALL - */ - int eRanges(FND_IN_BODY); - if(bParentInExtra) - eRanges = FND_IN_OTHER; - if(bAll) //immer - ueberall? - eRanges = FND_IN_SELALL; - SwDocPositions eStart = !bAll ? DOCPOS_CURR : pSearch->bBack ? DOCPOS_END : DOCPOS_START; - SwDocPositions eEnd = pSearch->bBack ? DOCPOS_START : DOCPOS_END; - - nResult = 0; - sal_uInt16 nSearchProc = 0; - while(nSearchProc < 2) - { - //try attribute search first - if(pSearch->HasSearchAttributes()) - { - SfxItemSet aSearch(pDocShell->GetDoc()->GetAttrPool(), - RES_CHRATR_BEGIN, RES_CHRATR_END-1, - RES_PARATR_BEGIN, RES_PARATR_END-1, - RES_FRMATR_BEGIN, RES_FRMATR_END-1, - RES_TXTATR_INETFMT, RES_TXTATR_CHARFMT, - 0); - pSearch->FillSearchItemSet(aSearch); - sal_Bool bCancel; - nResult = (sal_Int32)pUnoCrsr->Find( aSearch, !pSearch->bStyles, - eStart, eEnd, bCancel, - (FindRanges)eRanges, - pSearch->sSearchText.Len() ? &aSearchOpt : 0, - 0 ); - } - else if(pSearch->bStyles) - { - SwTxtFmtColl *pSearchColl = lcl_GetParaStyle(pSearch->sSearchText, pUnoCrsr->GetDoc()); - //pSearch->sReplaceText - SwTxtFmtColl *pReplaceColl = 0; - sal_Bool bCancel; - nResult = (sal_Int32)pUnoCrsr->Find( *pSearchColl, - eStart, eEnd, bCancel, - (FindRanges)eRanges, pReplaceColl ); - } - else - { - //todo/mba: assuming that notes should be omitted - sal_Bool bSearchInNotes = sal_False; - sal_Bool bCancel; - nResult = (sal_Int32)pUnoCrsr->Find( aSearchOpt, bSearchInNotes, - eStart, eEnd, bCancel, - (FindRanges)eRanges, - /*int bReplace =*/sal_False ); - } - nSearchProc++; - if(nResult || (eRanges&(FND_IN_SELALL|FND_IN_OTHER))) - break; - //second step - find in other - eRanges = FND_IN_OTHER; - } - return pUnoCrsr; -} - -Reference< XIndexAccess > - SwXTextDocument::findAll(const Reference< util::XSearchDescriptor > & xDesc) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< XInterface > xTmp; - sal_Int32 nResult = 0; - Reference< XTextCursor > xCrsr; - SwUnoCrsr* pResultCrsr = FindAny(xDesc, xCrsr, sal_True, nResult, xTmp); - if(!pResultCrsr) - throw RuntimeException(); - Reference< XIndexAccess > xRet; - xRet = new SwXTextRanges( (nResult) ? pResultCrsr : 0 ); - delete pResultCrsr; - return xRet; -} - -Reference< XInterface > SwXTextDocument::findFirst(const Reference< util::XSearchDescriptor > & xDesc) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< XInterface > xTmp; - sal_Int32 nResult = 0; - Reference< XTextCursor > xCrsr; - SwUnoCrsr* pResultCrsr = FindAny(xDesc, xCrsr, sal_False, nResult, xTmp); - if(!pResultCrsr) - throw RuntimeException(); - Reference< XInterface > xRet; - if(nResult) - { - const uno::Reference< text::XText > xParent = - ::sw::CreateParentXText(*pDocShell->GetDoc(), - *pResultCrsr->GetPoint()); - xRet = *new SwXTextCursor(xParent, *pResultCrsr); - delete pResultCrsr; - } - return xRet; -} - -Reference< XInterface > SwXTextDocument::findNext(const Reference< XInterface > & xStartAt, - const Reference< util::XSearchDescriptor > & xDesc) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Reference< XInterface > xTmp; - sal_Int32 nResult = 0; - Reference< XTextCursor > xCrsr; - if(!xStartAt.is()) - throw RuntimeException(); - SwUnoCrsr* pResultCrsr = FindAny(xDesc, xCrsr, sal_False, nResult, xStartAt); - if(!pResultCrsr) - throw RuntimeException(); - Reference< XInterface > xRet; - if(nResult) - { - const uno::Reference< text::XText > xParent = - ::sw::CreateParentXText(*pDocShell->GetDoc(), - *pResultCrsr->GetPoint()); - - xRet = *new SwXTextCursor(xParent, *pResultCrsr); - delete pResultCrsr; - } - return xRet; -} - -Sequence< beans::PropertyValue > SwXTextDocument::getPagePrintSettings(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - Sequence< beans::PropertyValue > aSeq(9); - if(IsValid()) - { - beans::PropertyValue* pArray = aSeq.getArray(); - SwPagePreViewPrtData aData; - const SwPagePreViewPrtData* pData = pDocShell->GetDoc()->GetPreViewPrtData(); - if(pData) - aData = *pData; - Any aVal; - aVal <<= (sal_Int16)aData.GetRow(); - pArray[0] = beans::PropertyValue(C2U("PageRows"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int16)aData.GetCol(); - pArray[1] = beans::PropertyValue(C2U("PageColumns"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(aData.GetLeftSpace()); - pArray[2] = beans::PropertyValue(C2U("LeftMargin"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(aData.GetRightSpace()); - pArray[3] = beans::PropertyValue(C2U("RightMargin"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(aData.GetTopSpace()); - pArray[4] = beans::PropertyValue(C2U("TopMargin"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(aData.GetBottomSpace()); - pArray[5] = beans::PropertyValue(C2U("BottomMargin"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(aData.GetHorzSpace()); - pArray[6] = beans::PropertyValue(C2U("HoriMargin"), -1, aVal, PropertyState_DIRECT_VALUE); - aVal <<= (sal_Int32)TWIP_TO_MM100_UNSIGNED(aData.GetVertSpace()); - pArray[7] = beans::PropertyValue(C2U("VertMargin"), -1, aVal, PropertyState_DIRECT_VALUE); - sal_Bool bTemp = aData.GetLandscape(); - aVal.setValue(&bTemp, ::getCppuBooleanType()); - pArray[8] = beans::PropertyValue(C2U("IsLandscape"), -1, aVal, PropertyState_DIRECT_VALUE); - } - else - throw RuntimeException(); - return aSeq; -} - -sal_uInt32 lcl_Any_To_ULONG(const Any& rValue, sal_Bool& bException) -{ - bException = sal_False; - TypeClass eType = rValue.getValueType().getTypeClass(); - - sal_uInt32 nRet = 0; - if( eType == TypeClass_UNSIGNED_LONG ) - rValue >>= nRet; - else - { - sal_Int32 nVal=0; - bException = !(rValue >>= nVal); - if( !bException ) - nRet = (sal_uInt32)nVal; - } - - return nRet; -} - -String lcl_CreateOutlineString( sal_uInt16 nIndex, - const SwOutlineNodes& rOutlineNodes, const SwNumRule* pOutlRule) -{ - String sEntry; - const SwTxtNode * pTxtNd = rOutlineNodes[ nIndex ]->GetTxtNode(); - SwNumberTree::tNumberVector aNumVector = pTxtNd->GetNumberVector(); - if( pOutlRule && pTxtNd->GetNumRule()) - for( sal_Int8 nLevel = 0; - nLevel <= pTxtNd->GetActualListLevel(); - nLevel++ ) - { - long nVal = aNumVector[nLevel]; - nVal ++; - nVal -= pOutlRule->Get(nLevel).GetStart(); - sEntry += String::CreateFromInt32( nVal ); - sEntry += '.'; - } - sEntry += rOutlineNodes[ nIndex ]-> - GetTxtNode()->GetExpandTxt( 0, STRING_LEN, sal_False ); - return sEntry; -} - -void SwXTextDocument::setPagePrintSettings(const Sequence< beans::PropertyValue >& aSettings) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(IsValid()) - { - SwPagePreViewPrtData aData; - //falls nur einige Properties kommen, dann die akt. Einstellungen benutzen - const SwPagePreViewPrtData* pData = pDocShell->GetDoc()->GetPreViewPrtData(); - if(pData) - aData = *pData; - const beans::PropertyValue* pProperties = aSettings.getConstArray(); - int nCount = aSettings.getLength(); - for(int i = 0; i < nCount; i++) - { - String sName = pProperties[i].Name; - const Any& rVal = pProperties[i].Value; - sal_Bool bException; - sal_uInt32 nVal = lcl_Any_To_ULONG(rVal, bException); - if( COMPARE_EQUAL == sName.CompareToAscii("PageRows" ) ) - { - if(!nVal || nVal > 0xff) - throw RuntimeException(); - aData.SetRow((sal_uInt8)nVal); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("PageColumns")) - { - if(!nVal || nVal > 0xff) - throw RuntimeException(); - aData.SetCol((sal_uInt8)nVal); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("LeftMargin")) - { - aData.SetLeftSpace(MM100_TO_TWIP_UNSIGNED(nVal)); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("RightMargin")) - { - aData.SetRightSpace(MM100_TO_TWIP_UNSIGNED(nVal)); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("TopMargin")) - { - aData.SetTopSpace(MM100_TO_TWIP_UNSIGNED(nVal)); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("BottomMargin")) - { - aData.SetBottomSpace(MM100_TO_TWIP_UNSIGNED(nVal)); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("HoriMargin")) - { - aData.SetHorzSpace(MM100_TO_TWIP_UNSIGNED(nVal)); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("VertMargin")) - { - aData.SetVertSpace(MM100_TO_TWIP_UNSIGNED(nVal)); - } - else if(COMPARE_EQUAL == sName.CompareToAscii("IsLandscape")) - { - bException = (::getBooleanCppuType() != rVal.getValueType()); - aData.SetLandscape(*(sal_Bool*)rVal.getValue()); - } - else - bException = sal_True; - if(bException) - throw RuntimeException(); - } - pDocShell->GetDoc()->SetPreViewPrtData(&aData); - } - else - throw RuntimeException(); -} - -void SwXTextDocument::printPages(const Sequence< beans::PropertyValue >& xOptions) - throw( IllegalArgumentException, RuntimeException ) -{ - SolarMutexGuard aGuard; - if(IsValid()) - { - SfxViewFrame* pFrame = SfxViewFrame::LoadHiddenDocument( *pDocShell, 7 ); - SfxRequest aReq(FN_PRINT_PAGEPREVIEW, SFX_CALLMODE_SYNCHRON, - pDocShell->GetDoc()->GetAttrPool()); - aReq.AppendItem(SfxBoolItem(FN_PRINT_PAGEPREVIEW, sal_True)); - - OUString sFileName(OUString::createFromAscii(SW_PROP_NAME_STR(UNO_NAME_FILE_NAME))); - OUString sCopyCount(OUString::createFromAscii(SW_PROP_NAME_STR(UNO_NAME_COPY_COUNT))); - OUString sCollate(OUString::createFromAscii(SW_PROP_NAME_STR(UNO_NAME_COLLATE))); - OUString sSort(OUString::createFromAscii(SW_PROP_NAME_STR(UNO_NAME_SORT))); - OUString sPages(OUString::createFromAscii(SW_PROP_NAME_STR(UNO_NAME_PAGES))); - - for ( int n = 0; n < xOptions.getLength(); ++n ) - { - // get Property-Value from options - const beans::PropertyValue &rProp = xOptions.getConstArray()[n]; - Any aValue( rProp.Value ); - - // FileName-Property? - if ( rProp.Name == sFileName ) - { - OUString sFileURL; - if ( (rProp.Value >>= sFileURL ) ) - { - // Convert the File URL into a system dependant path, as the SalPrinter expects - OUString sSystemPath; - FileBase::getSystemPathFromFileURL ( sFileURL, sSystemPath ); - aReq.AppendItem(SfxStringItem( SID_FILE_NAME, sSystemPath ) ); - } - else if ( rProp.Value.getValueType() != ::getVoidCppuType() ) - throw IllegalArgumentException(); - } - - // CopyCount-Property - else if ( rProp.Name == sCopyCount ) - { - sal_Int32 nCopies = 0; - aValue >>= nCopies; - aReq.AppendItem(SfxInt16Item( SID_PRINT_COPIES, (sal_Int16)nCopies ) ); - } - - // Collate-Property - else if ( rProp.Name == sCollate ) - { - if ( rProp.Value.getValueType() == ::getBooleanCppuType()) - - aReq.AppendItem(SfxBoolItem( SID_PRINT_COLLATE, *(sal_Bool*)rProp.Value.getValue() ) ); - else - throw IllegalArgumentException(); - } - - // Sort-Property - else if ( rProp.Name == sSort ) - { - if ( rProp.Value.getValueType() == ::getBooleanCppuType() ) - aReq.AppendItem(SfxBoolItem( SID_PRINT_SORT, *(sal_Bool*)rProp.Value.getValue() ) ); - else - throw IllegalArgumentException(); - } - - // Pages-Property - else if ( rProp.Name == sPages ) - { - OUString sTmp; - if ( rProp.Value >>= sTmp ) - aReq.AppendItem( SfxStringItem( SID_PRINT_PAGES, sTmp ) ); - else - throw IllegalArgumentException(); - } - } - - - pFrame->GetViewShell()->ExecuteSlot(aReq); - // Frame schliessen - pFrame->DoClose(); - - } - else - throw RuntimeException(); -} - -Reference< XNameAccess > SwXTextDocument::getReferenceMarks(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXReferenceMarks) - { - ((SwXTextDocument*)this)->pxXReferenceMarks = new Reference< XNameAccess > ; - *pxXReferenceMarks = new SwXReferenceMarks(pDocShell->GetDoc()); - } - return *pxXReferenceMarks; -} - -Reference< XEnumerationAccess > SwXTextDocument::getTextFields(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXTextFieldTypes) - { - ((SwXTextDocument*)this)->pxXTextFieldTypes = new Reference< XEnumerationAccess > ; - *pxXTextFieldTypes = new SwXTextFieldTypes(pDocShell->GetDoc()); - } - return *pxXTextFieldTypes; -} - -Reference< XNameAccess > SwXTextDocument::getTextFieldMasters(void) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXTextFieldMasters) - { - ((SwXTextDocument*)this)->pxXTextFieldMasters = new Reference< XNameAccess > ; - *pxXTextFieldMasters = new SwXTextFieldMasters(pDocShell->GetDoc()); - } - return *pxXTextFieldMasters; -} - -Reference< XNameAccess > SwXTextDocument::getEmbeddedObjects(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXEmbeddedObjects) - { - ((SwXTextDocument*)this)->pxXEmbeddedObjects = new Reference< XNameAccess > ; - *pxXEmbeddedObjects = new SwXTextEmbeddedObjects(pDocShell->GetDoc()); - } - return *pxXEmbeddedObjects; -} - -Reference< XNameAccess > SwXTextDocument::getBookmarks(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXBookmarks) - { - ((SwXTextDocument*)this)->pxXBookmarks = new Reference< XNameAccess > ; - *pxXBookmarks = new SwXBookmarks(pDocShell->GetDoc()); - } - return *pxXBookmarks; -} - -Reference< XNameAccess > SwXTextDocument::getTextSections(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXTextSections) - { - ((SwXTextDocument*)this)->pxXTextSections = new Reference< XNameAccess > ; - *pxXTextSections = new SwXTextSections(pDocShell->GetDoc()); - } - return *pxXTextSections; -} - -Reference< XNameAccess > SwXTextDocument::getTextTables(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXTextTables) - { - ((SwXTextDocument*)this)->pxXTextTables = new Reference< XNameAccess > ; - *pxXTextTables = new SwXTextTables(pDocShell->GetDoc()); - } - return *pxXTextTables; -} - -Reference< XNameAccess > SwXTextDocument::getGraphicObjects(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXGraphicObjects) - { - ((SwXTextDocument*)this)->pxXGraphicObjects = new Reference< XNameAccess > ; - *pxXGraphicObjects = new SwXTextGraphicObjects(pDocShell->GetDoc()); - } - return *pxXGraphicObjects; -} - -Reference< XNameAccess > SwXTextDocument::getTextFrames(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXTextFrames) - { - ((SwXTextDocument*)this)->pxXTextFrames = new Reference< XNameAccess > ; - *pxXTextFrames = new SwXTextFrames(pDocShell->GetDoc()); - } - return *pxXTextFrames; -} - -Reference< XNameAccess > SwXTextDocument::getStyleFamilies(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXStyleFamilies) - { - ((SwXTextDocument*)this)->pxXStyleFamilies = new Reference< XNameAccess > ; - *pxXStyleFamilies = new SwXStyleFamilies(*pDocShell); - } - return *pxXStyleFamilies; -} - -uno::Reference< style::XAutoStyles > SwXTextDocument::getAutoStyles( ) - throw (uno::RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXAutoStyles) - { - pxXAutoStyles = new Reference< style::XAutoStyles > ; - *pxXAutoStyles = new SwXAutoStyles(*pDocShell); - } - return *pxXAutoStyles; - -} - -Reference< drawing::XDrawPage > SwXTextDocument::getDrawPage(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXDrawPage) - { - ((SwXTextDocument*)this)->pDrawPage = new SwXDrawPage(pDocShell->GetDoc()); - ((SwXTextDocument*)this)->pxXDrawPage = new Reference< drawing::XDrawPage >(pDrawPage); - // Create a Reference to trigger the complete initialization of the - // object. Otherwise in some corner cases it would get initialized - // at ::InitNewDoc -> which would get called during - // close() or dispose() -> n#681746 - uno::Reference<lang::XComponent> xComp( *pxXDrawPage, uno::UNO_QUERY ); - } - return *pxXDrawPage; -} - -SwXDrawPage* SwXTextDocument::GetDrawPage() -{ - if(!IsValid()) - return 0; - if(!pDrawPage) - getDrawPage(); - return pDrawPage; -} - -void SwXTextDocument::Invalidate() -{ - bObjectValid = sal_False; - if(xNumFmtAgg.is()) - { - const uno::Type& rTunnelType = ::getCppuType((Reference <XUnoTunnel>*)0); - Any aNumTunnel = xNumFmtAgg->queryAggregation(rTunnelType); - SvNumberFormatsSupplierObj* pNumFmt = 0; - Reference< XUnoTunnel > xNumTunnel; - if(aNumTunnel >>= xNumTunnel) - { - pNumFmt = reinterpret_cast<SvNumberFormatsSupplierObj*>( - xNumTunnel->getSomething(SvNumberFormatsSupplierObj::getUnoTunnelId())); - pNumFmt->SetNumberFormatter(0); - } - OSL_ENSURE(pNumFmt, "No number formatter available"); - } - InitNewDoc(); - pDocShell = 0; - aRefreshCont.Disposing(); -} - -void SwXTextDocument::Reactivate(SwDocShell* pNewDocShell) -{ - if(pDocShell && pDocShell != pNewDocShell) - Invalidate(); - pDocShell = pNewDocShell; - bObjectValid = sal_True; -} - -void SwXTextDocument::InitNewDoc() -{ - // zunaechst alle Collections invalidieren, dann Referenzen loeschen und Null setzen - if(pxXTextTables) - { - XNameAccess* pTbls = pxXTextTables->get(); - ((SwXTextTables*)pTbls)->Invalidate(); - delete pxXTextTables; - pxXTextTables = 0; - } - - if(pxXTextFrames) - { - XNameAccess* pFrms = pxXTextFrames->get(); - ((SwXTextFrames*)pFrms)->Invalidate(); - delete pxXTextFrames; - pxXTextFrames = 0; - } - - if(pxXGraphicObjects) - { - XNameAccess* pFrms = pxXGraphicObjects->get(); - ((SwXTextGraphicObjects*)pFrms)->Invalidate(); - delete pxXGraphicObjects; - pxXGraphicObjects = 0; - } - - if(pxXEmbeddedObjects) - { - XNameAccess* pOLE = pxXEmbeddedObjects->get(); - ((SwXTextEmbeddedObjects*)pOLE)->Invalidate(); - delete pxXEmbeddedObjects; - pxXEmbeddedObjects = 0; - } - - if(xBodyText.is()) - { - xBodyText = 0; - pBodyText = 0; - } - - if(xNumFmtAgg.is()) - { - const uno::Type& rTunnelType = ::getCppuType((Reference <XUnoTunnel>*)0); - Any aNumTunnel = xNumFmtAgg->queryAggregation(rTunnelType); - SvNumberFormatsSupplierObj* pNumFmt = 0; - Reference< XUnoTunnel > xNumTunnel; - if(aNumTunnel >>= xNumTunnel) - { - pNumFmt = reinterpret_cast<SvNumberFormatsSupplierObj*>( - xNumTunnel->getSomething(SvNumberFormatsSupplierObj::getUnoTunnelId())); - - } - OSL_ENSURE(pNumFmt, "No number formatter available"); - pNumFmt->SetNumberFormatter(0); - } - - if(pxXTextFieldTypes) - { - XEnumerationAccess* pT = pxXTextFieldTypes->get(); - ((SwXTextFieldTypes*)pT)->Invalidate(); - delete pxXTextFieldTypes; - pxXTextFieldTypes = 0; - } - - if(pxXTextFieldMasters) - { - XNameAccess* pT = pxXTextFieldMasters->get(); - ((SwXTextFieldMasters*)pT)->Invalidate(); - delete pxXTextFieldMasters; - pxXTextFieldMasters = 0; - } - - if(pxXTextSections) - { - XNameAccess* pSect = pxXTextSections->get(); - ((SwXTextSections*)pSect)->Invalidate(); - delete pxXTextSections; - pxXTextSections = 0; - } - - if(pxXDrawPage) - { - // #i91798#, #i91895# - // dispose XDrawPage here. We are the owner and know that it is no longer in a valid condition. - uno::Reference<lang::XComponent> xComp( *pxXDrawPage, uno::UNO_QUERY ); - xComp->dispose(); - pDrawPage->InvalidateSwDoc(); - delete pxXDrawPage; - pxXDrawPage = 0; - } - - if ( pxXNumberingRules ) - { - XIndexAccess* pNum = pxXNumberingRules->get(); - ((SwXNumberingRulesCollection*)pNum)->Invalidate(); - delete pxXNumberingRules; - pxXNumberingRules = 0; - } - - if(pxXFootnotes) - { - XIndexAccess* pFtn = pxXFootnotes->get(); - ((SwXFootnotes*)pFtn)->Invalidate(); - delete pxXFootnotes; - pxXFootnotes = 0; - } - - if(pxXEndnotes) - { - XIndexAccess* pFtn = pxXEndnotes->get(); - ((SwXFootnotes*)pFtn)->Invalidate(); - delete pxXEndnotes; - pxXEndnotes = 0; - } - - if(pxXDocumentIndexes) - { - XIndexAccess* pIdxs = pxXDocumentIndexes->get(); - ((SwXDocumentIndexes*)pIdxs)->Invalidate(); - delete pxXDocumentIndexes; - pxXDocumentIndexes = 0; - } - - if(pxXStyleFamilies) - { - XNameAccess* pStyles = pxXStyleFamilies->get(); - ((SwXStyleFamilies*)pStyles)->Invalidate(); - delete pxXStyleFamilies; - pxXStyleFamilies = 0; - } - if(pxXAutoStyles) - { - XNameAccess* pStyles = pxXAutoStyles->get(); - ((SwXAutoStyles*)pStyles)->Invalidate(); - delete pxXAutoStyles; - pxXAutoStyles = 0; - } - - if(pxXBookmarks) - { - XNameAccess* pBm = pxXBookmarks->get(); - ((SwXBookmarks*)pBm)->Invalidate(); - delete pxXBookmarks; - pxXBookmarks = 0; - } - - if(pxXChapterNumbering) - { - XIndexReplace* pCh = pxXChapterNumbering->get(); - ((SwXChapterNumbering*)pCh)->Invalidate(); - delete pxXChapterNumbering; - pxXChapterNumbering = 0; - } - - if(pxXFootnoteSettings) - { - XPropertySet* pFntSet = pxXFootnoteSettings->get(); - ((SwXFootnoteProperties*)pFntSet)->Invalidate(); - delete pxXFootnoteSettings; - pxXFootnoteSettings = 0; - } - - if(pxXEndnoteSettings) - { - XPropertySet* pEndSet = pxXEndnoteSettings->get(); - ((SwXEndnoteProperties*)pEndSet)->Invalidate(); - delete pxXEndnoteSettings; - pxXEndnoteSettings = 0; - } - - if(pxXLineNumberingProperties) - { - XPropertySet* pLine = pxXLineNumberingProperties->get(); - ((SwXLineNumberingProperties*)pLine)->Invalidate(); - delete pxXLineNumberingProperties; - pxXLineNumberingProperties = 0; - } - if(pxXReferenceMarks) - { - XNameAccess* pMarks = pxXReferenceMarks->get(); - ((SwXReferenceMarks*)pMarks)->Invalidate(); - delete pxXReferenceMarks; - pxXReferenceMarks = 0; - } - if(pxLinkTargetSupplier) - { - XNameAccess* pAccess = (*pxLinkTargetSupplier).get(); - ((SwXLinkTargetSupplier*)pAccess)->Invalidate(); - delete pxLinkTargetSupplier; - pxLinkTargetSupplier = 0; - } - if(pxXRedlines) - { - XEnumerationAccess* pMarks = pxXRedlines->get(); - ((SwXRedlines*)pMarks)->Invalidate(); - delete pxXRedlines; - pxXRedlines = 0; - } - if(xPropertyHelper.is()) - { - pPropertyHelper->Invalidate(); - xPropertyHelper = 0; - pPropertyHelper = 0; - } -} - -#define COM_SUN_STAR__DRAWING_LENGTH 13 -Reference< XInterface > SwXTextDocument::createInstance(const OUString& rServiceName) - throw( Exception, RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - Reference< XInterface > xRet; - sal_uInt16 nType = SwXServiceProvider::GetProviderType(rServiceName); - if(nType != SW_SERVICE_INVALID) - { - xRet = SwXServiceProvider::MakeInstance(nType, pDocShell->GetDoc()); - } - else - { - if( rServiceName.compareToAscii( "com.sun.star.", 13 ) == 0 ) - { - sal_Int32 nIndex = COM_SUN_STAR__DRAWING_LENGTH; - OUString sCategory = rServiceName.getToken( 0, '.', nIndex ); - sal_Bool bShape = sCategory == C2U("drawing"); - if( bShape || sCategory == C2U("form")) - { - if(bShape) - { - short nTable = 0; - if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.DashTable") ) ) - nTable = SW_CREATE_DASH_TABLE; - else if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.GradientTable") ) ) - nTable = SW_CREATE_GRADIENT_TABLE; - else if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.HatchTable") ) ) - nTable = SW_CREATE_HATCH_TABLE; - else if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.BitmapTable") ) ) - nTable = SW_CREATE_BITMAP_TABLE; - else if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.TransparencyGradientTable") ) ) - nTable = SW_CREATE_TRANSGRADIENT_TABLE; - else if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.MarkerTable") ) ) - nTable = SW_CREATE_MARKER_TABLE; - else if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.Defaults") ) ) - nTable = SW_CREATE_DRAW_DEFAULTS; - if(nTable) - { - xRet = GetPropertyHelper()->GetDrawTable(nTable); - } - } - } - else if (sCategory == C2U ("document") ) - { - if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.document.Settings") ) ) - xRet = Reference < XInterface > ( *new SwXDocumentSettings ( this ) ); - if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.document.ImportEmbeddedObjectResolver") ) ) - { - xRet = (::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_READ ); - } - } - else if (sCategory == C2U ("text") ) - { - if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.DocumentSettings") ) ) - xRet = Reference < XInterface > ( *new SwXDocumentSettings ( this ) ); - } - else if (sCategory == C2U ("chart2") ) - { - if( 0 == rServiceName.reverseCompareToAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.chart2.data.DataProvider") ) ) - xRet = Reference < XInterface > ( dynamic_cast< chart2::data::XDataProvider * >(pDocShell->getIDocumentChartDataProviderAccess()->GetChartDataProvider()) ); - } - - if(!xRet.is()) - { - //! we don't want to insert OLE2 Shapes (e.g. "com.sun.star.drawing.OLE2Shape", ...) - //! like this (by creating them with the documents factory and - //! adding the shapes to the draw page). - //! For inserting OLE objects the proper way is to use - //! "com.sun.star.text.TextEmbeddedObject"! - if (rServiceName.lastIndexOf( C2U(".OLE2Shape") ) == rServiceName.getLength() - 10) - throw ServiceNotRegisteredException(); // declare service to be not registered with this factory - - // - // the XML import is allowed to create instances of com.sun.star.drawing.OLE2Shape. - // Thus, a temporary service name is introduced to make this possible. - OUString aTmpServiceName( rServiceName ); - if ( bShape && - rServiceName.compareToAscii( "com.sun.star.drawing.temporaryForXMLImportOLE2Shape" ) == 0 ) - { - aTmpServiceName = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.OLE2Shape")); - } - //hier den Draw - Service suchen - Reference< XInterface > xTmp = SvxFmMSFactory::createInstance(aTmpServiceName); - if(bShape) - { - nIndex = COM_SUN_STAR__DRAWING_LENGTH; - if( 0 == rServiceName.reverseCompareToAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "com.sun.star.drawing.GroupShape" ) ) || - 0 == rServiceName.reverseCompareToAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "com.sun.star.drawing.Shape3DSceneObject" ) ) ) - xRet = *new SwXGroupShape( xTmp ); - else - xRet = *new SwXShape( xTmp ); - } - else - xRet = xTmp; - } - } - else - throw ServiceNotRegisteredException(); - } - return xRet; -} - -Reference< XInterface > SwXTextDocument::createInstanceWithArguments( - const OUString& ServiceSpecifier, - const Sequence< Any >& /*Arguments*/) - throw( Exception, RuntimeException ) -{ - Reference< XInterface > xInt = createInstance(ServiceSpecifier); - //die Any-Sequence dient zur Initialisierung von Objekten, die auf - //Parameter zwingend angewiesen sind - bis jetzt haben wir das nicht - return xInt; -} - -Sequence< OUString > SwXTextDocument::getAvailableServiceNames(void) - throw( RuntimeException ) -{ - static Sequence< OUString > aServices; - if ( aServices.getLength() == 0 ) - { - Sequence< OUString > aRet = SvxFmMSFactory::getAvailableServiceNames(); - OUString* pRet = aRet.getArray(); - for ( sal_Int32 i = 0; i < aRet.getLength(); ++i ) - { - if ( pRet[i].compareToAscii( "com.sun.star.drawing.OLE2Shape" ) == 0 ) - { - pRet[i] = pRet[aRet.getLength() - 1]; - aRet.realloc( aRet.getLength() - 1 ); // <pRet> no longer valid. - break; - } - } - Sequence< OUString > aOwn = SwXServiceProvider::GetAllServiceNames(); - aServices = SvxFmMSFactory::concatServiceNames(aRet, aOwn); - } - - return aServices; -} - -OUString SwXTextDocument::getImplementationName(void) throw( RuntimeException ) -{ - return C2U("SwXTextDocument"); -} - -sal_Bool SwXTextDocument::supportsService(const OUString& rServiceName) throw( RuntimeException ) -{ - if ( - (rServiceName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "com.sun.star.document.OfficeDocument" ))) || - (rServiceName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "com.sun.star.text.GenericTextDocument"))) - ) - return sal_True; - - sal_Bool bWebDoc = (0 != PTR_CAST(SwWebDocShell, pDocShell)); - sal_Bool bGlobalDoc = (0 != PTR_CAST(SwGlobalDocShell, pDocShell)); - sal_Bool bTextDoc = (!bWebDoc && !bGlobalDoc); - - return ( - (bWebDoc && rServiceName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.WebDocument" ))) || - (bGlobalDoc && rServiceName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.GlobalDocument"))) || - (bTextDoc && rServiceName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.TextDocument" ))) - ); -} - -Sequence< OUString > SwXTextDocument::getSupportedServiceNames(void) throw( RuntimeException ) -{ - sal_Bool bWebDoc = (0 != PTR_CAST(SwWebDocShell, pDocShell)); - sal_Bool bGlobalDoc = (0 != PTR_CAST(SwGlobalDocShell, pDocShell)); - sal_Bool bTextDoc = (!bWebDoc && !bGlobalDoc); - - Sequence< OUString > aRet (3); - OUString* pArray = aRet.getArray(); - - pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( ( "com.sun.star.document.OfficeDocument" ) ) ); - pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( ( "com.sun.star.text.GenericTextDocument" ) ) ); - - if (bTextDoc) - pArray[2] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( ( "com.sun.star.text.TextDocument" ) ) ); - else - if (bWebDoc) - pArray[2] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( ( "com.sun.star.text.WebDocument" ) ) ); - else - if (bGlobalDoc) - pArray[2] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( ( "com.sun.star.text.GlobalDocument" ) ) ); - - return aRet; -} - -Reference< XIndexAccess > SwXTextDocument::getDocumentIndexes(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - if(!pxXDocumentIndexes) - { - ((SwXTextDocument*)this)->pxXDocumentIndexes = new Reference< XIndexAccess > ; - *pxXDocumentIndexes = new SwXDocumentIndexes(pDocShell->GetDoc()); - } - return *pxXDocumentIndexes; -} - -Reference< XPropertySetInfo > SwXTextDocument::getPropertySetInfo(void) throw( RuntimeException ) -{ - static Reference< XPropertySetInfo > xRet = pPropSet->getPropertySetInfo(); - return xRet; -} - -void SwXTextDocument::setPropertyValue(const OUString& rPropertyName, - const Any& aValue) - throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, - WrappedTargetException, RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - const SfxItemPropertySimpleEntry* pEntry = pPropSet->getPropertyMap()->getByName( rPropertyName); - - if(!pEntry) - throw UnknownPropertyException(); - if(pEntry->nFlags & PropertyAttribute::READONLY) - throw PropertyVetoException(); - switch(pEntry->nWID) - { - case WID_DOC_CHAR_COUNT : - case WID_DOC_PARA_COUNT : - case WID_DOC_WORD_COUNT : - throw RuntimeException(); - case WID_DOC_WORD_SEPARATOR : - { - OUString sDelim; - aValue >>= sDelim; - SW_MOD()->GetModuleConfig()->SetWordDelimiter(sDelim); - } - break; - case WID_DOC_CHANGES_RECORD: - case WID_DOC_CHANGES_SHOW: - { - sal_Bool bSet = *(sal_Bool*)aValue.getValue(); - sal_uInt16 eMode = pDocShell->GetDoc()->GetRedlineMode(); - if(WID_DOC_CHANGES_SHOW == pEntry->nWID) - { - eMode &= ~(nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE); - eMode |= nsRedlineMode_t::REDLINE_SHOW_INSERT; - if( bSet ) - eMode |= nsRedlineMode_t::REDLINE_SHOW_DELETE; - } - else if(WID_DOC_CHANGES_RECORD == pEntry->nWID) - { - eMode = bSet ? eMode|nsRedlineMode_t::REDLINE_ON : eMode&~nsRedlineMode_t::REDLINE_ON; - } - pDocShell->GetDoc()->SetRedlineMode( (RedlineMode_t)(eMode )); - } - break; - case WID_DOC_CHANGES_PASSWORD: - { - Sequence <sal_Int8> aNew; - if(aValue >>= aNew) - { - SwDoc* pDoc = pDocShell->GetDoc(); - pDoc->SetRedlinePassword(aNew); - if(aNew.getLength()) - { - sal_uInt16 eMode = pDoc->GetRedlineMode(); - eMode = eMode|nsRedlineMode_t::REDLINE_ON; - pDoc->SetRedlineMode( (RedlineMode_t)(eMode )); - } - } - } - break; - case WID_DOC_AUTO_MARK_URL : - { - OUString sURL; - aValue >>= sURL; - pDocShell->GetDoc()->SetTOIAutoMarkURL(sURL); - } - break; - case WID_DOC_HIDE_TIPS : - SW_MOD()->GetModuleConfig()->SetHideFieldTips(*(sal_Bool*)aValue.getValue()); - break; - case WID_DOC_REDLINE_DISPLAY: - { - sal_Int16 eRedMode = pDocShell->GetDoc()->GetRedlineMode(); - eRedMode = eRedMode & (~nsRedlineMode_t::REDLINE_SHOW_MASK); - sal_Int16 nSet = 0; - aValue >>= nSet; - switch(nSet) - { - case RedlineDisplayType::NONE: break; - case RedlineDisplayType::INSERTED: eRedMode |= nsRedlineMode_t::REDLINE_SHOW_INSERT; break; - case RedlineDisplayType::REMOVED: eRedMode |= nsRedlineMode_t::REDLINE_SHOW_DELETE; break; - case RedlineDisplayType:: - INSERTED_AND_REMOVED: eRedMode |= nsRedlineMode_t::REDLINE_SHOW_INSERT|nsRedlineMode_t::REDLINE_SHOW_DELETE; - break; - default: throw IllegalArgumentException(); - } - pDocShell->GetDoc()->SetRedlineMode(eRedMode); - } - break; - case WID_DOC_TWO_DIGIT_YEAR: - { - sal_Int16 nYear = 0; - aValue >>= nYear; - SfxRequest aRequest ( SID_ATTR_YEAR2000, SFX_CALLMODE_SLOT, pDocShell->GetDoc()->GetAttrPool()); - aRequest.AppendItem(SfxUInt16Item( SID_ATTR_YEAR2000, static_cast < sal_uInt16 > ( nYear ) ) ); - pDocShell->Execute ( aRequest ); - } - break; - case WID_DOC_AUTOMATIC_CONTROL_FOCUS: - { - SwDrawDocument * pDrawDoc; - sal_Bool bAuto = *(sal_Bool*) aValue.getValue(); - - if ( 0 != ( pDrawDoc = dynamic_cast< SwDrawDocument * >( pDocShell->GetDoc()->GetDrawModel() ) ) ) - pDrawDoc->SetAutoControlFocus( bAuto ); - else if (bAuto) - { - // if setting to true, and we don't have an - // SdrModel, then we are changing the default and - // must thus create an SdrModel, if we don't have an - // SdrModel and we are leaving the default at false, - // we don't need to make an SdrModel and can do nothing - // #i52858# - method name changed - pDrawDoc = dynamic_cast< SwDrawDocument * > (pDocShell->GetDoc()->GetOrCreateDrawModel() ); - pDrawDoc->SetAutoControlFocus ( bAuto ); - } - } - break; - case WID_DOC_APPLY_FORM_DESIGN_MODE: - { - SwDrawDocument * pDrawDoc; - sal_Bool bMode = *(sal_Bool*)aValue.getValue(); - - if ( 0 != ( pDrawDoc = dynamic_cast< SwDrawDocument * > (pDocShell->GetDoc()->GetDrawModel() ) ) ) - pDrawDoc->SetOpenInDesignMode( bMode ); - else if (!bMode) - { - // if setting to false, and we don't have an - // SdrModel, then we are changing the default and - // must thus create an SdrModel, if we don't have an - // SdrModel and we are leaving the default at true, - // we don't need to make an SdrModel and can do - // nothing - // #i52858# - method name changed - pDrawDoc = dynamic_cast< SwDrawDocument * > (pDocShell->GetDoc()->GetOrCreateDrawModel() ); - pDrawDoc->SetOpenInDesignMode ( bMode ); - } - } - break; - // #i42634# New property to set the bInReading - // flag at the document, used during binary import - case WID_DOC_LOCK_UPDATES : - { - SwDoc* pDoc = pDocShell->GetDoc(); - bool bBool (false); - if( aValue >>= bBool ) - pDoc->SetInReading( bBool ); - } - break; - case WID_DOC_BUILDID: - aValue >>= maBuildId; - break; - // - case WID_APPLY_WORKAROUND_FOR_B6375613: - { - bool bApplyWorkaroundForB6375613( false ); - aValue >>= bApplyWorkaroundForB6375613; - pDocShell->GetDoc()->SetApplyWorkaroundForB6375613( bApplyWorkaroundForB6375613 ); - } - break; - - default: - { - const SfxPoolItem& rItem = pDocShell->GetDoc()->GetDefault(pEntry->nWID); - SfxPoolItem* pNewItem = rItem.Clone(); - pNewItem->PutValue(aValue, pEntry->nMemberId); - pDocShell->GetDoc()->SetDefault(*pNewItem); - delete pNewItem; - } - } -} - -Any SwXTextDocument::getPropertyValue(const OUString& rPropertyName) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - const SfxItemPropertySimpleEntry* pEntry = pPropSet->getPropertyMap()->getByName( rPropertyName); - - if(!pEntry) - throw UnknownPropertyException(); - Any aAny; - switch(pEntry->nWID) - { - case WID_DOC_ISTEMPLATEID : - aAny <<= pDocShell->IsTemplate(); - break; - case WID_DOC_CHAR_COUNT : - case WID_DOC_PARA_COUNT : - case WID_DOC_WORD_COUNT : - { - SwDocStat aStat(pDocShell->GetDoc()->GetDocStat()); - if(aStat.bModified) - pDocShell->GetDoc()->UpdateDocStat( aStat ); - sal_Int32 nValue; - switch(pEntry->nWID) - { - case WID_DOC_CHAR_COUNT :nValue = aStat.nChar;break; - case WID_DOC_PARA_COUNT :nValue = aStat.nPara;break; - case WID_DOC_WORD_COUNT :nValue = aStat.nWord;break; - } - aAny <<= nValue; - } - break; - case WID_DOC_WORD_SEPARATOR : - { - aAny <<= OUString(SW_MOD()->GetDocStatWordDelim()); - } - break; - case WID_DOC_CHANGES_RECORD: - case WID_DOC_CHANGES_SHOW: - { - sal_uInt16 eMode = pDocShell->GetDoc()->GetRedlineMode(); - sal_Bool bSet = sal_False; - if(WID_DOC_CHANGES_SHOW == pEntry->nWID) - { - sal_uInt16 nMask = nsRedlineMode_t::REDLINE_SHOW_INSERT | nsRedlineMode_t::REDLINE_SHOW_DELETE; - bSet = (eMode & nMask) == nMask; - } - else if(WID_DOC_CHANGES_RECORD == pEntry->nWID) - { - bSet = (eMode& nsRedlineMode_t::REDLINE_ON) != 0; - } - aAny.setValue(&bSet, ::getBooleanCppuType()); - } - break; - case WID_DOC_CHANGES_PASSWORD: - { - SwDoc* pDoc = pDocShell->GetDoc(); - aAny <<= pDoc->GetRedlinePassword(); - } - break; - case WID_DOC_AUTO_MARK_URL : - aAny <<= OUString(pDocShell->GetDoc()->GetTOIAutoMarkURL()); - break; - case WID_DOC_HIDE_TIPS : - { - sal_Bool bTemp = SW_MOD()->GetModuleConfig()->IsHideFieldTips(); - aAny.setValue(&bTemp, ::getBooleanCppuType()); - } - break; - case WID_DOC_REDLINE_DISPLAY: - { - sal_Int16 eRedMode = pDocShell->GetDoc()->GetRedlineMode(); - eRedMode = eRedMode & nsRedlineMode_t::REDLINE_SHOW_MASK; - sal_Int16 nRet = RedlineDisplayType::NONE; - if(nsRedlineMode_t::REDLINE_SHOW_INSERT == eRedMode) - nRet = RedlineDisplayType::INSERTED; - else if(nsRedlineMode_t::REDLINE_SHOW_DELETE == eRedMode) - nRet = RedlineDisplayType::REMOVED; - else if(nsRedlineMode_t::REDLINE_SHOW_MASK == eRedMode) - nRet = RedlineDisplayType::INSERTED_AND_REMOVED; - aAny <<= nRet; - } - break; - case WID_DOC_FORBIDDEN_CHARS: - { - GetPropertyHelper(); - Reference<XForbiddenCharacters> xRet(xPropertyHelper, UNO_QUERY); - aAny <<= xRet; - } - break; - case WID_DOC_TWO_DIGIT_YEAR: - { - aAny <<= static_cast < sal_Int16 > (pDocShell->GetDoc()->GetNumberFormatter ( sal_True )->GetYear2000()); - } - break; - case WID_DOC_AUTOMATIC_CONTROL_FOCUS: - { - SwDrawDocument * pDrawDoc; - sal_Bool bAuto; - if ( 0 != ( pDrawDoc = dynamic_cast< SwDrawDocument * > (pDocShell->GetDoc()->GetDrawModel() ) ) ) - bAuto = pDrawDoc->GetAutoControlFocus(); - else - bAuto = sal_False; - aAny.setValue(&bAuto, ::getBooleanCppuType()); - } - break; - case WID_DOC_APPLY_FORM_DESIGN_MODE: - { - SwDrawDocument * pDrawDoc; - sal_Bool bMode; - if ( 0 != ( pDrawDoc = dynamic_cast< SwDrawDocument * > (pDocShell->GetDoc()->GetDrawModel() ) ) ) - bMode = pDrawDoc->GetOpenInDesignMode(); - else - bMode = sal_True; - aAny.setValue(&bMode, ::getBooleanCppuType()); - } - break; - case WID_DOC_BASIC_LIBRARIES: - aAny <<= pDocShell->GetBasicContainer(); - break; - case WID_DOC_DIALOG_LIBRARIES: - aAny <<= pDocShell->GetDialogContainer(); - break; - case WID_DOC_VBA_DOCOBJ: - { - beans::PropertyValue aProp; - aProp.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ThisWordDoc") ); - aProp.Value <<= pDocShell->GetModel(); - aAny <<= aProp; - } - break; - case WID_DOC_RUNTIME_UID: - aAny <<= getRuntimeUID(); - break; - case WID_DOC_LOCK_UPDATES : - aAny <<= static_cast<bool>( pDocShell->GetDoc()->IsInReading() ); - break; - case WID_DOC_BUILDID: - aAny <<= maBuildId; - break; - case WID_DOC_HAS_VALID_SIGNATURES: - aAny <<= hasValidSignatures(); - break; - // - case WID_APPLY_WORKAROUND_FOR_B6375613: - { - aAny <<= pDocShell->GetDoc()->ApplyWorkaroundForB6375613(); - } - break; - - default: - { - const SfxPoolItem& rItem = pDocShell->GetDoc()->GetDefault(pEntry->nWID); - rItem.QueryValue(aAny, pEntry->nMemberId); - } - } - return aAny; -} - -void SwXTextDocument::addPropertyChangeListener(const OUString& /*PropertyName*/, - const Reference< XPropertyChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - OSL_FAIL("not implemented"); -} - -void SwXTextDocument::removePropertyChangeListener(const OUString& /*PropertyName*/, - const Reference< XPropertyChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - OSL_FAIL("not implemented"); -} - -void SwXTextDocument::addVetoableChangeListener(const OUString& /*PropertyName*/, - const Reference< XVetoableChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - OSL_FAIL("not implemented"); -} - -void SwXTextDocument::removeVetoableChangeListener(const OUString& /*PropertyName*/, - const Reference< XVetoableChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - OSL_FAIL("not implemented"); -} - -Reference< XNameAccess > SwXTextDocument::getLinks(void) throw( RuntimeException ) -{ - if(!pxLinkTargetSupplier) - { - pxLinkTargetSupplier = new Reference< XNameAccess > ; - (*pxLinkTargetSupplier) = new SwXLinkTargetSupplier(*(SwXTextDocument*)this); - } - return (*pxLinkTargetSupplier); -} - -Reference< XEnumerationAccess > SwXTextDocument::getRedlines( ) throw(RuntimeException) -{ - if(!pxXRedlines) - { - pxXRedlines = new Reference< XEnumerationAccess > ; - (*pxXRedlines) = new SwXRedlines(pDocShell->GetDoc()); - } - return *pxXRedlines; -} - -void SwXTextDocument::refresh(void) throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - ViewShell *pViewShell = pDocShell->GetWrtShell(); - notifyRefreshListeners(); - if(pViewShell) - pViewShell->CalcLayout(); -} - -void SwXTextDocument::addRefreshListener(const Reference< util::XRefreshListener > & l) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if ( !IsValid() ) - throw RuntimeException(); - aRefreshCont.AddListener ( reinterpret_cast < const Reference < lang::XEventListener > &> ( l )); -} - -void SwXTextDocument::removeRefreshListener(const Reference< util::XRefreshListener > & l) - throw( RuntimeException ) -{ - SolarMutexGuard aGuard; - if ( !IsValid() || !aRefreshCont.RemoveListener ( reinterpret_cast < const Reference < lang::XEventListener > &> ( l ) ) ) - throw RuntimeException(); -} - -void SwXTextDocument::updateLinks( ) throw(RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - SwDoc* pDoc = pDocShell->GetDoc(); - sfx2::LinkManager& rLnkMan = pDoc->GetLinkManager(); - if( rLnkMan.GetLinks().Count() ) - { - UnoActionContext aAction(pDoc); - rLnkMan.UpdateAllLinks( sal_False, sal_False, sal_True ); - } -} - -//XPropertyState -PropertyState SAL_CALL SwXTextDocument::getPropertyState( const OUString& rPropertyName ) - throw (UnknownPropertyException, RuntimeException) -{ - SolarMutexGuard aGuard; - PropertyState eRet = PropertyState_DIRECT_VALUE; - if(!IsValid()) - throw RuntimeException(); - const SfxItemPropertySimpleEntry* pEntry = pPropSet->getPropertyMap()->getByName( rPropertyName); - - if(!pEntry) - throw UnknownPropertyException(); - Any aAny; - switch(pEntry->nWID) - { - case 0:default:break; - } - return eRet; -} - -Sequence< PropertyState > SAL_CALL SwXTextDocument::getPropertyStates( const Sequence< OUString >& rPropertyNames ) - throw (UnknownPropertyException, RuntimeException) -{ - const sal_Int32 nCount = rPropertyNames.getLength(); - const OUString * pNames = rPropertyNames.getConstArray(); - Sequence < PropertyState > aRet ( nCount ); - PropertyState *pState = aRet.getArray(); - - for ( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++) - pState[nIndex] = getPropertyState( pNames[nIndex] ); - - return aRet; -} - -void SAL_CALL SwXTextDocument::setPropertyToDefault( const OUString& rPropertyName ) - throw (UnknownPropertyException, RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - const SfxItemPropertySimpleEntry* pEntry = pPropSet->getPropertyMap()->getByName( rPropertyName); - if(!pEntry) - throw UnknownPropertyException(); - switch(pEntry->nWID) - { - case 0:default:break; - } -} - -Any SAL_CALL SwXTextDocument::getPropertyDefault( const OUString& rPropertyName ) - throw (UnknownPropertyException, WrappedTargetException, RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - const SfxItemPropertySimpleEntry* pEntry = pPropSet->getPropertyMap()->getByName( rPropertyName); - if(!pEntry) - throw UnknownPropertyException(); - Any aAny; - switch(pEntry->nWID) - { - case 0:default:break; - } - return aAny; -} - -static OutputDevice * lcl_GetOutputDevice( const SwPrintUIOptions &rPrintUIOptions ) -{ - OutputDevice *pOut = 0; - - uno::Any aAny( rPrintUIOptions.getValue( C2U( "RenderDevice" ) )); - uno::Reference< awt::XDevice > xRenderDevice; - aAny >>= xRenderDevice; - if (xRenderDevice.is()) - { - VCLXDevice* pDevice = VCLXDevice::GetImplementation( xRenderDevice ); - pOut = pDevice ? pDevice->GetOutputDevice() : 0; - } - - return pOut; -} - -static bool lcl_SeqHasProperty( - const uno::Sequence< beans::PropertyValue >& rOptions, - const sal_Char *pPropName ) -{ - bool bRes = false; - const sal_Int32 nLen = rOptions.getLength(); - const beans::PropertyValue *pProps = rOptions.getConstArray(); - for (sal_Int32 i = 0; i < nLen && !bRes; ++i) - { - if (pProps[i].Name.equalsAscii( pPropName )) - bRes = true; - } - return bRes; -} - -SfxViewShell * SwXTextDocument::GetRenderView( - bool &rbIsSwSrcView, - const uno::Sequence< beans::PropertyValue >& rOptions, - bool bIsPDFExport ) -{ - // get view shell to use - SfxViewShell *pView = 0; - if (bIsPDFExport) - pView = GuessViewShell( rbIsSwSrcView ); - else - { - uno::Any aTmp; - const sal_Int32 nLen = rOptions.getLength(); - const beans::PropertyValue *pProps = rOptions.getConstArray(); - for (sal_Int32 i = 0; i < nLen; ++i) - { - if (pProps[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "View" ) )) - { - aTmp = pProps[i].Value; - break; - } - } - - uno::Reference< frame::XController > xController; - if (aTmp >>= xController) - { - OSL_ENSURE( xController.is(), "controller is empty!" ); - pView = GuessViewShell( rbIsSwSrcView, xController ); - } - } - return pView; -} - -/* - * GetRenderDoc: - * returns the document to be rendered, usually this will be the 'regular' - * document but in case of PDF export of (multi-)selection it will - * be a temporary document that gets created if not already done. - * The rpView variable will be set (if not already done) to the used - * SfxViewShell. -*/ -SwDoc * SwXTextDocument::GetRenderDoc( - SfxViewShell *&rpView, - const uno::Any& rSelection, - bool bIsPDFExport ) -{ - SwDoc *pDoc = 0; - - uno::Reference< frame::XModel > xModel; - rSelection >>= xModel; - if (xModel == pDocShell->GetModel()) - pDoc = pDocShell->GetDoc(); - else - { - OSL_ENSURE( !xModel.is(), "unexpected model found" ); - - if (rSelection.hasValue()) // is anything selected ? - { - // this part should only be called when a temporary document needs to be created, - // for example for PDF export or printing of (multi-)selection only. - - bool bIsSwSrcView = false; - if (!rpView) - { - (void) bIsPDFExport; - // aside from maybe PDF export the view should always have been provided! - OSL_ENSURE( bIsPDFExport, "view is missing, guessing one..." ); - - rpView = GuessViewShell( bIsSwSrcView ); - } - OSL_ENSURE( rpView, "ViewShell missing" ); - // the view shell should be SwView for documents PDF export. - // for the page preview no selection should be possible - // (the export dialog does not allow for this option) - const TypeId aSwViewTypeId = TYPE(SwView); - if (rpView && rpView->IsA(aSwViewTypeId)) - { - SfxObjectShellLock xDocSh(((SwView*)rpView)->GetOrCreateTmpSelectionDoc()); - if (xDocSh.Is()) - { - pDoc = ((SwDocShell*)&xDocSh)->GetDoc(); - rpView = pDoc->GetDocShell()->GetView(); - } - } - else - { - OSL_FAIL("unexpected ViewShell" ); - } - } - } - return pDoc; -} - -static void lcl_SavePrintUIOptionsToDocumentPrintData( - SwDoc &rDoc, - const SwPrintUIOptions &rPrintUIOptions, - bool bIsPDFEXport ) -{ - SwPrintData aDocPrintData( rDoc.getPrintData() ); - - aDocPrintData.SetPrintGraphic( rPrintUIOptions.IsPrintGraphics() ); - aDocPrintData.SetPrintTable( rPrintUIOptions.IsPrintTables() ); - aDocPrintData.SetPrintDraw( rPrintUIOptions.IsPrintDrawings() ); - aDocPrintData.SetPrintControl( rPrintUIOptions.IsPrintFormControls() ); - aDocPrintData.SetPrintLeftPage( rPrintUIOptions.IsPrintLeftPages() ); - aDocPrintData.SetPrintRightPage( rPrintUIOptions.IsPrintRightPages() ); - aDocPrintData.SetPrintReverse( rPrintUIOptions.IsPrintReverse() ); - aDocPrintData.SetPaperFromSetup( rPrintUIOptions.IsPaperFromSetup() ); - aDocPrintData.SetPrintEmptyPages( rPrintUIOptions.IsPrintEmptyPages( bIsPDFEXport ) ); - aDocPrintData.SetPrintPostIts( rPrintUIOptions.GetPrintPostItsType() ); - aDocPrintData.SetPrintProspect( rPrintUIOptions.IsPrintProspect() ); - aDocPrintData.SetPrintProspect_RTL( rPrintUIOptions.IsPrintProspectRTL() ); - aDocPrintData.SetPrintPageBackground( rPrintUIOptions.IsPrintPageBackground() ); - aDocPrintData.SetPrintBlackFont( rPrintUIOptions.IsPrintWithBlackTextColor() ); - // aDocPrintData.SetPrintSingleJobs( b ); handled by File/Print dialog itself - // arDocPrintData.SetFaxName( s ); n/a in File/Print dialog - aDocPrintData.SetPrintHiddenText( rPrintUIOptions.IsPrintHiddenText() ); - aDocPrintData.SetPrintTextPlaceholder( rPrintUIOptions.IsPrintTextPlaceholders() ); - - rDoc.setPrintData( aDocPrintData ); -} - -sal_Int32 SAL_CALL SwXTextDocument::getRendererCount( - const uno::Any& rSelection, - const uno::Sequence< beans::PropertyValue >& rxOptions ) - throw (IllegalArgumentException, RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - - const bool bIsPDFExport = !lcl_SeqHasProperty( rxOptions, "IsPrinter" ); - bool bIsSwSrcView = false; - SfxViewShell *pView = GetRenderView( bIsSwSrcView, rxOptions, bIsPDFExport ); - - if (!bIsSwSrcView && !m_pRenderData) - m_pRenderData = new SwRenderData; - if (!m_pPrintUIOptions) - m_pPrintUIOptions = lcl_GetPrintUIOptions( pDocShell, pView ); - bool bFormat = m_pPrintUIOptions->processPropertiesAndCheckFormat( rxOptions ); - - SwDoc *pDoc = GetRenderDoc( pView, rSelection, bIsPDFExport ); - OSL_ENSURE( pDoc && pView, "doc or view shell missing!" ); - if (!pDoc || !pView) - return 0; - - // save current UI options from the print dialog for the next call to that dialog - lcl_SavePrintUIOptionsToDocumentPrintData( *pDoc, *m_pPrintUIOptions, bIsPDFExport ); - - sal_Int32 nRet = 0; - if (bIsSwSrcView) - { - SwSrcView *pSwSrcView = dynamic_cast< SwSrcView * >(pView); - OutputDevice *pOutDev = lcl_GetOutputDevice( *m_pPrintUIOptions ); - nRet = pSwSrcView->PrintSource( pOutDev, 1 /* dummy */, true /* get page count only */ ); - } - else - { - SwDocShell *pRenderDocShell = pDoc->GetDocShell(); - - // TODO/mba: we really need a generic way to get the ViewShell! - ViewShell* pViewShell = 0; - SwView* pSwView = PTR_CAST(SwView, pView); - if ( pSwView ) - { - pViewShell = pSwView->GetWrtShellPtr(); - } - else - { - if ( bIsPDFExport && bFormat ) - { - //create a hidden view to be able to export as PDF also in print preview - //pView and pSwView are not changed intentionally! - m_pHiddenViewFrame = SfxViewFrame::LoadHiddenDocument( *pRenderDocShell, 2 ); - pViewShell = ((SwView*)m_pHiddenViewFrame->GetViewShell())->GetWrtShellPtr(); - } - else - pViewShell = ((SwPagePreView*)pView)->GetViewShell(); - } - - if (!pViewShell || !pViewShell->GetLayout()) - return 0; - - if (bFormat) - { - // #i38289 - if( pViewShell->GetViewOptions()->getBrowseMode() ) - { - SwViewOption aOpt( *pViewShell->GetViewOptions() ); - aOpt.setBrowseMode( false ); - pViewShell->ApplyViewOptions( aOpt ); - pSwView->RecheckBrowseMode(); - } - - // reformating the document for printing will show the changes in the view - // which is likely to produce many unwanted and not nice to view actions. - // We don't want that! Thus we disable updating of the view. - pViewShell->StartAction(); - - if (pSwView) - { - if (m_pRenderData && m_pRenderData->NeedNewViewOptionAdjust( *pViewShell ) ) - m_pRenderData->ViewOptionAdjustStop(); - if (m_pRenderData && !m_pRenderData->IsViewOptionAdjust()) - m_pRenderData->ViewOptionAdjustStart( *pViewShell, *pViewShell->GetViewOptions() ); - } - - m_pRenderData->SetSwPrtOptions( new SwPrintData ); - m_pRenderData->MakeSwPrtOptions( m_pRenderData->GetSwPrtOptionsRef(), pRenderDocShell, - m_pPrintUIOptions, m_pRenderData, bIsPDFExport ); - - if (pSwView) - { - // PDF export should not make use of the SwPrtOptions - const SwPrintData *pPrtOptions = (bIsPDFExport) - ? NULL : m_pRenderData->GetSwPrtOptions(); - m_pRenderData->ViewOptionAdjust( pPrtOptions ); - } - - // since printing now also use the API for PDF export this option - // should be set for printing as well ... - pViewShell->SetPDFExportOption( sal_True ); - bool bOrigStatus = pRenderDocShell->IsEnableSetModified(); - // check configuration: shall update of printing information in DocInfo set the document to "modified"? - bool bStateChanged = false; - if ( bOrigStatus && !SvtPrintWarningOptions().IsModifyDocumentOnPrintingAllowed() ) - { - pRenderDocShell->EnableSetModified( sal_False ); - bStateChanged = true; - } - - // #122919# Force field update before PDF export - pViewShell->ViewShell::UpdateFlds(sal_True); - if( bStateChanged ) - pRenderDocShell->EnableSetModified( sal_True ); - - // there is some redundancy between those two function calls, but right now - // there is no time to sort this out. - //TODO: check what exatly needs to be done and make just one function for that - pViewShell->CalcLayout(); - pViewShell->CalcPagesForPrint( pViewShell->GetPageCount() ); - - pViewShell->SetPDFExportOption( sal_False ); - - // enable view again - pViewShell->EndAction(); - } - - const sal_Int32 nPageCount = pViewShell->GetPageCount(); - - // - // get number of pages to be rendered - // - const bool bPrintProspect = m_pPrintUIOptions->getBoolValue( "PrintProspect", false ); - if (bPrintProspect) - { - pDoc->CalculatePagePairsForProspectPrinting( *pViewShell->GetLayout(), *m_pRenderData, *m_pPrintUIOptions, nPageCount ); - nRet = m_pRenderData->GetPagePairsForProspectPrinting().size(); - } - else - { - const sal_Int16 nPostItMode = (sal_Int16) m_pPrintUIOptions->getIntValue( "PrintAnnotationMode", 0 ); - if (nPostItMode != POSTITS_NONE) - { - OutputDevice *pOutDev = lcl_GetOutputDevice( *m_pPrintUIOptions ); - m_pRenderData->CreatePostItData( pDoc, pViewShell->GetViewOptions(), pOutDev ); - } - - // get set of valid document pages (according to the current settings) - // and their start frames - pDoc->CalculatePagesForPrinting( *pViewShell->GetLayout(), *m_pRenderData, *m_pPrintUIOptions, bIsPDFExport, nPageCount ); - - if (nPostItMode != POSTITS_NONE) - { - pDoc->UpdatePagesForPrintingWithPostItData( *m_pRenderData, - *m_pPrintUIOptions, bIsPDFExport, nPageCount ); - } - - nRet = m_pRenderData->GetPagesToPrint().size(); - } - } - OSL_ENSURE( nRet >= 0, "negative number of pages???" ); - - return nRet; -} - -uno::Sequence< beans::PropertyValue > SAL_CALL SwXTextDocument::getRenderer( - sal_Int32 nRenderer, - const uno::Any& rSelection, - const uno::Sequence< beans::PropertyValue >& rxOptions ) - throw (IllegalArgumentException, RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - - const bool bIsPDFExport = !lcl_SeqHasProperty( rxOptions, "IsPrinter" ); - bool bIsSwSrcView = false; - SfxViewShell *pView = GetRenderView( bIsSwSrcView, rxOptions, bIsPDFExport ); - - // m_pRenderData should NOT be created here! - // That should only be done in getRendererCount. If this function is called before - // getRendererCount was called then the caller will probably just retrieve the extra UI options - // and is not interested in getting valid information about the other data that would - // otherwise be provided here! -// if( ! m_pRenderData ) -// m_pRenderData = new SwRenderData; - if (!m_pPrintUIOptions) - m_pPrintUIOptions = lcl_GetPrintUIOptions( pDocShell, pView ); - m_pPrintUIOptions->processProperties( rxOptions ); - const bool bPrintProspect = m_pPrintUIOptions->getBoolValue( "PrintProspect", false ); - const bool bIsSkipEmptyPages = !m_pPrintUIOptions->IsPrintEmptyPages( bIsPDFExport ); - const bool bPrintPaperFromSetup = m_pPrintUIOptions->getBoolValue( "PrintPaperFromSetup", false ); - - SwDoc *pDoc = GetRenderDoc( pView, rSelection, bIsPDFExport ); - OSL_ENSURE( pDoc && pView, "doc or view shell missing!" ); - if (!pDoc || !pView) - return uno::Sequence< beans::PropertyValue >(); - - // due to #110067# (document page count changes sometimes during - // PDF export/printing) we can not check for the upper bound properly. - // Thus instead of throwing the exception we silently return. - if (0 > nRenderer) - throw IllegalArgumentException(); - - // TODO/mba: we really need a generic way to get the ViewShell! - ViewShell* pVwSh = 0; - SwView* pSwView = PTR_CAST(SwView, pView); - if ( pSwView ) - pVwSh = pSwView->GetWrtShellPtr(); - else - pVwSh = ((SwPagePreView*)pView)->GetViewShell(); - - sal_Int32 nMaxRenderer = 0; - if (!bIsSwSrcView && m_pRenderData) - { - OSL_ENSURE( m_pRenderData, "m_pRenderData missing!!" ); - nMaxRenderer = bPrintProspect? - m_pRenderData->GetPagePairsForProspectPrinting().size() - 1 : - m_pRenderData->GetPagesToPrint().size() - 1; - } - // since SwSrcView::PrintSource is a poor implementation to get the number of pages to print - // we obmit checking of the upper bound in this case. - if (!bIsSwSrcView && m_pRenderData && nRenderer > nMaxRenderer) - return uno::Sequence< beans::PropertyValue >(); - - uno::Sequence< beans::PropertyValue > aRenderer; - if (m_pRenderData) - { - // #i114210# - // determine the correct page number from the renderer index - // --> OD 2010-10-01 #i114875 - // consider brochure print - const sal_uInt16 nPage = bPrintProspect - ? nRenderer + 1 - : m_pRenderData->GetPagesToPrint()[ nRenderer ]; - - // get paper tray to use ... - sal_Int32 nPrinterPaperTray = -1; - if (! bPrintPaperFromSetup) - { - // ... from individual page style (see the page tab in Format/Page dialog) - const std::map< sal_Int32, sal_Int32 > &rPaperTrays = m_pRenderData->GetPrinterPaperTrays(); - std::map< sal_Int32, sal_Int32 >::const_iterator aIt( rPaperTrays.find( nPage ) ); - if (aIt != rPaperTrays.end()) - nPrinterPaperTray = aIt->second; - } - - awt::Size aPageSize; - awt::Size aPreferredPageSize; - Size aTmpSize; - if (bIsSwSrcView || bPrintProspect) - { - // for printing of HTML source code and prospect printing we should use - // the printers paper size since - // a) HTML source view has no page size - // b) prospect printing has a different page size from the documents page - // since two document pages will get rendered on one printer page - - // since PageIncludesNonprintableArea will be set to true we can return the - // printers paper size here. - // Sometimes 'getRenderer' is only called to get "ExtraPrintUIOptions", in this - // case we won't get an OutputDevice here, but then the caller also has no need - // for the correct PageSisze right now... - Printer *pPrinter = dynamic_cast< Printer * >(lcl_GetOutputDevice( *m_pPrintUIOptions )); - if (pPrinter) - { - // HTML source view and prospect adapt to the printer's paper size - aTmpSize = pPrinter->GetPaperSize(); - aTmpSize = pPrinter->LogicToLogic( aTmpSize, - pPrinter->GetMapMode(), MapMode( MAP_100TH_MM )); - aPageSize = awt::Size( aTmpSize.Width(), aTmpSize.Height() ); - #if 0 - // #i115048# it seems users didn't like getting double the formatted page size - // revert to "old" behavior scaling to the current paper size of the printer - if (bPrintProspect) - { - // we just state what output size we would need - // which may cause vcl to set that page size on the printer - // (if available and not overriden by the user) - aTmpSize = pVwSh->GetPageSize( nPage, bIsSkipEmptyPages ); - aPreferredPageSize = awt::Size ( TWIP_TO_MM100( 2 * aTmpSize.Width() ), - TWIP_TO_MM100( aTmpSize.Height() )); - } - #else - if( bPrintProspect ) - { - // just switch to an appropriate portrait/landscape format - // FIXME: brochure printing with landscape pages puts the - // pages next to each other, so landscape is currently always - // the better choice - if( aPageSize.Width < aPageSize.Height ) - { - aPreferredPageSize.Width = aPageSize.Height; - aPreferredPageSize.Height = aPageSize.Width; - } - } - #endif - } - } - else - { - aTmpSize = pVwSh->GetPageSize( nPage, bIsSkipEmptyPages ); - aPageSize = awt::Size ( TWIP_TO_MM100( aTmpSize.Width() ), - TWIP_TO_MM100( aTmpSize.Height() )); - } - - sal_Int32 nLen = 2; - aRenderer.realloc(2); - aRenderer[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) ); - aRenderer[0].Value <<= aPageSize; - aRenderer[1].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "PageIncludesNonprintableArea" ) ); - aRenderer[1].Value <<= sal_True; - if (aPreferredPageSize.Width && aPreferredPageSize.Height) - { - ++nLen; - aRenderer.realloc( nLen ); - aRenderer[ nLen - 1 ].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "PreferredPageSize" ) ); - aRenderer[ nLen - 1 ].Value <<= aPreferredPageSize; - } - if (nPrinterPaperTray >= 0) - { - ++nLen; - aRenderer.realloc( nLen ); - aRenderer[ nLen - 1 ].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "PrinterPaperTray" ) ); - aRenderer[ nLen - 1 ].Value <<= nPrinterPaperTray; - } - } - - m_pPrintUIOptions->appendPrintUIOptions( aRenderer ); - - return aRenderer; -} - -SfxViewShell * SwXTextDocument::GuessViewShell( - /* out */ bool &rbIsSwSrcView, - const uno::Reference< css::frame::XController > xController ) -{ - // #130810# SfxViewShell::Current() / SfxViewShell::GetObjectShell() - // must not be used (see comment from MBA) - // - SfxViewShell *pView = 0; - SwView *pSwView = 0; - SwPagePreView *pSwPagePreView = 0; - SwSrcView *pSwSrcView = 0; - SfxViewFrame *pFrame = SfxViewFrame::GetFirst( pDocShell, sal_False ); - - // look for the view shell with the same controller in use, - // otherwise look for a suitable view, preferably a SwView, - // if that one is not found use a SwPagePreView if found. - while (pFrame) - { - pView = pFrame->GetViewShell(); - pSwView = dynamic_cast< SwView * >(pView); - pSwSrcView = dynamic_cast< SwSrcView * >(pView); - if (!pSwPagePreView) - pSwPagePreView = dynamic_cast< SwPagePreView * >(pView); - if (xController.is()) - { - if (pView && pView->GetController() == xController) - break; - } - else if (pSwView || pSwSrcView) - break; - pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell, sal_False ); - } - - OSL_ENSURE( pSwView || pSwPagePreView || pSwSrcView, "failed to get view shell" ); - if (pView) - rbIsSwSrcView = pSwSrcView != 0; - return pView; -} - -void SAL_CALL SwXTextDocument::render( - sal_Int32 nRenderer, - const uno::Any& rSelection, - const uno::Sequence< beans::PropertyValue >& rxOptions ) - throw (IllegalArgumentException, RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - - // due to #110067# (document page count changes sometimes during - // PDF export/printing) we can not check for the upper bound properly. - // Thus instead of throwing the exception we silently return. - if (0 > nRenderer) - throw IllegalArgumentException(); - - const bool bIsPDFExport = !lcl_SeqHasProperty( rxOptions, "IsPrinter" ); - bool bIsSwSrcView = false; - SfxViewShell *pView = GetRenderView( bIsSwSrcView, rxOptions, bIsPDFExport ); - - OSL_ENSURE( m_pRenderData, "data should have been created already in getRendererCount..." ); - OSL_ENSURE( m_pPrintUIOptions, "data should have been created already in getRendererCount..." ); - if (!bIsSwSrcView && !m_pRenderData) - m_pRenderData = new SwRenderData; - if (!m_pPrintUIOptions) - m_pPrintUIOptions = lcl_GetPrintUIOptions( pDocShell, pView ); - m_pPrintUIOptions->processProperties( rxOptions ); - const bool bPrintProspect = m_pPrintUIOptions->getBoolValue( "PrintProspect", false ); - const bool bLastPage = m_pPrintUIOptions->getBoolValue( "IsLastPage", sal_False ); - - SwDoc *pDoc = GetRenderDoc( pView, rSelection, bIsPDFExport ); - OSL_ENSURE( pDoc && pView, "doc or view shell missing!" ); - if (pDoc && pView) - { - sal_Int32 nMaxRenderer = 0; - if (!bIsSwSrcView) - { - OSL_ENSURE( m_pRenderData, "m_pRenderData missing!!" ); - nMaxRenderer = bPrintProspect? - m_pRenderData->GetPagePairsForProspectPrinting().size() - 1 : - m_pRenderData->GetPagesToPrint().size() - 1; - } - // since SwSrcView::PrintSource is a poor implementation to get the number of pages to print - // we obmit checking of the upper bound in this case. - if (bIsSwSrcView || nRenderer <= nMaxRenderer) - { - if (bIsSwSrcView) - { - SwSrcView *pSwSrcView = dynamic_cast< SwSrcView * >(pView); - OutputDevice *pOutDev = lcl_GetOutputDevice( *m_pPrintUIOptions ); - pSwSrcView->PrintSource( pOutDev, nRenderer + 1, false ); - } - else - { - // the view shell should be SwView for documents PDF export - // or SwPagePreView for PDF export of the page preview - //!! (check for SwView first as in GuessViewShell) !! - OSL_ENSURE( pView, "!! view missing !!" ); - const TypeId aSwViewTypeId = TYPE(SwView); - ViewShell* pVwSh = 0; - if (pView) - { - // TODO/mba: we really need a generic way to get the ViewShell! - SwView* pSwView = PTR_CAST(SwView, pView); - if ( pSwView ) - pVwSh = pSwView->GetWrtShellPtr(); - else - pVwSh = ((SwPagePreView*)pView)->GetViewShell(); - } - - // get output device to use - OutputDevice * pOut = lcl_GetOutputDevice( *m_pPrintUIOptions ); - - if(pVwSh && pOut && m_pRenderData->HasSwPrtOptions()) - { - const rtl::OUString aPageRange = m_pPrintUIOptions->getStringValue( "PageRange", OUString() ); - const bool bFirstPage = m_pPrintUIOptions->getBoolValue( "IsFirstPage", sal_False ); - bool bIsSkipEmptyPages = !m_pPrintUIOptions->IsPrintEmptyPages( bIsPDFExport ); - - OSL_ENSURE(( pView->IsA(aSwViewTypeId) && m_pRenderData->IsViewOptionAdjust()) - || (!pView->IsA(aSwViewTypeId) && !m_pRenderData->IsViewOptionAdjust()), - "SwView / SwViewOptionAdjust_Impl availability mismatch" ); - - // since printing now also use the API for PDF export this option - // should be set for printing as well ... - pVwSh->SetPDFExportOption( sal_True ); - - // #i12836# enhanced pdf export - // - // First, we have to export hyperlinks, notes, and outline to pdf. - // During this process, additional information required for tagging - // the pdf file are collected, which are evaulated during painting. - // - SwWrtShell* pWrtShell = pView->IsA(aSwViewTypeId) ? - ((SwView*)pView)->GetWrtShellPtr() : - 0; - - if (bIsPDFExport && bFirstPage && pWrtShell) - { - SwEnhancedPDFExportHelper aHelper( *pWrtShell, *pOut, aPageRange, bIsSkipEmptyPages, sal_False ); - } - - SwPrintData const& rSwPrtOptions = - *m_pRenderData->GetSwPrtOptions(); - if (bPrintProspect) - pVwSh->PrintProspect( pOut, rSwPrtOptions, nRenderer ); - else // normal printing and PDF export - pVwSh->PrintOrPDFExport( pOut, rSwPrtOptions, nRenderer ); - - // #i35176# - // - // After printing the last page, we take care for the links coming - // from the EditEngine. The links are generated during the painting - // process, but the destinations are still missing. - // - if (bIsPDFExport && bLastPage && pWrtShell) - { - SwEnhancedPDFExportHelper aHelper( *pWrtShell, *pOut, aPageRange, bIsSkipEmptyPages, sal_True ); - } - - pVwSh->SetPDFExportOption( sal_False ); - - // last page to be rendered? (not necessarily the last page of the document) - // -> do clean-up of data - if (bLastPage) - { - // #i96167# haggai: delete ViewOptionsAdjust here because it makes use - // of the shell, which might get destroyed in lcl_DisposeView! - if (m_pRenderData && m_pRenderData->IsViewOptionAdjust()) - m_pRenderData->ViewOptionAdjustStop(); - - if (m_pRenderData && m_pRenderData->HasPostItData()) - m_pRenderData->DeletePostItData(); - if (m_pHiddenViewFrame) - { - lcl_DisposeView( m_pHiddenViewFrame, pDocShell ); - m_pHiddenViewFrame = 0; - - // prevent crash described in #i108805 - SwDocShell *pRenderDocShell = pDoc->GetDocShell(); - SfxItemSet *pSet = pRenderDocShell->GetMedium()->GetItemSet(); - pSet->Put( SfxBoolItem( SID_HIDDEN, sal_False ) ); - - } - } - } - } - } - } - if( bLastPage ) - { - delete m_pRenderData; m_pRenderData = NULL; - delete m_pPrintUIOptions; m_pPrintUIOptions = NULL; - } -} - -// xforms::XFormsSupplier -Reference<XNameContainer> SAL_CALL SwXTextDocument::getXForms() - throw( RuntimeException ) -{ - if ( !pDocShell ) - throw DisposedException( ::rtl::OUString(), static_cast< XTextDocument* >( this ) ); - SwDoc* pDoc = pDocShell->GetDoc(); - return pDoc->getXForms(); -} - -uno::Reference< text::XFlatParagraphIterator > SAL_CALL SwXTextDocument::getFlatParagraphIterator(::sal_Int32 nTextMarkupType, sal_Bool bAutomatic) - throw ( uno::RuntimeException ) -{ - return new SwXFlatParagraphIterator( *pDocShell->GetDoc(), nTextMarkupType, bAutomatic ); -} - -uno::Reference< util::XCloneable > SwXTextDocument::createClone( ) throw (uno::RuntimeException) -{ - SolarMutexGuard aGuard; - if(!IsValid()) - throw RuntimeException(); - - // create a new document - hidden - copy the storage and return it - // SfxObjectShellRef is used here, since the model should control object lifetime after creation - // and thus SfxObjectShellLock is not allowed here - // the model holds reference to the shell, so the shell will not destructed at the end of method - SfxObjectShellRef pShell = pDocShell->GetDoc()->CreateCopy(false); - uno::Reference< frame::XModel > xNewModel = pShell->GetModel(); - uno::Reference< embed::XStorage > xNewStorage = ::comphelper::OStorageHelper::GetTemporaryStorage( ); - uno::Sequence< beans::PropertyValue > aTempMediaDescriptor; - storeToStorage( xNewStorage, aTempMediaDescriptor ); - uno::Reference< document::XStorageBasedDocument > xStorageDoc( xNewModel, uno::UNO_QUERY ); - xStorageDoc->loadFromStorage( xNewStorage, aTempMediaDescriptor ); - return uno::Reference< util::XCloneable >( xNewModel, UNO_QUERY ); -} - -void * SAL_CALL SwXTextDocument::operator new( size_t t) throw() -{ - return SwXTextDocumentBaseClass::operator new(t); -} - -void SAL_CALL SwXTextDocument::operator delete( void * p) throw() -{ - SwXTextDocumentBaseClass::operator delete(p); -} - -/*--------------------------------------------------- -retrieve languages already used in current document ------------------------------------------------------*/ -uno::Sequence< lang::Locale > SAL_CALL SwXTextDocument::getDocumentLanguages( - ::sal_Int16 nScriptTypes, - ::sal_Int16 nMaxCount ) - throw (lang::IllegalArgumentException, uno::RuntimeException) -{ - SolarMutexGuard aGuard; - - - // possible canonical values for nScriptTypes - // any bit wise combination is allowed - const sal_Int16 nLatin = 0x001; - const sal_Int16 nAsian = 0x002; - const sal_Int16 nComplex = 0x004; - - // script types for which to get the languages - const bool bLatin = 0 != (nScriptTypes & nLatin); - const bool bAsian = 0 != (nScriptTypes & nAsian); - const bool bComplex = 0 != (nScriptTypes & nComplex); - - if (nScriptTypes < nLatin || nScriptTypes > (nLatin | nAsian | nComplex)) - throw IllegalArgumentException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nScriptTypes ranges from 1 to 7!")), Reference< XInterface >(), 1); - if (!pDocShell) - throw DisposedException(); - SwDoc* pDoc = pDocShell->GetDoc(); - - // avoid duplicate values - std::set< LanguageType > aAllLangs; - - //USER STYLES - - const SwCharFmts *pFmts = pDoc->GetCharFmts(); - for(sal_uInt16 i = 0; i < pFmts->Count(); ++i) - { - const SwAttrSet &rAttrSet = (*pFmts)[i]->GetAttrSet(); - LanguageType nLang = LANGUAGE_DONTKNOW; - if (bLatin) - { - nLang = rAttrSet.GetLanguage( sal_False ).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bAsian) - { - nLang = rAttrSet.GetCJKLanguage( sal_False ).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bComplex) - { - nLang = rAttrSet.GetCTLLanguage( sal_False ).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - } - - const SwTxtFmtColls *pColls = pDoc->GetTxtFmtColls(); - for (sal_uInt16 i = 0; i < pColls->Count(); ++i) - { - const SwAttrSet &rAttrSet = (*pColls)[i]->GetAttrSet(); - LanguageType nLang = LANGUAGE_DONTKNOW;; - if (bLatin) - { - nLang = rAttrSet.GetLanguage( sal_False ).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bAsian) - { - nLang = rAttrSet.GetCJKLanguage( sal_False ).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bComplex) - { - nLang = rAttrSet.GetCTLLanguage( sal_False ).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - } - - //AUTO STYLES - const IStyleAccess::SwAutoStyleFamily aFam[2] = - { - IStyleAccess::AUTO_STYLE_CHAR, - IStyleAccess::AUTO_STYLE_PARA - }; - for (sal_uInt16 i = 0; i < 2; ++i) - { - std::vector< SfxItemSet_Pointer_t > rStyles; - pDoc->GetIStyleAccess().getAllStyles(rStyles, aFam[i]); - while (!rStyles.empty()) - { - SfxItemSet_Pointer_t pStyle = rStyles.back(); - rStyles.pop_back(); - const SfxItemSet *pSet = dynamic_cast< const SfxItemSet * >(pStyle.get()); - - LanguageType nLang = LANGUAGE_DONTKNOW; - if (bLatin) - { - nLang = dynamic_cast< const SvxLanguageItem & >(pSet->Get( RES_CHRATR_LANGUAGE, sal_False )).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bAsian) - { - nLang = dynamic_cast< const SvxLanguageItem & >(pSet->Get( RES_CHRATR_CJK_LANGUAGE, sal_False )).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bComplex) - { - nLang = dynamic_cast< const SvxLanguageItem & >(pSet->Get( RES_CHRATR_CTL_LANGUAGE, sal_False )).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - } - } - - //TODO/mba: it's a strange concept that a view is needed to retrieve core data - SwWrtShell *pWrtSh = pDocShell->GetWrtShell(); - SdrView *pSdrView = pWrtSh->GetDrawView(); - - if( pSdrView ) - { - SdrOutliner* pOutliner = pSdrView->GetTextEditOutliner(); - if(pOutliner) - { - EditEngine& rEditEng = (EditEngine&)pOutliner->GetEditEngine(); - sal_uLong nParCount = pOutliner->GetParagraphCount(); - for (sal_uLong nPar=0; nPar<nParCount; nPar++) - { - //every paragraph - SvUShorts aPortions; - rEditEng.GetPortions( (sal_uInt16)nPar, aPortions ); - - for ( sal_uInt16 nPos = aPortions.Count(); nPos; ) - { - //every position - --nPos; - sal_uInt16 nEnd = aPortions.GetObject( nPos ); - sal_uInt16 nStart = nPos ? aPortions.GetObject( nPos - 1 ) : 0; - ESelection aSelection( (sal_uInt16)nPar, nStart, (sal_uInt16)nPar, nEnd ); - SfxItemSet aAttr = rEditEng.GetAttribs( aSelection ); - - LanguageType nLang = LANGUAGE_DONTKNOW; - if (bLatin) - { - nLang = dynamic_cast< const SvxLanguageItem & >(aAttr.Get( EE_CHAR_LANGUAGE, sal_False )).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bAsian) - { - nLang = dynamic_cast< const SvxLanguageItem & >(aAttr.Get( EE_CHAR_LANGUAGE_CJK, sal_False )).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - if (bComplex) - { - nLang = dynamic_cast< const SvxLanguageItem & >(aAttr.Get( EE_CHAR_LANGUAGE_CTL, sal_False )).GetLanguage(); - if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM) - aAllLangs.insert( nLang ); - } - } - } - } - } - // less than nMaxCount languages - if (nMaxCount > static_cast< sal_Int16 >( aAllLangs.size() )) - nMaxCount = static_cast< sal_Int16 >( aAllLangs.size() ); - - // build return value - uno::Sequence< lang::Locale > aLanguages( nMaxCount ); - lang::Locale* pLanguage = aLanguages.getArray(); - if (nMaxCount > 0) - { - sal_Int32 nCount = 0; - const SvtLanguageTable aLangTab; - for (std::set< LanguageType >::const_iterator it = aAllLangs.begin(); it != aAllLangs.end(); ++it) - { - if (nCount >= nMaxCount) - break; - if (LANGUAGE_NONE != *it) - { - MsLangId::convertLanguageToLocale( *it, pLanguage[nCount] ); - pLanguage[nCount].Language = aLangTab.GetString( *it ); - nCount += 1; - } - } - } - - return aLanguages; -} - -SwXLinkTargetSupplier::SwXLinkTargetSupplier(SwXTextDocument& rxDoc) : - pxDoc(&rxDoc) -{ - sTables = String(SW_RES(STR_CONTENT_TYPE_TABLE)); - sFrames = String(SW_RES(STR_CONTENT_TYPE_FRAME)); - sGraphics = String(SW_RES(STR_CONTENT_TYPE_GRAPHIC)); - sOLEs = String(SW_RES(STR_CONTENT_TYPE_OLE)); - sSections = String(SW_RES(STR_CONTENT_TYPE_REGION)); - sOutlines = String(SW_RES(STR_CONTENT_TYPE_OUTLINE)); - sBookmarks = String(SW_RES(STR_CONTENT_TYPE_BOOKMARK)); -} - -SwXLinkTargetSupplier::~SwXLinkTargetSupplier() -{ -} - -Any SwXLinkTargetSupplier::getByName(const OUString& rName) - throw( NoSuchElementException, WrappedTargetException, RuntimeException ) -{ - Any aRet; - if(!pxDoc) - throw RuntimeException(); - String sToCompare(rName); - String sSuffix('|'); - if(sToCompare == sTables) - { - sSuffix += UniString::CreateFromAscii(pMarkToTable); - - Reference< XNameAccess > xTbls = new SwXLinkNameAccessWrapper( - pxDoc->getTextTables(), sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xTbls, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference<XPropertySet>*)0)); - } - else if(sToCompare == sFrames) - { - sSuffix += UniString::CreateFromAscii(pMarkToFrame); - Reference< XNameAccess > xTbls = new SwXLinkNameAccessWrapper( - pxDoc->getTextFrames(), sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xTbls, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference< XPropertySet>*)0)); - } - else if(sToCompare == sSections) - { - sSuffix += UniString::CreateFromAscii(pMarkToRegion); - Reference< XNameAccess > xTbls = new SwXLinkNameAccessWrapper( - pxDoc->getTextSections(), sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xTbls, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference< XPropertySet>*)0)); - } - else if(sToCompare == sGraphics) - { - sSuffix += UniString::CreateFromAscii(pMarkToGraphic); - Reference< XNameAccess > xTbls = new SwXLinkNameAccessWrapper( - pxDoc->getGraphicObjects(), sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xTbls, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference< XPropertySet>*)0)); - } - else if(sToCompare == sOLEs) - { - sSuffix += UniString::CreateFromAscii(pMarkToOLE); - Reference< XNameAccess > xTbls = new SwXLinkNameAccessWrapper( - pxDoc->getEmbeddedObjects(), sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xTbls, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference< XPropertySet>*)0)); - } - else if(sToCompare == sOutlines) - { - sSuffix += UniString::CreateFromAscii(pMarkToOutline); - Reference< XNameAccess > xTbls = new SwXLinkNameAccessWrapper( - *pxDoc, sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xTbls, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference< XPropertySet>*)0)); - } - else if(sToCompare == sBookmarks) - { - sSuffix.Erase(); - Reference< XNameAccess > xBkms = new SwXLinkNameAccessWrapper( - pxDoc->getBookmarks(), sToCompare, sSuffix ); - Reference< XPropertySet > xRet(xBkms, UNO_QUERY); - aRet.setValue(&xRet, ::getCppuType((Reference< XPropertySet>*)0)); - } - else - throw NoSuchElementException(); - return aRet; -} - -Sequence< OUString > SwXLinkTargetSupplier::getElementNames(void) - throw( RuntimeException ) -{ - Sequence< OUString > aRet(7); - OUString* pNames = aRet.getArray(); - pNames[0] = sTables; - pNames[1] = sFrames ; - pNames[2] = sGraphics; - pNames[3] = sOLEs ; - pNames[4] = sSections; - pNames[5] = sOutlines; - pNames[6] = sBookmarks; - return aRet; -} - -sal_Bool SwXLinkTargetSupplier::hasByName(const OUString& rName) - throw( RuntimeException ) -{ - String sToCompare(rName); - if( sToCompare == sTables || - sToCompare == sFrames || - sToCompare == sGraphics|| - sToCompare == sOLEs || - sToCompare == sSections || - sToCompare == sOutlines || - sToCompare == sBookmarks ) - return sal_True; - return sal_False; -} - -uno::Type SwXLinkTargetSupplier::getElementType(void) - throw( RuntimeException ) -{ - return ::getCppuType((Reference< XPropertySet>*)0); - -} - -sal_Bool SwXLinkTargetSupplier::hasElements(void) throw( RuntimeException ) -{ - return 0 != pxDoc; -} - -OUString SwXLinkTargetSupplier::getImplementationName(void) throw( RuntimeException ) -{ - return C2U("SwXLinkTargetSupplier"); -} - -sal_Bool SwXLinkTargetSupplier::supportsService(const OUString& rServiceName) - throw( RuntimeException ) -{ - return (rServiceName == C2U("com.sun.star.document.LinkTargets")); -} - -Sequence< OUString > SwXLinkTargetSupplier::getSupportedServiceNames(void) - throw( RuntimeException ) -{ - Sequence< OUString > aRet(1); - OUString* pNames = aRet.getArray(); - pNames[0] = C2U("com.sun.star.document.LinkTargets"); - return aRet; -} - -SwXLinkNameAccessWrapper::SwXLinkNameAccessWrapper( - Reference< XNameAccess > xAccess, const String& rLinkDisplayName, String sSuffix ) : - xRealAccess(xAccess), - pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_LINK_TARGET)), - sLinkSuffix(sSuffix), - sLinkDisplayName(rLinkDisplayName), - pxDoc(0) -{ -} - -SwXLinkNameAccessWrapper::SwXLinkNameAccessWrapper(SwXTextDocument& rxDoc, - const String& rLinkDisplayName, String sSuffix) : - pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_LINK_TARGET)), - sLinkSuffix(sSuffix), - sLinkDisplayName(rLinkDisplayName), - xDoc(&rxDoc), - pxDoc(&rxDoc) -{ -} - -SwXLinkNameAccessWrapper::~SwXLinkNameAccessWrapper() -{ -} - -Any SwXLinkNameAccessWrapper::getByName(const OUString& rName) - throw( NoSuchElementException, WrappedTargetException, RuntimeException ) -{ - Any aRet; - sal_Bool bFound = sal_False; - //cut link extension and call the real NameAccess - String sParam = rName; - String sSuffix(sLinkSuffix); - if(sParam.Len() > sSuffix.Len() ) - { - String sCmp = sParam.Copy(sParam.Len() - sSuffix.Len(), - sSuffix.Len()); - if(sCmp == sSuffix) - { - if(pxDoc) - { - sParam = sParam.Copy(0, sParam.Len() - sSuffix.Len()); - if(!pxDoc->GetDocShell()) - throw RuntimeException(); - SwDoc* pDoc = pxDoc->GetDocShell()->GetDoc(); - sal_uInt16 nOutlineCount = pDoc->GetNodes().GetOutLineNds().Count(); - - for (sal_uInt16 i = 0; i < nOutlineCount && !bFound; ++i) - { - const SwOutlineNodes& rOutlineNodes = pDoc->GetNodes().GetOutLineNds(); - const SwNumRule* pOutlRule = pDoc->GetOutlineNumRule(); - if(sParam == - lcl_CreateOutlineString(i, rOutlineNodes, pOutlRule)) - { - Reference< XPropertySet > xOutline = new SwXOutlineTarget(sParam); - aRet.setValue(&xOutline, ::getCppuType((Reference<XPropertySet>*)0)); - bFound = sal_True; - } - } - } - else - { - aRet = xRealAccess->getByName(sParam.Copy(0, sParam.Len() - sSuffix.Len())); - Reference< XInterface > xInt; - if(!(aRet >>= xInt)) - throw RuntimeException(); - Reference< XPropertySet > xProp(xInt, UNO_QUERY); - aRet <<= xProp; - bFound = sal_True; - } - } - } - if(!bFound) - throw NoSuchElementException(); - return aRet; -} - -Sequence< OUString > SwXLinkNameAccessWrapper::getElementNames(void) - throw( RuntimeException ) -{ - Sequence< OUString > aRet; - if(pxDoc) - { - if(!pxDoc->GetDocShell()) - throw RuntimeException(); - - SwDoc* pDoc = pxDoc->GetDocShell()->GetDoc(); - const SwOutlineNodes& rOutlineNodes = pDoc->GetNodes().GetOutLineNds(); - sal_uInt16 nOutlineCount = rOutlineNodes.Count(); - aRet.realloc(nOutlineCount); - OUString* pResArr = aRet.getArray(); - String sSuffix('|'); - sSuffix += UniString::CreateFromAscii(pMarkToOutline); - const SwNumRule* pOutlRule = pDoc->GetOutlineNumRule(); - for (sal_uInt16 i = 0; i < nOutlineCount; ++i) - { - String sEntry = lcl_CreateOutlineString(i, rOutlineNodes, pOutlRule); - sEntry += sSuffix; - pResArr[i] = sEntry; - } - } - else - { - Sequence< OUString > aOrg = xRealAccess->getElementNames(); - const OUString* pOrgArr = aOrg.getConstArray(); - aRet.realloc(aOrg.getLength()); - OUString* pResArr = aRet.getArray(); - for(long i = 0; i < aOrg.getLength(); i++) - { - pResArr[i] = pOrgArr[i] + sLinkSuffix; - } - } - return aRet; -} - -sal_Bool SwXLinkNameAccessWrapper::hasByName(const OUString& rName) - throw( RuntimeException ) -{ - sal_Bool bRet = sal_False; - String sParam(rName); - if(sParam.Len() > sLinkSuffix.Len() ) - { - String sCmp = sParam.Copy(sParam.Len() - sLinkSuffix.Len(), - sLinkSuffix.Len()); - if(sCmp == sLinkSuffix) - { - sParam = sParam.Copy(0, sParam.Len() - sLinkSuffix.Len()); - if(pxDoc) - { - if(!pxDoc->GetDocShell()) - throw RuntimeException(); - SwDoc* pDoc = pxDoc->GetDocShell()->GetDoc(); - sal_uInt16 nOutlineCount = pDoc->GetNodes().GetOutLineNds().Count(); - - for (sal_uInt16 i = 0; i < nOutlineCount && !bRet; ++i) - { - const SwOutlineNodes& rOutlineNodes = pDoc->GetNodes().GetOutLineNds(); - const SwNumRule* pOutlRule = pDoc->GetOutlineNumRule(); - if(sParam == - lcl_CreateOutlineString(i, rOutlineNodes, pOutlRule)) - { - bRet = sal_True; - } - } - } - else - { - bRet = xRealAccess->hasByName(sParam); - } - } - } - return bRet; -} - -uno::Type SwXLinkNameAccessWrapper::getElementType(void) - throw( RuntimeException ) -{ - return ::getCppuType((Reference<XPropertySet>*)0); -} - -sal_Bool SwXLinkNameAccessWrapper::hasElements(void) throw( RuntimeException ) -{ - sal_Bool bRet = sal_False; - if(pxDoc) - { - OSL_FAIL("not implemented"); - } - else - { - bRet = xRealAccess->hasElements(); - } - return bRet; -} - -Reference< XPropertySetInfo > SwXLinkNameAccessWrapper::getPropertySetInfo(void) - throw( RuntimeException ) -{ - static Reference< XPropertySetInfo > xRet = pPropSet->getPropertySetInfo(); - return xRet; -} - -void SwXLinkNameAccessWrapper::setPropertyValue( - const OUString& , const Any& ) - throw( UnknownPropertyException, - PropertyVetoException, - IllegalArgumentException, - WrappedTargetException, - RuntimeException) -{ - throw UnknownPropertyException(); -} - -Any lcl_GetDisplayBitmap(String sLinkSuffix) -{ - Any aRet; - if(sLinkSuffix.Len()) - sLinkSuffix.Erase(0, 1); - sal_uInt16 nImgId = USHRT_MAX; - - if(COMPARE_EQUAL == sLinkSuffix.CompareToAscii(pMarkToOutline)) - nImgId = CONTENT_TYPE_OUTLINE; - else if(COMPARE_EQUAL == sLinkSuffix.CompareToAscii(pMarkToTable)) - nImgId = CONTENT_TYPE_TABLE; - else if(COMPARE_EQUAL == sLinkSuffix.CompareToAscii(pMarkToFrame)) - nImgId = CONTENT_TYPE_FRAME; - else if(COMPARE_EQUAL == sLinkSuffix.CompareToAscii(pMarkToGraphic)) - nImgId = CONTENT_TYPE_GRAPHIC; - else if(COMPARE_EQUAL == sLinkSuffix.CompareToAscii(pMarkToRegion)) - nImgId = CONTENT_TYPE_REGION; - else if(COMPARE_EQUAL == sLinkSuffix.CompareToAscii(pMarkToOLE)) - nImgId = CONTENT_TYPE_OLE; - else if(!sLinkSuffix.Len()) - nImgId = CONTENT_TYPE_BOOKMARK; - if(USHRT_MAX != nImgId) - { - nImgId += 20000; - ImageList aEntryImages( SW_RES(IMG_NAVI_ENTRYBMP) ); - const Image& rImage = aEntryImages.GetImage( nImgId ); - Bitmap aBitmap( rImage.GetBitmapEx().GetBitmap() ); - Reference<awt::XBitmap> xBmp = VCLUnoHelper::CreateBitmap( aBitmap ); - aRet.setValue( &xBmp, ::getCppuType((Reference<awt::XBitmap>*)0) ); - } - return aRet; -} - -Any SwXLinkNameAccessWrapper::getPropertyValue(const OUString& rPropertyName) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - Any aRet; - if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_LINK_DISPLAY_NAME))) - { - aRet <<= OUString(sLinkDisplayName); - } - else if( rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_LINK_DISPLAY_BITMAP))) - { - aRet = lcl_GetDisplayBitmap(sLinkSuffix); - } - else - throw UnknownPropertyException(); - return aRet; -} - -void SwXLinkNameAccessWrapper::addPropertyChangeListener( - const OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{} - -void SwXLinkNameAccessWrapper::removePropertyChangeListener( - const OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{} - -void SwXLinkNameAccessWrapper::addVetoableChangeListener( - const OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{} - -void SwXLinkNameAccessWrapper::removeVetoableChangeListener( - const OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{} - -Reference< XNameAccess > SwXLinkNameAccessWrapper::getLinks(void) - throw( RuntimeException ) -{ - return (SwXLinkNameAccessWrapper*)this; -} - -OUString SwXLinkNameAccessWrapper::getImplementationName(void) throw( RuntimeException ) -{ - return C2U("SwXLinkNameAccessWrapper"); -} - -sal_Bool SwXLinkNameAccessWrapper::supportsService(const OUString& rServiceName) - throw( RuntimeException ) -{ - return (rServiceName == C2U("com.sun.star.document.LinkTargets")); -} - -Sequence< OUString > SwXLinkNameAccessWrapper::getSupportedServiceNames(void) - throw( RuntimeException ) -{ - Sequence< OUString > aRet(1); - OUString* pNames = aRet.getArray(); - pNames[0] = C2U("com.sun.star.document.LinkTargets"); - return aRet; -} - -SwXOutlineTarget::SwXOutlineTarget(const String& rOutlineText) : - pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_LINK_TARGET)), - sOutlineText(rOutlineText) -{ -} - -SwXOutlineTarget::~SwXOutlineTarget() -{ -} - -Reference< XPropertySetInfo > SwXOutlineTarget::getPropertySetInfo(void) throw( RuntimeException ) -{ - static Reference< XPropertySetInfo > xRet = pPropSet->getPropertySetInfo(); - return xRet; -} - -void SwXOutlineTarget::setPropertyValue( - const OUString& /*PropertyName*/, const Any& /*aValue*/) - throw( UnknownPropertyException, PropertyVetoException, - IllegalArgumentException, WrappedTargetException, RuntimeException) -{ - throw UnknownPropertyException(); -} - -Any SwXOutlineTarget::getPropertyValue(const OUString& rPropertyName) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ - Any aRet; - if(rPropertyName.equalsAsciiL( SW_PROP_NAME(UNO_LINK_DISPLAY_NAME))) - aRet <<= OUString(sOutlineText); - else - throw UnknownPropertyException(); - return aRet; -} - -void SwXOutlineTarget::addPropertyChangeListener( - const OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ -} - -void SwXOutlineTarget::removePropertyChangeListener( - const OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ -} - -void SwXOutlineTarget::addVetoableChangeListener( - const OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ -} - -void SwXOutlineTarget::removeVetoableChangeListener( - const OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/) - throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) -{ -} - -OUString SwXOutlineTarget::getImplementationName(void) throw( RuntimeException ) -{ - return C2U("SwXOutlineTarget"); -} - -sal_Bool SwXOutlineTarget::supportsService(const OUString& ServiceName) throw( RuntimeException ) -{ - return C2U("com.sun.star.document.LinkTarget") == ServiceName; -} - -Sequence< OUString > SwXOutlineTarget::getSupportedServiceNames(void) throw( RuntimeException ) -{ - Sequence < OUString > aRet(1); - OUString* pArray = aRet.getArray(); - pArray[0] = C2U("com.sun.star.document.LinkTarget"); - - return aRet; -} - -SwXDocumentPropertyHelper::SwXDocumentPropertyHelper(SwDoc& rDoc) : -SvxUnoForbiddenCharsTable ( rDoc.getForbiddenCharacterTable() ) -,m_pDoc(&rDoc) -{ -} - -SwXDocumentPropertyHelper::~SwXDocumentPropertyHelper() -{ -} - -Reference<XInterface> SwXDocumentPropertyHelper::GetDrawTable(short nWhich) -{ - Reference<XInterface> xRet; - if(m_pDoc) - { - switch(nWhich) - { - // #i52858# - // assure that Draw model is created, if it doesn't exist. - case SW_CREATE_DASH_TABLE : - if(!xDashTable.is()) - xDashTable = SvxUnoDashTable_createInstance( m_pDoc->GetOrCreateDrawModel() ); - xRet = xDashTable; - break; - case SW_CREATE_GRADIENT_TABLE : - if(!xGradientTable.is()) - xGradientTable = SvxUnoGradientTable_createInstance( m_pDoc->GetOrCreateDrawModel() ); - xRet = xGradientTable; - break; - case SW_CREATE_HATCH_TABLE : - if(!xHatchTable.is()) - xHatchTable = SvxUnoHatchTable_createInstance( m_pDoc->GetOrCreateDrawModel() ); - xRet = xHatchTable; - break; - case SW_CREATE_BITMAP_TABLE : - if(!xBitmapTable.is()) - xBitmapTable = SvxUnoBitmapTable_createInstance( m_pDoc->GetOrCreateDrawModel() ); - xRet = xBitmapTable; - break; - case SW_CREATE_TRANSGRADIENT_TABLE: - if(!xTransGradientTable.is()) - xTransGradientTable = SvxUnoTransGradientTable_createInstance( m_pDoc->GetOrCreateDrawModel() ); - xRet = xTransGradientTable; - break; - case SW_CREATE_MARKER_TABLE : - if(!xMarkerTable.is()) - xMarkerTable = SvxUnoMarkerTable_createInstance( m_pDoc->GetOrCreateDrawModel() ); - xRet = xMarkerTable; - break; - case SW_CREATE_DRAW_DEFAULTS: - if(!xDrawDefaults.is()) - xDrawDefaults = (cppu::OWeakObject*)new SwSvxUnoDrawPool(m_pDoc); - xRet = xDrawDefaults; - break; -#if OSL_DEBUG_LEVEL > 1 - default: OSL_FAIL("which table?"); -#endif - } - } - return xRet; -} - -void SwXDocumentPropertyHelper::Invalidate() -{ - xDashTable = 0; - xGradientTable = 0; - xHatchTable = 0; - xBitmapTable = 0; - xTransGradientTable = 0; - xMarkerTable = 0; - xDrawDefaults = 0; - m_pDoc = 0; - SvxUnoForbiddenCharsTable::mxForbiddenChars.clear(); -} - -void SwXDocumentPropertyHelper::onChange() -{ - if(m_pDoc) - m_pDoc->SetModified(); -} - -SwViewOptionAdjust_Impl::SwViewOptionAdjust_Impl( ViewShell& rSh, const SwViewOption &rViewOptions ) : - m_rShell( rSh ), - m_aOldViewOptions( rViewOptions ) -{ -} - -SwViewOptionAdjust_Impl::~SwViewOptionAdjust_Impl() -{ - m_rShell.ApplyViewOptions( m_aOldViewOptions ); -} - -void -SwViewOptionAdjust_Impl::AdjustViewOptions(SwPrintData const*const pPrtOptions) -{ - // to avoid unnecessary reformatting the view options related to the content - // below should only change if necessary, that is if respective content is present - const bool bContainsHiddenChars = m_rShell.GetDoc()->ContainsHiddenChars(); - const SwFieldType* pFldType = m_rShell.GetDoc()->GetSysFldType( RES_HIDDENTXTFLD ); - const bool bContainsHiddenFields = pFldType && pFldType->GetDepends(); - pFldType = m_rShell.GetDoc()->GetSysFldType( RES_HIDDENPARAFLD ); - const bool bContainsHiddenParagraphs = pFldType && pFldType->GetDepends(); - pFldType = m_rShell.GetDoc()->GetSysFldType( RES_JUMPEDITFLD ); - const bool bContainsPlaceHolders = pFldType && pFldType->GetDepends(); - const bool bContainsFields = m_rShell.IsAnyFieldInDoc(); - - SwViewOption aRenderViewOptions( m_aOldViewOptions ); - - // disable anything in the view that should not be printed (or exported to PDF) by default - // (see also dialog "Tools/Options - StarOffice Writer - Formatting Aids" - // in section "Display of ...") - aRenderViewOptions.SetParagraph( sal_False ); // paragraph end - aRenderViewOptions.SetSoftHyph( sal_False ); // aka custom hyphens - aRenderViewOptions.SetBlank( sal_False ); // spaces - aRenderViewOptions.SetHardBlank( sal_False ); // non-breaking spaces - aRenderViewOptions.SetTab( sal_False ); // tabs - aRenderViewOptions.SetLineBreak( sal_False ); // breaks (type 1) - aRenderViewOptions.SetPageBreak( sal_False ); // breaks (type 2) - aRenderViewOptions.SetColumnBreak( sal_False ); // breaks (type 3) - sal_Bool bVal = pPrtOptions? pPrtOptions->bPrintHiddenText : sal_False; - if (bContainsHiddenChars) - aRenderViewOptions.SetShowHiddenChar( bVal ); // hidden text - if (bContainsHiddenFields) - aRenderViewOptions.SetShowHiddenField( bVal ); - if (bContainsHiddenParagraphs) - aRenderViewOptions.SetShowHiddenPara( bVal ); - - if (bContainsPlaceHolders) - { - // should always be printed in PDF export! - bVal = pPrtOptions ? pPrtOptions->bPrintTextPlaceholder : sal_True; - aRenderViewOptions.SetShowPlaceHolderFields( bVal ); - } - - if (bContainsFields) - aRenderViewOptions.SetFldName( sal_False ); - - // we need to set this flag in order to get to see the visible effect of - // some of the above settings (needed for correct rendering) - aRenderViewOptions.SetViewMetaChars( sal_True ); - - if (m_aOldViewOptions != aRenderViewOptions) // check if reformatting is necessary - { - aRenderViewOptions.SetPrinting( pPrtOptions != NULL ); - m_rShell.ApplyViewOptions( aRenderViewOptions ); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |