diff options
Diffstat (limited to 'sw/source/core/unocore/unocoll.cxx')
-rw-r--r-- | sw/source/core/unocore/unocoll.cxx | 1930 |
1 files changed, 1930 insertions, 0 deletions
diff --git a/sw/source/core/unocore/unocoll.cxx b/sw/source/core/unocore/unocoll.cxx new file mode 100644 index 000000000000..0b8f938d307d --- /dev/null +++ b/sw/source/core/unocore/unocoll.cxx @@ -0,0 +1,1930 @@ +/************************************************************************* + * + * 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 <swtypes.hxx> +#include <cmdid.h> +#include <hintids.hxx> +#ifndef _SVX_SVXIDS_HRC //autogen +#include <svx/svxids.hrc> +#endif +#include <doc.hxx> +#include <docary.hxx> +#include <fmtcol.hxx> +#include <poolfmt.hxx> +#include <unocoll.hxx> +#include <unosett.hxx> +#include <fmtanchr.hxx> +#include <ndtxt.hxx> +#include <section.hxx> +#include <IMark.hxx> +#include <ftnidx.hxx> +#include <fmtftn.hxx> +#include <txtftn.hxx> +#include <fmtpdsc.hxx> +#include <pagedesc.hxx> +#include <vos/mutex.hxx> +#include <com/sun/star/text/XTextTableCursor.hpp> +#include <com/sun/star/text/XTextTablesSupplier.hpp> +#include <com/sun/star/text/TableColumnSeparator.hpp> +#include <com/sun/star/text/XTextTable.hpp> +#include <svl/PasswordHelper.hxx> +#include <svtools/unoimap.hxx> +#include <svtools/unoevent.hxx> +#include <unotbl.hxx> +#include <unostyle.hxx> +#include <unofield.hxx> +#include <unoidx.hxx> +#include <unoframe.hxx> +#include <unofootnote.hxx> +#include <vcl/svapp.hxx> +#include <fmtcntnt.hxx> +#include <authfld.hxx> +#include <SwXTextDefaults.hxx> +#include <unochart.hxx> +#include <comphelper/makesequence.hxx> +#include <comphelper/sequence.hxx> +#include <slist> +#include <iterator> + +#include <unosection.hxx> +#include <unoparagraph.hxx> +#include <unobookmark.hxx> +#include <unorefmark.hxx> +#include <unometa.hxx> +#include "docsh.hxx" + + +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; + +/****************************************************************************** + * + ******************************************************************************/ +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 __FAR_DATA 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 }, + + // 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 } +}; + +/* -----------------------------23.03.01 13:38-------------------------------- + + ---------------------------------------------------------------------------*/ +const SvEventDescription* lcl_GetSupportedMacroItems() +{ + static const SvEventDescription aMacroDescriptionsImpl[] = + { + { SFX_EVENT_MOUSEOVER_OBJECT, "OnMouseOver" }, + { SFX_EVENT_MOUSEOUT_OBJECT, "OnMouseOut" }, + { 0, NULL } + }; + + return aMacroDescriptionsImpl; +} + +/****************************************************************** + * SwXServiceProvider + ******************************************************************/ +/*-- 13.01.99 13:31:44--------------------------------------------------- + + -----------------------------------------------------------------------*/ +OUString SwXServiceProvider::GetProviderName(sal_uInt16 nObjectType) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + OUString sRet; + sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); + if(nObjectType < nEntries) + sRet = C2U(aProvNamesId[nObjectType].pName); + return sRet; +} +/* -----------------11.03.99 12:05------------------- + * + * --------------------------------------------------*/ +uno::Sequence<OUString> SwXServiceProvider::GetAllServiceNames() +{ + sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); + uno::Sequence<OUString> aRet(nEntries); + OUString* pArray = aRet.getArray(); + sal_uInt16 n = 0; + for(sal_uInt16 i = 0; i < nEntries; i++) + { + String sProv(C2U(aProvNamesId[i].pName)); + if(sProv.Len()) + { + pArray[n] = sProv; + n++; + } + } + aRet.realloc(n); + return aRet; + +} + +/*-- 13.01.99 13:31:45--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_uInt16 SwXServiceProvider::GetProviderType(const OUString& rServiceName) +{ + sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); + for(sal_uInt16 i = 0; i < nEntries; i++ ) + { + if( COMPARE_EQUAL == rServiceName.compareToAscii(aProvNamesId[i].pName)) + return aProvNamesId[i].nType; + } + return SW_SERVICE_INVALID; +} +/* -----------------13.01.99 14:37------------------- + * + * --------------------------------------------------*/ +uno::Reference< uno::XInterface > SwXServiceProvider::MakeInstance(sal_uInt16 nObjectType, SwDoc* pDoc) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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_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 ); + +/*-- 13.01.99 12:56:24--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextTables::SwXTextTables(SwDoc* pDc) : + SwUnoCollection(pDc) +{ + +} +/*-- 13.01.99 12:56:25--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextTables::~SwXTextTables() +{ + +} +/*-- 13.01.99 12:56:25--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int32 SwXTextTables::getCount(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + sal_Int32 nRet = 0; + if(IsValid()) + nRet = GetDoc()->GetTblFrmFmtCount(sal_True); + return nRet; +} +/*-- 13.01.99 12:56:26--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SAL_CALL SwXTextTables::getByIndex(sal_Int32 nIndex) + throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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; +} +/*-- 13.01.99 12:56:26--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXTextTables::getByName(const OUString& rItemName) + throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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; +} +/*-- 13.01.99 12:56:26--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Sequence< OUString > SwXTextTables::getElementNames(void) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True); + uno::Sequence<OUString> 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; +} +/*-- 13.01.99 12:56:27--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXTextTables::hasByName(const OUString& rName) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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; +} +/*-- 13.01.99 12:56:27--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Type SAL_CALL + SwXTextTables::getElementType( ) + throw(uno::RuntimeException) +{ + return ::getCppuType((uno::Reference<XTextTable>*)0); +} +/*-- 13.01.99 12:56:27--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXTextTables::hasElements(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return 0 != GetDoc()->GetTblFrmFmtCount(sal_True); +} +/* -----------------25.10.99 16:01------------------- + + --------------------------------------------------*/ +OUString SwXTextTables::getImplementationName(void) throw( uno::RuntimeException ) +{ + return C2U("SwXTextTables"); +} +/* -----------------25.10.99 16:01------------------- + + --------------------------------------------------*/ +sal_Bool SwXTextTables::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) +{ + return rServiceName == C2U("com.sun.star.text.TextTables"); +} +/* -----------------25.10.99 16:01------------------- + + --------------------------------------------------*/ +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; +} +/*-- 13.01.99 12:56:28--------------------------------------------------- + + -----------------------------------------------------------------------*/ +XTextTable* SwXTextTables::GetObject( SwFrmFmt& rFmt ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + SwXTextTable* pTbl = (SwXTextTable*)SwClientIter( rFmt ). + First( TYPE( SwXTextTable )); + if( !pTbl ) + pTbl = new SwXTextTable(rFmt); + return pTbl ; +} + + +/****************************************************************** + * SwXFrameEnumeration + ******************************************************************/ +namespace +{ + template<FlyCntType T> struct UnoFrameWrap_traits {}; + + template<> + struct UnoFrameWrap_traits<FLYCNTTYPE_FRM> + { + 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<FLYCNTTYPE_GRF> + { + 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<FLYCNTTYPE_OLE> + { + typedef SwXTextEmbeddedObject core_frame_t; + typedef XEmbeddedObjectSupplier uno_frame_t; + static inline bool filter(const SwNode* const pNode) { return pNode->IsOLENode(); }; + }; + + template<FlyCntType T> + static uno::Any lcl_UnoWrapFrame(SwFrmFmt* pFmt) + { + SwXFrame* pFrm = static_cast<SwXFrame*>(SwClientIter(*pFmt).First(TYPE(SwXFrame))); + if(!pFrm) + pFrm = new typename UnoFrameWrap_traits<T>::core_frame_t(*pFmt); + Reference< typename UnoFrameWrap_traits<T>::uno_frame_t > xFrm = + static_cast< typename UnoFrameWrap_traits<T>::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<FLYCNTTYPE_FRM>(pFmt); + case FLYCNTTYPE_GRF: + return lcl_UnoWrapFrame<FLYCNTTYPE_GRF>(pFmt); + case FLYCNTTYPE_OLE: + return lcl_UnoWrapFrame<FLYCNTTYPE_OLE>(pFmt); + default: + throw uno::RuntimeException(); + } + } + + template<FlyCntType T> + class SwXFrameEnumeration + : public SwSimpleEnumeration_Base + { + private: + typedef ::std::slist< 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<FlyCntType T> +SwXFrameEnumeration<T>::SwXFrameEnumeration(const SwDoc* const pDoc) + : m_aFrames() +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<frmcontainer_t> pInserter = ::std::insert_iterator<frmcontainer_t>(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<T>::filter(pNd)) + *pInserter++ = lcl_UnoWrapFrame<T>(pFmt); + } +} + +template<FlyCntType T> +sal_Bool SwXFrameEnumeration<T>::hasMoreElements(void) throw( RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + return !m_aFrames.empty(); +} + +template<FlyCntType T> +Any SwXFrameEnumeration<T>::nextElement(void) throw( NoSuchElementException, WrappedTargetException, RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(m_aFrames.empty()) + throw NoSuchElementException(); + Any aResult = *m_aFrames.begin(); + m_aFrames.pop_front(); + return aResult; +} + +template<FlyCntType T> +OUString SwXFrameEnumeration<T>::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXFrameEnumeration"); +} + +template<FlyCntType T> +sal_Bool SwXFrameEnumeration<T>::supportsService(const OUString& ServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.container.XEnumeration") == ServiceName; +} + +template<FlyCntType T> +Sequence< OUString > SwXFrameEnumeration<T>::getSupportedServiceNames(void) throw( RuntimeException ) +{ + return ::comphelper::makeSequence(C2U("com.sun.star.container.XEnumeration")); +} + +/****************************************************************** + * SwXFrames + ******************************************************************/ +OUString SwXFrames::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXFrames"); +} + +BOOL SwXFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.TextFrames") == rServiceName; +} + +Sequence<OUString> 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<container::XEnumeration> SwXFrames::createEnumeration(void) throw(uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + switch(eType) + { + case FLYCNTTYPE_FRM: + return uno::Reference< container::XEnumeration >( + new SwXFrameEnumeration<FLYCNTTYPE_FRM>(GetDoc())); + case FLYCNTTYPE_GRF: + return uno::Reference< container::XEnumeration >( + new SwXFrameEnumeration<FLYCNTTYPE_GRF>(GetDoc())); + case FLYCNTTYPE_OLE: + return uno::Reference< container::XEnumeration >( + new SwXFrameEnumeration<FLYCNTTYPE_OLE>(GetDoc())); + default: + throw uno::RuntimeException(); + } +} + +sal_Int32 SwXFrames::getCount(void) throw(uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return GetDoc()->GetFlyCount(eType); +} + +uno::Any SwXFrames::getByIndex(sal_Int32 nIndex) + throw(IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + if(nIndex < 0 || nIndex >= USHRT_MAX) + throw IndexOutOfBoundsException(); + SwFrmFmt* pFmt = GetDoc()->GetFlyNum(static_cast<sal_uInt16>(nIndex), eType); + if(!pFmt) + throw IndexOutOfBoundsException(); + return lcl_UnoWrapFrame(pFmt, eType); +} + +uno::Any SwXFrames::getByName(const OUString& rName) + throw(NoSuchElementException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<SwFrmFmt*>(pFmt), eType); +} + +uno::Sequence<OUString> SwXFrames::getElementNames(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + const Reference<XEnumeration> xEnum = createEnumeration(); + ::std::vector<OUString> vNames; + while(xEnum->hasMoreElements()) + { + Reference<container::XNamed> 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 ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + switch(eType) + { + case FLYCNTTYPE_FRM: + return ::getCppuType((uno::Reference<XTextFrame>*)0); + case FLYCNTTYPE_GRF: + return ::getCppuType((uno::Reference<XTextContent>*)0); + case FLYCNTTYPE_OLE: + return ::getCppuType((uno::Reference<XEmbeddedObjectSupplier>*)0); + default: + return uno::Type(); + } +} + +sal_Bool SwXFrames::hasElements(void) throw(uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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 + ******************************************************************/ +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXTextFrames::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXTextFrames"); +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXTextFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.TextFrames") == rServiceName; +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +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; +} +/*-- 14.01.99 08:06:16--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextFrames::SwXTextFrames(SwDoc* _pDoc) : + SwXFrames(_pDoc, FLYCNTTYPE_FRM) +{ +} +/*-- 14.01.99 08:06:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextFrames::~SwXTextFrames() +{ +} + +/****************************************************************** + * SwXTextGraphicObjects + ******************************************************************/ +//SMART_UNO_IMPLEMENTATION( SwXTextGraphicObjects, UsrObject ); + +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXTextGraphicObjects::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXTextGraphicObjects"); +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXTextGraphicObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.TextGraphicObjects") == rServiceName; +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +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; +} +/*-- 14.01.99 08:45:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextGraphicObjects::SwXTextGraphicObjects(SwDoc* _pDoc) : + SwXFrames(_pDoc, FLYCNTTYPE_GRF) +{ +} +/*-- 14.01.99 08:45:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextGraphicObjects::~SwXTextGraphicObjects() +{ +} + +/****************************************************************** + * SwXTextEmbeddedObjects + ******************************************************************/ +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXTextEmbeddedObjects::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXTextEmbeddedObjects"); +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXTextEmbeddedObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.TextEmbeddedObjects") == rServiceName; +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +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; +} +/*-- 14.01.99 08:45:13--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextEmbeddedObjects::SwXTextEmbeddedObjects(SwDoc* _pDoc) : + SwXFrames(_pDoc, FLYCNTTYPE_OLE) +{ +} +/*-- 14.01.99 08:45:31--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextEmbeddedObjects::~SwXTextEmbeddedObjects() +{ +} + +/****************************************************************** + * + ******************************************************************/ +#define PASSWORD_STD_TIMEOUT 1000 +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXTextSections::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXTextSections"); +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXTextSections::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.TextSections") == rServiceName; +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +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; +} +/*-- 14.01.99 09:06:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextSections::SwXTextSections(SwDoc* _pDoc) : + SwUnoCollection(_pDoc) +{ +} +/*-- 14.01.99 09:06:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXTextSections::~SwXTextSections() +{ +} +/*-- 14.01.99 09:06:05--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int32 SwXTextSections::getCount(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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; +} +/*-- 14.01.99 09:06:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXTextSections::getByIndex(sal_Int32 nIndex) + throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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); +} +/*-- 14.01.99 09:06:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXTextSections::getByName(const OUString& Name) + throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<XTextSection>*)0)); + break; + } + } + if(!xSect.is()) + throw NoSuchElementException(); + } + else + throw uno::RuntimeException(); + return aRet; +} +/*-- 14.01.99 09:06:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Sequence< OUString > SwXTextSections::getElementNames(void) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<OUString> 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; +} +/*-- 14.01.99 09:06:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXTextSections::hasByName(const OUString& Name) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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; +} +/*-- 14.01.99 09:06:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Type SAL_CALL SwXTextSections::getElementType() throw(uno::RuntimeException) +{ + return ::getCppuType((uno::Reference<XTextSection>*)0); +} +/*-- 14.01.99 09:06:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXTextSections::hasElements(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + sal_uInt16 nCount = 0; + if(IsValid()) + { + SwSectionFmts& rFmts = GetDoc()->GetSections(); + nCount = rFmts.Count(); + } + else + throw uno::RuntimeException(); + return nCount > 0; +} +/*-- 14.01.99 09:06:07--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< XTextSection > SwXTextSections::GetObject( SwSectionFmt& rFmt ) +{ + return SwXTextSection::CreateXTextSection(&rFmt); +} + +OUString SwXBookmarks::getImplementationName(void) throw( RuntimeException ) +{ + return OUString::createFromAscii("SwXBookmarks"); +} + +BOOL SwXBookmarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return OUString::createFromAscii("com.sun.star.text.Bookmarks") == rServiceName; +} + +Sequence< OUString > SwXBookmarks::getSupportedServiceNames(void) throw( RuntimeException ) +{ + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii("com.sun.star.text.Bookmarks"); + return aRet; +} + +SwXBookmarks::SwXBookmarks(SwDoc* _pDoc) : + SwUnoCollection(_pDoc) +{ } + +SwXBookmarks::~SwXBookmarks() +{ } + +sal_Int32 SwXBookmarks::getCount(void) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return GetDoc()->getIDocumentMarkAccess()->getBookmarksCount(); +} + +uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex) + throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); + if(nIndex < 0 || nIndex >= pMarkAccess->getBookmarksCount()) + throw IndexOutOfBoundsException(); + + uno::Any aRet; + ::sw::mark::IMark* pBkmk = pMarkAccess->getBookmarksBegin()[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 ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + + IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); + IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->findBookmark(rName); + if(ppBkmk == pMarkAccess->getBookmarksEnd()) + 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 ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + + IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); + uno::Sequence<OUString> aSeq(pMarkAccess->getBookmarksCount()); + sal_Int32 nCnt = 0; + for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getBookmarksBegin(); + ppMark != pMarkAccess->getBookmarksEnd();) + aSeq[nCnt++] = (*ppMark++)->GetName(); + return aSeq; +} + +sal_Bool SwXBookmarks::hasByName(const OUString& rName) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + + IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess(); + return pMarkAccess->findBookmark(rName) != pMarkAccess->getBookmarksEnd(); +} + +uno::Type SAL_CALL SwXBookmarks::getElementType() + throw(uno::RuntimeException) +{ + return ::getCppuType((uno::Reference<XTextContent>*)0); +} + +sal_Bool SwXBookmarks::hasElements(void) + throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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 ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return GetDoc()->GetNumRuleTbl().Count(); +} + +uno::Any SwXNumberingRulesCollection::getByIndex(sal_Int32 nIndex) + throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<XIndexReplace>*)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<XIndexReplace>*)0); +} + +sal_Bool SwXNumberingRulesCollection::hasElements(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return GetDoc()->GetNumRuleTbl().Count() > 0; +} + +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXFootnotes::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXFootnotes"); +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXFootnotes::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.Footnotes") == rServiceName; +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +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; +} +/*-- 14.01.99 09:03:52--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXFootnotes::SwXFootnotes(sal_Bool bEnd, SwDoc* _pDoc) + : SwUnoCollection(_pDoc) + , m_bEndnote(bEnd) +{ +} +/*-- 14.01.99 09:03:52--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXFootnotes::~SwXFootnotes() +{ +} +/*-- 14.01.99 09:03:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int32 SwXFootnotes::getCount(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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; +} +/*-- 14.01.99 09:03:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXFootnotes::getByIndex(sal_Int32 nIndex) + throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Any aRet; + sal_Int32 nCount = 0; + if(IsValid()) + { + sal_uInt16 n, nFtnCnt = GetDoc()->GetFtnIdxs().Count(); + SwTxtFtn* pTxtFtn; + uno::Reference< XFootnote > xRef; + 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; +} +/*-- 14.01.99 09:03:53--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Type SAL_CALL SwXFootnotes::getElementType() throw(uno::RuntimeException) +{ + return ::getCppuType((uno::Reference<XFootnote>*)0); +} +/*-- 14.01.99 09:03:54--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXFootnotes::hasElements(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return GetDoc()->GetFtnIdxs().Count() > 0; +} +/* -----------------------------05.09.00 12:48-------------------------------- + + ---------------------------------------------------------------------------*/ +Reference<XFootnote> SwXFootnotes::GetObject( SwDoc& rDoc, const SwFmtFtn& rFmt ) +{ + return SwXFootnote::CreateXFootnote(rDoc, rFmt); +} + +/****************************************************************** + * + ******************************************************************/ +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +OUString SwXReferenceMarks::getImplementationName(void) throw( RuntimeException ) +{ + return C2U("SwXReferenceMarks"); +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +BOOL SwXReferenceMarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return C2U("com.sun.star.text.ReferenceMarks") == rServiceName; +} +/* -----------------------------06.04.00 12:44-------------------------------- + + ---------------------------------------------------------------------------*/ +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; +} +/*-- 14.01.99 09:03:16--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXReferenceMarks::SwXReferenceMarks(SwDoc* _pDoc) : + SwUnoCollection(_pDoc) +{ +} +/*-- 14.01.99 09:03:16--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXReferenceMarks::~SwXReferenceMarks() +{ +} +/*-- 14.01.99 09:03:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int32 SwXReferenceMarks::getCount(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return GetDoc()->GetRefMarks(); +} +/*-- 14.01.99 09:03:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXReferenceMarks::getByIndex(sal_Int32 nIndex) + throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<XTextContent>*)0)); + } + } + if(!xRef.is()) + throw IndexOutOfBoundsException(); + return aRet; +} +/*-- 14.01.99 09:03:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SwXReferenceMarks::getByName(const OUString& rName) + throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + 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<XTextContent>*)0)); + } + else + throw NoSuchElementException(); + } + else + throw uno::RuntimeException(); + return aRet; +} +/*-- 14.01.99 09:03:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Sequence< OUString > SwXReferenceMarks::getElementNames(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + uno::Sequence<OUString> 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; +} +/*-- 14.01.99 09:03:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXReferenceMarks::hasByName(const OUString& rName) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return 0 != GetDoc()->GetRefMark( rName); +} +/*-- 14.01.99 09:03:18--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Type SAL_CALL SwXReferenceMarks::getElementType() throw(uno::RuntimeException) +{ + return ::getCppuType((uno::Reference<XTextContent>*)0); +} +/*-- 14.01.99 09:03:18--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SwXReferenceMarks::hasElements(void) throw( uno::RuntimeException ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if(!IsValid()) + throw uno::RuntimeException(); + return 0 != GetDoc()->GetRefMarks(); +} +/*-- 14.01.99 09:03:19--------------------------------------------------- + + -----------------------------------------------------------------------*/ +SwXReferenceMark* SwXReferenceMarks::GetObject( SwDoc* pDoc, const SwFmtRefMark* pMark ) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + + return SwXReferenceMark::CreateXReferenceMark(*pDoc, *pMark); +} + +/****************************************************************** + * + ******************************************************************/ +/*-----------------11.03.98 11:18------------------- + Gueltigkeitspruefung +--------------------------------------------------*/ +void SwUnoCollection::Invalidate() +{ + bObjectValid = sal_False; + pDoc = 0; +} + |