/* -*- 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "docsh.hxx" #include #include #include #include #include #include #include #include #include #include using ::rtl::OUString; using namespace ::com::sun::star; using namespace ::com::sun::star::document; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::text; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; using rtl::OUString; class SwVbaCodeNameProvider : public ::cppu::WeakImplHelper1< document::XCodeNameQuery > { SwDocShell* mpDocShell; rtl::OUString msThisDocumentCodeName; public: SwVbaCodeNameProvider( SwDocShell* pDocShell ) : mpDocShell( pDocShell ) {} // XCodeNameQuery rtl::OUString SAL_CALL getCodeNameForObject( const uno::Reference< uno::XInterface >& xIf ) throw( uno::RuntimeException ) { // Initialise the code name if ( msThisDocumentCodeName.getLength() == 0 ) { try { uno::Reference< beans::XPropertySet > xProps( mpDocShell->GetModel(), uno::UNO_QUERY_THROW ); uno::Reference< container::XNameAccess > xLibContainer( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("BasicLibraries") ) ), uno::UNO_QUERY_THROW ); rtl::OUString sProjectName( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Standard") ) ); if ( mpDocShell->GetBasicManager()->GetName().Len() ) sProjectName = mpDocShell->GetBasicManager()->GetName(); uno::Reference< container::XNameAccess > xLib( xLibContainer->getByName( sProjectName ), uno::UNO_QUERY_THROW ); uno::Sequence< rtl::OUString > sModuleNames = xLib->getElementNames(); uno::Reference< script::vba::XVBAModuleInfo > xVBAModuleInfo( xLib, uno::UNO_QUERY ); for ( sal_Int32 i=0; i < sModuleNames.getLength(); ++i ) { script::ModuleInfo mInfo; if ( xVBAModuleInfo->hasModuleInfo( sModuleNames[ i ] ) && xVBAModuleInfo->getModuleInfo( sModuleNames[ i ] ).ModuleType == script::ModuleType::DOCUMENT ) { msThisDocumentCodeName = sModuleNames[ i ]; break; } } } catch( uno::Exception& ) { } } rtl::OUString sCodeName; if ( mpDocShell ) { OSL_TRACE( "*** In ScVbaCodeNameProvider::getCodeNameForObject"); // need to find the page ( and index ) for this control uno::Reference< drawing::XDrawPageSupplier > xSupplier( mpDocShell->GetModel(), uno::UNO_QUERY_THROW ); uno::Reference< container::XIndexAccess > xIndex( xSupplier->getDrawPage(), uno::UNO_QUERY_THROW ); bool bMatched = false; uno::Sequence< script::ScriptEventDescriptor > aFakeEvents; try { uno::Reference< form::XFormsSupplier > xFormSupplier( xIndex, uno::UNO_QUERY_THROW ); uno::Reference< container::XIndexAccess > xFormIndex( xFormSupplier->getForms(), uno::UNO_QUERY_THROW ); // get the www-standard container uno::Reference< container::XIndexAccess > xFormControls( xFormIndex->getByIndex(0), uno::UNO_QUERY_THROW ); sal_Int32 nCntrls = xFormControls->getCount(); for( sal_Int32 cIndex = 0; cIndex < nCntrls; ++cIndex ) { uno::Reference< uno::XInterface > xControl( xFormControls->getByIndex( cIndex ), uno::UNO_QUERY_THROW ); bMatched = ( xControl == xIf ); if ( bMatched ) { sCodeName = msThisDocumentCodeName; break; } } } catch( uno::Exception& ) {} } // Probably should throw here ( if !bMatched ) return sCodeName; } }; typedef boost::unordered_map< rtl::OUString, rtl::OUString, rtl::OUStringHash > StringHashMap; class SwVbaProjectNameProvider : public ::cppu::WeakImplHelper1< container::XNameContainer > { SwDocShell* mpDocShell; StringHashMap mTemplateToProject; public: SwVbaProjectNameProvider( SwDocShell* pDocShell ) : mpDocShell( pDocShell ) { } virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException ) { return ( mTemplateToProject.find( aName ) != mTemplateToProject.end() ); } virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) { if ( !hasByName( aName ) ) throw container::NoSuchElementException(); return uno::makeAny( mTemplateToProject.find( aName )->second ); } virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException) { uno::Sequence< rtl::OUString > aElements( mTemplateToProject.size() ); StringHashMap::iterator it_end = mTemplateToProject.end(); sal_Int32 index = 0; for ( StringHashMap::iterator it = mTemplateToProject.begin(); it != it_end; ++it, ++index ) aElements[ index ] = it->first; return aElements; } virtual void SAL_CALL insertByName( const rtl::OUString& aName, const uno::Any& aElement ) throw ( com::sun::star::lang::IllegalArgumentException, com::sun::star::container::ElementExistException, com::sun::star::lang::WrappedTargetException ) { rtl::OUString sProjectName; aElement >>= sProjectName; OSL_TRACE("** Template cache inserting template name %s with project %s" , rtl::OUStringToOString( aName, RTL_TEXTENCODING_UTF8 ).getStr() , rtl::OUStringToOString( sProjectName, RTL_TEXTENCODING_UTF8 ).getStr() ); mTemplateToProject[ aName ] = sProjectName; } virtual void SAL_CALL removeByName( const rtl::OUString& Name ) throw ( com::sun::star::container::NoSuchElementException, com::sun::star::lang::WrappedTargetException ) { if ( !hasByName( Name ) ) throw container::NoSuchElementException(); mTemplateToProject.erase( Name ); } virtual void SAL_CALL replaceByName( const rtl::OUString& aName, const uno::Any& aElement ) throw ( com::sun::star::lang::IllegalArgumentException, com::sun::star::container::NoSuchElementException, com::sun::star::lang::WrappedTargetException ) { if ( !hasByName( aName ) ) throw container::NoSuchElementException(); insertByName( aName, aElement ); // insert will overwrite } // XElemenAccess virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException) { return ::getCppuType((const rtl::OUString*)0); } virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException ) { return ( mTemplateToProject.size() > 0 ); } }; class SwVbaObjectForCodeNameProvider : public ::cppu::WeakImplHelper1< container::XNameAccess > { SwDocShell* mpDocShell; public: SwVbaObjectForCodeNameProvider( SwDocShell* pDocShell ) : mpDocShell( pDocShell ) { // #FIXME #TODO is the code name for ThisDocument read anywhere? } virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException ) { // #FIXME #TODO we really need to be checking against the codename for // ThisDocument if ( aName.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ThisDocument" ) ) ) ) return sal_True; return sal_False; } ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) { if ( !hasByName( aName ) ) throw container::NoSuchElementException(); uno::Sequence< uno::Any > aArgs( 2 ); aArgs[0] = uno::Any( uno::Reference< uno::XInterface >() ); aArgs[1] = uno::Any( mpDocShell->GetModel() ); uno::Reference< uno::XInterface > xDocObj = ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.word.Document" , aArgs ); OSL_TRACE("Creating Object ( ooo.vba.word.Document ) 0x%x", xDocObj.get() ); return uno::makeAny( xDocObj ); } virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException) { uno::Sequence< rtl::OUString > aNames; return aNames; } // XElemenAccess virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException){ return uno::Type(); } virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException ) { return sal_True; } }; struct ProvNamesId_Type { const char * pName; sal_uInt16 nType; }; // note: this thing is indexed as an array, so do not insert/remove entries! const ProvNamesId_Type aProvNamesId[] = { { "com.sun.star.text.TextTable", SW_SERVICE_TYPE_TEXTTABLE }, { "com.sun.star.text.TextFrame", SW_SERVICE_TYPE_TEXTFRAME }, { "com.sun.star.text.GraphicObject", SW_SERVICE_TYPE_GRAPHIC }, { "com.sun.star.text.TextEmbeddedObject", SW_SERVICE_TYPE_OLE }, { "com.sun.star.text.Bookmark", SW_SERVICE_TYPE_BOOKMARK }, { "com.sun.star.text.Footnote", SW_SERVICE_TYPE_FOOTNOTE }, { "com.sun.star.text.Endnote", SW_SERVICE_TYPE_ENDNOTE }, { "com.sun.star.text.DocumentIndexMark", SW_SERVICE_TYPE_INDEXMARK }, { "com.sun.star.text.DocumentIndex", SW_SERVICE_TYPE_INDEX }, { "com.sun.star.text.ReferenceMark", SW_SERVICE_REFERENCE_MARK }, { "com.sun.star.style.CharacterStyle", SW_SERVICE_STYLE_CHARACTER_STYLE }, { "com.sun.star.style.ParagraphStyle", SW_SERVICE_STYLE_PARAGRAPH_STYLE }, { "com.sun.star.style.FrameStyle", SW_SERVICE_STYLE_FRAME_STYLE }, { "com.sun.star.style.PageStyle", SW_SERVICE_STYLE_PAGE_STYLE }, { "com.sun.star.style.NumberingStyle", SW_SERVICE_STYLE_NUMBERING_STYLE }, { "com.sun.star.text.ContentIndexMark", SW_SERVICE_CONTENT_INDEX_MARK }, { "com.sun.star.text.ContentIndex", SW_SERVICE_CONTENT_INDEX }, { "com.sun.star.text.UserIndexMark", SW_SERVICE_USER_INDEX_MARK }, { "com.sun.star.text.UserIndex", SW_SERVICE_USER_INDEX }, { "com.sun.star.text.TextSection", SW_SERVICE_TEXT_SECTION }, { "com.sun.star.text.TextField.DateTime", SW_SERVICE_FIELDTYPE_DATETIME }, { "com.sun.star.text.TextField.User", SW_SERVICE_FIELDTYPE_USER }, { "com.sun.star.text.TextField.SetExpression", SW_SERVICE_FIELDTYPE_SET_EXP }, { "com.sun.star.text.TextField.GetExpression", SW_SERVICE_FIELDTYPE_GET_EXP }, { "com.sun.star.text.TextField.FileName", SW_SERVICE_FIELDTYPE_FILE_NAME }, { "com.sun.star.text.TextField.PageNumber", SW_SERVICE_FIELDTYPE_PAGE_NUM }, { "com.sun.star.text.TextField.Author", SW_SERVICE_FIELDTYPE_AUTHOR }, { "com.sun.star.text.TextField.Chapter", SW_SERVICE_FIELDTYPE_CHAPTER }, { "", SW_SERVICE_FIELDTYPE_DUMMY_0 }, { "com.sun.star.text.TextField.GetReference", SW_SERVICE_FIELDTYPE_GET_REFERENCE }, { "com.sun.star.text.TextField.ConditionalText", SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT }, { "com.sun.star.text.TextField.Annotation", SW_SERVICE_FIELDTYPE_ANNOTATION }, { "com.sun.star.text.TextField.Input", SW_SERVICE_FIELDTYPE_INPUT }, { "com.sun.star.text.TextField.Macro", SW_SERVICE_FIELDTYPE_MACRO }, { "com.sun.star.text.TextField.DDE", SW_SERVICE_FIELDTYPE_DDE }, { "com.sun.star.text.TextField.HiddenParagraph", SW_SERVICE_FIELDTYPE_HIDDEN_PARA }, { "" /*com.sun.star.text.TextField.DocumentInfo"*/, SW_SERVICE_FIELDTYPE_DOC_INFO }, { "com.sun.star.text.TextField.TemplateName", SW_SERVICE_FIELDTYPE_TEMPLATE_NAME }, { "com.sun.star.text.TextField.ExtendedUser", SW_SERVICE_FIELDTYPE_USER_EXT }, { "com.sun.star.text.TextField.ReferencePageSet", SW_SERVICE_FIELDTYPE_REF_PAGE_SET }, { "com.sun.star.text.TextField.ReferencePageGet", SW_SERVICE_FIELDTYPE_REF_PAGE_GET }, { "com.sun.star.text.TextField.JumpEdit", SW_SERVICE_FIELDTYPE_JUMP_EDIT }, { "com.sun.star.text.TextField.Script", SW_SERVICE_FIELDTYPE_SCRIPT }, { "com.sun.star.text.TextField.DatabaseNextSet", SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET }, { "com.sun.star.text.TextField.DatabaseNumberOfSet", SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET }, { "com.sun.star.text.TextField.DatabaseSetNumber", SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM }, { "com.sun.star.text.TextField.Database", SW_SERVICE_FIELDTYPE_DATABASE }, { "com.sun.star.text.TextField.DatabaseName", SW_SERVICE_FIELDTYPE_DATABASE_NAME }, { "com.sun.star.text.TextField.TableFormula", SW_SERVICE_FIELDTYPE_TABLE_FORMULA }, { "com.sun.star.text.TextField.PageCount", SW_SERVICE_FIELDTYPE_PAGE_COUNT }, { "com.sun.star.text.TextField.ParagraphCount", SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT }, { "com.sun.star.text.TextField.WordCount", SW_SERVICE_FIELDTYPE_WORD_COUNT }, { "com.sun.star.text.TextField.CharacterCount", SW_SERVICE_FIELDTYPE_CHARACTER_COUNT }, { "com.sun.star.text.TextField.TableCount", SW_SERVICE_FIELDTYPE_TABLE_COUNT }, { "com.sun.star.text.TextField.GraphicObjectCount", SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT }, { "com.sun.star.text.TextField.EmbeddedObjectCount", SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT }, { "com.sun.star.text.TextField.DocInfo.ChangeAuthor", SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR }, { "com.sun.star.text.TextField.DocInfo.ChangeDateTime", SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME }, { "com.sun.star.text.TextField.DocInfo.EditTime", SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME }, { "com.sun.star.text.TextField.DocInfo.Description", SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION }, { "com.sun.star.text.TextField.DocInfo.CreateAuthor", SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR }, { "com.sun.star.text.TextField.DocInfo.CreateDateTime", SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME }, { "", SW_SERVICE_FIELDTYPE_DUMMY_0 }, { "", SW_SERVICE_FIELDTYPE_DUMMY_1 }, { "", SW_SERVICE_FIELDTYPE_DUMMY_2 }, { "", SW_SERVICE_FIELDTYPE_DUMMY_3 }, { "com.sun.star.text.TextField.DocInfo.Custom", SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM }, { "com.sun.star.text.TextField.DocInfo.PrintAuthor", SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR }, { "com.sun.star.text.TextField.DocInfo.PrintDateTime", SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME }, { "com.sun.star.text.TextField.DocInfo.KeyWords", SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS }, { "com.sun.star.text.TextField.DocInfo.Subject", SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT }, { "com.sun.star.text.TextField.DocInfo.Title", SW_SERVICE_FIELDTYPE_DOCINFO_TITLE }, { "com.sun.star.text.TextField.DocInfo.Revision", SW_SERVICE_FIELDTYPE_DOCINFO_REVISION }, { "com.sun.star.text.TextField.Bibliography", SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY }, { "com.sun.star.text.TextField.CombinedCharacters", SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS }, { "com.sun.star.text.TextField.DropDown", SW_SERVICE_FIELDTYPE_DROPDOWN }, { "com.sun.star.text.textfield.MetadataField", SW_SERVICE_FIELDTYPE_METAFIELD }, { "", SW_SERVICE_FIELDTYPE_DUMMY_4 }, { "", SW_SERVICE_FIELDTYPE_DUMMY_5 }, { "", SW_SERVICE_FIELDTYPE_DUMMY_6 }, { "", SW_SERVICE_FIELDTYPE_DUMMY_7 }, { "com.sun.star.text.FieldMaster.User", SW_SERVICE_FIELDMASTER_USER }, { "com.sun.star.text.FieldMaster.DDE", SW_SERVICE_FIELDMASTER_DDE }, { "com.sun.star.text.FieldMaster.SetExpression", SW_SERVICE_FIELDMASTER_SET_EXP }, { "com.sun.star.text.FieldMaster.Database", SW_SERVICE_FIELDMASTER_DATABASE }, { "com.sun.star.text.FieldMaster.Bibliography", SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY }, { "", SW_SERVICE_FIELDMASTER_DUMMY2 }, { "", SW_SERVICE_FIELDMASTER_DUMMY3 }, { "", SW_SERVICE_FIELDMASTER_DUMMY4 }, { "", SW_SERVICE_FIELDMASTER_DUMMY5 }, { "com.sun.star.text.IllustrationsIndex", SW_SERVICE_INDEX_ILLUSTRATIONS }, { "com.sun.star.text.ObjectIndex", SW_SERVICE_INDEX_OBJECTS }, { "com.sun.star.text.TableIndex", SW_SERVICE_INDEX_TABLES }, { "com.sun.star.text.Bibliography", SW_SERVICE_INDEX_BIBLIOGRAPHY }, { "com.sun.star.text.Paragraph", SW_SERVICE_PARAGRAPH }, { "com.sun.star.text.TextField.InputUser", SW_SERVICE_FIELDTYPE_INPUT_USER }, { "com.sun.star.text.TextField.HiddenText", SW_SERVICE_FIELDTYPE_HIDDEN_TEXT }, { "com.sun.star.style.ConditionalParagraphStyle", SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE }, { "com.sun.star.text.NumberingRules", SW_SERVICE_NUMBERING_RULES }, { "com.sun.star.text.TextColumns", SW_SERVICE_TEXT_COLUMNS }, { "com.sun.star.text.IndexHeaderSection", SW_SERVICE_INDEX_HEADER_SECTION }, { "com.sun.star.text.Defaults", SW_SERVICE_DEFAULTS }, { "com.sun.star.image.ImageMapRectangleObject", SW_SERVICE_IMAP_RECTANGLE }, { "com.sun.star.image.ImageMapCircleObject", SW_SERVICE_IMAP_CIRCLE }, { "com.sun.star.image.ImageMapPolygonObject", SW_SERVICE_IMAP_POLYGON }, { "com.sun.star.text.TextGraphicObject", SW_SERVICE_TYPE_TEXT_GRAPHIC }, { "com.sun.star.chart2.data.DataProvider", SW_SERVICE_CHART2_DATA_PROVIDER }, { "com.sun.star.text.Fieldmark", SW_SERVICE_TYPE_FIELDMARK }, { "com.sun.star.text.FormFieldmark", SW_SERVICE_TYPE_FORMFIELDMARK }, { "com.sun.star.text.InContentMetadata", SW_SERVICE_TYPE_META }, { "ooo.vba.VBAObjectModuleObjectProvider", SW_SERVICE_VBAOBJECTPROVIDER }, { "ooo.vba.VBACodeNameProvider", SW_SERVICE_VBACODENAMEPROVIDER }, { "ooo.vba.VBAProjectNameProvider", SW_SERVICE_VBAPROJECTNAMEPROVIDER }, { "ooo.vba.VBAGlobals", SW_SERVICE_VBAGLOBALS }, // case-correct versions of the service names (see #i67811) { CSS_TEXT_TEXTFIELD_DATE_TIME, SW_SERVICE_FIELDTYPE_DATETIME }, { CSS_TEXT_TEXTFIELD_USER, SW_SERVICE_FIELDTYPE_USER }, { CSS_TEXT_TEXTFIELD_SET_EXPRESSION, SW_SERVICE_FIELDTYPE_SET_EXP }, { CSS_TEXT_TEXTFIELD_GET_EXPRESSION, SW_SERVICE_FIELDTYPE_GET_EXP }, { CSS_TEXT_TEXTFIELD_FILE_NAME, SW_SERVICE_FIELDTYPE_FILE_NAME }, { CSS_TEXT_TEXTFIELD_PAGE_NUMBER, SW_SERVICE_FIELDTYPE_PAGE_NUM }, { CSS_TEXT_TEXTFIELD_AUTHOR, SW_SERVICE_FIELDTYPE_AUTHOR }, { CSS_TEXT_TEXTFIELD_CHAPTER, SW_SERVICE_FIELDTYPE_CHAPTER }, { CSS_TEXT_TEXTFIELD_GET_REFERENCE, SW_SERVICE_FIELDTYPE_GET_REFERENCE }, { CSS_TEXT_TEXTFIELD_CONDITIONAL_TEXT, SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT }, { CSS_TEXT_TEXTFIELD_ANNOTATION, SW_SERVICE_FIELDTYPE_ANNOTATION }, { CSS_TEXT_TEXTFIELD_INPUT, SW_SERVICE_FIELDTYPE_INPUT }, { CSS_TEXT_TEXTFIELD_MACRO, SW_SERVICE_FIELDTYPE_MACRO }, { CSS_TEXT_TEXTFIELD_DDE, SW_SERVICE_FIELDTYPE_DDE }, { CSS_TEXT_TEXTFIELD_HIDDEN_PARAGRAPH, SW_SERVICE_FIELDTYPE_HIDDEN_PARA }, { CSS_TEXT_TEXTFIELD_TEMPLATE_NAME, SW_SERVICE_FIELDTYPE_TEMPLATE_NAME }, { CSS_TEXT_TEXTFIELD_EXTENDED_USER, SW_SERVICE_FIELDTYPE_USER_EXT }, { CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_SET, SW_SERVICE_FIELDTYPE_REF_PAGE_SET }, { CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_GET, SW_SERVICE_FIELDTYPE_REF_PAGE_GET }, { CSS_TEXT_TEXTFIELD_JUMP_EDIT, SW_SERVICE_FIELDTYPE_JUMP_EDIT }, { CSS_TEXT_TEXTFIELD_SCRIPT, SW_SERVICE_FIELDTYPE_SCRIPT }, { CSS_TEXT_TEXTFIELD_DATABASE_NEXT_SET, SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET }, { CSS_TEXT_TEXTFIELD_DATABASE_NUMBER_OF_SET, SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET }, { CSS_TEXT_TEXTFIELD_DATABASE_SET_NUMBER, SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM }, { CSS_TEXT_TEXTFIELD_DATABASE, SW_SERVICE_FIELDTYPE_DATABASE }, { CSS_TEXT_TEXTFIELD_DATABASE_NAME, SW_SERVICE_FIELDTYPE_DATABASE_NAME }, { CSS_TEXT_TEXTFIELD_TABLE_FORMULA, SW_SERVICE_FIELDTYPE_TABLE_FORMULA }, { CSS_TEXT_TEXTFIELD_PAGE_COUNT, SW_SERVICE_FIELDTYPE_PAGE_COUNT }, { CSS_TEXT_TEXTFIELD_PARAGRAPH_COUNT, SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT }, { CSS_TEXT_TEXTFIELD_WORD_COUNT, SW_SERVICE_FIELDTYPE_WORD_COUNT }, { CSS_TEXT_TEXTFIELD_CHARACTER_COUNT, SW_SERVICE_FIELDTYPE_CHARACTER_COUNT }, { CSS_TEXT_TEXTFIELD_TABLE_COUNT, SW_SERVICE_FIELDTYPE_TABLE_COUNT }, { CSS_TEXT_TEXTFIELD_GRAPHIC_OBJECT_COUNT, SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT }, { CSS_TEXT_TEXTFIELD_EMBEDDED_OBJECT_COUNT, SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT }, { CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_AUTHOR, SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR }, { CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_DATE_TIME, SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME }, { CSS_TEXT_TEXTFIELD_DOCINFO_EDIT_TIME, SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME }, { CSS_TEXT_TEXTFIELD_DOCINFO_DESCRIPTION, SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION }, { CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_AUTHOR, SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR }, { CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_DATE_TIME, SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME }, { CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_AUTHOR, SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR }, { CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_DATE_TIME, SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME }, { CSS_TEXT_TEXTFIELD_DOCINFO_KEY_WORDS, SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS }, { CSS_TEXT_TEXTFIELD_DOCINFO_SUBJECT, SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT }, { CSS_TEXT_TEXTFIELD_DOCINFO_TITLE, SW_SERVICE_FIELDTYPE_DOCINFO_TITLE }, { CSS_TEXT_TEXTFIELD_DOCINFO_REVISION, SW_SERVICE_FIELDTYPE_DOCINFO_REVISION }, { CSS_TEXT_TEXTFIELD_DOCINFO_CUSTOM, SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM }, { CSS_TEXT_TEXTFIELD_BIBLIOGRAPHY, SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY }, { CSS_TEXT_TEXTFIELD_COMBINED_CHARACTERS, SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS }, { CSS_TEXT_TEXTFIELD_DROP_DOWN, SW_SERVICE_FIELDTYPE_DROPDOWN }, { CSS_TEXT_TEXTFIELD_INPUT_USER, SW_SERVICE_FIELDTYPE_INPUT_USER }, { CSS_TEXT_TEXTFIELD_HIDDEN_TEXT, SW_SERVICE_FIELDTYPE_HIDDEN_TEXT }, { CSS_TEXT_FIELDMASTER_USER, SW_SERVICE_FIELDMASTER_USER }, { CSS_TEXT_FIELDMASTER_DDE, SW_SERVICE_FIELDMASTER_DDE }, { CSS_TEXT_FIELDMASTER_SET_EXPRESSION, SW_SERVICE_FIELDMASTER_SET_EXP }, { CSS_TEXT_FIELDMASTER_DATABASE, SW_SERVICE_FIELDMASTER_DATABASE }, { CSS_TEXT_FIELDMASTER_BIBLIOGRAPHY, SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY } }; const SvEventDescription* lcl_GetSupportedMacroItems() { static const SvEventDescription aMacroDescriptionsImpl[] = { { SFX_EVENT_MOUSEOVER_OBJECT, "OnMouseOver" }, { SFX_EVENT_MOUSEOUT_OBJECT, "OnMouseOut" }, { 0, NULL } }; return aMacroDescriptionsImpl; } /****************************************************************** * SwXServiceProvider ******************************************************************/ OUString SwXServiceProvider::GetProviderName(sal_uInt16 nObjectType) { SolarMutexGuard aGuard; OUString sRet; sal_uInt16 nEntries = SAL_N_ELEMENTS(aProvNamesId); if(nObjectType < nEntries) sRet = rtl::OUString::createFromAscii(aProvNamesId[nObjectType].pName); return sRet; } uno::Sequence SwXServiceProvider::GetAllServiceNames() { sal_uInt16 nEntries = SAL_N_ELEMENTS(aProvNamesId); uno::Sequence aRet(nEntries); OUString* pArray = aRet.getArray(); sal_uInt16 n = 0; for(sal_uInt16 i = 0; i < nEntries; i++) { String sProv(rtl::OUString::createFromAscii(aProvNamesId[i].pName)); if(sProv.Len()) { pArray[n] = sProv; n++; } } aRet.realloc(n); return aRet; } sal_uInt16 SwXServiceProvider::GetProviderType(const OUString& rServiceName) { sal_uInt16 nEntries = SAL_N_ELEMENTS(aProvNamesId); for(sal_uInt16 i = 0; i < nEntries; i++ ) { if( COMPARE_EQUAL == rServiceName.compareToAscii(aProvNamesId[i].pName)) return aProvNamesId[i].nType; } return SW_SERVICE_INVALID; } uno::Reference< uno::XInterface > SwXServiceProvider::MakeInstance(sal_uInt16 nObjectType, SwDoc* pDoc) { SolarMutexGuard aGuard; uno::Reference< uno::XInterface > xRet; switch(nObjectType) { case SW_SERVICE_TYPE_TEXTTABLE: { SwXTextTable* pTextTable = new SwXTextTable(); xRet = (cppu::OWeakObject*)pTextTable; } break; case SW_SERVICE_TYPE_TEXTFRAME: { SwXTextFrame* pTextFrame = new SwXTextFrame( pDoc ); xRet = (cppu::OWeakObject*)(SwXFrame*)pTextFrame; } break; case SW_SERVICE_TYPE_GRAPHIC : case SW_SERVICE_TYPE_TEXT_GRAPHIC /* #i47503# */ : { SwXTextGraphicObject* pGraphic = new SwXTextGraphicObject( pDoc ); xRet = (cppu::OWeakObject*)(SwXFrame*)pGraphic; } break; case SW_SERVICE_TYPE_OLE : { SwXTextEmbeddedObject* pOle = new SwXTextEmbeddedObject( pDoc ); xRet = (cppu::OWeakObject*)(SwXFrame*)pOle; } break; case SW_SERVICE_TYPE_BOOKMARK : { SwXBookmark* pBookmark = new SwXBookmark; xRet = (cppu::OWeakObject*)pBookmark; } break; case SW_SERVICE_TYPE_FIELDMARK : { SwXFieldmark* pFieldmark = new SwXFieldmark(false); xRet = (cppu::OWeakObject*)pFieldmark; } break; case SW_SERVICE_TYPE_FORMFIELDMARK : { SwXFieldmark* pFieldmark = new SwXFieldmark(true); xRet = (cppu::OWeakObject*)pFieldmark; } break; case SW_SERVICE_VBAOBJECTPROVIDER : { SwVbaObjectForCodeNameProvider* pObjProv = new SwVbaObjectForCodeNameProvider( pDoc->GetDocShell() ); xRet = (cppu::OWeakObject*)pObjProv; } break; case SW_SERVICE_VBACODENAMEPROVIDER : { if ( pDoc->GetDocShell() && ooo::vba::isAlienWordDoc( *pDoc->GetDocShell() ) ) { SwVbaCodeNameProvider* pObjProv = new SwVbaCodeNameProvider( pDoc->GetDocShell() ); xRet = (cppu::OWeakObject*)pObjProv; } } break; case SW_SERVICE_VBAPROJECTNAMEPROVIDER : { uno::Reference< container::XNameContainer > xProjProv = pDoc->GetVBATemplateToProjectCache(); if ( !xProjProv.is() && pDoc->GetDocShell() && ooo::vba::isAlienWordDoc( *pDoc->GetDocShell() ) ) { xProjProv = new SwVbaProjectNameProvider( pDoc->GetDocShell() ); pDoc->SetVBATemplateToProjectCache( xProjProv ); } //xRet = (cppu::OWeakObject*)xProjProv; xRet = xProjProv; } break; case SW_SERVICE_VBAGLOBALS : { if ( pDoc ) { uno::Any aGlobs; if ( !pDoc->GetDocShell()->GetBasicManager()->GetGlobalUNOConstant( "VBAGlobals", aGlobs ) ) { uno::Sequence< uno::Any > aArgs(1); aArgs[ 0 ] <<= pDoc->GetDocShell()->GetModel(); aGlobs <<= ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ooo.vba.word.Globals")), aArgs ); pDoc->GetDocShell()->GetBasicManager()->SetGlobalUNOConstant( "VBAGlobals", aGlobs ); } aGlobs >>= xRet; } } break; case SW_SERVICE_TYPE_FOOTNOTE : xRet = (cppu::OWeakObject*)new SwXFootnote(sal_False); break; case SW_SERVICE_TYPE_ENDNOTE : xRet = (cppu::OWeakObject*)new SwXFootnote(sal_True); break; case SW_SERVICE_CONTENT_INDEX_MARK : case SW_SERVICE_USER_INDEX_MARK : case SW_SERVICE_TYPE_INDEXMARK: { TOXTypes eType = TOX_INDEX; if(SW_SERVICE_CONTENT_INDEX_MARK== nObjectType) eType = TOX_CONTENT; else if(SW_SERVICE_USER_INDEX_MARK == nObjectType) eType = TOX_USER; xRet = (cppu::OWeakObject*)new SwXDocumentIndexMark(eType); } break; case SW_SERVICE_CONTENT_INDEX : case SW_SERVICE_USER_INDEX : case SW_SERVICE_TYPE_INDEX : case SW_SERVICE_INDEX_ILLUSTRATIONS: case SW_SERVICE_INDEX_OBJECTS : case SW_SERVICE_INDEX_TABLES: case SW_SERVICE_INDEX_BIBLIOGRAPHY : { TOXTypes eType = TOX_INDEX; if(SW_SERVICE_CONTENT_INDEX == nObjectType) eType = TOX_CONTENT; else if(SW_SERVICE_USER_INDEX == nObjectType) eType = TOX_USER; else if(SW_SERVICE_INDEX_ILLUSTRATIONS == nObjectType) { eType = TOX_ILLUSTRATIONS; } else if(SW_SERVICE_INDEX_OBJECTS == nObjectType) { eType = TOX_OBJECTS; } else if(SW_SERVICE_INDEX_BIBLIOGRAPHY == nObjectType) { eType = TOX_AUTHORITIES; } else if(SW_SERVICE_INDEX_TABLES == nObjectType) { eType = TOX_TABLES; } xRet = (cppu::OWeakObject*)new SwXDocumentIndex(eType, *pDoc); } break; case SW_SERVICE_INDEX_HEADER_SECTION : case SW_SERVICE_TEXT_SECTION : xRet = SwXTextSection::CreateXTextSection(0, (SW_SERVICE_INDEX_HEADER_SECTION == nObjectType)); break; case SW_SERVICE_REFERENCE_MARK : xRet = (cppu::OWeakObject*)new SwXReferenceMark(0, 0); break; case SW_SERVICE_STYLE_CHARACTER_STYLE: case SW_SERVICE_STYLE_PARAGRAPH_STYLE: case SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE: case SW_SERVICE_STYLE_FRAME_STYLE: case SW_SERVICE_STYLE_PAGE_STYLE: case SW_SERVICE_STYLE_NUMBERING_STYLE: { SfxStyleFamily eFamily = SFX_STYLE_FAMILY_CHAR; switch(nObjectType) { case SW_SERVICE_STYLE_PARAGRAPH_STYLE: case SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE: eFamily = SFX_STYLE_FAMILY_PARA; break; case SW_SERVICE_STYLE_FRAME_STYLE: eFamily = SFX_STYLE_FAMILY_FRAME; break; case SW_SERVICE_STYLE_PAGE_STYLE: eFamily = SFX_STYLE_FAMILY_PAGE; break; case SW_SERVICE_STYLE_NUMBERING_STYLE: eFamily = SFX_STYLE_FAMILY_PSEUDO; break; } SwXStyle* pNewStyle = SFX_STYLE_FAMILY_PAGE == eFamily ? new SwXPageStyle(pDoc->GetDocShell()) : eFamily == SFX_STYLE_FAMILY_FRAME ? new SwXFrameStyle ( pDoc ): new SwXStyle( pDoc, eFamily, nObjectType == SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE); xRet = (cppu::OWeakObject*)pNewStyle; } break; // SW_SERVICE_DUMMY_5 // SW_SERVICE_DUMMY_6 // SW_SERVICE_DUMMY_7 // SW_SERVICE_DUMMY_8 // SW_SERVICE_DUMMY_9 case SW_SERVICE_FIELDTYPE_DATETIME: case SW_SERVICE_FIELDTYPE_USER: case SW_SERVICE_FIELDTYPE_SET_EXP: case SW_SERVICE_FIELDTYPE_GET_EXP: case SW_SERVICE_FIELDTYPE_FILE_NAME: case SW_SERVICE_FIELDTYPE_PAGE_NUM: case SW_SERVICE_FIELDTYPE_AUTHOR: case SW_SERVICE_FIELDTYPE_CHAPTER: case SW_SERVICE_FIELDTYPE_GET_REFERENCE: case SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT: case SW_SERVICE_FIELDTYPE_INPUT: case SW_SERVICE_FIELDTYPE_MACRO: case SW_SERVICE_FIELDTYPE_DDE: case SW_SERVICE_FIELDTYPE_HIDDEN_PARA: case SW_SERVICE_FIELDTYPE_DOC_INFO: case SW_SERVICE_FIELDTYPE_TEMPLATE_NAME: case SW_SERVICE_FIELDTYPE_USER_EXT: case SW_SERVICE_FIELDTYPE_REF_PAGE_SET: case SW_SERVICE_FIELDTYPE_REF_PAGE_GET: case SW_SERVICE_FIELDTYPE_JUMP_EDIT: case SW_SERVICE_FIELDTYPE_SCRIPT: case SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET: case SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET: case SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM: case SW_SERVICE_FIELDTYPE_DATABASE: case SW_SERVICE_FIELDTYPE_DATABASE_NAME: case SW_SERVICE_FIELDTYPE_PAGE_COUNT : case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT : case SW_SERVICE_FIELDTYPE_WORD_COUNT : case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT : case SW_SERVICE_FIELDTYPE_TABLE_COUNT : case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT : case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT : case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR : case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME : case SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME : case SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION : case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR : case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME : case SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM : case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR : case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME : case SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS : case SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT : case SW_SERVICE_FIELDTYPE_DOCINFO_TITLE : case SW_SERVICE_FIELDTYPE_DOCINFO_REVISION : case SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY: case SW_SERVICE_FIELDTYPE_INPUT_USER : case SW_SERVICE_FIELDTYPE_HIDDEN_TEXT : case SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS : case SW_SERVICE_FIELDTYPE_DROPDOWN : case SW_SERVICE_FIELDTYPE_TABLE_FORMULA: xRet = (cppu::OWeakObject*)new SwXTextField(nObjectType); break; case SW_SERVICE_FIELDTYPE_ANNOTATION: xRet = (cppu::OWeakObject*)new SwXTextField(nObjectType, pDoc); break; case SW_SERVICE_FIELDMASTER_USER: case SW_SERVICE_FIELDMASTER_DDE: case SW_SERVICE_FIELDMASTER_SET_EXP : case SW_SERVICE_FIELDMASTER_DATABASE: { sal_uInt16 nResId = USHRT_MAX; switch(nObjectType) { case SW_SERVICE_FIELDMASTER_USER: nResId = RES_USERFLD; break; case SW_SERVICE_FIELDMASTER_DDE: nResId = RES_DDEFLD; break; case SW_SERVICE_FIELDMASTER_SET_EXP : nResId = RES_SETEXPFLD; break; case SW_SERVICE_FIELDMASTER_DATABASE: nResId = RES_DBFLD; break; } xRet = (cppu::OWeakObject*)new SwXFieldMaster(pDoc, nResId); } break; case SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY: { SwFieldType* pType = pDoc->GetFldType(RES_AUTHORITY, aEmptyStr, sal_True); if(!pType) { SwAuthorityFieldType aType(pDoc); pType = pDoc->InsertFldType(aType); } else { SwClientIter aIter( *pType ); SwXFieldMaster* pMaster = (SwXFieldMaster*)aIter.First( TYPE( SwXFieldMaster )); if(pMaster) xRet = (cppu::OWeakObject*)pMaster; } if(!xRet.is()) xRet = (cppu::OWeakObject*)new SwXFieldMaster(*pType, pDoc); } break; case SW_SERVICE_PARAGRAPH : xRet = (cppu::OWeakObject*)new SwXParagraph(); break; case SW_SERVICE_NUMBERING_RULES : xRet = (cppu::OWeakObject*)new SwXNumberingRules(*pDoc); break; case SW_SERVICE_TEXT_COLUMNS : xRet = (cppu::OWeakObject*)new SwXTextColumns(0); break; case SW_SERVICE_DEFAULTS: xRet = (cppu::OWeakObject*)new SwXTextDefaults( pDoc ); break; case SW_SERVICE_IMAP_RECTANGLE : xRet = SvUnoImageMapRectangleObject_createInstance( lcl_GetSupportedMacroItems() ); break; case SW_SERVICE_IMAP_CIRCLE : xRet = SvUnoImageMapCircleObject_createInstance( lcl_GetSupportedMacroItems() ); break; case SW_SERVICE_IMAP_POLYGON : xRet = SvUnoImageMapPolygonObject_createInstance( lcl_GetSupportedMacroItems() ); break; case SW_SERVICE_CHART2_DATA_PROVIDER : // #i64497# If a chart is in a temporary document during clipoard // paste, there should be no data provider, so that own data is used // This should not happen during copy/paste, as this will unlink // charts using table data. OSL_ASSERT( pDoc->GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ); if( pDoc->GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) xRet = (cppu::OWeakObject*) pDoc->GetChartDataProvider( true /* create - if not yet available */ ); break; case SW_SERVICE_TYPE_META: xRet = static_cast< ::cppu::OWeakObject* >( new SwXMeta(pDoc) ); break; case SW_SERVICE_FIELDTYPE_METAFIELD: xRet = static_cast< ::cppu::OWeakObject* >(new SwXMetaField(pDoc)); break; default: throw uno::RuntimeException(); } return xRet; } /****************************************************************** * SwXTextTables ******************************************************************/ //SMART_UNO_IMPLEMENTATION( SwXTextTables, UsrObject ); SwXTextTables::SwXTextTables(SwDoc* pDc) : SwUnoCollection(pDc) { } SwXTextTables::~SwXTextTables() { } sal_Int32 SwXTextTables::getCount(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; sal_Int32 nRet = 0; if(IsValid()) nRet = GetDoc()->GetTblFrmFmtCount(sal_True); return nRet; } uno::Any SAL_CALL SwXTextTables::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(IsValid()) { if(0 <= nIndex && GetDoc()->GetTblFrmFmtCount(sal_True) > nIndex) { SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt( static_cast< xub_StrLen >(nIndex), sal_True); uno::Reference< XTextTable > xTbl = SwXTextTables::GetObject(rFmt); aRet.setValue( &xTbl, ::getCppuType((uno::Reference< XTextTable>*)0)); } else throw IndexOutOfBoundsException(); } else throw uno::RuntimeException(); return aRet; } uno::Any SwXTextTables::getByName(const OUString& rItemName) throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(IsValid()) { sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True); uno::Reference< XTextTable > xTbl; for( sal_uInt16 i = 0; i < nCount; i++) { String aName(rItemName); SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt(i, sal_True); if(aName == rFmt.GetName()) { xTbl = SwXTextTables::GetObject(rFmt); aRet.setValue(&xTbl, ::getCppuType(( uno::Reference< XTextTable >*)0)); break; } } if(!xTbl.is()) throw NoSuchElementException(); } else throw uno::RuntimeException(); return aRet; } uno::Sequence< OUString > SwXTextTables::getElementNames(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True); uno::Sequence aSeq(nCount); if(nCount) { OUString* pArray = aSeq.getArray(); for( sal_uInt16 i = 0; i < nCount; i++) { SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt(i, sal_True); pArray[i] = OUString(rFmt.GetName()); } } return aSeq; } sal_Bool SwXTextTables::hasByName(const OUString& rName) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; sal_Bool bRet= sal_False; if(IsValid()) { sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True); for( sal_uInt16 i = 0; i < nCount; i++) { String aName(rName); SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt(i, sal_True); if(aName == rFmt.GetName()) { bRet = sal_True; break; } } } else throw uno::RuntimeException(); return bRet; } uno::Type SAL_CALL SwXTextTables::getElementType( ) throw(uno::RuntimeException) { return ::getCppuType((uno::Reference*)0); } sal_Bool SwXTextTables::hasElements(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return 0 != GetDoc()->GetTblFrmFmtCount(sal_True); } OUString SwXTextTables::getImplementationName(void) throw( uno::RuntimeException ) { return C2U("SwXTextTables"); } sal_Bool SwXTextTables::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) { return rServiceName == C2U("com.sun.star.text.TextTables"); } uno::Sequence< OUString > SwXTextTables::getSupportedServiceNames(void) throw( uno::RuntimeException ) { uno::Sequence< OUString > aRet(1); OUString* pArr = aRet.getArray(); pArr[0] = C2U("com.sun.star.text.TextTables"); return aRet; } XTextTable* SwXTextTables::GetObject( SwFrmFmt& rFmt ) { SolarMutexGuard aGuard; SwXTextTable* pTbl = (SwXTextTable*)SwClientIter( rFmt ). First( TYPE( SwXTextTable )); if( !pTbl ) pTbl = new SwXTextTable(rFmt); return pTbl ; } /****************************************************************** * SwXFrameEnumeration ******************************************************************/ namespace { template struct UnoFrameWrap_traits {}; template<> struct UnoFrameWrap_traits { typedef SwXTextFrame core_frame_t; typedef XTextFrame uno_frame_t; static inline bool filter(const SwNode* const pNode) { return !pNode->IsNoTxtNode(); }; }; template<> struct UnoFrameWrap_traits { typedef SwXTextGraphicObject core_frame_t; typedef XTextContent uno_frame_t; static inline bool filter(const SwNode* const pNode) { return pNode->IsGrfNode(); }; }; template<> struct UnoFrameWrap_traits { typedef SwXTextEmbeddedObject core_frame_t; typedef XEmbeddedObjectSupplier uno_frame_t; static inline bool filter(const SwNode* const pNode) { return pNode->IsOLENode(); }; }; template static uno::Any lcl_UnoWrapFrame(SwFrmFmt* pFmt) { SwXFrame* pFrm = static_cast(SwClientIter(*pFmt).First(TYPE(SwXFrame))); if(!pFrm) pFrm = new typename UnoFrameWrap_traits::core_frame_t(*pFmt); Reference< typename UnoFrameWrap_traits::uno_frame_t > xFrm = static_cast< typename UnoFrameWrap_traits::core_frame_t* >(pFrm); return uno::makeAny(xFrm); } // runtime adapter for lcl_UnoWrapFrame static uno::Any lcl_UnoWrapFrame(SwFrmFmt* pFmt, FlyCntType eType) throw(uno::RuntimeException()) { switch(eType) { case FLYCNTTYPE_FRM: return lcl_UnoWrapFrame(pFmt); case FLYCNTTYPE_GRF: return lcl_UnoWrapFrame(pFmt); case FLYCNTTYPE_OLE: return lcl_UnoWrapFrame(pFmt); default: throw uno::RuntimeException(); } } template class SwXFrameEnumeration : public SwSimpleEnumeration_Base { private: typedef ::std::list< Any > frmcontainer_t; frmcontainer_t m_aFrames; protected: virtual ~SwXFrameEnumeration() {}; public: SwXFrameEnumeration(const SwDoc* const pDoc); //XEnumeration virtual sal_Bool SAL_CALL hasMoreElements(void) throw( RuntimeException ); virtual Any SAL_CALL nextElement(void) throw( NoSuchElementException, WrappedTargetException, RuntimeException ); //XServiceInfo virtual OUString SAL_CALL getImplementationName(void) throw( RuntimeException ); virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw( RuntimeException ); virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw( RuntimeException ); }; } template SwXFrameEnumeration::SwXFrameEnumeration(const SwDoc* const pDoc) : m_aFrames() { SolarMutexGuard aGuard; const SwSpzFrmFmts* const pFmts = pDoc->GetSpzFrmFmts(); if(!pFmts->Count()) return; // --> OD 2009-09-10 #i104937# // const SwFrmFmt* const pFmtsEnd = (*pFmts)[pFmts->Count()]; const USHORT nSize = pFmts->Count(); // <-- ::std::insert_iterator pInserter = ::std::insert_iterator(m_aFrames, m_aFrames.begin()); // --> OD 2009-09-10 #i104937# SwFrmFmt* pFmt( 0 ); for( USHORT i = 0; i < nSize; ++i ) // for(SwFrmFmt* pFmt = (*pFmts)[0]; pFmt < pFmtsEnd; ++pFmt) // <-- { // --> OD 2009-09-10 #i104937# pFmt = (*pFmts)[i]; // <-- if(pFmt->Which() != RES_FLYFRMFMT) continue; const SwNodeIndex* pIdx = pFmt->GetCntnt().GetCntntIdx(); if(!pIdx || !pIdx->GetNodes().IsDocNodes()) continue; const SwNode* pNd = pDoc->GetNodes()[ pIdx->GetIndex() + 1 ]; if(UnoFrameWrap_traits::filter(pNd)) *pInserter++ = lcl_UnoWrapFrame(pFmt); } } template sal_Bool SwXFrameEnumeration::hasMoreElements(void) throw( RuntimeException ) { SolarMutexGuard aGuard; return !m_aFrames.empty(); } template Any SwXFrameEnumeration::nextElement(void) throw( NoSuchElementException, WrappedTargetException, RuntimeException ) { SolarMutexGuard aGuard; if(m_aFrames.empty()) throw NoSuchElementException(); Any aResult = *m_aFrames.begin(); m_aFrames.pop_front(); return aResult; } template OUString SwXFrameEnumeration::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXFrameEnumeration"); } template sal_Bool SwXFrameEnumeration::supportsService(const OUString& ServiceName) throw( RuntimeException ) { return C2U("com.sun.star.container.XEnumeration") == ServiceName; } template Sequence< OUString > SwXFrameEnumeration::getSupportedServiceNames(void) throw( RuntimeException ) { return ::comphelper::makeSequence(C2U("com.sun.star.container.XEnumeration")); } /****************************************************************** * SwXFrames ******************************************************************/ OUString SwXFrames::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXFrames"); } sal_Bool SwXFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.TextFrames") == rServiceName; } Sequence SwXFrames::getSupportedServiceNames(void) throw( RuntimeException ) { return ::comphelper::makeSequence(C2U("com.sun.star.text.TextFrames")); } SwXFrames::SwXFrames(SwDoc* _pDoc, FlyCntType eSet) : SwUnoCollection(_pDoc), eType(eSet) {} SwXFrames::~SwXFrames() {} uno::Reference SwXFrames::createEnumeration(void) throw(uno::RuntimeException) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); switch(eType) { case FLYCNTTYPE_FRM: return uno::Reference< container::XEnumeration >( new SwXFrameEnumeration(GetDoc())); case FLYCNTTYPE_GRF: return uno::Reference< container::XEnumeration >( new SwXFrameEnumeration(GetDoc())); case FLYCNTTYPE_OLE: return uno::Reference< container::XEnumeration >( new SwXFrameEnumeration(GetDoc())); default: throw uno::RuntimeException(); } } sal_Int32 SwXFrames::getCount(void) throw(uno::RuntimeException) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->GetFlyCount(eType); } uno::Any SwXFrames::getByIndex(sal_Int32 nIndex) throw(IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); if(nIndex < 0 || nIndex >= USHRT_MAX) throw IndexOutOfBoundsException(); SwFrmFmt* pFmt = GetDoc()->GetFlyNum(static_cast(nIndex), eType); if(!pFmt) throw IndexOutOfBoundsException(); return lcl_UnoWrapFrame(pFmt, eType); } uno::Any SwXFrames::getByName(const OUString& rName) throw(NoSuchElementException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); const SwFrmFmt* pFmt; switch(eType) { case FLYCNTTYPE_GRF: pFmt = GetDoc()->FindFlyByName(rName, ND_GRFNODE); break; case FLYCNTTYPE_OLE: pFmt = GetDoc()->FindFlyByName(rName, ND_OLENODE); break; default: pFmt = GetDoc()->FindFlyByName(rName, ND_TEXTNODE); break; } if(!pFmt) throw NoSuchElementException(); return lcl_UnoWrapFrame(const_cast(pFmt), eType); } uno::Sequence SwXFrames::getElementNames(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); const Reference xEnum = createEnumeration(); ::std::vector vNames; while(xEnum->hasMoreElements()) { Reference xNamed; xEnum->nextElement() >>= xNamed; if(xNamed.is()) vNames.push_back(xNamed->getName()); } return ::comphelper::containerToSequence(vNames); } sal_Bool SwXFrames::hasByName(const OUString& rName) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); switch(eType) { case FLYCNTTYPE_GRF: return GetDoc()->FindFlyByName(rName, ND_GRFNODE) != NULL; case FLYCNTTYPE_OLE: return GetDoc()->FindFlyByName(rName, ND_OLENODE) != NULL; default: return GetDoc()->FindFlyByName(rName, ND_TEXTNODE) != NULL; } } uno::Type SAL_CALL SwXFrames::getElementType() throw(uno::RuntimeException) { SolarMutexGuard aGuard; switch(eType) { case FLYCNTTYPE_FRM: return ::getCppuType((uno::Reference*)0); case FLYCNTTYPE_GRF: return ::getCppuType((uno::Reference*)0); case FLYCNTTYPE_OLE: return ::getCppuType((uno::Reference*)0); default: return uno::Type(); } } sal_Bool SwXFrames::hasElements(void) throw(uno::RuntimeException) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->GetFlyCount(eType) > 0; } SwXFrame* SwXFrames::GetObject(SwFrmFmt& rFmt, FlyCntType eType) { SwXFrame* pFrm = (SwXFrame*)SwClientIter(rFmt).First(TYPE(SwXFrame)); if(pFrm) return pFrm; switch(eType) { case FLYCNTTYPE_FRM: return new SwXTextFrame(rFmt); case FLYCNTTYPE_GRF: return new SwXTextGraphicObject(rFmt); case FLYCNTTYPE_OLE: return new SwXTextEmbeddedObject(rFmt); default: return NULL; } } /****************************************************************** * SwXTextFrames ******************************************************************/ OUString SwXTextFrames::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXTextFrames"); } sal_Bool SwXTextFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.TextFrames") == rServiceName; } Sequence< OUString > SwXTextFrames::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); OUString* pArray = aRet.getArray(); pArray[0] = C2U("com.sun.star.text.TextFrames"); return aRet; } SwXTextFrames::SwXTextFrames(SwDoc* _pDoc) : SwXFrames(_pDoc, FLYCNTTYPE_FRM) { } SwXTextFrames::~SwXTextFrames() { } /****************************************************************** * SwXTextGraphicObjects ******************************************************************/ //SMART_UNO_IMPLEMENTATION( SwXTextGraphicObjects, UsrObject ); OUString SwXTextGraphicObjects::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXTextGraphicObjects"); } sal_Bool SwXTextGraphicObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.TextGraphicObjects") == rServiceName; } Sequence< OUString > SwXTextGraphicObjects::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); OUString* pArray = aRet.getArray(); pArray[0] = C2U("com.sun.star.text.TextGraphicObjects"); return aRet; } SwXTextGraphicObjects::SwXTextGraphicObjects(SwDoc* _pDoc) : SwXFrames(_pDoc, FLYCNTTYPE_GRF) { } SwXTextGraphicObjects::~SwXTextGraphicObjects() { } /****************************************************************** * SwXTextEmbeddedObjects ******************************************************************/ OUString SwXTextEmbeddedObjects::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXTextEmbeddedObjects"); } sal_Bool SwXTextEmbeddedObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.TextEmbeddedObjects") == rServiceName; } Sequence< OUString > SwXTextEmbeddedObjects::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); OUString* pArray = aRet.getArray(); pArray[0] = C2U("com.sun.star.text.TextEmbeddedObjects"); return aRet; } SwXTextEmbeddedObjects::SwXTextEmbeddedObjects(SwDoc* _pDoc) : SwXFrames(_pDoc, FLYCNTTYPE_OLE) { } SwXTextEmbeddedObjects::~SwXTextEmbeddedObjects() { } #define PASSWORD_STD_TIMEOUT 1000 OUString SwXTextSections::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXTextSections"); } sal_Bool SwXTextSections::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.TextSections") == rServiceName; } Sequence< OUString > SwXTextSections::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); OUString* pArray = aRet.getArray(); pArray[0] = C2U("com.sun.star.text.TextSections"); return aRet; } SwXTextSections::SwXTextSections(SwDoc* _pDoc) : SwUnoCollection(_pDoc) { } SwXTextSections::~SwXTextSections() { } sal_Int32 SwXTextSections::getCount(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); const SwSectionFmts& rSectFmts = GetDoc()->GetSections(); sal_uInt16 nCount = rSectFmts.Count(); for(sal_uInt16 i = nCount; i; i--) { if( !rSectFmts[i - 1]->IsInNodesArr()) nCount--; } return nCount; } uno::Any SwXTextSections::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Reference< XTextSection > xRet; if(IsValid()) { SwSectionFmts& rFmts = GetDoc()->GetSections(); const SwSectionFmts& rSectFmts = GetDoc()->GetSections(); sal_uInt16 nCount = rSectFmts.Count(); for(sal_uInt16 i = 0; i < nCount; i++) { if( !rSectFmts[i]->IsInNodesArr()) nIndex ++; else if(nIndex == i) break; if(nIndex == i) break; } if(nIndex >= 0 && nIndex < rFmts.Count()) { SwSectionFmt* pFmt = rFmts[(sal_uInt16)nIndex]; xRet = GetObject(*pFmt); } else throw IndexOutOfBoundsException(); } else throw uno::RuntimeException(); return makeAny(xRet); } uno::Any SwXTextSections::getByName(const OUString& Name) throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(IsValid()) { String aName(Name); SwSectionFmts& rFmts = GetDoc()->GetSections(); uno::Reference< XTextSection > xSect; for(sal_uInt16 i = 0; i < rFmts.Count(); i++) { SwSectionFmt* pFmt = rFmts[i]; if (pFmt->IsInNodesArr() && (aName == pFmt->GetSection()->GetSectionName())) { xSect = GetObject(*pFmt); aRet.setValue(&xSect, ::getCppuType((uno::Reference*)0)); break; } } if(!xSect.is()) throw NoSuchElementException(); } else throw uno::RuntimeException(); return aRet; } uno::Sequence< OUString > SwXTextSections::getElementNames(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); sal_uInt16 nCount = GetDoc()->GetSections().Count(); SwSectionFmts& rSectFmts = GetDoc()->GetSections(); for(sal_uInt16 i = nCount; i; i--) { if( !rSectFmts[i - 1]->IsInNodesArr()) nCount--; } uno::Sequence aSeq(nCount); if(nCount) { SwSectionFmts& rFmts = GetDoc()->GetSections(); OUString* pArray = aSeq.getArray(); sal_uInt16 nIndex = 0; for( sal_uInt16 i = 0; i < nCount; i++, nIndex++) { const SwSectionFmt* pFmt = rFmts[nIndex]; while(!pFmt->IsInNodesArr()) { pFmt = rFmts[++nIndex]; } pArray[i] = pFmt->GetSection()->GetSectionName(); } } return aSeq; } sal_Bool SwXTextSections::hasByName(const OUString& Name) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; sal_Bool bRet = sal_False; String aName(Name); if(IsValid()) { SwSectionFmts& rFmts = GetDoc()->GetSections(); for(sal_uInt16 i = 0; i < rFmts.Count(); i++) { const SwSectionFmt* pFmt = rFmts[i]; if (aName == pFmt->GetSection()->GetSectionName()) { bRet = sal_True; break; } } } else { //Sonderbehandlung der dbg_ - Methoden if( COMPARE_EQUAL != aName.CompareToAscii("dbg_", 4)) throw uno::RuntimeException(); } return bRet; } uno::Type SAL_CALL SwXTextSections::getElementType() throw(uno::RuntimeException) { return ::getCppuType((uno::Reference*)0); } sal_Bool SwXTextSections::hasElements(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; sal_uInt16 nCount = 0; if(IsValid()) { SwSectionFmts& rFmts = GetDoc()->GetSections(); nCount = rFmts.Count(); } else throw uno::RuntimeException(); return nCount > 0; } uno::Reference< XTextSection > SwXTextSections::GetObject( SwSectionFmt& rFmt ) { return SwXTextSection::CreateXTextSection(&rFmt); } OUString SwXBookmarks::getImplementationName(void) throw( RuntimeException ) { return OUString(RTL_CONSTASCII_USTRINGPARAM("SwXBookmarks")); } sal_Bool SwXBookmarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Bookmarks")) == rServiceName; } Sequence< OUString > SwXBookmarks::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); aRet[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Bookmarks")); return aRet; } SwXBookmarks::SwXBookmarks(SwDoc* _pDoc) : SwUnoCollection(_pDoc) { } SwXBookmarks::~SwXBookmarks() { } sal_Int32 SwXBookmarks::getCount(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->getIDocumentMarkAccess()->getMarksCount(); } uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); if(nIndex < 0 || nIndex >= pMarkAccess->getMarksCount()) throw IndexOutOfBoundsException(); uno::Any aRet; ::sw::mark::IMark* pBkmk = pMarkAccess->getMarksBegin()[nIndex].get(); const uno::Reference< text::XTextContent > xRef = SwXBookmark::CreateXBookmark(*GetDoc(), *pBkmk); aRet <<= xRef; return aRet; } uno::Any SwXBookmarks::getByName(const rtl::OUString& rName) throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->findMark(rName); if(ppBkmk == pMarkAccess->getMarksEnd()) throw NoSuchElementException(); uno::Any aRet; const uno::Reference< text::XTextContent > xRef = SwXBookmark::CreateXBookmark(*GetDoc(), *(ppBkmk->get())); aRet <<= xRef; return aRet; } uno::Sequence< OUString > SwXBookmarks::getElementNames(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); uno::Sequence aSeq(pMarkAccess->getMarksCount()); sal_Int32 nCnt = 0; for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getMarksBegin(); ppMark != pMarkAccess->getMarksEnd();) aSeq[nCnt++] = (*ppMark++)->GetName(); return aSeq; } sal_Bool SwXBookmarks::hasByName(const OUString& rName) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); return pMarkAccess->findMark(rName) != pMarkAccess->getMarksEnd(); } uno::Type SAL_CALL SwXBookmarks::getElementType() throw(uno::RuntimeException) { return ::getCppuType((uno::Reference*)0); } sal_Bool SwXBookmarks::hasElements(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->getIDocumentMarkAccess()->getBookmarksCount() != 0; } SwXNumberingRulesCollection::SwXNumberingRulesCollection( SwDoc* _pDoc ) : SwUnoCollection(_pDoc) { } SwXNumberingRulesCollection::~SwXNumberingRulesCollection() { } sal_Int32 SwXNumberingRulesCollection::getCount(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->GetNumRuleTbl().Count(); } uno::Any SwXNumberingRulesCollection::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(IsValid()) { uno::Reference< XIndexReplace > xRef; if ( nIndex < GetDoc()->GetNumRuleTbl().Count() ) { xRef = new SwXNumberingRules( *GetDoc()->GetNumRuleTbl()[ static_cast< USHORT >(nIndex) ] ); aRet.setValue(&xRef, ::getCppuType((uno::Reference*)0)); } if(!xRef.is()) throw IndexOutOfBoundsException(); } else throw uno::RuntimeException(); return aRet; } uno::Type SAL_CALL SwXNumberingRulesCollection::getElementType() throw(uno::RuntimeException) { return ::getCppuType((uno::Reference*)0); } sal_Bool SwXNumberingRulesCollection::hasElements(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->GetNumRuleTbl().Count() > 0; } OUString SwXFootnotes::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXFootnotes"); } sal_Bool SwXFootnotes::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.Footnotes") == rServiceName; } Sequence< OUString > SwXFootnotes::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); OUString* pArray = aRet.getArray(); pArray[0] = C2U("com.sun.star.text.Footnotes"); return aRet; } SwXFootnotes::SwXFootnotes(sal_Bool bEnd, SwDoc* _pDoc) : SwUnoCollection(_pDoc) , m_bEndnote(bEnd) { } SwXFootnotes::~SwXFootnotes() { } sal_Int32 SwXFootnotes::getCount(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); sal_Int32 nCount = 0; sal_uInt16 n, nFtnCnt = GetDoc()->GetFtnIdxs().Count(); SwTxtFtn* pTxtFtn; for( n = 0; n < nFtnCnt; ++n ) { pTxtFtn = GetDoc()->GetFtnIdxs()[ n ]; const SwFmtFtn& rFtn = pTxtFtn->GetFtn(); if ( rFtn.IsEndNote() != m_bEndnote ) continue; nCount++; } return nCount; } uno::Any SwXFootnotes::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(IsValid()) { sal_uInt16 n, nFtnCnt = GetDoc()->GetFtnIdxs().Count(); SwTxtFtn* pTxtFtn; uno::Reference< XFootnote > xRef; sal_Int32 nCount = 0; for( n = 0; n < nFtnCnt; ++n ) { pTxtFtn = GetDoc()->GetFtnIdxs()[ n ]; const SwFmtFtn& rFtn = pTxtFtn->GetFtn(); if ( rFtn.IsEndNote() != m_bEndnote ) continue; if(nCount == nIndex) { xRef = SwXFootnote::CreateXFootnote(*GetDoc(), rFtn); aRet <<= xRef; break; } nCount++; } if(!xRef.is()) throw IndexOutOfBoundsException(); } else throw uno::RuntimeException(); return aRet; } uno::Type SAL_CALL SwXFootnotes::getElementType() throw(uno::RuntimeException) { return ::getCppuType((uno::Reference*)0); } sal_Bool SwXFootnotes::hasElements(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->GetFtnIdxs().Count() > 0; } Reference SwXFootnotes::GetObject( SwDoc& rDoc, const SwFmtFtn& rFmt ) { return SwXFootnote::CreateXFootnote(rDoc, rFmt); } OUString SwXReferenceMarks::getImplementationName(void) throw( RuntimeException ) { return C2U("SwXReferenceMarks"); } sal_Bool SwXReferenceMarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) { return C2U("com.sun.star.text.ReferenceMarks") == rServiceName; } Sequence< OUString > SwXReferenceMarks::getSupportedServiceNames(void) throw( RuntimeException ) { Sequence< OUString > aRet(1); OUString* pArray = aRet.getArray(); pArray[0] = C2U("com.sun.star.text.ReferenceMarks"); return aRet; } SwXReferenceMarks::SwXReferenceMarks(SwDoc* _pDoc) : SwUnoCollection(_pDoc) { } SwXReferenceMarks::~SwXReferenceMarks() { } sal_Int32 SwXReferenceMarks::getCount(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return GetDoc()->GetRefMarks(); } uno::Any SwXReferenceMarks::getByIndex(sal_Int32 nIndex) throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(!IsValid()) throw uno::RuntimeException(); uno::Reference< XTextContent > xRef; if(0 <= nIndex && nIndex < USHRT_MAX) { const SwFmtRefMark* pMark = GetDoc()->GetRefMark( (sal_uInt16) nIndex ); if(pMark) { xRef = SwXReferenceMarks::GetObject( GetDoc(), pMark ); aRet.setValue(&xRef, ::getCppuType((uno::Reference*)0)); } } if(!xRef.is()) throw IndexOutOfBoundsException(); return aRet; } uno::Any SwXReferenceMarks::getByName(const OUString& rName) throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Any aRet; if(IsValid()) { const SwFmtRefMark* pMark = GetDoc()->GetRefMark(rName); if(pMark) { uno::Reference< XTextContent > xRef = SwXReferenceMarks::GetObject( GetDoc(), pMark ); aRet.setValue(&xRef, ::getCppuType((uno::Reference*)0)); } else throw NoSuchElementException(); } else throw uno::RuntimeException(); return aRet; } uno::Sequence< OUString > SwXReferenceMarks::getElementNames(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; uno::Sequence aRet; if(IsValid()) { SvStringsDtor aStrings; sal_uInt16 nCount = GetDoc()->GetRefMarks( &aStrings ); aRet.realloc(nCount); OUString* pNames = aRet.getArray(); for(sal_uInt16 i = 0; i < nCount; i++) pNames[i] = *aStrings.GetObject(i); } else throw uno::RuntimeException(); return aRet; } sal_Bool SwXReferenceMarks::hasByName(const OUString& rName) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return 0 != GetDoc()->GetRefMark( rName); } uno::Type SAL_CALL SwXReferenceMarks::getElementType() throw(uno::RuntimeException) { return ::getCppuType((uno::Reference*)0); } sal_Bool SwXReferenceMarks::hasElements(void) throw( uno::RuntimeException ) { SolarMutexGuard aGuard; if(!IsValid()) throw uno::RuntimeException(); return 0 != GetDoc()->GetRefMarks(); } SwXReferenceMark* SwXReferenceMarks::GetObject( SwDoc* pDoc, const SwFmtRefMark* pMark ) { SolarMutexGuard aGuard; return SwXReferenceMark::CreateXReferenceMark(*pDoc, *pMark); } /*-------------------------------------------------- Gueltigkeitspruefung --------------------------------------------------*/ void SwUnoCollection::Invalidate() { bObjectValid = sal_False; pDoc = 0; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */