/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SW_INC_UNOCOLL_HXX
#define INCLUDED_SW_INC_UNOCOLL_HXX
#include <limits.h>
#include "flyenum.hxx"
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <cppuhelper/implbase.hxx>
#include "swdllapi.h"
class SwDoc;
class SwFrameFormat;
namespace com::sun::star::text
{
class XTextTable;
class XTextSection;
class XFootnote;
}
class SwFormatFootnote;
class SwSectionFormat;
struct SvEventDescription;
class SwXFootnote;
class SwXTextSection;
class SwXTextTable;
const SvEventDescription* sw_GetSupportedMacroItems();
class SwUnoCollection
{
SwDoc* m_pDoc;
public:
SwUnoCollection(SwDoc* p) :
m_pDoc(p){}
virtual ~SwUnoCollection() {}
virtual void Invalidate();
protected:
bool IsValid()
const {
return m_pDoc; }
SwDoc& GetDoc()
const;
};
/** entries in this enum are mapped in an array in unocoll.cxx */
enum class SwServiceType {
TypeTextTable =
0,
TypeTextFrame =
1,
TypeGraphic =
2,
TypeOLE =
3,
TypeBookmark =
4,
TypeFootnote =
5,
TypeEndnote =
6,
TypeIndexMark =
7,
TypeIndex =
8,
ReferenceMark =
9,
StyleCharacter =
10,
StyleParagraph =
11,
StyleFrame =
12,
StylePage =
13,
StyleNumbering =
14,
ContentIndexMark =
15,
ContentIndex =
16,
UserIndexMark =
17,
UserIndex =
18,
TextSection =
19,
FieldTypeDateTime =
20,
FieldTypeUser =
21,
FieldTypeSetExp =
22,
FieldTypeGetExp =
23,
FieldTypeFileName =
24,
FieldTypePageNum =
25,
FieldTypeAuthor =
26,
FieldTypeChapter =
27,
FieldTypeDummy0 =
28,
FieldTypeGetReference =
29,
FieldTypeConditionedText =
30,
FieldTypeAnnotation =
31,
FieldTypeInput =
32,
FieldTypeMacro =
33,
FieldTypeDDE =
34,
FieldTypeHiddenPara =
35,
FieldTypeDocInfo =
36,
FieldTypeTemplateName =
37,
FieldTypeUserExt =
38,
FieldTypeRefPageSet =
39,
FieldTypeRefPageGet =
40,
FieldTypeJumpEdit =
41,
FieldTypeScript =
42,
FieldTypeDatabaseNextSet =
43,
FieldTypeDatabaseNumSet =
44,
FieldTypeDatabaseSetNum =
45,
FieldTypeDatabase =
46,
FieldTypeDatabaseName =
47,
FieldTypeTableFormula =
48,
FieldTypePageCount =
49,
FieldTypeParagraphCount =
50,
FieldTypeWordCount =
51,
FieldTypeCharacterCount =
52,
FieldTypeTableCount =
53,
FieldTypeGraphicObjectCount =
54,
FieldTypeEmbeddedObjectCount =
55,
FieldTypeDocInfoChangeAuthor =
56,
FieldTypeDocInfoChangeDateTime =
57,
FieldTypeDocInfoEditTime =
58,
FieldTypeDocInfoDescription =
59,
FieldTypeDocInfoCreateAuthor =
60,
FieldTypeDocInfoCreateDateTime =
61,
FieldTypePageCountRange =
62,
FieldTypeDummy1 =
63,
FieldTypeDummy2 =
64,
FieldTypeDummy3 =
65,
FieldTypeDocInfoCustom =
66,
FieldTypeDocInfoPrintAuthor =
67,
FieldTypeDocInfoPrintDateTime =
68,
FieldTypeDocInfoKeywords =
69,
FieldTypeDocInfoSubject =
70,
FieldTypeDocInfoTitle =
71,
FieldTypeDocInfoRevision =
72,
FieldTypeBibliography =
73,
FieldTypeCombinedCharacters =
74,
FieldTypeDropdown =
75,
FieldTypeMetafield =
76,
FieldTypeDummy4 =
77,
FieldTypeDummy5 =
78,
FieldTypeDummy6 =
79,
FieldTypeDummy7 =
80,
FieldMasterUser =
81,
FieldMasterDDE =
82,
FieldMasterSetExp =
83,
FieldMasterDatabase =
84,
FieldMasterBibliography =
85,
FieldMasterDummy2 =
86,
FieldMasterDummy3 =
87,
FieldMasterDummy4 =
88,
FieldMasterDummy5 =
89,
IndexIllustrations =
90,
IndexObjects =
91,
IndexTables =
92,
IndexBibliography =
93,
Paragraph =
94,
FieldTypeInputUser =
95,
FieldTypeHiddenText =
96,
StyleConditionalParagraph =
97,
NumberingRules =
98,
TextColumns =
99,
IndexHeaderSection =
100,
Defaults =
101,
IMapRectangle =
102,
IMapCircle =
103,
IMapPolygon =
104,
TypeTextGraphic =
105,
Chart2DataProvider =
106,
TypeFieldMark =
107,
TypeFormFieldMark =
108,
TypeMeta =
109,
VbaObjectProvider =
110,
VbaCodeNameProvider =
111,
VbaProjectNameProvider =
112,
VbaGlobals =
113,
StyleTable =
114,
StyleCell =
115,
LineBreak =
116,
ContentControl =
117,
Invalid = USHRT_MAX
};
// case-corrected versions of service-names (see #i67811)
#define CSS_TEXT_TEXTFIELD_DATE_TIME
"com.sun.star.text.textfield.DateTime"
#define CSS_TEXT_TEXTFIELD_USER
"com.sun.star.text.textfield.User"
#define CSS_TEXT_TEXTFIELD_SET_EXPRESSION
"com.sun.star.text.textfield.SetExpression"
#define CSS_TEXT_TEXTFIELD_GET_EXPRESSION
"com.sun.star.text.textfield.GetExpression"
#define CSS_TEXT_TEXTFIELD_FILE_NAME
"com.sun.star.text.textfield.FileName"
#define CSS_TEXT_TEXTFIELD_PAGE_NUMBER
"com.sun.star.text.textfield.PageNumber"
#define CSS_TEXT_TEXTFIELD_AUTHOR
"com.sun.star.text.textfield.Author"
#define CSS_TEXT_TEXTFIELD_CHAPTER
"com.sun.star.text.textfield.Chapter"
#define CSS_TEXT_TEXTFIELD_GET_REFERENCE
"com.sun.star.text.textfield.GetReference"
#define CSS_TEXT_TEXTFIELD_CONDITIONAL_TEXT
"com.sun.star.text.textfield.ConditionalText"
#define CSS_TEXT_TEXTFIELD_ANNOTATION
"com.sun.star.text.textfield.Annotation"
#define CSS_TEXT_TEXTFIELD_INPUT
"com.sun.star.text.textfield.Input"
#define CSS_TEXT_TEXTFIELD_MACRO
"com.sun.star.text.textfield.Macro"
#define CSS_TEXT_TEXTFIELD_DDE
"com.sun.star.text.textfield.DDE"
#define CSS_TEXT_TEXTFIELD_HIDDEN_PARAGRAPH
"com.sun.star.text.textfield.HiddenParagraph"
#define CSS_TEXT_TEXTFIELD_TEMPLATE_NAME
"com.sun.star.text.textfield.TemplateName"
#define CSS_TEXT_TEXTFIELD_EXTENDED_USER
"com.sun.star.text.textfield.ExtendedUser"
#define CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_SET
"com.sun.star.text.textfield.ReferencePageSet"
#define CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_GET
"com.sun.star.text.textfield.ReferencePageGet"
#define CSS_TEXT_TEXTFIELD_JUMP_EDIT
"com.sun.star.text.textfield.JumpEdit"
#define CSS_TEXT_TEXTFIELD_SCRIPT
"com.sun.star.text.textfield.Script"
#define CSS_TEXT_TEXTFIELD_DATABASE_NEXT_SET
"com.sun.star.text.textfield.DatabaseNextSet"
#define CSS_TEXT_TEXTFIELD_DATABASE_NUMBER_OF_SET
"com.sun.star.text.textfield.DatabaseNumberOfSet"
#define CSS_TEXT_TEXTFIELD_DATABASE_SET_NUMBER
"com.sun.star.text.textfield.DatabaseSetNumber"
#define CSS_TEXT_TEXTFIELD_DATABASE
"com.sun.star.text.textfield.Database"
#define CSS_TEXT_TEXTFIELD_DATABASE_NAME
"com.sun.star.text.textfield.DatabaseName"
#define CSS_TEXT_TEXTFIELD_TABLE_FORMULA
"com.sun.star.text.textfield.TableFormula"
#define CSS_TEXT_TEXTFIELD_PAGE_COUNT
"com.sun.star.text.textfield.PageCount"
#define CSS_TEXT_TEXTFIELD_PAGE_COUNT_RANGE
"com.sun.star.text.textfield.PageCountRange"
#define CSS_TEXT_TEXTFIELD_PARAGRAPH_COUNT
"com.sun.star.text.textfield.ParagraphCount"
#define CSS_TEXT_TEXTFIELD_WORD_COUNT
"com.sun.star.text.textfield.WordCount"
#define CSS_TEXT_TEXTFIELD_CHARACTER_COUNT
"com.sun.star.text.textfield.CharacterCount"
#define CSS_TEXT_TEXTFIELD_TABLE_COUNT
"com.sun.star.text.textfield.TableCount"
#define CSS_TEXT_TEXTFIELD_GRAPHIC_OBJECT_COUNT
"com.sun.star.text.textfield.GraphicObjectCount"
#define CSS_TEXT_TEXTFIELD_EMBEDDED_OBJECT_COUNT
"com.sun.star.text.textfield.EmbeddedObjectCount"
#define CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_AUTHOR
"com.sun.star.text.textfield.docinfo.ChangeAuthor"
#define CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_DATE_TIME
"com.sun.star.text.textfield.docinfo.ChangeDateTime"
#define CSS_TEXT_TEXTFIELD_DOCINFO_EDIT_TIME
"com.sun.star.text.textfield.docinfo.EditTime"
#define CSS_TEXT_TEXTFIELD_DOCINFO_DESCRIPTION
"com.sun.star.text.textfield.docinfo.Description"
#define CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_AUTHOR
"com.sun.star.text.textfield.docinfo.CreateAuthor"
#define CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_DATE_TIME
"com.sun.star.text.textfield.docinfo.CreateDateTime"
#define CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_AUTHOR
"com.sun.star.text.textfield.docinfo.PrintAuthor"
#define CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_DATE_TIME
"com.sun.star.text.textfield.docinfo.PrintDateTime"
#define CSS_TEXT_TEXTFIELD_DOCINFO_KEY_WORDS
"com.sun.star.text.textfield.docinfo.KeyWords"
#define CSS_TEXT_TEXTFIELD_DOCINFO_SUBJECT
"com.sun.star.text.textfield.docinfo.Subject"
#define CSS_TEXT_TEXTFIELD_DOCINFO_TITLE
"com.sun.star.text.textfield.docinfo.Title"
#define CSS_TEXT_TEXTFIELD_DOCINFO_REVISION
"com.sun.star.text.textfield.docinfo.Revision"
#define CSS_TEXT_TEXTFIELD_DOCINFO_CUSTOM
"com.sun.star.text.textfield.docinfo.Custom"
#define CSS_TEXT_TEXTFIELD_BIBLIOGRAPHY
"com.sun.star.text.textfield.Bibliography"
#define CSS_TEXT_TEXTFIELD_COMBINED_CHARACTERS
"com.sun.star.text.textfield.CombinedCharacters"
#define CSS_TEXT_TEXTFIELD_DROP_DOWN
"com.sun.star.text.textfield.DropDown"
#define CSS_TEXT_TEXTFIELD_INPUT_USER
"com.sun.star.text.textfield.InputUser"
#define CSS_TEXT_TEXTFIELD_HIDDEN_TEXT
"com.sun.star.text.textfield.HiddenText"
#define CSS_TEXT_FIELDMASTER_USER
"com.sun.star.text.fieldmaster.User"
#define CSS_TEXT_FIELDMASTER_DDE
"com.sun.star.text.fieldmaster.DDE"
#define CSS_TEXT_FIELDMASTER_SET_EXPRESSION
"com.sun.star.text.fieldmaster.SetExpression"
#define CSS_TEXT_FIELDMASTER_DATABASE
"com.sun.star.text.fieldmaster.Database"
#define CSS_TEXT_FIELDMASTER_BIBLIOGRAPHY
"com.sun.star.text.fieldmaster.Bibliography"
class SwXServiceProvider
{
public:
static OUString GetProviderName(SwServiceType nObjectType);
static SwServiceType GetProviderType(std::u16string_view rServiceName);
static css::uno::Reference< css::uno::XInterface > MakeInstance(SwServiceType nObjectTy
pe, SwDoc & rDoc);
static css::uno::Sequence<OUString> GetAllServiceNames();
};
typedef
cppu::WeakImplHelper
<
css::container::XNameAccess,
css::container::XIndexAccess,
css::lang::XServiceInfo
>
SwCollectionBaseClass;
class SW_DLLPUBLIC SwXTextTables final : public SwCollectionBaseClass,
public SwUnoCollection
{
virtual ~SwXTextTables() override;
public:
SwXTextTables(SwDoc* pDoc);
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount( ) override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XNameAccess
virtual css::uno::Any SAL_CALL getByName(const OUString& Name) override;
virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
virtual sal_Bool SAL_CALL hasByName(const OUString& Name) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
rtl::Reference<SwXTextTable> getTextTableByName(std::u16string_view Name);
rtl::Reference<SwXTextTable> getTextTableByIndex(sal_Int32 nIndex);
static rtl::Reference<SwXTextTable> GetObject(SwFrameFormat& rFormat);
};
typedef
cppu::WeakImplHelper
<
css::container::XEnumerationAccess,
css::container::XNameAccess,
css::container::XIndexAccess,
css::lang::XServiceInfo
> SwXFramesBaseClass;
class SwXFrames : public SwXFramesBaseClass,
public SwUnoCollection
{
const FlyCntType m_eType;
protected:
virtual ~SwXFrames() override;
public:
SwXFrames(SwDoc* pDoc, FlyCntType eSet);
//XEnumerationAccess
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override;
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount() override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XNameAccess
virtual css::uno::Any SAL_CALL getByName(const OUString& Name) override;
virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
virtual sal_Bool SAL_CALL hasByName(const OUString& Name) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
};
class SwXTextFrames final : public SwXFrames
{
virtual ~SwXTextFrames() override;
public:
SwXTextFrames(SwDoc* pDoc);
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
};
class SwXTextGraphicObjects final : public SwXFrames
{
virtual ~SwXTextGraphicObjects() override;
public:
SwXTextGraphicObjects(SwDoc* pDoc);
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
};
class SwXTextEmbeddedObjects final : public SwXFrames
{
virtual ~SwXTextEmbeddedObjects() override;
public:
SwXTextEmbeddedObjects(SwDoc* pDoc);
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
};
class SwXTextSections final : public SwCollectionBaseClass,
public SwUnoCollection
{
virtual ~SwXTextSections() override;
public:
SwXTextSections(SwDoc* pDoc);
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount() override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XNameAccess
virtual css::uno::Any SAL_CALL getByName(const OUString& Name) override;
virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
virtual sal_Bool SAL_CALL hasByName(const OUString& Name) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
static rtl::Reference<SwXTextSection> GetObject( SwSectionFormat& rFormat );
};
class SwXBookmarks final : public SwCollectionBaseClass,
public SwUnoCollection
{
virtual ~SwXBookmarks() override;
public:
SwXBookmarks(SwDoc* pDoc);
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount() override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XNameAccess
virtual css::uno::Any SAL_CALL getByName(const OUString& Name) override;
virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
virtual sal_Bool SAL_CALL hasByName(const OUString& Name) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
};
class SwXNumberingRulesCollection final : public cppu::WeakImplHelper
<
css::container::XIndexAccess
>,
public SwUnoCollection
{
virtual ~SwXNumberingRulesCollection() override;
public:
SwXNumberingRulesCollection( SwDoc* pDoc );
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount() override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
};
typedef
cppu::WeakImplHelper
<
css::container::XIndexAccess,
css::lang::XServiceInfo
>
SwSimpleIndexAccessBaseClass;
class SW_DLLPUBLIC SwXFootnotes final : public SwSimpleIndexAccessBaseClass,
public SwUnoCollection
{
const bool m_bEndnote;
virtual ~SwXFootnotes() override;
public:
SwXFootnotes(bool bEnd, SwDoc* pDoc);
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount() override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
rtl::Reference<SwXFootnote> getFootnoteByIndex(sal_Int32 nIndex) ;
static rtl::Reference<SwXFootnote> GetObject( SwDoc& rDoc, const SwFormatFootnote& rFormat );
};
class SwXReferenceMarks final : public SwCollectionBaseClass,
public SwUnoCollection
{
virtual ~SwXReferenceMarks() override;
public:
SwXReferenceMarks(SwDoc* pDoc);
//XIndexAccess
virtual sal_Int32 SAL_CALL getCount() override;
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 nIndex) override;
//XNameAccess
virtual css::uno::Any SAL_CALL getByName(const OUString& Name) override;
virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override;
virtual sal_Bool SAL_CALL hasByName(const OUString& Name) override;
//XElementAccess
virtual css::uno::Type SAL_CALL getElementType( ) override;
virtual sal_Bool SAL_CALL hasElements( ) override;
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */