1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <config_features.h>
22 #include <hintids.hxx>
24 #include <IDocumentChartDataProviderAccess.hxx>
25 #include <IDocumentFieldsAccess.hxx>
27 #include <unocoll.hxx>
28 #include <unosett.hxx>
29 #include <section.hxx>
34 #include <com/sun/star/text/XTextTable.hpp>
35 #include <o3tl/safeint.hxx>
36 #include <o3tl/string_view.hxx>
37 #include <svtools/unoimap.hxx>
38 #include <svtools/unoevent.hxx>
39 #include <svx/SvxXTextColumns.hxx>
41 #include <unostyle.hxx>
42 #include <unofield.hxx>
44 #include <unoframe.hxx>
45 #include <textboxhelper.hxx>
46 #include <unofootnote.hxx>
47 #include <unolinebreak.hxx>
48 #include <vcl/svapp.hxx>
49 #include <fmtcntnt.hxx>
50 #include <authfld.hxx>
51 #include <SwXTextDefaults.hxx>
52 #include <unochart.hxx>
53 #include <comphelper/sequence.hxx>
54 #include <cppuhelper/supportsservice.hxx>
55 #include <unosection.hxx>
56 #include <unoparagraph.hxx>
57 #include <unobookmark.hxx>
58 #include <unorefmark.hxx>
59 #include <unometa.hxx>
60 #include <unocontentcontrol.hxx>
63 #include <frameformats.hxx>
64 #include <com/sun/star/document/XCodeNameQuery.hpp>
65 #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
66 #include <com/sun/star/form/XFormsSupplier.hpp>
67 #include <com/sun/star/script/ModuleInfo.hpp>
68 #include <com/sun/star/script/ModuleType.hpp>
69 #include <com/sun/star/script/vba/XVBAModuleInfo.hpp>
70 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
71 #include <vbahelper/vbaaccesshelper.hxx>
72 #include <basic/basmgr.hxx>
73 #include <comphelper/processfactory.hxx>
74 #include <cppuhelper/implbase.hxx>
75 #include <sfx2/event.hxx>
76 #include <sal/log.hxx>
78 using namespace ::com::sun::star
;
79 using namespace ::com::sun::star::document
;
80 using namespace ::com::sun::star::uno
;
81 using namespace ::com::sun::star::text
;
82 using namespace ::com::sun::star::container
;
83 using namespace ::com::sun::star::lang
;
85 #if HAVE_FEATURE_SCRIPTING
89 class SwVbaCodeNameProvider
: public ::cppu::WeakImplHelper
< document::XCodeNameQuery
>
91 SwDocShell
* mpDocShell
;
92 OUString msThisDocumentCodeName
;
94 explicit SwVbaCodeNameProvider( SwDocShell
* pDocShell
) : mpDocShell( pDocShell
) {}
97 OUString SAL_CALL
getCodeNameForContainer( const uno::Reference
< uno::XInterface
>& /*xIf*/ ) override
99 // #FIXME not implemented...
103 OUString SAL_CALL
getCodeNameForObject( const uno::Reference
< uno::XInterface
>& xIf
) override
105 // Initialise the code name
106 if ( msThisDocumentCodeName
.isEmpty() )
110 uno::Reference
< beans::XPropertySet
> xProps( mpDocShell
->GetModel(), uno::UNO_QUERY_THROW
);
111 uno::Reference
< container::XNameAccess
> xLibContainer( xProps
->getPropertyValue("BasicLibraries"), uno::UNO_QUERY_THROW
);
112 OUString
sProjectName( "Standard");
113 if ( !mpDocShell
->GetBasicManager()->GetName().isEmpty() )
115 sProjectName
= mpDocShell
->GetBasicManager()->GetName();
117 uno::Reference
< container::XNameAccess
> xLib( xLibContainer
->getByName( sProjectName
), uno::UNO_QUERY_THROW
);
118 const uno::Sequence
< OUString
> sModuleNames
= xLib
->getElementNames();
119 uno::Reference
< script::vba::XVBAModuleInfo
> xVBAModuleInfo( xLib
, uno::UNO_QUERY
);
121 auto pModuleName
= std::find_if(sModuleNames
.begin(), sModuleNames
.end(), [&xVBAModuleInfo
](const OUString
& rName
) {
122 return xVBAModuleInfo
->hasModuleInfo(rName
)
123 && xVBAModuleInfo
->getModuleInfo(rName
).ModuleType
== script::ModuleType::DOCUMENT
; });
124 if (pModuleName
!= sModuleNames
.end())
125 msThisDocumentCodeName
= *pModuleName
;
127 catch( uno::Exception
& )
134 // need to find the page ( and index ) for this control
135 uno::Reference
< drawing::XDrawPageSupplier
> xSupplier( mpDocShell
->GetModel(), uno::UNO_QUERY_THROW
);
136 uno::Reference
< container::XIndexAccess
> xIndex( xSupplier
->getDrawPage(), uno::UNO_QUERY_THROW
);
140 uno::Reference
< form::XFormsSupplier
> xFormSupplier( xIndex
, uno::UNO_QUERY_THROW
);
141 uno::Reference
< container::XIndexAccess
> xFormIndex( xFormSupplier
->getForms(), uno::UNO_QUERY_THROW
);
142 // get the www-standard container
143 uno::Reference
< container::XIndexAccess
> xFormControls( xFormIndex
->getByIndex(0), uno::UNO_QUERY_THROW
);
144 sal_Int32 nCntrls
= xFormControls
->getCount();
145 for( sal_Int32 cIndex
= 0; cIndex
< nCntrls
; ++cIndex
)
147 uno::Reference
< uno::XInterface
> xControl( xFormControls
->getByIndex( cIndex
), uno::UNO_QUERY_THROW
);
148 bool bMatched
= ( xControl
== xIf
);
151 sCodeName
= msThisDocumentCodeName
;
156 catch( uno::Exception
& )
160 // #TODO Probably should throw here ( if !bMatched )
167 typedef std::unordered_map
< OUString
, OUString
> StringHashMap
;
171 class SwVbaProjectNameProvider
: public ::cppu::WeakImplHelper
< container::XNameContainer
>
173 StringHashMap mTemplateToProject
;
175 SwVbaProjectNameProvider()
178 virtual sal_Bool SAL_CALL
hasByName( const OUString
& aName
) override
180 return ( mTemplateToProject
.find( aName
) != mTemplateToProject
.end() );
182 virtual css::uno::Any SAL_CALL
getByName( const OUString
& aName
) override
184 if ( !hasByName( aName
) )
185 throw container::NoSuchElementException();
186 return uno::Any( mTemplateToProject
.find( aName
)->second
);
188 virtual css::uno::Sequence
< OUString
> SAL_CALL
getElementNames( ) override
190 return comphelper::mapKeysToSequence( mTemplateToProject
);
193 virtual void SAL_CALL
insertByName( const OUString
& aName
, const uno::Any
& aElement
) override
196 OUString sProjectName
;
197 aElement
>>= sProjectName
;
198 SAL_INFO("sw.uno", "Template cache inserting template name " << aName
199 << " with project " << sProjectName
);
200 mTemplateToProject
[ aName
] = sProjectName
;
203 virtual void SAL_CALL
removeByName( const OUString
& Name
) override
205 if ( !hasByName( Name
) )
206 throw container::NoSuchElementException();
207 mTemplateToProject
.erase( Name
);
209 virtual void SAL_CALL
replaceByName( const OUString
& aName
, const uno::Any
& aElement
) override
211 if ( !hasByName( aName
) )
212 throw container::NoSuchElementException();
213 insertByName( aName
, aElement
); // insert will overwrite
216 virtual css::uno::Type SAL_CALL
getElementType( ) override
218 return ::cppu::UnoType
<OUString
>::get();
220 virtual sal_Bool SAL_CALL
hasElements( ) override
223 return ( !mTemplateToProject
.empty() );
228 class SwVbaObjectForCodeNameProvider
: public ::cppu::WeakImplHelper
< container::XNameAccess
>
230 SwDocShell
* mpDocShell
;
232 explicit SwVbaObjectForCodeNameProvider( SwDocShell
* pDocShell
) : mpDocShell( pDocShell
)
234 // #FIXME #TODO is the code name for ThisDocument read anywhere?
237 virtual sal_Bool SAL_CALL
hasByName( const OUString
& aName
) override
239 // #FIXME #TODO we really need to be checking against the codename for
241 if ( aName
== "ThisDocument" )
246 css::uno::Any SAL_CALL
getByName( const OUString
& aName
) override
248 if ( !hasByName( aName
) )
249 throw container::NoSuchElementException();
250 uno::Sequence
< uno::Any
> aArgs
{ uno::Any(uno::Reference
< uno::XInterface
>()),
251 uno::Any(mpDocShell
->GetModel()) };
252 uno::Reference
< uno::XInterface
> xDocObj
= ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell
, "ooo.vba.word.Document" , aArgs
);
254 "Creating Object ( ooo.vba.word.Document ) 0x" << xDocObj
.get());
255 return uno::Any( xDocObj
);
257 virtual css::uno::Sequence
< OUString
> SAL_CALL
getElementNames( ) override
259 uno::Sequence
< OUString
> aNames
;
263 virtual css::uno::Type SAL_CALL
getElementType( ) override
{ return uno::Type(); }
264 virtual sal_Bool SAL_CALL
hasElements( ) override
{ return true; }
274 struct ProvNamesId_Type
282 // note: this thing is indexed as an array, so do not insert/remove entries!
283 const ProvNamesId_Type aProvNamesId
[] =
285 { "com.sun.star.text.TextTable", SwServiceType::TypeTextTable
},
286 { "com.sun.star.text.TextFrame", SwServiceType::TypeTextFrame
},
287 { "com.sun.star.text.GraphicObject", SwServiceType::TypeGraphic
},
288 { "com.sun.star.text.TextEmbeddedObject", SwServiceType::TypeOLE
},
289 { "com.sun.star.text.Bookmark", SwServiceType::TypeBookmark
},
290 { "com.sun.star.text.Footnote", SwServiceType::TypeFootnote
},
291 { "com.sun.star.text.Endnote", SwServiceType::TypeEndnote
},
292 { "com.sun.star.text.DocumentIndexMark", SwServiceType::TypeIndexMark
},
293 { "com.sun.star.text.DocumentIndex", SwServiceType::TypeIndex
},
294 { "com.sun.star.text.ReferenceMark", SwServiceType::ReferenceMark
},
295 { "com.sun.star.style.CharacterStyle", SwServiceType::StyleCharacter
},
296 { "com.sun.star.style.ParagraphStyle", SwServiceType::StyleParagraph
},
297 { "com.sun.star.style.FrameStyle", SwServiceType::StyleFrame
},
298 { "com.sun.star.style.PageStyle", SwServiceType::StylePage
},
299 { "com.sun.star.style.NumberingStyle", SwServiceType::StyleNumbering
},
300 { "com.sun.star.text.ContentIndexMark", SwServiceType::ContentIndexMark
},
301 { "com.sun.star.text.ContentIndex", SwServiceType::ContentIndex
},
302 { "com.sun.star.text.UserIndexMark", SwServiceType::UserIndexMark
},
303 { "com.sun.star.text.UserIndex", SwServiceType::UserIndex
},
304 { "com.sun.star.text.TextSection", SwServiceType::TextSection
},
305 { "com.sun.star.text.TextField.DateTime", SwServiceType::FieldTypeDateTime
},
306 { "com.sun.star.text.TextField.User", SwServiceType::FieldTypeUser
},
307 { "com.sun.star.text.TextField.SetExpression", SwServiceType::FieldTypeSetExp
},
308 { "com.sun.star.text.TextField.GetExpression", SwServiceType::FieldTypeGetExp
},
309 { "com.sun.star.text.TextField.FileName", SwServiceType::FieldTypeFileName
},
310 { "com.sun.star.text.TextField.PageNumber", SwServiceType::FieldTypePageNum
},
311 { "com.sun.star.text.TextField.Author", SwServiceType::FieldTypeAuthor
},
312 { "com.sun.star.text.TextField.Chapter", SwServiceType::FieldTypeChapter
},
313 { "", SwServiceType::FieldTypeDummy0
},
314 { "com.sun.star.text.TextField.GetReference", SwServiceType::FieldTypeGetReference
},
315 { "com.sun.star.text.TextField.ConditionalText", SwServiceType::FieldTypeConditionedText
},
316 { "com.sun.star.text.TextField.Annotation", SwServiceType::FieldTypeAnnotation
},
317 { "com.sun.star.text.TextField.Input", SwServiceType::FieldTypeInput
},
318 { "com.sun.star.text.TextField.Macro", SwServiceType::FieldTypeMacro
},
319 { "com.sun.star.text.TextField.DDE", SwServiceType::FieldTypeDDE
},
320 { "com.sun.star.text.TextField.HiddenParagraph", SwServiceType::FieldTypeHiddenPara
},
321 { "" /*com.sun.star.text.TextField.DocumentInfo"*/, SwServiceType::FieldTypeDocInfo
},
322 { "com.sun.star.text.TextField.TemplateName", SwServiceType::FieldTypeTemplateName
},
323 { "com.sun.star.text.TextField.ExtendedUser", SwServiceType::FieldTypeUserExt
},
324 { "com.sun.star.text.TextField.ReferencePageSet", SwServiceType::FieldTypeRefPageSet
},
325 { "com.sun.star.text.TextField.ReferencePageGet", SwServiceType::FieldTypeRefPageGet
},
326 { "com.sun.star.text.TextField.JumpEdit", SwServiceType::FieldTypeJumpEdit
},
327 { "com.sun.star.text.TextField.Script", SwServiceType::FieldTypeScript
},
328 { "com.sun.star.text.TextField.DatabaseNextSet", SwServiceType::FieldTypeDatabaseNextSet
},
329 { "com.sun.star.text.TextField.DatabaseNumberOfSet", SwServiceType::FieldTypeDatabaseNumSet
},
330 { "com.sun.star.text.TextField.DatabaseSetNumber", SwServiceType::FieldTypeDatabaseSetNum
},
331 { "com.sun.star.text.TextField.Database", SwServiceType::FieldTypeDatabase
},
332 { "com.sun.star.text.TextField.DatabaseName", SwServiceType::FieldTypeDatabaseName
},
333 { "com.sun.star.text.TextField.TableFormula", SwServiceType::FieldTypeTableFormula
},
334 { "com.sun.star.text.TextField.PageCount", SwServiceType::FieldTypePageCount
},
335 { "com.sun.star.text.TextField.ParagraphCount", SwServiceType::FieldTypeParagraphCount
},
336 { "com.sun.star.text.TextField.WordCount", SwServiceType::FieldTypeWordCount
},
337 { "com.sun.star.text.TextField.CharacterCount", SwServiceType::FieldTypeCharacterCount
},
338 { "com.sun.star.text.TextField.TableCount", SwServiceType::FieldTypeTableCount
},
339 { "com.sun.star.text.TextField.GraphicObjectCount", SwServiceType::FieldTypeGraphicObjectCount
},
340 { "com.sun.star.text.TextField.EmbeddedObjectCount", SwServiceType::FieldTypeEmbeddedObjectCount
},
341 { "com.sun.star.text.TextField.DocInfo.ChangeAuthor", SwServiceType::FieldTypeDocInfoChangeAuthor
},
342 { "com.sun.star.text.TextField.DocInfo.ChangeDateTime", SwServiceType::FieldTypeDocInfoChangeDateTime
},
343 { "com.sun.star.text.TextField.DocInfo.EditTime", SwServiceType::FieldTypeDocInfoEditTime
},
344 { "com.sun.star.text.TextField.DocInfo.Description", SwServiceType::FieldTypeDocInfoDescription
},
345 { "com.sun.star.text.TextField.DocInfo.CreateAuthor", SwServiceType::FieldTypeDocInfoCreateAuthor
},
346 { "com.sun.star.text.TextField.DocInfo.CreateDateTime", SwServiceType::FieldTypeDocInfoCreateDateTime
},
347 { "", SwServiceType::FieldTypeDummy0
},
348 { "", SwServiceType::FieldTypeDummy1
},
349 { "", SwServiceType::FieldTypeDummy2
},
350 { "", SwServiceType::FieldTypeDummy3
},
351 { "com.sun.star.text.TextField.DocInfo.Custom", SwServiceType::FieldTypeDocInfoCustom
},
352 { "com.sun.star.text.TextField.DocInfo.PrintAuthor", SwServiceType::FieldTypeDocInfoPrintAuthor
},
353 { "com.sun.star.text.TextField.DocInfo.PrintDateTime", SwServiceType::FieldTypeDocInfoPrintDateTime
},
354 { "com.sun.star.text.TextField.DocInfo.KeyWords", SwServiceType::FieldTypeDocInfoKeywords
},
355 { "com.sun.star.text.TextField.DocInfo.Subject", SwServiceType::FieldTypeDocInfoSubject
},
356 { "com.sun.star.text.TextField.DocInfo.Title", SwServiceType::FieldTypeDocInfoTitle
},
357 { "com.sun.star.text.TextField.DocInfo.Revision", SwServiceType::FieldTypeDocInfoRevision
},
358 { "com.sun.star.text.TextField.Bibliography", SwServiceType::FieldTypeBibliography
},
359 { "com.sun.star.text.TextField.CombinedCharacters", SwServiceType::FieldTypeCombinedCharacters
},
360 { "com.sun.star.text.TextField.DropDown", SwServiceType::FieldTypeDropdown
},
361 { "com.sun.star.text.textfield.MetadataField", SwServiceType::FieldTypeMetafield
},
362 { "", SwServiceType::FieldTypeDummy4
},
363 { "", SwServiceType::FieldTypeDummy5
},
364 { "", SwServiceType::FieldTypeDummy6
},
365 { "", SwServiceType::FieldTypeDummy7
},
366 { "com.sun.star.text.FieldMaster.User", SwServiceType::FieldMasterUser
},
367 { "com.sun.star.text.FieldMaster.DDE", SwServiceType::FieldMasterDDE
},
368 { "com.sun.star.text.FieldMaster.SetExpression", SwServiceType::FieldMasterSetExp
},
369 { "com.sun.star.text.FieldMaster.Database", SwServiceType::FieldMasterDatabase
},
370 { "com.sun.star.text.FieldMaster.Bibliography", SwServiceType::FieldMasterBibliography
},
371 { "", SwServiceType::FieldMasterDummy2
},
372 { "", SwServiceType::FieldMasterDummy3
},
373 { "", SwServiceType::FieldMasterDummy4
},
374 { "", SwServiceType::FieldMasterDummy5
},
375 { "com.sun.star.text.IllustrationsIndex", SwServiceType::IndexIllustrations
},
376 { "com.sun.star.text.ObjectIndex", SwServiceType::IndexObjects
},
377 { "com.sun.star.text.TableIndex", SwServiceType::IndexTables
},
378 { "com.sun.star.text.Bibliography", SwServiceType::IndexBibliography
},
379 { "com.sun.star.text.Paragraph", SwServiceType::Paragraph
},
380 { "com.sun.star.text.TextField.InputUser", SwServiceType::FieldTypeInputUser
},
381 { "com.sun.star.text.TextField.HiddenText", SwServiceType::FieldTypeHiddenText
},
382 { "com.sun.star.style.ConditionalParagraphStyle", SwServiceType::StyleConditionalParagraph
},
383 { "com.sun.star.text.NumberingRules", SwServiceType::NumberingRules
},
384 { "com.sun.star.text.TextColumns", SwServiceType::TextColumns
},
385 { "com.sun.star.text.IndexHeaderSection", SwServiceType::IndexHeaderSection
},
386 { "com.sun.star.text.Defaults", SwServiceType::Defaults
},
387 { "com.sun.star.image.ImageMapRectangleObject", SwServiceType::IMapRectangle
},
388 { "com.sun.star.image.ImageMapCircleObject", SwServiceType::IMapCircle
},
389 { "com.sun.star.image.ImageMapPolygonObject", SwServiceType::IMapPolygon
},
390 { "com.sun.star.text.TextGraphicObject", SwServiceType::TypeTextGraphic
},
391 { "com.sun.star.chart2.data.DataProvider", SwServiceType::Chart2DataProvider
},
392 { "com.sun.star.text.Fieldmark", SwServiceType::TypeFieldMark
},
393 { "com.sun.star.text.FormFieldmark", SwServiceType::TypeFormFieldMark
},
394 { "com.sun.star.text.InContentMetadata", SwServiceType::TypeMeta
},
395 { "ooo.vba.VBAObjectModuleObjectProvider", SwServiceType::VbaObjectProvider
},
396 { "ooo.vba.VBACodeNameProvider", SwServiceType::VbaCodeNameProvider
},
397 { "ooo.vba.VBAProjectNameProvider", SwServiceType::VbaProjectNameProvider
},
398 { "ooo.vba.VBAGlobals", SwServiceType::VbaGlobals
},
400 // case-correct versions of the service names (see #i67811)
401 { CSS_TEXT_TEXTFIELD_DATE_TIME
, SwServiceType::FieldTypeDateTime
},
402 { CSS_TEXT_TEXTFIELD_USER
, SwServiceType::FieldTypeUser
},
403 { CSS_TEXT_TEXTFIELD_SET_EXPRESSION
, SwServiceType::FieldTypeSetExp
},
404 { CSS_TEXT_TEXTFIELD_GET_EXPRESSION
, SwServiceType::FieldTypeGetExp
},
405 { CSS_TEXT_TEXTFIELD_FILE_NAME
, SwServiceType::FieldTypeFileName
},
406 { CSS_TEXT_TEXTFIELD_PAGE_NUMBER
, SwServiceType::FieldTypePageNum
},
407 { CSS_TEXT_TEXTFIELD_AUTHOR
, SwServiceType::FieldTypeAuthor
},
408 { CSS_TEXT_TEXTFIELD_CHAPTER
, SwServiceType::FieldTypeChapter
},
409 { CSS_TEXT_TEXTFIELD_GET_REFERENCE
, SwServiceType::FieldTypeGetReference
},
410 { CSS_TEXT_TEXTFIELD_CONDITIONAL_TEXT
, SwServiceType::FieldTypeConditionedText
},
411 { CSS_TEXT_TEXTFIELD_ANNOTATION
, SwServiceType::FieldTypeAnnotation
},
412 { CSS_TEXT_TEXTFIELD_INPUT
, SwServiceType::FieldTypeInput
},
413 { CSS_TEXT_TEXTFIELD_MACRO
, SwServiceType::FieldTypeMacro
},
414 { CSS_TEXT_TEXTFIELD_DDE
, SwServiceType::FieldTypeDDE
},
415 { CSS_TEXT_TEXTFIELD_HIDDEN_PARAGRAPH
, SwServiceType::FieldTypeHiddenPara
},
416 { CSS_TEXT_TEXTFIELD_TEMPLATE_NAME
, SwServiceType::FieldTypeTemplateName
},
417 { CSS_TEXT_TEXTFIELD_EXTENDED_USER
, SwServiceType::FieldTypeUserExt
},
418 { CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_SET
, SwServiceType::FieldTypeRefPageSet
},
419 { CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_GET
, SwServiceType::FieldTypeRefPageGet
},
420 { CSS_TEXT_TEXTFIELD_JUMP_EDIT
, SwServiceType::FieldTypeJumpEdit
},
421 { CSS_TEXT_TEXTFIELD_SCRIPT
, SwServiceType::FieldTypeScript
},
422 { CSS_TEXT_TEXTFIELD_DATABASE_NEXT_SET
, SwServiceType::FieldTypeDatabaseNextSet
},
423 { CSS_TEXT_TEXTFIELD_DATABASE_NUMBER_OF_SET
, SwServiceType::FieldTypeDatabaseNumSet
},
424 { CSS_TEXT_TEXTFIELD_DATABASE_SET_NUMBER
, SwServiceType::FieldTypeDatabaseSetNum
},
425 { CSS_TEXT_TEXTFIELD_DATABASE
, SwServiceType::FieldTypeDatabase
},
426 { CSS_TEXT_TEXTFIELD_DATABASE_NAME
, SwServiceType::FieldTypeDatabaseName
},
427 { CSS_TEXT_TEXTFIELD_TABLE_FORMULA
, SwServiceType::FieldTypeTableFormula
},
428 { CSS_TEXT_TEXTFIELD_PAGE_COUNT
, SwServiceType::FieldTypePageCount
},
429 { CSS_TEXT_TEXTFIELD_PARAGRAPH_COUNT
, SwServiceType::FieldTypeParagraphCount
},
430 { CSS_TEXT_TEXTFIELD_WORD_COUNT
, SwServiceType::FieldTypeWordCount
},
431 { CSS_TEXT_TEXTFIELD_CHARACTER_COUNT
, SwServiceType::FieldTypeCharacterCount
},
432 { CSS_TEXT_TEXTFIELD_TABLE_COUNT
, SwServiceType::FieldTypeTableCount
},
433 { CSS_TEXT_TEXTFIELD_GRAPHIC_OBJECT_COUNT
, SwServiceType::FieldTypeGraphicObjectCount
},
434 { CSS_TEXT_TEXTFIELD_EMBEDDED_OBJECT_COUNT
, SwServiceType::FieldTypeEmbeddedObjectCount
},
435 { CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_AUTHOR
, SwServiceType::FieldTypeDocInfoChangeAuthor
},
436 { CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_DATE_TIME
, SwServiceType::FieldTypeDocInfoChangeDateTime
},
437 { CSS_TEXT_TEXTFIELD_DOCINFO_EDIT_TIME
, SwServiceType::FieldTypeDocInfoEditTime
},
438 { CSS_TEXT_TEXTFIELD_DOCINFO_DESCRIPTION
, SwServiceType::FieldTypeDocInfoDescription
},
439 { CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_AUTHOR
, SwServiceType::FieldTypeDocInfoCreateAuthor
},
440 { CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_DATE_TIME
, SwServiceType::FieldTypeDocInfoCreateDateTime
},
441 { CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_AUTHOR
, SwServiceType::FieldTypeDocInfoPrintAuthor
},
442 { CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_DATE_TIME
, SwServiceType::FieldTypeDocInfoPrintDateTime
},
443 { CSS_TEXT_TEXTFIELD_DOCINFO_KEY_WORDS
, SwServiceType::FieldTypeDocInfoKeywords
},
444 { CSS_TEXT_TEXTFIELD_DOCINFO_SUBJECT
, SwServiceType::FieldTypeDocInfoSubject
},
445 { CSS_TEXT_TEXTFIELD_DOCINFO_TITLE
, SwServiceType::FieldTypeDocInfoTitle
},
446 { CSS_TEXT_TEXTFIELD_DOCINFO_REVISION
, SwServiceType::FieldTypeDocInfoRevision
},
447 { CSS_TEXT_TEXTFIELD_DOCINFO_CUSTOM
, SwServiceType::FieldTypeDocInfoCustom
},
448 { CSS_TEXT_TEXTFIELD_BIBLIOGRAPHY
, SwServiceType::FieldTypeBibliography
},
449 { CSS_TEXT_TEXTFIELD_COMBINED_CHARACTERS
, SwServiceType::FieldTypeCombinedCharacters
},
450 { CSS_TEXT_TEXTFIELD_DROP_DOWN
, SwServiceType::FieldTypeDropdown
},
451 { CSS_TEXT_TEXTFIELD_INPUT_USER
, SwServiceType::FieldTypeInputUser
},
452 { CSS_TEXT_TEXTFIELD_HIDDEN_TEXT
, SwServiceType::FieldTypeHiddenText
},
453 { CSS_TEXT_FIELDMASTER_USER
, SwServiceType::FieldMasterUser
},
454 { CSS_TEXT_FIELDMASTER_DDE
, SwServiceType::FieldMasterDDE
},
455 { CSS_TEXT_FIELDMASTER_SET_EXPRESSION
, SwServiceType::FieldMasterSetExp
},
456 { CSS_TEXT_FIELDMASTER_DATABASE
, SwServiceType::FieldMasterDatabase
},
457 { CSS_TEXT_FIELDMASTER_BIBLIOGRAPHY
, SwServiceType::FieldMasterBibliography
},
458 { "com.sun.star.style.TableStyle", SwServiceType::StyleTable
},
459 { "com.sun.star.style.CellStyle", SwServiceType::StyleCell
},
460 { "com.sun.star.text.LineBreak", SwServiceType::LineBreak
},
461 { "com.sun.star.text.ContentControl", SwServiceType::ContentControl
}
464 const SvEventDescription
* sw_GetSupportedMacroItems()
466 static const SvEventDescription aMacroDescriptionsImpl
[] =
468 { SvMacroItemId::OnMouseOver
, "OnMouseOver" },
469 { SvMacroItemId::OnMouseOut
, "OnMouseOut" },
470 { SvMacroItemId::NONE
, nullptr }
473 return aMacroDescriptionsImpl
;
476 OUString
SwXServiceProvider::GetProviderName(SwServiceType nObjectType
)
479 const sal_uInt16 nEntries
= SAL_N_ELEMENTS(aProvNamesId
);
480 if(static_cast<sal_uInt16
>(nObjectType
) < nEntries
)
481 sRet
= OUString::createFromAscii(aProvNamesId
[static_cast<sal_uInt16
>(nObjectType
)].pName
);
485 uno::Sequence
<OUString
> SwXServiceProvider::GetAllServiceNames()
487 const sal_uInt16 nEntries
= SAL_N_ELEMENTS(aProvNamesId
);
488 uno::Sequence
<OUString
> aRet(nEntries
);
489 OUString
* pArray
= aRet
.getArray();
491 for(const ProvNamesId_Type
& i
: aProvNamesId
)
493 OUString
sProv(OUString::createFromAscii(i
.pName
));
505 SwServiceType
SwXServiceProvider::GetProviderType(std::u16string_view rServiceName
)
507 for(const ProvNamesId_Type
& i
: aProvNamesId
)
509 if (o3tl::equalsAscii(rServiceName
, i
.pName
))
512 return SwServiceType::Invalid
;
515 uno::Reference
<uno::XInterface
>
516 SwXServiceProvider::MakeInstance(SwServiceType nObjectType
, SwDoc
& rDoc
)
518 SolarMutexGuard aGuard
;
519 uno::Reference
< uno::XInterface
> xRet
;
522 case SwServiceType::TypeTextTable
:
524 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextTable::CreateXTextTable(nullptr).get());
527 case SwServiceType::TypeTextFrame
:
529 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextFrame::CreateXTextFrame(rDoc
, nullptr).get());
532 case SwServiceType::TypeGraphic
:
533 case SwServiceType::TypeTextGraphic
/* #i47503# */ :
535 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextGraphicObject::CreateXTextGraphicObject(rDoc
, nullptr).get());
539 case SwServiceType::TypeOLE
:
541 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextEmbeddedObject::CreateXTextEmbeddedObject(rDoc
, nullptr).get());
544 case SwServiceType::TypeBookmark
:
546 xRet
= static_cast<cppu::OWeakObject
*>(SwXBookmark::CreateXBookmark(rDoc
, nullptr).get());
549 case SwServiceType::TypeFieldMark
:
551 xRet
= static_cast<cppu::OWeakObject
*>(SwXFieldmark::CreateXFieldmark(rDoc
, nullptr).get());
554 case SwServiceType::TypeFormFieldMark
:
556 xRet
= static_cast<cppu::OWeakObject
*>(SwXFieldmark::CreateXFieldmark(rDoc
, nullptr, true).get());
559 case SwServiceType::VbaObjectProvider
:
560 #if HAVE_FEATURE_SCRIPTING
562 xRet
= static_cast<cppu::OWeakObject
*>(new SwVbaObjectForCodeNameProvider(rDoc
.GetDocShell()));
566 case SwServiceType::VbaCodeNameProvider
:
567 #if HAVE_FEATURE_SCRIPTING
569 if (rDoc
.GetDocShell() && ooo::vba::isAlienWordDoc(*rDoc
.GetDocShell()))
571 xRet
= static_cast<cppu::OWeakObject
*>(new SwVbaCodeNameProvider(rDoc
.GetDocShell()));
576 case SwServiceType::VbaProjectNameProvider
:
577 #if HAVE_FEATURE_SCRIPTING
579 uno::Reference
< container::XNameContainer
> xProjProv
= rDoc
.GetVBATemplateToProjectCache();
580 if (!xProjProv
.is() && rDoc
.GetDocShell()
581 && ooo::vba::isAlienWordDoc(*rDoc
.GetDocShell()))
583 xProjProv
= new SwVbaProjectNameProvider
;
584 rDoc
.SetVBATemplateToProjectCache(xProjProv
);
590 case SwServiceType::VbaGlobals
:
591 #if HAVE_FEATURE_SCRIPTING
594 BasicManager
*pBasicMan
= rDoc
.GetDocShell()->GetBasicManager();
595 if (pBasicMan
&& !pBasicMan
->GetGlobalUNOConstant("VBAGlobals", aGlobs
))
597 uno::Sequence
< uno::Any
> aArgs
{ uno::Any(rDoc
.GetDocShell()->GetModel()) };
598 aGlobs
<<= ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( "ooo.vba.word.Globals", aArgs
);
599 pBasicMan
->SetGlobalUNOConstant( "VBAGlobals", aGlobs
);
606 case SwServiceType::TypeFootnote
:
607 xRet
= static_cast<cppu::OWeakObject
*>(SwXFootnote::CreateXFootnote(rDoc
, nullptr).get());
609 case SwServiceType::TypeEndnote
:
610 xRet
= static_cast<cppu::OWeakObject
*>(SwXFootnote::CreateXFootnote(rDoc
, nullptr, true).get());
612 case SwServiceType::ContentIndexMark
:
613 case SwServiceType::UserIndexMark
:
614 case SwServiceType::TypeIndexMark
:
616 TOXTypes eType
= TOX_INDEX
;
617 if(SwServiceType::ContentIndexMark
== nObjectType
)
619 else if(SwServiceType::UserIndexMark
== nObjectType
)
621 xRet
= static_cast<cppu::OWeakObject
*>(SwXDocumentIndexMark::CreateXDocumentIndexMark(rDoc
, nullptr, eType
).get());
624 case SwServiceType::ContentIndex
:
625 case SwServiceType::UserIndex
:
626 case SwServiceType::TypeIndex
:
627 case SwServiceType::IndexIllustrations
:
628 case SwServiceType::IndexObjects
:
629 case SwServiceType::IndexTables
:
630 case SwServiceType::IndexBibliography
:
632 TOXTypes eType
= TOX_INDEX
;
633 if(SwServiceType::ContentIndex
== nObjectType
)
635 else if(SwServiceType::UserIndex
== nObjectType
)
637 else if(SwServiceType::IndexIllustrations
== nObjectType
)
639 eType
= TOX_ILLUSTRATIONS
;
641 else if(SwServiceType::IndexObjects
== nObjectType
)
645 else if(SwServiceType::IndexBibliography
== nObjectType
)
647 eType
= TOX_AUTHORITIES
;
649 else if(SwServiceType::IndexTables
== nObjectType
)
653 xRet
= static_cast<cppu::OWeakObject
*>(SwXDocumentIndex::CreateXDocumentIndex(rDoc
, nullptr, eType
).get());
656 case SwServiceType::IndexHeaderSection
:
657 case SwServiceType::TextSection
:
658 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextSection::CreateXTextSection(nullptr,
659 (SwServiceType::IndexHeaderSection
== nObjectType
)).get());
662 case SwServiceType::ReferenceMark
:
663 xRet
= static_cast<cppu::OWeakObject
*>(SwXReferenceMark::CreateXReferenceMark(rDoc
, nullptr).get());
665 case SwServiceType::StyleCharacter
:
666 case SwServiceType::StyleParagraph
:
667 case SwServiceType::StyleConditionalParagraph
:
668 case SwServiceType::StyleFrame
:
669 case SwServiceType::StylePage
:
670 case SwServiceType::StyleNumbering
:
671 case SwServiceType::StyleTable
:
672 case SwServiceType::StyleCell
:
674 SfxStyleFamily eFamily
= SfxStyleFamily::Char
;
677 case SwServiceType::StyleParagraph
:
678 eFamily
= SfxStyleFamily::Para
;
680 case SwServiceType::StyleConditionalParagraph
:
681 eFamily
= SfxStyleFamily::Para
;
682 xRet
= SwXStyleFamilies::CreateStyleCondParagraph(rDoc
);
684 case SwServiceType::StyleFrame
:
685 eFamily
= SfxStyleFamily::Frame
;
687 case SwServiceType::StylePage
:
688 eFamily
= SfxStyleFamily::Page
;
690 case SwServiceType::StyleNumbering
:
691 eFamily
= SfxStyleFamily::Pseudo
;
693 case SwServiceType::StyleTable
:
694 eFamily
= SfxStyleFamily::Table
;
696 case SwServiceType::StyleCell
:
697 eFamily
= SfxStyleFamily::Cell
;
702 xRet
= SwXStyleFamilies::CreateStyle(eFamily
, rDoc
);
705 case SwServiceType::FieldTypeDateTime
:
706 case SwServiceType::FieldTypeUser
:
707 case SwServiceType::FieldTypeSetExp
:
708 case SwServiceType::FieldTypeGetExp
:
709 case SwServiceType::FieldTypeFileName
:
710 case SwServiceType::FieldTypePageNum
:
711 case SwServiceType::FieldTypeAuthor
:
712 case SwServiceType::FieldTypeChapter
:
713 case SwServiceType::FieldTypeGetReference
:
714 case SwServiceType::FieldTypeConditionedText
:
715 case SwServiceType::FieldTypeInput
:
716 case SwServiceType::FieldTypeMacro
:
717 case SwServiceType::FieldTypeDDE
:
718 case SwServiceType::FieldTypeHiddenPara
:
719 case SwServiceType::FieldTypeDocInfo
:
720 case SwServiceType::FieldTypeTemplateName
:
721 case SwServiceType::FieldTypeUserExt
:
722 case SwServiceType::FieldTypeRefPageSet
:
723 case SwServiceType::FieldTypeRefPageGet
:
724 case SwServiceType::FieldTypeJumpEdit
:
725 case SwServiceType::FieldTypeScript
:
726 case SwServiceType::FieldTypeDatabaseNextSet
:
727 case SwServiceType::FieldTypeDatabaseNumSet
:
728 case SwServiceType::FieldTypeDatabaseSetNum
:
729 case SwServiceType::FieldTypeDatabase
:
730 case SwServiceType::FieldTypeDatabaseName
:
731 case SwServiceType::FieldTypePageCount
:
732 case SwServiceType::FieldTypeParagraphCount
:
733 case SwServiceType::FieldTypeWordCount
:
734 case SwServiceType::FieldTypeCharacterCount
:
735 case SwServiceType::FieldTypeTableCount
:
736 case SwServiceType::FieldTypeGraphicObjectCount
:
737 case SwServiceType::FieldTypeEmbeddedObjectCount
:
738 case SwServiceType::FieldTypeDocInfoChangeAuthor
:
739 case SwServiceType::FieldTypeDocInfoChangeDateTime
:
740 case SwServiceType::FieldTypeDocInfoEditTime
:
741 case SwServiceType::FieldTypeDocInfoDescription
:
742 case SwServiceType::FieldTypeDocInfoCreateAuthor
:
743 case SwServiceType::FieldTypeDocInfoCreateDateTime
:
744 case SwServiceType::FieldTypeDocInfoCustom
:
745 case SwServiceType::FieldTypeDocInfoPrintAuthor
:
746 case SwServiceType::FieldTypeDocInfoPrintDateTime
:
747 case SwServiceType::FieldTypeDocInfoKeywords
:
748 case SwServiceType::FieldTypeDocInfoSubject
:
749 case SwServiceType::FieldTypeDocInfoTitle
:
750 case SwServiceType::FieldTypeDocInfoRevision
:
751 case SwServiceType::FieldTypeBibliography
:
752 case SwServiceType::FieldTypeInputUser
:
753 case SwServiceType::FieldTypeHiddenText
:
754 case SwServiceType::FieldTypeCombinedCharacters
:
755 case SwServiceType::FieldTypeDropdown
:
756 case SwServiceType::FieldTypeTableFormula
:
757 // NOTE: the sw.SwXAutoTextEntry unoapi test depends on pDoc = 0
758 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextField::CreateXTextField(nullptr, nullptr, nObjectType
).get());
760 case SwServiceType::FieldTypeAnnotation
:
761 xRet
= static_cast<cppu::OWeakObject
*>(SwXTextField::CreateXTextField(&rDoc
, nullptr, nObjectType
).get());
763 case SwServiceType::FieldMasterUser
:
764 case SwServiceType::FieldMasterDDE
:
765 case SwServiceType::FieldMasterSetExp
:
766 case SwServiceType::FieldMasterDatabase
:
768 SwFieldIds nResId
= SwFieldIds::Unknown
;
771 case SwServiceType::FieldMasterUser
: nResId
= SwFieldIds::User
; break;
772 case SwServiceType::FieldMasterDDE
: nResId
= SwFieldIds::Dde
; break;
773 case SwServiceType::FieldMasterSetExp
: nResId
= SwFieldIds::SetExp
; break;
774 case SwServiceType::FieldMasterDatabase
: nResId
= SwFieldIds::Database
; break;
777 xRet
= static_cast<cppu::OWeakObject
*>(SwXFieldMaster::CreateXFieldMaster(&rDoc
, nullptr, nResId
).get());
780 case SwServiceType::FieldMasterBibliography
:
782 SwFieldType
* pType
= rDoc
.getIDocumentFieldsAccess().GetFieldType(SwFieldIds::TableOfAuthorities
, OUString(), true);
785 SwAuthorityFieldType
aType(&rDoc
);
786 pType
= rDoc
.getIDocumentFieldsAccess().InsertFieldType(aType
);
788 xRet
= static_cast<cppu::OWeakObject
*>(SwXFieldMaster::CreateXFieldMaster(&rDoc
, pType
).get());
791 case SwServiceType::Paragraph
:
792 xRet
= static_cast<cppu::OWeakObject
*>(SwXParagraph::CreateXParagraph(rDoc
, nullptr).get());
794 case SwServiceType::NumberingRules
:
795 xRet
= static_cast<cppu::OWeakObject
*>(new SwXNumberingRules(rDoc
));
797 case SwServiceType::TextColumns
:
798 xRet
= SvxXTextColumns_createInstance();
800 case SwServiceType::Defaults
:
801 xRet
= static_cast<cppu::OWeakObject
*>(new SwXTextDefaults(&rDoc
));
803 case SwServiceType::IMapRectangle
:
804 xRet
= SvUnoImageMapRectangleObject_createInstance( sw_GetSupportedMacroItems() );
806 case SwServiceType::IMapCircle
:
807 xRet
= SvUnoImageMapCircleObject_createInstance( sw_GetSupportedMacroItems() );
809 case SwServiceType::IMapPolygon
:
810 xRet
= SvUnoImageMapPolygonObject_createInstance( sw_GetSupportedMacroItems() );
812 case SwServiceType::Chart2DataProvider
:
813 // #i64497# If a chart is in a temporary document during clipboard
814 // paste, there should be no data provider, so that own data is used
815 // This should not happen during copy/paste, as this will unlink
816 // charts using table data.
817 if (rDoc
.GetDocShell()->GetCreateMode() != SfxObjectCreateMode::EMBEDDED
)
818 xRet
= static_cast<cppu::OWeakObject
*>(rDoc
.getIDocumentChartDataProviderAccess().GetChartDataProvider( true /* create - if not yet available */ ));
821 "not creating chart data provider for embedded object");
824 case SwServiceType::TypeMeta
:
825 xRet
= static_cast<cppu::OWeakObject
*>(SwXMeta::CreateXMeta(rDoc
, false).get());
827 case SwServiceType::FieldTypeMetafield
:
828 xRet
= static_cast<cppu::OWeakObject
*>(SwXMeta::CreateXMeta(rDoc
, true).get());
830 case SwServiceType::LineBreak
:
831 xRet
= static_cast<cppu::OWeakObject
*>(SwXLineBreak::CreateXLineBreak(nullptr).get());
833 case SwServiceType::ContentControl
:
834 xRet
= static_cast<cppu::OWeakObject
*>(SwXContentControl::CreateXContentControl(rDoc
).get());
837 throw uno::RuntimeException();
842 //SMART_UNO_IMPLEMENTATION( SwXTextTables, UsrObject );
843 SwXTextTables::SwXTextTables(SwDoc
* pDc
) :
849 SwXTextTables::~SwXTextTables()
854 sal_Int32
SwXTextTables::getCount()
856 SolarMutexGuard aGuard
;
859 nRet
= static_cast<sal_Int32
>(GetDoc()->GetTableFrameFormatCount(true));
863 uno::Any SAL_CALL
SwXTextTables::getByIndex(sal_Int32 nInputIndex
)
865 SolarMutexGuard aGuard
;
868 throw uno::RuntimeException();
871 throw IndexOutOfBoundsException();
873 SwAutoFormatGetDocNode
aGetHt( &GetDoc()->GetNodes() );
874 size_t nIndex
= static_cast<size_t>(nInputIndex
);
875 size_t nCurrentIndex
= 0;
877 for(SwTableFormat
* pFormat
: *GetDoc()->GetTableFrameFormats())
879 if (!pFormat
->GetInfo(aGetHt
))
881 if (nCurrentIndex
== nIndex
)
883 uno::Reference
<XTextTable
> xTable
= SwXTextTables::GetObject(*pFormat
);
891 throw IndexOutOfBoundsException();
894 uno::Any
SwXTextTables::getByName(const OUString
& rItemName
)
896 SolarMutexGuard aGuard
;
899 throw uno::RuntimeException();
901 const size_t nCount
= GetDoc()->GetTableFrameFormatCount(true);
902 uno::Reference
< XTextTable
> xTable
;
903 for( size_t i
= 0; i
< nCount
; ++i
)
905 SwFrameFormat
& rFormat
= GetDoc()->GetTableFrameFormat(i
, true);
906 if (rItemName
== rFormat
.GetName())
908 xTable
= SwXTextTables::GetObject(rFormat
);
914 throw NoSuchElementException();
919 uno::Sequence
< OUString
> SwXTextTables::getElementNames()
921 SolarMutexGuard aGuard
;
923 throw uno::RuntimeException();
924 const size_t nCount
= GetDoc()->GetTableFrameFormatCount(true);
925 uno::Sequence
<OUString
> aSeq(static_cast<sal_Int32
>(nCount
));
928 OUString
* pArray
= aSeq
.getArray();
929 for( size_t i
= 0; i
< nCount
; ++i
)
931 SwFrameFormat
& rFormat
= GetDoc()->GetTableFrameFormat(i
, true);
933 pArray
[i
] = rFormat
.GetName();
939 sal_Bool
SwXTextTables::hasByName(const OUString
& rName
)
941 SolarMutexGuard aGuard
;
944 throw uno::RuntimeException();
946 const size_t nCount
= GetDoc()->GetTableFrameFormatCount(true);
947 for( size_t i
= 0; i
< nCount
; ++i
)
949 SwFrameFormat
& rFormat
= GetDoc()->GetTableFrameFormat(i
, true);
950 if (rName
== rFormat
.GetName())
960 SwXTextTables::getElementType( )
962 return cppu::UnoType
<XTextTable
>::get();
965 sal_Bool
SwXTextTables::hasElements()
967 SolarMutexGuard aGuard
;
969 throw uno::RuntimeException();
970 return 0 != GetDoc()->GetTableFrameFormatCount(true);
973 OUString
SwXTextTables::getImplementationName()
975 return "SwXTextTables";
978 sal_Bool
SwXTextTables::supportsService(const OUString
& rServiceName
)
980 return cppu::supportsService(this, rServiceName
);
983 uno::Sequence
< OUString
> SwXTextTables::getSupportedServiceNames()
985 return { "com.sun.star.text.TextTables" };
988 uno::Reference
<text::XTextTable
> SwXTextTables::GetObject(SwFrameFormat
& rFormat
)
990 return SwXTextTable::CreateXTextTable(& rFormat
);
995 template<FlyCntType T
> struct UnoFrameWrap_traits
{};
998 struct UnoFrameWrap_traits
<FLYCNTTYPE_FRM
>
1000 static uno::Any
wrapFrame(SwFrameFormat
& rFrameFormat
)
1002 uno::Reference
<text::XTextFrame
> const xRet(
1003 SwXTextFrame::CreateXTextFrame(*rFrameFormat
.GetDoc(), &rFrameFormat
));
1004 return uno::Any(xRet
);
1006 static bool filter(const SwNode
* const pNode
) { return !pNode
->IsNoTextNode(); };
1010 struct UnoFrameWrap_traits
<FLYCNTTYPE_GRF
>
1012 static uno::Any
wrapFrame(SwFrameFormat
& rFrameFormat
)
1014 uno::Reference
<text::XTextContent
> const xRet(
1015 SwXTextGraphicObject::CreateXTextGraphicObject(*rFrameFormat
.GetDoc(), &rFrameFormat
));
1016 return uno::Any(xRet
);
1018 static bool filter(const SwNode
* const pNode
) { return pNode
->IsGrfNode(); };
1022 struct UnoFrameWrap_traits
<FLYCNTTYPE_OLE
>
1024 static uno::Any
wrapFrame(SwFrameFormat
& rFrameFormat
)
1026 uno::Reference
<text::XTextContent
> const xRet(
1027 SwXTextEmbeddedObject::CreateXTextEmbeddedObject(*rFrameFormat
.GetDoc(), &rFrameFormat
));
1028 return uno::Any(xRet
);
1030 static bool filter(const SwNode
* const pNode
) { return pNode
->IsOLENode(); };
1033 template<FlyCntType T
>
1034 uno::Any
lcl_UnoWrapFrame(SwFrameFormat
* pFormat
)
1036 return UnoFrameWrap_traits
<T
>::wrapFrame(*pFormat
);
1039 // runtime adapter for lcl_UnoWrapFrame
1040 /// @throws uno::RuntimeException
1041 uno::Any
lcl_UnoWrapFrame(SwFrameFormat
* pFormat
, FlyCntType eType
)
1045 case FLYCNTTYPE_FRM
:
1046 return lcl_UnoWrapFrame
<FLYCNTTYPE_FRM
>(pFormat
);
1047 case FLYCNTTYPE_GRF
:
1048 return lcl_UnoWrapFrame
<FLYCNTTYPE_GRF
>(pFormat
);
1049 case FLYCNTTYPE_OLE
:
1050 return lcl_UnoWrapFrame
<FLYCNTTYPE_OLE
>(pFormat
);
1052 throw uno::RuntimeException();
1056 template<FlyCntType T
>
1057 class SwXFrameEnumeration
1058 : public SwSimpleEnumeration_Base
1061 std::vector
< Any
> m_aFrames
;
1063 virtual ~SwXFrameEnumeration() override
{};
1065 SwXFrameEnumeration(const SwDoc
& rDoc
);
1068 virtual sal_Bool SAL_CALL
hasMoreElements() override
;
1069 virtual Any SAL_CALL
nextElement() override
;
1072 virtual OUString SAL_CALL
getImplementationName() override
;
1073 virtual sal_Bool SAL_CALL
supportsService(const OUString
& ServiceName
) override
;
1074 virtual Sequence
< OUString
> SAL_CALL
getSupportedServiceNames() override
;
1078 template<FlyCntType T
>
1079 SwXFrameEnumeration
<T
>::SwXFrameEnumeration(const SwDoc
& rDoc
)
1081 SolarMutexGuard aGuard
;
1082 for(sw::SpzFrameFormat
* pFormat
: *rDoc
.GetSpzFrameFormats())
1085 if(pFormat
->Which() != RES_FLYFRMFMT
|| SwTextBoxHelper::isTextBox(pFormat
, RES_FLYFRMFMT
))
1087 const SwNodeIndex
* pIdx
= pFormat
->GetContent().GetContentIdx();
1088 if(!pIdx
|| !pIdx
->GetNodes().IsDocNodes())
1090 const SwNode
* pNd
= rDoc
.GetNodes()[ pIdx
->GetIndex() + 1 ];
1091 if(UnoFrameWrap_traits
<T
>::filter(pNd
))
1092 m_aFrames
.push_back(lcl_UnoWrapFrame
<T
>(pFormat
));
1096 template<FlyCntType T
>
1097 sal_Bool SwXFrameEnumeration
<T
>::hasMoreElements()
1099 SolarMutexGuard aGuard
;
1100 return !m_aFrames
.empty();
1103 template<FlyCntType T
>
1104 Any SwXFrameEnumeration
<T
>::nextElement()
1106 SolarMutexGuard aGuard
;
1107 if(m_aFrames
.empty())
1108 throw NoSuchElementException();
1110 Any aResult
= m_aFrames
.back();
1111 m_aFrames
.pop_back();
1115 template<FlyCntType T
>
1116 OUString SwXFrameEnumeration
<T
>::getImplementationName()
1118 return "SwXFrameEnumeration";
1121 template<FlyCntType T
>
1122 sal_Bool SwXFrameEnumeration
<T
>::supportsService(const OUString
& ServiceName
)
1124 return cppu::supportsService(this, ServiceName
);
1127 template<FlyCntType T
>
1128 Sequence
< OUString
> SwXFrameEnumeration
<T
>::getSupportedServiceNames()
1130 return { OUString("com.sun.star.container.XEnumeration") };
1133 OUString
SwXFrames::getImplementationName()
1138 sal_Bool
SwXFrames::supportsService(const OUString
& rServiceName
)
1140 return cppu::supportsService(this, rServiceName
);
1143 Sequence
<OUString
> SwXFrames::getSupportedServiceNames()
1145 return { OUString("com.sun.star.text.TextFrames") };
1148 SwXFrames::SwXFrames(SwDoc
* _pDoc
, FlyCntType eSet
) :
1149 SwUnoCollection(_pDoc
),
1153 SwXFrames::~SwXFrames()
1156 uno::Reference
<container::XEnumeration
> SwXFrames::createEnumeration()
1158 SolarMutexGuard aGuard
;
1160 throw uno::RuntimeException();
1163 case FLYCNTTYPE_FRM
:
1164 return uno::Reference
< container::XEnumeration
>(
1165 new SwXFrameEnumeration
<FLYCNTTYPE_FRM
>(*GetDoc()));
1166 case FLYCNTTYPE_GRF
:
1167 return uno::Reference
< container::XEnumeration
>(
1168 new SwXFrameEnumeration
<FLYCNTTYPE_GRF
>(*GetDoc()));
1169 case FLYCNTTYPE_OLE
:
1170 return uno::Reference
< container::XEnumeration
>(
1171 new SwXFrameEnumeration
<FLYCNTTYPE_OLE
>(*GetDoc()));
1173 throw uno::RuntimeException();
1177 sal_Int32
SwXFrames::getCount()
1179 SolarMutexGuard aGuard
;
1181 throw uno::RuntimeException();
1182 // Ignore TextBoxes for TextFrames.
1183 return static_cast<sal_Int32
>(GetDoc()->GetFlyCount(m_eType
, /*bIgnoreTextBoxes=*/m_eType
== FLYCNTTYPE_FRM
));
1186 uno::Any
SwXFrames::getByIndex(sal_Int32 nIndex
)
1188 SolarMutexGuard aGuard
;
1190 throw uno::RuntimeException();
1192 throw IndexOutOfBoundsException();
1193 // Ignore TextBoxes for TextFrames.
1194 SwFrameFormat
* pFormat
= GetDoc()->GetFlyNum(static_cast<size_t>(nIndex
), m_eType
, /*bIgnoreTextBoxes=*/m_eType
== FLYCNTTYPE_FRM
);
1196 throw IndexOutOfBoundsException();
1197 return lcl_UnoWrapFrame(pFormat
, m_eType
);
1200 uno::Any
SwXFrames::getByName(const OUString
& rName
)
1202 SolarMutexGuard aGuard
;
1204 throw uno::RuntimeException();
1205 const SwFrameFormat
* pFormat
;
1208 case FLYCNTTYPE_GRF
:
1209 pFormat
= GetDoc()->FindFlyByName(rName
, SwNodeType::Grf
);
1211 case FLYCNTTYPE_OLE
:
1212 pFormat
= GetDoc()->FindFlyByName(rName
, SwNodeType::Ole
);
1215 pFormat
= GetDoc()->FindFlyByName(rName
, SwNodeType::Text
);
1219 throw NoSuchElementException();
1220 return lcl_UnoWrapFrame(const_cast<SwFrameFormat
*>(pFormat
), m_eType
);
1223 uno::Sequence
<OUString
> SwXFrames::getElementNames()
1225 SolarMutexGuard aGuard
;
1227 throw uno::RuntimeException();
1228 const Reference
<XEnumeration
> xEnum
= createEnumeration();
1229 std::vector
<OUString
> vNames
;
1230 while(xEnum
->hasMoreElements())
1232 Reference
<container::XNamed
> xNamed
;
1233 xEnum
->nextElement() >>= xNamed
;
1235 vNames
.push_back(xNamed
->getName());
1237 return ::comphelper::containerToSequence(vNames
);
1240 sal_Bool
SwXFrames::hasByName(const OUString
& rName
)
1242 SolarMutexGuard aGuard
;
1244 throw uno::RuntimeException();
1247 case FLYCNTTYPE_GRF
:
1248 return GetDoc()->FindFlyByName(rName
, SwNodeType::Grf
) != nullptr;
1249 case FLYCNTTYPE_OLE
:
1250 return GetDoc()->FindFlyByName(rName
, SwNodeType::Ole
) != nullptr;
1252 return GetDoc()->FindFlyByName(rName
, SwNodeType::Text
) != nullptr;
1256 uno::Type SAL_CALL
SwXFrames::getElementType()
1258 SolarMutexGuard aGuard
;
1261 case FLYCNTTYPE_FRM
:
1262 return cppu::UnoType
<XTextFrame
>::get();
1263 case FLYCNTTYPE_GRF
:
1264 return cppu::UnoType
<XTextContent
>::get();
1265 case FLYCNTTYPE_OLE
:
1266 return cppu::UnoType
<XEmbeddedObjectSupplier
>::get();
1272 sal_Bool
SwXFrames::hasElements()
1274 SolarMutexGuard aGuard
;
1276 throw uno::RuntimeException();
1277 return GetDoc()->GetFlyCount(m_eType
) > 0;
1281 OUString
SwXTextFrames::getImplementationName()
1283 return "SwXTextFrames";
1286 sal_Bool
SwXTextFrames::supportsService(const OUString
& rServiceName
)
1288 return cppu::supportsService(this, rServiceName
);
1291 Sequence
< OUString
> SwXTextFrames::getSupportedServiceNames()
1293 return { "com.sun.star.text.TextFrames" };
1296 SwXTextFrames::SwXTextFrames(SwDoc
* _pDoc
) :
1297 SwXFrames(_pDoc
, FLYCNTTYPE_FRM
)
1301 SwXTextFrames::~SwXTextFrames()
1305 OUString
SwXTextGraphicObjects::getImplementationName()
1307 return "SwXTextGraphicObjects";
1310 sal_Bool
SwXTextGraphicObjects::supportsService(const OUString
& rServiceName
)
1312 return cppu::supportsService(this, rServiceName
);
1315 Sequence
< OUString
> SwXTextGraphicObjects::getSupportedServiceNames()
1317 return { "com.sun.star.text.TextGraphicObjects" };
1320 SwXTextGraphicObjects::SwXTextGraphicObjects(SwDoc
* _pDoc
) :
1321 SwXFrames(_pDoc
, FLYCNTTYPE_GRF
)
1325 SwXTextGraphicObjects::~SwXTextGraphicObjects()
1329 OUString
SwXTextEmbeddedObjects::getImplementationName()
1331 return "SwXTextEmbeddedObjects";
1334 sal_Bool
SwXTextEmbeddedObjects::supportsService(const OUString
& rServiceName
)
1336 return cppu::supportsService(this, rServiceName
);
1339 Sequence
< OUString
> SwXTextEmbeddedObjects::getSupportedServiceNames()
1341 return { "com.sun.star.text.TextEmbeddedObjects" };
1344 SwXTextEmbeddedObjects::SwXTextEmbeddedObjects(SwDoc
* _pDoc
) :
1345 SwXFrames(_pDoc
, FLYCNTTYPE_OLE
)
1349 SwXTextEmbeddedObjects::~SwXTextEmbeddedObjects()
1353 OUString
SwXTextSections::getImplementationName()
1355 return "SwXTextSections";
1358 sal_Bool
SwXTextSections::supportsService(const OUString
& rServiceName
)
1360 return cppu::supportsService(this, rServiceName
);
1363 Sequence
< OUString
> SwXTextSections::getSupportedServiceNames()
1365 return { "com.sun.star.text.TextSections" };
1368 SwXTextSections::SwXTextSections(SwDoc
* _pDoc
) :
1369 SwUnoCollection(_pDoc
)
1373 SwXTextSections::~SwXTextSections()
1377 sal_Int32
SwXTextSections::getCount()
1379 SolarMutexGuard aGuard
;
1381 throw uno::RuntimeException();
1382 const SwSectionFormats
& rSectFormats
= GetDoc()->GetSections();
1383 size_t nCount
= rSectFormats
.size();
1384 for(size_t i
= nCount
; i
; --i
)
1386 if( !rSectFormats
[i
- 1]->IsInNodesArr())
1392 uno::Any
SwXTextSections::getByIndex(sal_Int32 nIndex
)
1394 SolarMutexGuard aGuard
;
1395 uno::Reference
< XTextSection
> xRet
;
1397 throw uno::RuntimeException();
1399 SwSectionFormats
& rFormats
= GetDoc()->GetSections();
1401 const SwSectionFormats
& rSectFormats
= GetDoc()->GetSections();
1402 const size_t nCount
= rSectFormats
.size();
1403 for(size_t i
= 0; i
< nCount
; ++i
)
1405 if( !rSectFormats
[i
]->IsInNodesArr())
1407 else if(static_cast<size_t>(nIndex
) == i
)
1409 if(static_cast<size_t>(nIndex
) == i
)
1412 if(nIndex
< 0 || o3tl::make_unsigned(nIndex
) >= rFormats
.size())
1413 throw IndexOutOfBoundsException();
1415 SwSectionFormat
* pFormat
= rFormats
[nIndex
];
1416 xRet
= GetObject(*pFormat
);
1421 uno::Any
SwXTextSections::getByName(const OUString
& rName
)
1423 SolarMutexGuard aGuard
;
1426 throw uno::RuntimeException();
1428 SwSectionFormats
& rFormats
= GetDoc()->GetSections();
1429 uno::Reference
< XTextSection
> xSect
;
1430 for(size_t i
= 0; i
< rFormats
.size(); ++i
)
1432 SwSectionFormat
* pFormat
= rFormats
[i
];
1433 if (pFormat
->IsInNodesArr()
1434 && (rName
== pFormat
->GetSection()->GetSectionName()))
1436 xSect
= GetObject(*pFormat
);
1442 throw NoSuchElementException();
1447 uno::Sequence
< OUString
> SwXTextSections::getElementNames()
1449 SolarMutexGuard aGuard
;
1451 throw uno::RuntimeException();
1452 size_t nCount
= GetDoc()->GetSections().size();
1453 SwSectionFormats
& rSectFormats
= GetDoc()->GetSections();
1454 for(size_t i
= nCount
; i
; --i
)
1456 if( !rSectFormats
[i
- 1]->IsInNodesArr())
1460 uno::Sequence
<OUString
> aSeq(nCount
);
1463 SwSectionFormats
& rFormats
= GetDoc()->GetSections();
1464 OUString
* pArray
= aSeq
.getArray();
1466 for( size_t i
= 0; i
< nCount
; ++i
, ++nIndex
)
1468 const SwSectionFormat
* pFormat
= rFormats
[nIndex
];
1469 while(!pFormat
->IsInNodesArr())
1471 pFormat
= rFormats
[++nIndex
];
1473 pArray
[i
] = pFormat
->GetSection()->GetSectionName();
1479 sal_Bool
SwXTextSections::hasByName(const OUString
& rName
)
1481 SolarMutexGuard aGuard
;
1485 SwSectionFormats
& rFormats
= GetDoc()->GetSections();
1486 for(size_t i
= 0; i
< rFormats
.size(); ++i
)
1488 const SwSectionFormat
* pFormat
= rFormats
[i
];
1489 if (rName
== pFormat
->GetSection()->GetSectionName())
1498 // special handling for dbg_ methods
1499 if( !rName
.startsWith("dbg_"))
1500 throw uno::RuntimeException();
1505 uno::Type SAL_CALL
SwXTextSections::getElementType()
1507 return cppu::UnoType
<XTextSection
>::get();
1510 sal_Bool
SwXTextSections::hasElements()
1512 SolarMutexGuard aGuard
;
1515 throw uno::RuntimeException();
1517 SwSectionFormats
& rFormats
= GetDoc()->GetSections();
1518 nCount
= rFormats
.size();
1523 uno::Reference
< XTextSection
> SwXTextSections::GetObject( SwSectionFormat
& rFormat
)
1525 return SwXTextSection::CreateXTextSection(&rFormat
);
1528 OUString
SwXBookmarks::getImplementationName()
1530 return "SwXBookmarks";
1533 sal_Bool
SwXBookmarks::supportsService(const OUString
& rServiceName
)
1535 return cppu::supportsService(this, rServiceName
);
1538 Sequence
< OUString
> SwXBookmarks::getSupportedServiceNames()
1540 return { "com.sun.star.text.Bookmarks" };
1543 SwXBookmarks::SwXBookmarks(SwDoc
* _pDoc
) :
1544 SwUnoCollection(_pDoc
)
1547 SwXBookmarks::~SwXBookmarks()
1550 sal_Int32
SwXBookmarks::getCount()
1552 SolarMutexGuard aGuard
;
1554 throw uno::RuntimeException();
1557 IDocumentMarkAccess
* const pMarkAccess
= GetDoc()->getIDocumentMarkAccess();
1558 for (IDocumentMarkAccess::const_iterator_t ppMark
=
1559 pMarkAccess
->getBookmarksBegin();
1560 ppMark
!= pMarkAccess
->getBookmarksEnd(); ++ppMark
)
1562 if (IDocumentMarkAccess::MarkType::BOOKMARK
==
1563 IDocumentMarkAccess::GetType(**ppMark
))
1565 ++count
; // only count real bookmarks
1571 uno::Any
SwXBookmarks::getByIndex(sal_Int32 nIndex
)
1573 SolarMutexGuard aGuard
;
1575 throw uno::RuntimeException();
1576 IDocumentMarkAccess
* const pMarkAccess
= GetDoc()->getIDocumentMarkAccess();
1577 if(nIndex
< 0 || nIndex
>= pMarkAccess
->getBookmarksCount())
1578 throw IndexOutOfBoundsException();
1581 for (IDocumentMarkAccess::const_iterator_t ppMark
=
1582 pMarkAccess
->getBookmarksBegin();
1583 ppMark
!= pMarkAccess
->getBookmarksEnd(); ++ppMark
)
1585 if (IDocumentMarkAccess::MarkType::BOOKMARK
==
1586 IDocumentMarkAccess::GetType(**ppMark
))
1588 if (count
== nIndex
)
1591 const uno::Reference
< text::XTextContent
> xRef
=
1592 SwXBookmark::CreateXBookmark(*GetDoc(), *ppMark
);
1596 ++count
; // only count real bookmarks
1599 throw IndexOutOfBoundsException();
1602 uno::Any
SwXBookmarks::getByName(const OUString
& rName
)
1604 SolarMutexGuard aGuard
;
1606 throw uno::RuntimeException();
1608 IDocumentMarkAccess
* const pMarkAccess
= GetDoc()->getIDocumentMarkAccess();
1609 IDocumentMarkAccess::const_iterator_t ppBkmk
= pMarkAccess
->findBookmark(rName
);
1610 if(ppBkmk
== pMarkAccess
->getBookmarksEnd())
1611 throw NoSuchElementException();
1614 const uno::Reference
< text::XTextContent
> xRef
=
1615 SwXBookmark::CreateXBookmark(*GetDoc(), *ppBkmk
);
1620 uno::Sequence
< OUString
> SwXBookmarks::getElementNames()
1622 SolarMutexGuard aGuard
;
1624 throw uno::RuntimeException();
1626 std::vector
< OUString
> ret
;
1627 IDocumentMarkAccess
* const pMarkAccess
= GetDoc()->getIDocumentMarkAccess();
1628 for (IDocumentMarkAccess::const_iterator_t ppMark
=
1629 pMarkAccess
->getBookmarksBegin();
1630 ppMark
!= pMarkAccess
->getBookmarksEnd(); ++ppMark
)
1632 if (IDocumentMarkAccess::MarkType::BOOKMARK
==
1633 IDocumentMarkAccess::GetType(**ppMark
))
1635 ret
.push_back((*ppMark
)->GetName()); // only add real bookmarks
1638 return comphelper::containerToSequence(ret
);
1641 sal_Bool
SwXBookmarks::hasByName(const OUString
& rName
)
1643 SolarMutexGuard aGuard
;
1645 throw uno::RuntimeException();
1647 IDocumentMarkAccess
* const pMarkAccess
= GetDoc()->getIDocumentMarkAccess();
1648 return pMarkAccess
->findBookmark(rName
) != pMarkAccess
->getBookmarksEnd();
1651 uno::Type SAL_CALL
SwXBookmarks::getElementType()
1653 return cppu::UnoType
<XTextContent
>::get();
1656 sal_Bool
SwXBookmarks::hasElements()
1658 SolarMutexGuard aGuard
;
1660 throw uno::RuntimeException();
1662 IDocumentMarkAccess
* const pMarkAccess
= GetDoc()->getIDocumentMarkAccess();
1663 for (IDocumentMarkAccess::const_iterator_t ppMark
=
1664 pMarkAccess
->getBookmarksBegin();
1665 ppMark
!= pMarkAccess
->getBookmarksEnd(); ++ppMark
)
1667 if (IDocumentMarkAccess::MarkType::BOOKMARK
==
1668 IDocumentMarkAccess::GetType(**ppMark
))
1676 SwXNumberingRulesCollection::SwXNumberingRulesCollection( SwDoc
* _pDoc
) :
1677 SwUnoCollection(_pDoc
)
1681 SwXNumberingRulesCollection::~SwXNumberingRulesCollection()
1685 sal_Int32
SwXNumberingRulesCollection::getCount()
1687 SolarMutexGuard aGuard
;
1689 throw uno::RuntimeException();
1690 return GetDoc()->GetNumRuleTable().size();
1693 uno::Any
SwXNumberingRulesCollection::getByIndex(sal_Int32 nIndex
)
1695 SolarMutexGuard aGuard
;
1698 throw uno::RuntimeException();
1700 uno::Reference
< XIndexReplace
> xRef
;
1701 if ( o3tl::make_unsigned(nIndex
) < GetDoc()->GetNumRuleTable().size() )
1703 xRef
= new SwXNumberingRules( *GetDoc()->GetNumRuleTable()[ nIndex
], GetDoc());
1708 throw IndexOutOfBoundsException();
1713 uno::Type SAL_CALL
SwXNumberingRulesCollection::getElementType()
1715 return cppu::UnoType
<XIndexReplace
>::get();
1718 sal_Bool
SwXNumberingRulesCollection::hasElements()
1720 SolarMutexGuard aGuard
;
1722 throw uno::RuntimeException();
1723 return !GetDoc()->GetNumRuleTable().empty();
1726 OUString
SwXFootnotes::getImplementationName()
1728 return "SwXFootnotes";
1731 sal_Bool
SwXFootnotes::supportsService(const OUString
& rServiceName
)
1733 return cppu::supportsService(this, rServiceName
);
1736 Sequence
< OUString
> SwXFootnotes::getSupportedServiceNames()
1738 return { "com.sun.star.text.Footnotes" };
1741 SwXFootnotes::SwXFootnotes(bool bEnd
, SwDoc
* _pDoc
)
1742 : SwUnoCollection(_pDoc
)
1747 SwXFootnotes::~SwXFootnotes()
1751 sal_Int32
SwXFootnotes::getCount()
1753 SolarMutexGuard aGuard
;
1755 throw uno::RuntimeException();
1756 sal_Int32 nCount
= 0;
1757 const size_t nFootnoteCnt
= GetDoc()->GetFootnoteIdxs().size();
1758 SwTextFootnote
* pTextFootnote
;
1759 for( size_t n
= 0; n
< nFootnoteCnt
; ++n
)
1761 pTextFootnote
= GetDoc()->GetFootnoteIdxs()[ n
];
1762 const SwFormatFootnote
& rFootnote
= pTextFootnote
->GetFootnote();
1763 if ( rFootnote
.IsEndNote() != m_bEndnote
)
1770 uno::Any
SwXFootnotes::getByIndex(sal_Int32 nIndex
)
1772 SolarMutexGuard aGuard
;
1774 sal_Int32 nCount
= 0;
1776 throw uno::RuntimeException();
1778 const size_t nFootnoteCnt
= GetDoc()->GetFootnoteIdxs().size();
1779 SwTextFootnote
* pTextFootnote
;
1780 uno::Reference
< XFootnote
> xRef
;
1781 for( size_t n
= 0; n
< nFootnoteCnt
; ++n
)
1783 pTextFootnote
= GetDoc()->GetFootnoteIdxs()[ n
];
1784 const SwFormatFootnote
& rFootnote
= pTextFootnote
->GetFootnote();
1785 if ( rFootnote
.IsEndNote() != m_bEndnote
)
1788 if(nCount
== nIndex
)
1790 xRef
= SwXFootnote::CreateXFootnote(*GetDoc(),
1791 &const_cast<SwFormatFootnote
&>(rFootnote
));
1798 throw IndexOutOfBoundsException();
1803 uno::Type SAL_CALL
SwXFootnotes::getElementType()
1805 return cppu::UnoType
<XFootnote
>::get();
1808 sal_Bool
SwXFootnotes::hasElements()
1810 SolarMutexGuard aGuard
;
1812 throw uno::RuntimeException();
1813 return !GetDoc()->GetFootnoteIdxs().empty();
1816 Reference
<XFootnote
> SwXFootnotes::GetObject( SwDoc
& rDoc
, const SwFormatFootnote
& rFormat
)
1818 return SwXFootnote::CreateXFootnote(rDoc
, &const_cast<SwFormatFootnote
&>(rFormat
));
1821 OUString
SwXReferenceMarks::getImplementationName()
1823 return "SwXReferenceMarks";
1826 sal_Bool
SwXReferenceMarks::supportsService(const OUString
& rServiceName
)
1828 return cppu::supportsService(this, rServiceName
);
1831 Sequence
< OUString
> SwXReferenceMarks::getSupportedServiceNames()
1833 return { "com.sun.star.text.ReferenceMarks" };
1836 SwXReferenceMarks::SwXReferenceMarks(SwDoc
* _pDoc
) :
1837 SwUnoCollection(_pDoc
)
1841 SwXReferenceMarks::~SwXReferenceMarks()
1845 sal_Int32
SwXReferenceMarks::getCount()
1847 SolarMutexGuard aGuard
;
1849 throw uno::RuntimeException();
1850 return GetDoc()->GetRefMarks();
1853 uno::Any
SwXReferenceMarks::getByIndex(sal_Int32 nIndex
)
1855 SolarMutexGuard aGuard
;
1858 throw uno::RuntimeException();
1859 uno::Reference
< XTextContent
> xRef
;
1860 if(0 <= nIndex
&& nIndex
< SAL_MAX_UINT16
)
1862 SwFormatRefMark
*const pMark
= const_cast<SwFormatRefMark
*>(
1863 GetDoc()->GetRefMark(o3tl::narrowing
<sal_uInt16
>(nIndex
)));
1866 xRef
= SwXReferenceMark::CreateXReferenceMark(*GetDoc(), pMark
);
1871 throw IndexOutOfBoundsException();
1875 uno::Any
SwXReferenceMarks::getByName(const OUString
& rName
)
1877 SolarMutexGuard aGuard
;
1880 throw uno::RuntimeException();
1882 SwFormatRefMark
*const pMark
=
1883 const_cast<SwFormatRefMark
*>(GetDoc()->GetRefMark(rName
));
1885 throw NoSuchElementException();
1887 uno::Reference
<XTextContent
> const xRef
=
1888 SwXReferenceMark::CreateXReferenceMark(*GetDoc(), pMark
);
1894 uno::Sequence
< OUString
> SwXReferenceMarks::getElementNames()
1896 SolarMutexGuard aGuard
;
1897 uno::Sequence
<OUString
> aRet
;
1899 throw uno::RuntimeException();
1901 std::vector
<OUString
> aStrings
;
1902 const sal_uInt16 nCount
= GetDoc()->GetRefMarks( &aStrings
);
1903 aRet
.realloc(nCount
);
1904 OUString
* pNames
= aRet
.getArray();
1905 for(sal_uInt16 i
= 0; i
< nCount
; i
++)
1906 pNames
[i
] = aStrings
[i
];
1911 sal_Bool
SwXReferenceMarks::hasByName(const OUString
& rName
)
1913 SolarMutexGuard aGuard
;
1915 throw uno::RuntimeException();
1916 return nullptr != GetDoc()->GetRefMark( rName
);
1919 uno::Type SAL_CALL
SwXReferenceMarks::getElementType()
1921 return cppu::UnoType
<XTextContent
>::get();
1924 sal_Bool
SwXReferenceMarks::hasElements()
1926 SolarMutexGuard aGuard
;
1928 throw uno::RuntimeException();
1929 return 0 != GetDoc()->GetRefMarks();
1932 void SwUnoCollection::Invalidate()
1934 m_bObjectValid
= false;
1938 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */