xref: /AOO41X/main/sw/source/core/unocore/unocoll.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 #include <swtypes.hxx>
32 #include <cmdid.h>
33 #include <hintids.hxx>
34 #include <svx/svxids.hrc>
35 #include <doc.hxx>
36 #include <docary.hxx>
37 #include <fmtcol.hxx>
38 #include <poolfmt.hxx>
39 #include <unocoll.hxx>
40 #include <unosett.hxx>
41 #include <fmtanchr.hxx>
42 #include <ndtxt.hxx>
43 #include <section.hxx>
44 #include <IMark.hxx>
45 #include <ftnidx.hxx>
46 #include <fmtftn.hxx>
47 #include <txtftn.hxx>
48 #include <fmtpdsc.hxx>
49 #include <pagedesc.hxx>
50 #include <vos/mutex.hxx>
51 #include <com/sun/star/text/XTextTableCursor.hpp>
52 #include <com/sun/star/text/XTextTablesSupplier.hpp>
53 #include <com/sun/star/text/TableColumnSeparator.hpp>
54 #include <com/sun/star/text/XTextTable.hpp>
55 #include <svl/PasswordHelper.hxx>
56 #include <svtools/unoimap.hxx>
57 #include <svtools/unoevent.hxx>
58 #include <unotbl.hxx>
59 #include <unostyle.hxx>
60 #include <unofield.hxx>
61 #include <unoidx.hxx>
62 #include <unoframe.hxx>
63 #include <unofootnote.hxx>
64 #include <vcl/svapp.hxx>
65 #include <fmtcntnt.hxx>
66 #include <authfld.hxx>
67 #include <SwXTextDefaults.hxx>
68 #include <unochart.hxx>
69 #include <comphelper/makesequence.hxx>
70 #include <comphelper/sequence.hxx>
71 #include <slist>
72 #include <iterator>
73 #include <unosection.hxx>
74 #include <unoparagraph.hxx>
75 #include <unobookmark.hxx>
76 #include <unorefmark.hxx>
77 #include <unometa.hxx>
78 #include "docsh.hxx"
79 #include <switerator.hxx>
80 
81 using ::rtl::OUString;
82 using namespace ::com::sun::star;
83 using namespace ::com::sun::star::document;
84 using namespace ::com::sun::star::uno;
85 using namespace ::com::sun::star::text;
86 using namespace ::com::sun::star::container;
87 using namespace ::com::sun::star::lang;
88 
89 /******************************************************************************
90  *
91  ******************************************************************************/
92 struct  ProvNamesId_Type
93 {
94     const char *    pName;
95     sal_uInt16  	nType;
96 };
97 
98 // note: this thing is indexed as an array, so do not insert/remove entries!
99 const ProvNamesId_Type __FAR_DATA aProvNamesId[] =
100 {
101 	{ "com.sun.star.text.TextTable",                          SW_SERVICE_TYPE_TEXTTABLE },
102     { "com.sun.star.text.TextFrame",                          SW_SERVICE_TYPE_TEXTFRAME },
103     { "com.sun.star.text.GraphicObject",                      SW_SERVICE_TYPE_GRAPHIC },
104     { "com.sun.star.text.TextEmbeddedObject",                 SW_SERVICE_TYPE_OLE },
105     { "com.sun.star.text.Bookmark",                           SW_SERVICE_TYPE_BOOKMARK },
106     { "com.sun.star.text.Footnote",                           SW_SERVICE_TYPE_FOOTNOTE },
107     { "com.sun.star.text.Endnote",                            SW_SERVICE_TYPE_ENDNOTE },
108     { "com.sun.star.text.DocumentIndexMark",                  SW_SERVICE_TYPE_INDEXMARK },
109     { "com.sun.star.text.DocumentIndex",                      SW_SERVICE_TYPE_INDEX },
110     { "com.sun.star.text.ReferenceMark",                      SW_SERVICE_REFERENCE_MARK },
111     { "com.sun.star.style.CharacterStyle",                    SW_SERVICE_STYLE_CHARACTER_STYLE },
112     { "com.sun.star.style.ParagraphStyle",                    SW_SERVICE_STYLE_PARAGRAPH_STYLE },
113     { "com.sun.star.style.FrameStyle",                        SW_SERVICE_STYLE_FRAME_STYLE },
114     { "com.sun.star.style.PageStyle",                         SW_SERVICE_STYLE_PAGE_STYLE },
115     { "com.sun.star.style.NumberingStyle",                    SW_SERVICE_STYLE_NUMBERING_STYLE },
116     { "com.sun.star.text.ContentIndexMark",                   SW_SERVICE_CONTENT_INDEX_MARK },
117     { "com.sun.star.text.ContentIndex",                       SW_SERVICE_CONTENT_INDEX },
118     { "com.sun.star.text.UserIndexMark",                      SW_SERVICE_USER_INDEX_MARK },
119     { "com.sun.star.text.UserIndex",                          SW_SERVICE_USER_INDEX },
120     { "com.sun.star.text.TextSection",                        SW_SERVICE_TEXT_SECTION },
121     { "com.sun.star.text.TextField.DateTime",                 SW_SERVICE_FIELDTYPE_DATETIME },
122     { "com.sun.star.text.TextField.User",                     SW_SERVICE_FIELDTYPE_USER },
123     { "com.sun.star.text.TextField.SetExpression",            SW_SERVICE_FIELDTYPE_SET_EXP },
124     { "com.sun.star.text.TextField.GetExpression",            SW_SERVICE_FIELDTYPE_GET_EXP },
125     { "com.sun.star.text.TextField.FileName",                 SW_SERVICE_FIELDTYPE_FILE_NAME },
126     { "com.sun.star.text.TextField.PageNumber",               SW_SERVICE_FIELDTYPE_PAGE_NUM },
127     { "com.sun.star.text.TextField.Author",                   SW_SERVICE_FIELDTYPE_AUTHOR },
128     { "com.sun.star.text.TextField.Chapter",                  SW_SERVICE_FIELDTYPE_CHAPTER },
129     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_0 },
130     { "com.sun.star.text.TextField.GetReference",             SW_SERVICE_FIELDTYPE_GET_REFERENCE },
131     { "com.sun.star.text.TextField.ConditionalText",          SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT },
132     { "com.sun.star.text.TextField.Annotation",               SW_SERVICE_FIELDTYPE_ANNOTATION },
133     { "com.sun.star.text.TextField.Input",                    SW_SERVICE_FIELDTYPE_INPUT },
134     { "com.sun.star.text.TextField.Macro",                    SW_SERVICE_FIELDTYPE_MACRO },
135     { "com.sun.star.text.TextField.DDE",                      SW_SERVICE_FIELDTYPE_DDE },
136     { "com.sun.star.text.TextField.HiddenParagraph",          SW_SERVICE_FIELDTYPE_HIDDEN_PARA },
137     { "" /*com.sun.star.text.TextField.DocumentInfo"*/,       SW_SERVICE_FIELDTYPE_DOC_INFO },
138     { "com.sun.star.text.TextField.TemplateName",             SW_SERVICE_FIELDTYPE_TEMPLATE_NAME },
139     { "com.sun.star.text.TextField.ExtendedUser",             SW_SERVICE_FIELDTYPE_USER_EXT },
140     { "com.sun.star.text.TextField.ReferencePageSet",         SW_SERVICE_FIELDTYPE_REF_PAGE_SET },
141     { "com.sun.star.text.TextField.ReferencePageGet",         SW_SERVICE_FIELDTYPE_REF_PAGE_GET },
142     { "com.sun.star.text.TextField.JumpEdit",                 SW_SERVICE_FIELDTYPE_JUMP_EDIT },
143     { "com.sun.star.text.TextField.Script",                   SW_SERVICE_FIELDTYPE_SCRIPT },
144     { "com.sun.star.text.TextField.DatabaseNextSet",          SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET },
145     { "com.sun.star.text.TextField.DatabaseNumberOfSet",      SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET },
146     { "com.sun.star.text.TextField.DatabaseSetNumber",        SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM },
147     { "com.sun.star.text.TextField.Database",                 SW_SERVICE_FIELDTYPE_DATABASE },
148     { "com.sun.star.text.TextField.DatabaseName",             SW_SERVICE_FIELDTYPE_DATABASE_NAME },
149     { "com.sun.star.text.TextField.TableFormula",             SW_SERVICE_FIELDTYPE_TABLE_FORMULA },
150     { "com.sun.star.text.TextField.PageCount",                SW_SERVICE_FIELDTYPE_PAGE_COUNT },
151     { "com.sun.star.text.TextField.ParagraphCount",           SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT },
152     { "com.sun.star.text.TextField.WordCount",                SW_SERVICE_FIELDTYPE_WORD_COUNT },
153     { "com.sun.star.text.TextField.CharacterCount",           SW_SERVICE_FIELDTYPE_CHARACTER_COUNT },
154     { "com.sun.star.text.TextField.TableCount",               SW_SERVICE_FIELDTYPE_TABLE_COUNT },
155     { "com.sun.star.text.TextField.GraphicObjectCount",       SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT },
156     { "com.sun.star.text.TextField.EmbeddedObjectCount",      SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT },
157     { "com.sun.star.text.TextField.DocInfo.ChangeAuthor",     SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR },
158     { "com.sun.star.text.TextField.DocInfo.ChangeDateTime",   SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME },
159     { "com.sun.star.text.TextField.DocInfo.EditTime",         SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME },
160     { "com.sun.star.text.TextField.DocInfo.Description",      SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION },
161     { "com.sun.star.text.TextField.DocInfo.CreateAuthor",     SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR },
162     { "com.sun.star.text.TextField.DocInfo.CreateDateTime",   SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME },
163     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_0 },
164     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_1 },
165     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_2 },
166     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_3 },
167 	{ "com.sun.star.text.TextField.DocInfo.Custom",           SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM },
168     { "com.sun.star.text.TextField.DocInfo.PrintAuthor",      SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR },
169     { "com.sun.star.text.TextField.DocInfo.PrintDateTime",    SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME },
170     { "com.sun.star.text.TextField.DocInfo.KeyWords",         SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS },
171     { "com.sun.star.text.TextField.DocInfo.Subject",          SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT },
172     { "com.sun.star.text.TextField.DocInfo.Title",            SW_SERVICE_FIELDTYPE_DOCINFO_TITLE },
173     { "com.sun.star.text.TextField.DocInfo.Revision",         SW_SERVICE_FIELDTYPE_DOCINFO_REVISION },
174     { "com.sun.star.text.TextField.Bibliography",             SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY },
175     { "com.sun.star.text.TextField.CombinedCharacters",       SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS },
176     { "com.sun.star.text.TextField.DropDown",                 SW_SERVICE_FIELDTYPE_DROPDOWN },
177     { "com.sun.star.text.textfield.MetadataField",            SW_SERVICE_FIELDTYPE_METAFIELD },
178     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_4 },
179     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_5 },
180     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_6 },
181     { "",                                                     SW_SERVICE_FIELDTYPE_DUMMY_7 },
182     { "com.sun.star.text.FieldMaster.User",                   SW_SERVICE_FIELDMASTER_USER },
183     { "com.sun.star.text.FieldMaster.DDE",                    SW_SERVICE_FIELDMASTER_DDE },
184     { "com.sun.star.text.FieldMaster.SetExpression",          SW_SERVICE_FIELDMASTER_SET_EXP },
185     { "com.sun.star.text.FieldMaster.Database",               SW_SERVICE_FIELDMASTER_DATABASE },
186     { "com.sun.star.text.FieldMaster.Bibliography",           SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY },
187     { "",                                                     SW_SERVICE_FIELDMASTER_DUMMY2 },
188     { "",                                                     SW_SERVICE_FIELDMASTER_DUMMY3 },
189     { "",                                                     SW_SERVICE_FIELDMASTER_DUMMY4 },
190     { "",                                                     SW_SERVICE_FIELDMASTER_DUMMY5 },
191     { "com.sun.star.text.IllustrationsIndex",                 SW_SERVICE_INDEX_ILLUSTRATIONS },
192     { "com.sun.star.text.ObjectIndex",                        SW_SERVICE_INDEX_OBJECTS },
193     { "com.sun.star.text.TableIndex",                         SW_SERVICE_INDEX_TABLES },
194     { "com.sun.star.text.Bibliography",                       SW_SERVICE_INDEX_BIBLIOGRAPHY },
195     { "com.sun.star.text.Paragraph",                          SW_SERVICE_PARAGRAPH },
196     { "com.sun.star.text.TextField.InputUser",                SW_SERVICE_FIELDTYPE_INPUT_USER },
197     { "com.sun.star.text.TextField.HiddenText",               SW_SERVICE_FIELDTYPE_HIDDEN_TEXT },
198     { "com.sun.star.style.ConditionalParagraphStyle",         SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE },
199     { "com.sun.star.text.NumberingRules",                     SW_SERVICE_NUMBERING_RULES },
200     { "com.sun.star.text.TextColumns",                        SW_SERVICE_TEXT_COLUMNS },
201     { "com.sun.star.text.IndexHeaderSection",                 SW_SERVICE_INDEX_HEADER_SECTION },
202     { "com.sun.star.text.Defaults",                           SW_SERVICE_DEFAULTS },
203     { "com.sun.star.image.ImageMapRectangleObject",           SW_SERVICE_IMAP_RECTANGLE },
204     { "com.sun.star.image.ImageMapCircleObject",              SW_SERVICE_IMAP_CIRCLE },
205     { "com.sun.star.image.ImageMapPolygonObject",             SW_SERVICE_IMAP_POLYGON },
206     { "com.sun.star.text.TextGraphicObject",                  SW_SERVICE_TYPE_TEXT_GRAPHIC },
207     { "com.sun.star.chart2.data.DataProvider",                SW_SERVICE_CHART2_DATA_PROVIDER },
208     { "com.sun.star.text.Fieldmark",                          SW_SERVICE_TYPE_FIELDMARK },
209     { "com.sun.star.text.FormFieldmark",                      SW_SERVICE_TYPE_FORMFIELDMARK },
210     { "com.sun.star.text.InContentMetadata",                  SW_SERVICE_TYPE_META },
211 
212     // case-correct versions of the service names (see #i67811)
213     { CSS_TEXT_TEXTFIELD_DATE_TIME,                   SW_SERVICE_FIELDTYPE_DATETIME },
214     { CSS_TEXT_TEXTFIELD_USER,                        SW_SERVICE_FIELDTYPE_USER },
215     { CSS_TEXT_TEXTFIELD_SET_EXPRESSION,              SW_SERVICE_FIELDTYPE_SET_EXP },
216     { CSS_TEXT_TEXTFIELD_GET_EXPRESSION,              SW_SERVICE_FIELDTYPE_GET_EXP },
217     { CSS_TEXT_TEXTFIELD_FILE_NAME,                   SW_SERVICE_FIELDTYPE_FILE_NAME },
218     { CSS_TEXT_TEXTFIELD_PAGE_NUMBER,                 SW_SERVICE_FIELDTYPE_PAGE_NUM },
219     { CSS_TEXT_TEXTFIELD_AUTHOR,                      SW_SERVICE_FIELDTYPE_AUTHOR },
220     { CSS_TEXT_TEXTFIELD_CHAPTER,                     SW_SERVICE_FIELDTYPE_CHAPTER },
221     { CSS_TEXT_TEXTFIELD_GET_REFERENCE,               SW_SERVICE_FIELDTYPE_GET_REFERENCE },
222     { CSS_TEXT_TEXTFIELD_CONDITIONAL_TEXT,            SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT },
223     { CSS_TEXT_TEXTFIELD_ANNOTATION,                  SW_SERVICE_FIELDTYPE_ANNOTATION },
224     { CSS_TEXT_TEXTFIELD_INPUT,                       SW_SERVICE_FIELDTYPE_INPUT },
225     { CSS_TEXT_TEXTFIELD_MACRO,                       SW_SERVICE_FIELDTYPE_MACRO },
226     { CSS_TEXT_TEXTFIELD_DDE,                         SW_SERVICE_FIELDTYPE_DDE },
227     { CSS_TEXT_TEXTFIELD_HIDDEN_PARAGRAPH,            SW_SERVICE_FIELDTYPE_HIDDEN_PARA },
228     { CSS_TEXT_TEXTFIELD_TEMPLATE_NAME,               SW_SERVICE_FIELDTYPE_TEMPLATE_NAME },
229     { CSS_TEXT_TEXTFIELD_EXTENDED_USER,               SW_SERVICE_FIELDTYPE_USER_EXT },
230     { CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_SET,          SW_SERVICE_FIELDTYPE_REF_PAGE_SET },
231     { CSS_TEXT_TEXTFIELD_REFERENCE_PAGE_GET,          SW_SERVICE_FIELDTYPE_REF_PAGE_GET },
232     { CSS_TEXT_TEXTFIELD_JUMP_EDIT,                   SW_SERVICE_FIELDTYPE_JUMP_EDIT },
233     { CSS_TEXT_TEXTFIELD_SCRIPT,                      SW_SERVICE_FIELDTYPE_SCRIPT },
234     { CSS_TEXT_TEXTFIELD_DATABASE_NEXT_SET,           SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET },
235     { CSS_TEXT_TEXTFIELD_DATABASE_NUMBER_OF_SET,      SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET },
236     { CSS_TEXT_TEXTFIELD_DATABASE_SET_NUMBER,         SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM },
237     { CSS_TEXT_TEXTFIELD_DATABASE,                    SW_SERVICE_FIELDTYPE_DATABASE },
238     { CSS_TEXT_TEXTFIELD_DATABASE_NAME,               SW_SERVICE_FIELDTYPE_DATABASE_NAME },
239     { CSS_TEXT_TEXTFIELD_TABLE_FORMULA,               SW_SERVICE_FIELDTYPE_TABLE_FORMULA },
240     { CSS_TEXT_TEXTFIELD_PAGE_COUNT,                  SW_SERVICE_FIELDTYPE_PAGE_COUNT },
241     { CSS_TEXT_TEXTFIELD_PARAGRAPH_COUNT,             SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT },
242     { CSS_TEXT_TEXTFIELD_WORD_COUNT,                  SW_SERVICE_FIELDTYPE_WORD_COUNT },
243     { CSS_TEXT_TEXTFIELD_CHARACTER_COUNT,             SW_SERVICE_FIELDTYPE_CHARACTER_COUNT },
244     { CSS_TEXT_TEXTFIELD_TABLE_COUNT,                 SW_SERVICE_FIELDTYPE_TABLE_COUNT },
245     { CSS_TEXT_TEXTFIELD_GRAPHIC_OBJECT_COUNT,        SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT },
246     { CSS_TEXT_TEXTFIELD_EMBEDDED_OBJECT_COUNT,       SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT },
247     { CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_AUTHOR,       SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR },
248     { CSS_TEXT_TEXTFIELD_DOCINFO_CHANGE_DATE_TIME,    SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME },
249     { CSS_TEXT_TEXTFIELD_DOCINFO_EDIT_TIME,           SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME },
250     { CSS_TEXT_TEXTFIELD_DOCINFO_DESCRIPTION,         SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION },
251     { CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_AUTHOR,       SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR },
252     { CSS_TEXT_TEXTFIELD_DOCINFO_CREATE_DATE_TIME,    SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME },
253     { CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_AUTHOR,        SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR },
254     { CSS_TEXT_TEXTFIELD_DOCINFO_PRINT_DATE_TIME,     SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME },
255     { CSS_TEXT_TEXTFIELD_DOCINFO_KEY_WORDS,           SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS },
256     { CSS_TEXT_TEXTFIELD_DOCINFO_SUBJECT,             SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT },
257     { CSS_TEXT_TEXTFIELD_DOCINFO_TITLE,               SW_SERVICE_FIELDTYPE_DOCINFO_TITLE },
258     { CSS_TEXT_TEXTFIELD_DOCINFO_REVISION,            SW_SERVICE_FIELDTYPE_DOCINFO_REVISION },
259     { CSS_TEXT_TEXTFIELD_DOCINFO_CUSTOM,			  SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM },
260     { CSS_TEXT_TEXTFIELD_BIBLIOGRAPHY,                SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY },
261     { CSS_TEXT_TEXTFIELD_COMBINED_CHARACTERS,         SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS },
262     { CSS_TEXT_TEXTFIELD_DROP_DOWN,                   SW_SERVICE_FIELDTYPE_DROPDOWN },
263     { CSS_TEXT_TEXTFIELD_INPUT_USER,                  SW_SERVICE_FIELDTYPE_INPUT_USER },
264     { CSS_TEXT_TEXTFIELD_HIDDEN_TEXT,                 SW_SERVICE_FIELDTYPE_HIDDEN_TEXT },
265     { CSS_TEXT_FIELDMASTER_USER,                      SW_SERVICE_FIELDMASTER_USER },
266     { CSS_TEXT_FIELDMASTER_DDE,                       SW_SERVICE_FIELDMASTER_DDE },
267     { CSS_TEXT_FIELDMASTER_SET_EXPRESSION,            SW_SERVICE_FIELDMASTER_SET_EXP },
268     { CSS_TEXT_FIELDMASTER_DATABASE,                  SW_SERVICE_FIELDMASTER_DATABASE },
269     { CSS_TEXT_FIELDMASTER_BIBLIOGRAPHY,              SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY }
270 };
271 
272 const SvEventDescription* lcl_GetSupportedMacroItems()
273 {
274     static const SvEventDescription aMacroDescriptionsImpl[] =
275 	{
276 		{ SFX_EVENT_MOUSEOVER_OBJECT, "OnMouseOver" },
277 		{ SFX_EVENT_MOUSEOUT_OBJECT, "OnMouseOut" },
278 		{ 0, NULL }
279 	};
280 
281 	return aMacroDescriptionsImpl;
282 }
283 
284 /******************************************************************
285  * SwXServiceProvider
286  ******************************************************************/
287 OUString	SwXServiceProvider::GetProviderName(sal_uInt16 nObjectType)
288 {
289 	vos::OGuard aGuard(Application::GetSolarMutex());
290 	OUString sRet;
291 	sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]);
292 	if(nObjectType < nEntries)
293         sRet = C2U(aProvNamesId[nObjectType].pName);
294 	return sRet;
295 }
296 
297 uno::Sequence<OUString> 	SwXServiceProvider::GetAllServiceNames()
298 {
299 	sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]);
300 	uno::Sequence<OUString> aRet(nEntries);
301 	OUString* pArray = aRet.getArray();
302 	sal_uInt16 n = 0;
303 	for(sal_uInt16 i = 0; i < nEntries; i++)
304 	{
305         String sProv(C2U(aProvNamesId[i].pName));
306 		if(sProv.Len())
307 		{
308 			pArray[n] = sProv;
309 			n++;
310 		}
311 	}
312 	aRet.realloc(n);
313 	return aRet;
314 
315 }
316 
317 sal_uInt16	SwXServiceProvider::GetProviderType(const OUString& rServiceName)
318 {
319 	sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]);
320 	for(sal_uInt16 i = 0; i < nEntries; i++ )
321 	{
322         if( COMPARE_EQUAL == rServiceName.compareToAscii(aProvNamesId[i].pName))
323             return aProvNamesId[i].nType;
324 	}
325 	return SW_SERVICE_INVALID;
326 }
327 
328 uno::Reference< uno::XInterface >   SwXServiceProvider::MakeInstance(sal_uInt16 nObjectType, SwDoc* pDoc)
329 {
330     vos::OGuard aGuard(Application::GetSolarMutex());
331     uno::Reference< uno::XInterface >  xRet;
332     switch(nObjectType)
333     {
334         case  SW_SERVICE_TYPE_TEXTTABLE:
335         {
336             SwXTextTable* pTextTable = new SwXTextTable();
337             xRet =  (cppu::OWeakObject*)pTextTable;
338         }
339         break;
340         case  SW_SERVICE_TYPE_TEXTFRAME:
341         {
342             SwXTextFrame* pTextFrame = new SwXTextFrame( pDoc );
343             xRet =  (cppu::OWeakObject*)(SwXFrame*)pTextFrame;
344         }
345         break;
346         case  SW_SERVICE_TYPE_GRAPHIC  :
347         case  SW_SERVICE_TYPE_TEXT_GRAPHIC /* #i47503# */ :
348         {
349             SwXTextGraphicObject* pGraphic = new SwXTextGraphicObject( pDoc );
350             xRet =  (cppu::OWeakObject*)(SwXFrame*)pGraphic;
351 
352         }
353         break;
354         case  SW_SERVICE_TYPE_OLE      :
355         {
356             SwXTextEmbeddedObject* pOle = new SwXTextEmbeddedObject( pDoc );
357             xRet =  (cppu::OWeakObject*)(SwXFrame*)pOle;
358         }
359         break;
360         case  SW_SERVICE_TYPE_BOOKMARK :
361         {
362             SwXBookmark* pBookmark = new SwXBookmark;
363             xRet =  (cppu::OWeakObject*)pBookmark;
364         }
365         break;
366         case  SW_SERVICE_TYPE_FIELDMARK :
367         {
368             SwXFieldmark* pFieldmark = new SwXFieldmark(false);
369             xRet =  (cppu::OWeakObject*)pFieldmark;
370         }
371         break;
372         case  SW_SERVICE_TYPE_FORMFIELDMARK :
373         {
374             SwXFieldmark* pFieldmark = new SwXFieldmark(true);
375             xRet =  (cppu::OWeakObject*)pFieldmark;
376         }
377         break;
378         case  SW_SERVICE_TYPE_FOOTNOTE :
379             xRet =  (cppu::OWeakObject*)new SwXFootnote(sal_False);
380         break;
381         case  SW_SERVICE_TYPE_ENDNOTE  :
382             xRet =  (cppu::OWeakObject*)new SwXFootnote(sal_True);
383         break;
384         case  SW_SERVICE_CONTENT_INDEX_MARK :
385         case  SW_SERVICE_USER_INDEX_MARK    :
386         case  SW_SERVICE_TYPE_INDEXMARK:
387         {
388             TOXTypes eType = TOX_INDEX;
389             if(SW_SERVICE_CONTENT_INDEX_MARK== nObjectType)
390                 eType = TOX_CONTENT;
391             else if(SW_SERVICE_USER_INDEX_MARK == nObjectType)
392                 eType = TOX_USER;
393             xRet =  (cppu::OWeakObject*)new SwXDocumentIndexMark(eType);
394         }
395         break;
396         case  SW_SERVICE_CONTENT_INDEX      :
397         case  SW_SERVICE_USER_INDEX         :
398         case  SW_SERVICE_TYPE_INDEX    :
399         case SW_SERVICE_INDEX_ILLUSTRATIONS:
400         case SW_SERVICE_INDEX_OBJECTS      :
401         case SW_SERVICE_INDEX_TABLES:
402         case SW_SERVICE_INDEX_BIBLIOGRAPHY :
403         {
404             TOXTypes eType = TOX_INDEX;
405             if(SW_SERVICE_CONTENT_INDEX == nObjectType)
406                 eType = TOX_CONTENT;
407             else if(SW_SERVICE_USER_INDEX == nObjectType)
408                 eType = TOX_USER;
409             else if(SW_SERVICE_INDEX_ILLUSTRATIONS == nObjectType)
410             {
411                 eType = TOX_ILLUSTRATIONS;
412             }
413             else if(SW_SERVICE_INDEX_OBJECTS       == nObjectType)
414             {
415                 eType = TOX_OBJECTS;
416             }
417             else if(SW_SERVICE_INDEX_BIBLIOGRAPHY  == nObjectType)
418             {
419                 eType = TOX_AUTHORITIES;
420             }
421             else if(SW_SERVICE_INDEX_TABLES == nObjectType)
422             {
423                 eType = TOX_TABLES;
424             }
425             xRet =  (cppu::OWeakObject*)new SwXDocumentIndex(eType, *pDoc);
426         }
427         break;
428         case SW_SERVICE_INDEX_HEADER_SECTION :
429         case SW_SERVICE_TEXT_SECTION :
430             xRet = SwXTextSection::CreateXTextSection(0,
431                     (SW_SERVICE_INDEX_HEADER_SECTION == nObjectType));
432 
433         break;
434         case SW_SERVICE_REFERENCE_MARK :
435             xRet =  (cppu::OWeakObject*)new SwXReferenceMark(0, 0);
436         break;
437         case SW_SERVICE_STYLE_CHARACTER_STYLE:
438         case SW_SERVICE_STYLE_PARAGRAPH_STYLE:
439         case SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE:
440         case SW_SERVICE_STYLE_FRAME_STYLE:
441         case SW_SERVICE_STYLE_PAGE_STYLE:
442         case SW_SERVICE_STYLE_NUMBERING_STYLE:
443         {
444             SfxStyleFamily  eFamily = SFX_STYLE_FAMILY_CHAR;
445             switch(nObjectType)
446             {
447                 case SW_SERVICE_STYLE_PARAGRAPH_STYLE:
448                 case SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE:
449                     eFamily = SFX_STYLE_FAMILY_PARA;
450                 break;
451                 case SW_SERVICE_STYLE_FRAME_STYLE:
452                     eFamily = SFX_STYLE_FAMILY_FRAME;
453                 break;
454                 case SW_SERVICE_STYLE_PAGE_STYLE:
455                     eFamily = SFX_STYLE_FAMILY_PAGE;
456                 break;
457                 case SW_SERVICE_STYLE_NUMBERING_STYLE:
458                     eFamily = SFX_STYLE_FAMILY_PSEUDO;
459                 break;
460             }
461             SwXStyle* pNewStyle = SFX_STYLE_FAMILY_PAGE == eFamily ?
462                 new SwXPageStyle(pDoc->GetDocShell()) :
463                     eFamily == SFX_STYLE_FAMILY_FRAME ?
464                         new SwXFrameStyle ( pDoc ):
465                             new SwXStyle( pDoc, eFamily, nObjectType == SW_SERVICE_STYLE_CONDITIONAL_PARAGRAPH_STYLE);
466             xRet = (cppu::OWeakObject*)pNewStyle;
467         }
468         break;
469 //      SW_SERVICE_DUMMY_5
470 //      SW_SERVICE_DUMMY_6
471 //      SW_SERVICE_DUMMY_7
472 //      SW_SERVICE_DUMMY_8
473 //      SW_SERVICE_DUMMY_9
474         case SW_SERVICE_FIELDTYPE_DATETIME:
475         case SW_SERVICE_FIELDTYPE_USER:
476         case SW_SERVICE_FIELDTYPE_SET_EXP:
477         case SW_SERVICE_FIELDTYPE_GET_EXP:
478         case SW_SERVICE_FIELDTYPE_FILE_NAME:
479         case SW_SERVICE_FIELDTYPE_PAGE_NUM:
480         case SW_SERVICE_FIELDTYPE_AUTHOR:
481         case SW_SERVICE_FIELDTYPE_CHAPTER:
482         case SW_SERVICE_FIELDTYPE_GET_REFERENCE:
483         case SW_SERVICE_FIELDTYPE_CONDITIONED_TEXT:
484         case SW_SERVICE_FIELDTYPE_INPUT:
485         case SW_SERVICE_FIELDTYPE_MACRO:
486         case SW_SERVICE_FIELDTYPE_DDE:
487         case SW_SERVICE_FIELDTYPE_HIDDEN_PARA:
488         case SW_SERVICE_FIELDTYPE_DOC_INFO:
489         case SW_SERVICE_FIELDTYPE_TEMPLATE_NAME:
490         case SW_SERVICE_FIELDTYPE_USER_EXT:
491         case SW_SERVICE_FIELDTYPE_REF_PAGE_SET:
492         case SW_SERVICE_FIELDTYPE_REF_PAGE_GET:
493         case SW_SERVICE_FIELDTYPE_JUMP_EDIT:
494         case SW_SERVICE_FIELDTYPE_SCRIPT:
495         case SW_SERVICE_FIELDTYPE_DATABASE_NEXT_SET:
496         case SW_SERVICE_FIELDTYPE_DATABASE_NUM_SET:
497         case SW_SERVICE_FIELDTYPE_DATABASE_SET_NUM:
498         case SW_SERVICE_FIELDTYPE_DATABASE:
499         case SW_SERVICE_FIELDTYPE_DATABASE_NAME:
500         case SW_SERVICE_FIELDTYPE_PAGE_COUNT      :
501         case SW_SERVICE_FIELDTYPE_PARAGRAPH_COUNT :
502         case SW_SERVICE_FIELDTYPE_WORD_COUNT      :
503         case SW_SERVICE_FIELDTYPE_CHARACTER_COUNT :
504         case SW_SERVICE_FIELDTYPE_TABLE_COUNT     :
505         case SW_SERVICE_FIELDTYPE_GRAPHIC_OBJECT_COUNT    :
506         case SW_SERVICE_FIELDTYPE_EMBEDDED_OBJECT_COUNT   :
507         case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_AUTHOR     :
508         case SW_SERVICE_FIELDTYPE_DOCINFO_CHANGE_DATE_TIME  :
509         case SW_SERVICE_FIELDTYPE_DOCINFO_EDIT_TIME         :
510         case SW_SERVICE_FIELDTYPE_DOCINFO_DESCRIPTION       :
511         case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_AUTHOR     :
512         case SW_SERVICE_FIELDTYPE_DOCINFO_CREATE_DATE_TIME  :
513         case SW_SERVICE_FIELDTYPE_DOCINFO_CUSTOM            :
514         case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_AUTHOR      :
515         case SW_SERVICE_FIELDTYPE_DOCINFO_PRINT_DATE_TIME   :
516         case SW_SERVICE_FIELDTYPE_DOCINFO_KEY_WORDS         :
517         case SW_SERVICE_FIELDTYPE_DOCINFO_SUBJECT           :
518         case SW_SERVICE_FIELDTYPE_DOCINFO_TITLE             :
519         case SW_SERVICE_FIELDTYPE_DOCINFO_REVISION          :
520         case SW_SERVICE_FIELDTYPE_BIBLIOGRAPHY:
521         case SW_SERVICE_FIELDTYPE_INPUT_USER                :
522         case SW_SERVICE_FIELDTYPE_HIDDEN_TEXT               :
523         case SW_SERVICE_FIELDTYPE_COMBINED_CHARACTERS       :
524         case SW_SERVICE_FIELDTYPE_DROPDOWN                  :
525         case SW_SERVICE_FIELDTYPE_TABLE_FORMULA:
526             xRet = (cppu::OWeakObject*)new SwXTextField(nObjectType);
527             break;
528         case SW_SERVICE_FIELDTYPE_ANNOTATION:
529             xRet = (cppu::OWeakObject*)new SwXTextField(nObjectType, pDoc);
530             break;
531         case SW_SERVICE_FIELDMASTER_USER:
532         case SW_SERVICE_FIELDMASTER_DDE:
533         case SW_SERVICE_FIELDMASTER_SET_EXP :
534         case SW_SERVICE_FIELDMASTER_DATABASE:
535         {
536             sal_uInt16 nResId = USHRT_MAX;
537             switch(nObjectType)
538             {
539                 case SW_SERVICE_FIELDMASTER_USER: nResId = RES_USERFLD; break;
540                 case SW_SERVICE_FIELDMASTER_DDE:  nResId = RES_DDEFLD; break;
541                 case SW_SERVICE_FIELDMASTER_SET_EXP : nResId = RES_SETEXPFLD; break;
542                 case SW_SERVICE_FIELDMASTER_DATABASE: nResId = RES_DBFLD; break;
543             }
544             xRet =  (cppu::OWeakObject*)new SwXFieldMaster(pDoc, nResId);
545         }
546         break;
547         case SW_SERVICE_FIELDMASTER_BIBLIOGRAPHY:
548         {
549             SwFieldType* pType = pDoc->GetFldType(RES_AUTHORITY, aEmptyStr, sal_True);
550             if(!pType)
551             {
552                 SwAuthorityFieldType aType(pDoc);
553                 pType = pDoc->InsertFldType(aType);
554             }
555             else
556             {
557                 SwXFieldMaster* pMaster = SwIterator<SwXFieldMaster,SwFieldType>::FirstElement( *pType );
558                 if(pMaster)
559                     xRet = (cppu::OWeakObject*)pMaster;
560             }
561             if(!xRet.is())
562                 xRet =  (cppu::OWeakObject*)new SwXFieldMaster(*pType, pDoc);
563         }
564         break;
565         case SW_SERVICE_PARAGRAPH :
566             xRet = (cppu::OWeakObject*)new SwXParagraph();
567         break;
568         case SW_SERVICE_NUMBERING_RULES :
569             xRet = (cppu::OWeakObject*)new SwXNumberingRules(*pDoc);
570         break;
571         case SW_SERVICE_TEXT_COLUMNS :
572             xRet = (cppu::OWeakObject*)new SwXTextColumns(0);
573         break;
574         case SW_SERVICE_DEFAULTS:
575             xRet = (cppu::OWeakObject*)new SwXTextDefaults( pDoc );
576         break;
577         case SW_SERVICE_IMAP_RECTANGLE :
578             xRet = SvUnoImageMapRectangleObject_createInstance( lcl_GetSupportedMacroItems() );
579         break;
580         case SW_SERVICE_IMAP_CIRCLE    :
581             xRet = SvUnoImageMapCircleObject_createInstance( lcl_GetSupportedMacroItems() );
582         break;
583         case SW_SERVICE_IMAP_POLYGON   :
584             xRet = SvUnoImageMapPolygonObject_createInstance( lcl_GetSupportedMacroItems() );
585         break;
586         case SW_SERVICE_CHART2_DATA_PROVIDER :
587             // #i64497# If a chart is in a temporary document during clipoard
588             // paste, there should be no data provider, so that own data is used
589             // This should not happen during copy/paste, as this will unlink
590             // charts using table data.
591             OSL_ASSERT( pDoc->GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED );
592             if( pDoc->GetDocShell()->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED )
593                 xRet = (cppu::OWeakObject*) pDoc->GetChartDataProvider( true /* create - if not yet available */ );
594         break;
595         case SW_SERVICE_TYPE_META:
596             xRet = static_cast< ::cppu::OWeakObject* >( new SwXMeta(pDoc) );
597         break;
598         case SW_SERVICE_FIELDTYPE_METAFIELD:
599             xRet = static_cast< ::cppu::OWeakObject* >(new SwXMetaField(pDoc));
600         break;
601         default:
602             throw uno::RuntimeException();
603     }
604     return xRet;
605 }
606 /******************************************************************
607  * SwXTextTables
608  ******************************************************************/
609 //SMART_UNO_IMPLEMENTATION( SwXTextTables, UsrObject );
610 
611 SwXTextTables::SwXTextTables(SwDoc* pDc) :
612 		SwUnoCollection(pDc)
613 {
614 
615 }
616 
617 SwXTextTables::~SwXTextTables()
618 {
619 
620 }
621 
622 sal_Int32 SwXTextTables::getCount(void) throw( uno::RuntimeException )
623 {
624 	vos::OGuard aGuard(Application::GetSolarMutex());
625 	sal_Int32 nRet = 0;
626 	if(IsValid())
627 		nRet = GetDoc()->GetTblFrmFmtCount(sal_True);
628 	return nRet;
629 }
630 
631 uno::Any SAL_CALL SwXTextTables::getByIndex(sal_Int32 nIndex)
632 		throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
633 {
634 	vos::OGuard aGuard(Application::GetSolarMutex());
635 	uno::Any aRet;
636 	if(IsValid())
637 	{
638         if(0 <= nIndex && GetDoc()->GetTblFrmFmtCount(sal_True) > nIndex)
639 		{
640             SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt( static_cast< xub_StrLen >(nIndex), sal_True);
641 			uno::Reference< XTextTable >  xTbl = SwXTextTables::GetObject(rFmt);
642 			aRet.setValue( &xTbl,
643 				::getCppuType((uno::Reference< XTextTable>*)0));
644 		}
645 		else
646 			throw IndexOutOfBoundsException();
647 	}
648 	else
649 		throw uno::RuntimeException();
650 	return aRet;
651 }
652 
653 uno::Any SwXTextTables::getByName(const OUString& rItemName)
654 	throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException )
655 {
656 	vos::OGuard aGuard(Application::GetSolarMutex());
657 	uno::Any aRet;
658 	if(IsValid())
659 	{
660 		sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True);
661 		uno::Reference< XTextTable >  xTbl;
662 		for( sal_uInt16 i = 0; i < nCount; i++)
663 		{
664 			String aName(rItemName);
665 			SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt(i, sal_True);
666 			if(aName == rFmt.GetName())
667 			{
668 				xTbl = SwXTextTables::GetObject(rFmt);
669 				aRet.setValue(&xTbl,
670 					::getCppuType(( uno::Reference< XTextTable >*)0));
671 				break;
672 			}
673 		}
674 		if(!xTbl.is())
675 			throw NoSuchElementException();
676 	}
677 	else
678 		throw uno::RuntimeException();
679 	return aRet;
680 }
681 
682 uno::Sequence< OUString > SwXTextTables::getElementNames(void)
683 		throw( uno::RuntimeException )
684 {
685 	vos::OGuard aGuard(Application::GetSolarMutex());
686 	if(!IsValid())
687 		throw uno::RuntimeException();
688 	sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True);
689 	uno::Sequence<OUString> aSeq(nCount);
690 	if(nCount)
691 	{
692 		OUString* pArray = aSeq.getArray();
693 		for( sal_uInt16 i = 0; i < nCount; i++)
694 		{
695 			SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt(i, sal_True);
696 
697 			pArray[i] = OUString(rFmt.GetName());
698 		}
699 	}
700 	return aSeq;
701 }
702 
703 sal_Bool SwXTextTables::hasByName(const OUString& rName)
704 	throw( uno::RuntimeException )
705 {
706 	vos::OGuard aGuard(Application::GetSolarMutex());
707 	sal_Bool bRet= sal_False;
708 	if(IsValid())
709 	{
710 		sal_uInt16 nCount = GetDoc()->GetTblFrmFmtCount(sal_True);
711 		for( sal_uInt16 i = 0; i < nCount; i++)
712 		{
713 			String aName(rName);
714 			SwFrmFmt& rFmt = GetDoc()->GetTblFrmFmt(i, sal_True);
715 			if(aName == rFmt.GetName())
716 			{
717 				bRet = sal_True;
718 				break;
719 			}
720 		}
721 	}
722 	else
723 		throw uno::RuntimeException();
724 	return bRet;
725 }
726 
727 uno::Type SAL_CALL
728 	SwXTextTables::getElementType(  )
729 		throw(uno::RuntimeException)
730 {
731 	return ::getCppuType((uno::Reference<XTextTable>*)0);
732 }
733 
734 sal_Bool SwXTextTables::hasElements(void) throw( uno::RuntimeException )
735 {
736 	vos::OGuard aGuard(Application::GetSolarMutex());
737 	if(!IsValid())
738 		throw uno::RuntimeException();
739 	return 0 != GetDoc()->GetTblFrmFmtCount(sal_True);
740 }
741 
742 OUString SwXTextTables::getImplementationName(void) throw( uno::RuntimeException )
743 {
744 	return C2U("SwXTextTables");
745 }
746 
747 sal_Bool SwXTextTables::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
748 {
749 	return rServiceName == C2U("com.sun.star.text.TextTables");
750 }
751 
752 uno::Sequence< OUString > SwXTextTables::getSupportedServiceNames(void) throw( uno::RuntimeException )
753 {
754 	uno::Sequence< OUString > aRet(1);
755 	OUString* pArr = aRet.getArray();
756 	pArr[0] = C2U("com.sun.star.text.TextTables");
757 	return aRet;
758 }
759 
760 XTextTable* SwXTextTables::GetObject( SwFrmFmt& rFmt )
761 {
762 	vos::OGuard aGuard(Application::GetSolarMutex());
763     SwXTextTable* pTbl = SwIterator<SwXTextTable,SwFmt>::FirstElement( rFmt );
764 	if( !pTbl )
765 		pTbl = new SwXTextTable(rFmt);
766 	return pTbl ;
767 }
768 
769 
770 /******************************************************************
771  *	SwXFrameEnumeration
772  ******************************************************************/
773 namespace
774 {
775     template<FlyCntType T> struct UnoFrameWrap_traits {};
776 
777     template<>
778     struct UnoFrameWrap_traits<FLYCNTTYPE_FRM>
779     {
780         typedef SwXTextFrame core_frame_t;
781         typedef XTextFrame uno_frame_t;
782         static inline bool filter(const SwNode* const pNode) { return !pNode->IsNoTxtNode(); };
783     };
784 
785     template<>
786     struct UnoFrameWrap_traits<FLYCNTTYPE_GRF>
787     {
788         typedef SwXTextGraphicObject core_frame_t;
789         typedef XTextContent uno_frame_t;
790         static inline bool filter(const SwNode* const pNode) { return pNode->IsGrfNode(); };
791     };
792 
793     template<>
794     struct UnoFrameWrap_traits<FLYCNTTYPE_OLE>
795     {
796         typedef SwXTextEmbeddedObject core_frame_t;
797         typedef XEmbeddedObjectSupplier uno_frame_t;
798         static inline bool filter(const SwNode* const pNode) { return pNode->IsOLENode(); };
799     };
800 
801     template<FlyCntType T>
802     static uno::Any lcl_UnoWrapFrame(SwFrmFmt* pFmt)
803     {
804         SwXFrame* pFrm = SwIterator<SwXFrame,SwFmt>::FirstElement( *pFmt );
805         if(!pFrm)
806             pFrm = new typename UnoFrameWrap_traits<T>::core_frame_t(*pFmt);
807         Reference< typename UnoFrameWrap_traits<T>::uno_frame_t > xFrm =
808             static_cast< typename UnoFrameWrap_traits<T>::core_frame_t* >(pFrm);
809         return uno::makeAny(xFrm);
810     }
811 
812     // runtime adapter for lcl_UnoWrapFrame
813     static uno::Any lcl_UnoWrapFrame(SwFrmFmt* pFmt, FlyCntType eType) throw(uno::RuntimeException())
814     {
815         switch(eType)
816         {
817             case FLYCNTTYPE_FRM:
818                 return lcl_UnoWrapFrame<FLYCNTTYPE_FRM>(pFmt);
819             case FLYCNTTYPE_GRF:
820                 return lcl_UnoWrapFrame<FLYCNTTYPE_GRF>(pFmt);
821             case FLYCNTTYPE_OLE:
822                 return lcl_UnoWrapFrame<FLYCNTTYPE_OLE>(pFmt);
823             default:
824                 throw uno::RuntimeException();
825         }
826     }
827 
828     template<FlyCntType T>
829     class SwXFrameEnumeration
830         : public SwSimpleEnumeration_Base
831     {
832         private:
833             typedef ::std::slist< Any > frmcontainer_t;
834             frmcontainer_t m_aFrames;
835         protected:
836             virtual ~SwXFrameEnumeration() {};
837         public:
838             SwXFrameEnumeration(const SwDoc* const pDoc);
839 
840             //XEnumeration
841             virtual sal_Bool SAL_CALL hasMoreElements(void) throw( RuntimeException );
842             virtual Any SAL_CALL nextElement(void) throw( NoSuchElementException, WrappedTargetException, RuntimeException );
843 
844             //XServiceInfo
845             virtual OUString SAL_CALL getImplementationName(void) throw( RuntimeException );
846             virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw( RuntimeException );
847             virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw( RuntimeException );
848     };
849 }
850 
851 template<FlyCntType T>
852 SwXFrameEnumeration<T>::SwXFrameEnumeration(const SwDoc* const pDoc)
853     : m_aFrames()
854 {
855     vos::OGuard aGuard(Application::GetSolarMutex());
856     const SwSpzFrmFmts* const pFmts = pDoc->GetSpzFrmFmts();
857     if(!pFmts->Count())
858         return;
859     // --> OD 2009-09-10 #i104937#
860 //    const SwFrmFmt* const pFmtsEnd = (*pFmts)[pFmts->Count()];
861     const sal_uInt16 nSize = pFmts->Count();
862     // <--
863     ::std::insert_iterator<frmcontainer_t> pInserter = ::std::insert_iterator<frmcontainer_t>(m_aFrames, m_aFrames.begin());
864     // --> OD 2009-09-10 #i104937#
865     SwFrmFmt* pFmt( 0 );
866     for( sal_uInt16 i = 0; i < nSize; ++i )
867 //    for(SwFrmFmt* pFmt = (*pFmts)[0]; pFmt < pFmtsEnd; ++pFmt)
868     // <--
869     {
870         // --> OD 2009-09-10 #i104937#
871         pFmt = (*pFmts)[i];
872         // <--
873         if(pFmt->Which() != RES_FLYFRMFMT)
874             continue;
875         const SwNodeIndex* pIdx =  pFmt->GetCntnt().GetCntntIdx();
876         if(!pIdx || !pIdx->GetNodes().IsDocNodes())
877             continue;
878         const SwNode* pNd = pDoc->GetNodes()[ pIdx->GetIndex() + 1 ];
879         if(UnoFrameWrap_traits<T>::filter(pNd))
880             *pInserter++ = lcl_UnoWrapFrame<T>(pFmt);
881 	}
882 }
883 
884 template<FlyCntType T>
885 sal_Bool SwXFrameEnumeration<T>::hasMoreElements(void) throw( RuntimeException )
886 {
887 	vos::OGuard aGuard(Application::GetSolarMutex());
888     return !m_aFrames.empty();
889 }
890 
891 template<FlyCntType T>
892 Any SwXFrameEnumeration<T>::nextElement(void) throw( NoSuchElementException, WrappedTargetException, RuntimeException )
893 {
894 	vos::OGuard aGuard(Application::GetSolarMutex());
895     if(m_aFrames.empty())
896         throw NoSuchElementException();
897     Any aResult = *m_aFrames.begin();
898     m_aFrames.pop_front();
899     return aResult;
900 }
901 
902 template<FlyCntType T>
903 OUString SwXFrameEnumeration<T>::getImplementationName(void) throw( RuntimeException )
904 {
905     return C2U("SwXFrameEnumeration");
906 }
907 
908 template<FlyCntType T>
909 sal_Bool SwXFrameEnumeration<T>::supportsService(const OUString& ServiceName) throw( RuntimeException )
910 {
911     return C2U("com.sun.star.container.XEnumeration") == ServiceName;
912 }
913 
914 template<FlyCntType T>
915 Sequence< OUString > SwXFrameEnumeration<T>::getSupportedServiceNames(void) throw( RuntimeException )
916 {
917     return ::comphelper::makeSequence(C2U("com.sun.star.container.XEnumeration"));
918 }
919 
920 /******************************************************************
921  *	SwXFrames
922  ******************************************************************/
923 OUString SwXFrames::getImplementationName(void) throw( RuntimeException )
924 {
925 	return C2U("SwXFrames");
926 }
927 
928 sal_Bool SwXFrames::supportsService(const OUString& rServiceName) throw( RuntimeException )
929 {
930 	return C2U("com.sun.star.text.TextFrames") == rServiceName;
931 }
932 
933 Sequence<OUString> SwXFrames::getSupportedServiceNames(void) throw( RuntimeException )
934 {
935     return ::comphelper::makeSequence(C2U("com.sun.star.text.TextFrames"));
936 }
937 
938 SwXFrames::SwXFrames(SwDoc* _pDoc, FlyCntType eSet) :
939 	SwUnoCollection(_pDoc),
940 	eType(eSet)
941 {}
942 
943 SwXFrames::~SwXFrames()
944 {}
945 
946 uno::Reference<container::XEnumeration> SwXFrames::createEnumeration(void) throw(uno::RuntimeException)
947 {
948     vos::OGuard aGuard(Application::GetSolarMutex());
949     if(!IsValid())
950         throw uno::RuntimeException();
951     switch(eType)
952     {
953         case FLYCNTTYPE_FRM:
954             return uno::Reference< container::XEnumeration >(
955                 new SwXFrameEnumeration<FLYCNTTYPE_FRM>(GetDoc()));
956         case FLYCNTTYPE_GRF:
957             return uno::Reference< container::XEnumeration >(
958                 new SwXFrameEnumeration<FLYCNTTYPE_GRF>(GetDoc()));
959         case FLYCNTTYPE_OLE:
960             return uno::Reference< container::XEnumeration >(
961                 new SwXFrameEnumeration<FLYCNTTYPE_OLE>(GetDoc()));
962         default:
963             throw uno::RuntimeException();
964     }
965 }
966 
967 sal_Int32 SwXFrames::getCount(void) throw(uno::RuntimeException)
968 {
969     vos::OGuard aGuard(Application::GetSolarMutex());
970     if(!IsValid())
971         throw uno::RuntimeException();
972     return GetDoc()->GetFlyCount(eType);
973 }
974 
975 uno::Any SwXFrames::getByIndex(sal_Int32 nIndex)
976 	throw(IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
977 {
978 	vos::OGuard aGuard(Application::GetSolarMutex());
979 	if(!IsValid())
980         throw uno::RuntimeException();
981     if(nIndex < 0 || nIndex >= USHRT_MAX)
982         throw IndexOutOfBoundsException();
983     SwFrmFmt* pFmt = GetDoc()->GetFlyNum(static_cast<sal_uInt16>(nIndex), eType);
984     if(!pFmt)
985         throw IndexOutOfBoundsException();
986     return lcl_UnoWrapFrame(pFmt, eType);
987 }
988 
989 uno::Any SwXFrames::getByName(const OUString& rName)
990 	throw(NoSuchElementException, WrappedTargetException, uno::RuntimeException )
991 {
992 	vos::OGuard aGuard(Application::GetSolarMutex());
993     if(!IsValid())
994         throw uno::RuntimeException();
995     const SwFrmFmt* pFmt;
996     switch(eType)
997     {
998         case FLYCNTTYPE_GRF:
999             pFmt = GetDoc()->FindFlyByName(rName, ND_GRFNODE);
1000             break;
1001         case FLYCNTTYPE_OLE:
1002             pFmt = GetDoc()->FindFlyByName(rName, ND_OLENODE);
1003             break;
1004         default:
1005             pFmt = GetDoc()->FindFlyByName(rName, ND_TEXTNODE);
1006             break;
1007     }
1008     if(!pFmt)
1009         throw NoSuchElementException();
1010     return lcl_UnoWrapFrame(const_cast<SwFrmFmt*>(pFmt), eType);
1011 }
1012 
1013 uno::Sequence<OUString> SwXFrames::getElementNames(void) throw( uno::RuntimeException )
1014 {
1015 	vos::OGuard aGuard(Application::GetSolarMutex());
1016 	if(!IsValid())
1017 		throw uno::RuntimeException();
1018     const Reference<XEnumeration> xEnum = createEnumeration();
1019     ::std::vector<OUString> vNames;
1020     while(xEnum->hasMoreElements())
1021     {
1022         Reference<container::XNamed> xNamed;
1023         xEnum->nextElement() >>= xNamed;
1024         if(xNamed.is())
1025             vNames.push_back(xNamed->getName());
1026     }
1027     return ::comphelper::containerToSequence(vNames);
1028 }
1029 
1030 sal_Bool SwXFrames::hasByName(const OUString& rName) throw( uno::RuntimeException )
1031 {
1032 	vos::OGuard aGuard(Application::GetSolarMutex());
1033     if(!IsValid())
1034         throw uno::RuntimeException();
1035     switch(eType)
1036     {
1037         case FLYCNTTYPE_GRF:
1038             return GetDoc()->FindFlyByName(rName, ND_GRFNODE) != NULL;
1039         case FLYCNTTYPE_OLE:
1040             return GetDoc()->FindFlyByName(rName, ND_OLENODE) != NULL;
1041         default:
1042             return GetDoc()->FindFlyByName(rName, ND_TEXTNODE) != NULL;
1043     }
1044 }
1045 
1046 uno::Type SAL_CALL SwXFrames::getElementType() throw(uno::RuntimeException)
1047 {
1048 	vos::OGuard aGuard(Application::GetSolarMutex());
1049 	switch(eType)
1050 	{
1051 		case FLYCNTTYPE_FRM:
1052 			return ::getCppuType((uno::Reference<XTextFrame>*)0);
1053 		case FLYCNTTYPE_GRF:
1054 			return ::getCppuType((uno::Reference<XTextContent>*)0);
1055 		case FLYCNTTYPE_OLE:
1056 			return ::getCppuType((uno::Reference<XEmbeddedObjectSupplier>*)0);
1057 		default:
1058 			return uno::Type();
1059 	}
1060 }
1061 
1062 sal_Bool SwXFrames::hasElements(void) throw(uno::RuntimeException)
1063 {
1064 	vos::OGuard aGuard(Application::GetSolarMutex());
1065 	if(!IsValid())
1066         throw uno::RuntimeException();
1067     return GetDoc()->GetFlyCount(eType) > 0;
1068 }
1069 
1070 SwXFrame* SwXFrames::GetObject(SwFrmFmt& rFmt, FlyCntType eType)
1071 {
1072     SwXFrame* pFrm = SwIterator<SwXFrame,SwFmt>::FirstElement( rFmt );
1073 	if(pFrm) return pFrm;
1074     switch(eType)
1075     {
1076         case FLYCNTTYPE_FRM:
1077             return new SwXTextFrame(rFmt);
1078         case FLYCNTTYPE_GRF:
1079             return new SwXTextGraphicObject(rFmt);
1080         case FLYCNTTYPE_OLE:
1081             return new SwXTextEmbeddedObject(rFmt);
1082         default:
1083             return NULL;
1084     }
1085 }
1086 
1087 /******************************************************************
1088  * SwXTextFrames
1089  ******************************************************************/
1090 OUString SwXTextFrames::getImplementationName(void) throw( RuntimeException )
1091 {
1092 	return C2U("SwXTextFrames");
1093 }
1094 
1095 sal_Bool SwXTextFrames::supportsService(const OUString& rServiceName) throw( RuntimeException )
1096 {
1097 	return C2U("com.sun.star.text.TextFrames") == rServiceName;
1098 }
1099 
1100 Sequence< OUString > SwXTextFrames::getSupportedServiceNames(void) throw( RuntimeException )
1101 {
1102 	Sequence< OUString > aRet(1);
1103 	OUString* pArray = aRet.getArray();
1104 	pArray[0] = C2U("com.sun.star.text.TextFrames");
1105 	return aRet;
1106 }
1107 
1108 SwXTextFrames::SwXTextFrames(SwDoc* _pDoc) :
1109 	SwXFrames(_pDoc, FLYCNTTYPE_FRM)
1110 {
1111 }
1112 
1113 SwXTextFrames::~SwXTextFrames()
1114 {
1115 }
1116 
1117 /******************************************************************
1118  *	SwXTextGraphicObjects
1119  ******************************************************************/
1120 
1121 OUString SwXTextGraphicObjects::getImplementationName(void) throw( RuntimeException )
1122 {
1123 	return C2U("SwXTextGraphicObjects");
1124 }
1125 
1126 sal_Bool SwXTextGraphicObjects::supportsService(const OUString& rServiceName) throw( RuntimeException )
1127 {
1128 	return C2U("com.sun.star.text.TextGraphicObjects") == rServiceName;
1129 }
1130 
1131 Sequence< OUString > SwXTextGraphicObjects::getSupportedServiceNames(void) throw( RuntimeException )
1132 {
1133 	Sequence< OUString > aRet(1);
1134 	OUString* pArray = aRet.getArray();
1135 	pArray[0] = C2U("com.sun.star.text.TextGraphicObjects");
1136 	return aRet;
1137 }
1138 
1139 SwXTextGraphicObjects::SwXTextGraphicObjects(SwDoc* _pDoc) :
1140 	SwXFrames(_pDoc, FLYCNTTYPE_GRF)
1141 {
1142 }
1143 
1144 SwXTextGraphicObjects::~SwXTextGraphicObjects()
1145 {
1146 }
1147 
1148 /******************************************************************
1149  *	SwXTextEmbeddedObjects
1150  ******************************************************************/
1151 OUString SwXTextEmbeddedObjects::getImplementationName(void) throw( RuntimeException )
1152 {
1153 	return C2U("SwXTextEmbeddedObjects");
1154 }
1155 
1156 sal_Bool SwXTextEmbeddedObjects::supportsService(const OUString& rServiceName) throw( RuntimeException )
1157 {
1158 	return C2U("com.sun.star.text.TextEmbeddedObjects") == rServiceName;
1159 }
1160 
1161 Sequence< OUString > SwXTextEmbeddedObjects::getSupportedServiceNames(void) throw( RuntimeException )
1162 {
1163 	Sequence< OUString > aRet(1);
1164 	OUString* pArray = aRet.getArray();
1165 	pArray[0] = C2U("com.sun.star.text.TextEmbeddedObjects");
1166 	return aRet;
1167 }
1168 
1169 SwXTextEmbeddedObjects::SwXTextEmbeddedObjects(SwDoc* _pDoc) :
1170 		SwXFrames(_pDoc, FLYCNTTYPE_OLE)
1171 {
1172 }
1173 
1174 SwXTextEmbeddedObjects::~SwXTextEmbeddedObjects()
1175 {
1176 }
1177 
1178 /******************************************************************
1179  *
1180  ******************************************************************/
1181 #define PASSWORD_STD_TIMEOUT 1000
1182 OUString SwXTextSections::getImplementationName(void) throw( RuntimeException )
1183 {
1184 	return C2U("SwXTextSections");
1185 }
1186 
1187 sal_Bool SwXTextSections::supportsService(const OUString& rServiceName) throw( RuntimeException )
1188 {
1189 	return C2U("com.sun.star.text.TextSections") == rServiceName;
1190 }
1191 
1192 Sequence< OUString > SwXTextSections::getSupportedServiceNames(void) throw( RuntimeException )
1193 {
1194 	Sequence< OUString > aRet(1);
1195 	OUString* pArray = aRet.getArray();
1196 	pArray[0] = C2U("com.sun.star.text.TextSections");
1197 	return aRet;
1198 }
1199 
1200 SwXTextSections::SwXTextSections(SwDoc* _pDoc) :
1201     SwUnoCollection(_pDoc)
1202 {
1203 }
1204 
1205 SwXTextSections::~SwXTextSections()
1206 {
1207 }
1208 
1209 sal_Int32 SwXTextSections::getCount(void) throw( uno::RuntimeException )
1210 {
1211 	vos::OGuard aGuard(Application::GetSolarMutex());
1212     if(!IsValid())
1213 		throw uno::RuntimeException();
1214 	const SwSectionFmts& rSectFmts = GetDoc()->GetSections();
1215 	sal_uInt16 nCount = rSectFmts.Count();
1216 	for(sal_uInt16 i = nCount; i; i--)
1217 	{
1218 		if( !rSectFmts[i - 1]->IsInNodesArr())
1219 			nCount--;
1220 	}
1221 	return nCount;
1222 }
1223 
1224 uno::Any SwXTextSections::getByIndex(sal_Int32 nIndex)
1225 	throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
1226 {
1227 	vos::OGuard aGuard(Application::GetSolarMutex());
1228     uno::Reference< XTextSection >  xRet;
1229     if(IsValid())
1230 	{
1231 		SwSectionFmts& rFmts = GetDoc()->GetSections();
1232 
1233 		const SwSectionFmts& rSectFmts = GetDoc()->GetSections();
1234 		sal_uInt16 nCount = rSectFmts.Count();
1235 		for(sal_uInt16 i = 0; i < nCount; i++)
1236 		{
1237 			if( !rSectFmts[i]->IsInNodesArr())
1238 				nIndex ++;
1239 			else if(nIndex == i)
1240 				break;
1241 			if(nIndex == i)
1242 				break;
1243 		}
1244 		if(nIndex >= 0 && nIndex < rFmts.Count())
1245 		{
1246 			SwSectionFmt* pFmt = rFmts[(sal_uInt16)nIndex];
1247             xRet = GetObject(*pFmt);
1248 		}
1249 		else
1250 			throw IndexOutOfBoundsException();
1251 	}
1252 	else
1253 		throw uno::RuntimeException();
1254     return makeAny(xRet);
1255 }
1256 
1257 uno::Any SwXTextSections::getByName(const OUString& Name)
1258 	throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException )
1259 {
1260 	vos::OGuard aGuard(Application::GetSolarMutex());
1261 	uno::Any aRet;
1262     if(IsValid())
1263 	{
1264 		String aName(Name);
1265 		SwSectionFmts& rFmts = GetDoc()->GetSections();
1266 		uno::Reference< XTextSection >  xSect;
1267 		for(sal_uInt16 i = 0; i < rFmts.Count(); i++)
1268 		{
1269 			SwSectionFmt* pFmt = rFmts[i];
1270             if (pFmt->IsInNodesArr()
1271                 && (aName == pFmt->GetSection()->GetSectionName()))
1272 			{
1273 				xSect = GetObject(*pFmt);
1274 				aRet.setValue(&xSect, ::getCppuType((uno::Reference<XTextSection>*)0));
1275 				break;
1276 			}
1277 		}
1278 		if(!xSect.is())
1279 			throw NoSuchElementException();
1280 	}
1281 	else
1282 		throw uno::RuntimeException();
1283 	return aRet;
1284 }
1285 
1286 uno::Sequence< OUString > SwXTextSections::getElementNames(void)
1287 	throw( uno::RuntimeException )
1288 {
1289 	vos::OGuard aGuard(Application::GetSolarMutex());
1290     if(!IsValid())
1291 		throw uno::RuntimeException();
1292 	sal_uInt16 nCount = GetDoc()->GetSections().Count();
1293 	SwSectionFmts& rSectFmts = GetDoc()->GetSections();
1294 	for(sal_uInt16 i = nCount; i; i--)
1295 	{
1296 		if( !rSectFmts[i - 1]->IsInNodesArr())
1297 			nCount--;
1298 	}
1299 
1300 	uno::Sequence<OUString> aSeq(nCount);
1301 	if(nCount)
1302 	{
1303 		SwSectionFmts& rFmts = GetDoc()->GetSections();
1304 		OUString* pArray = aSeq.getArray();
1305 		sal_uInt16 nIndex = 0;
1306 		for( sal_uInt16 i = 0; i < nCount; i++, nIndex++)
1307 		{
1308 			const SwSectionFmt* pFmt = rFmts[nIndex];
1309 			while(!pFmt->IsInNodesArr())
1310 			{
1311 				pFmt = rFmts[++nIndex];
1312 			}
1313             pArray[i] = pFmt->GetSection()->GetSectionName();
1314 		}
1315 	}
1316 	return aSeq;
1317 }
1318 
1319 sal_Bool SwXTextSections::hasByName(const OUString& Name)
1320 	throw( uno::RuntimeException )
1321 {
1322 	vos::OGuard aGuard(Application::GetSolarMutex());
1323 	sal_Bool bRet = sal_False;
1324 	String aName(Name);
1325     if(IsValid())
1326 	{
1327 		SwSectionFmts& rFmts = GetDoc()->GetSections();
1328 		for(sal_uInt16 i = 0; i < rFmts.Count(); i++)
1329 		{
1330 			const SwSectionFmt* pFmt = rFmts[i];
1331             if (aName == pFmt->GetSection()->GetSectionName())
1332 			{
1333 				bRet = sal_True;
1334 				break;
1335 			}
1336 		}
1337 	}
1338 	else
1339 	{
1340 		//Sonderbehandlung der dbg_ - Methoden
1341 		if( COMPARE_EQUAL != aName.CompareToAscii("dbg_", 4))
1342 			throw uno::RuntimeException();
1343 	}
1344 	return bRet;
1345 }
1346 
1347 uno::Type SAL_CALL SwXTextSections::getElementType() throw(uno::RuntimeException)
1348 {
1349 	return ::getCppuType((uno::Reference<XTextSection>*)0);
1350 }
1351 
1352 sal_Bool SwXTextSections::hasElements(void) throw( uno::RuntimeException )
1353 {
1354 	vos::OGuard aGuard(Application::GetSolarMutex());
1355 	sal_uInt16 nCount = 0;
1356     if(IsValid())
1357 	{
1358 		SwSectionFmts& rFmts = GetDoc()->GetSections();
1359 		nCount = rFmts.Count();
1360 	}
1361 	else
1362 		throw uno::RuntimeException();
1363 	return nCount > 0;
1364 }
1365 
1366 uno::Reference< XTextSection >  SwXTextSections::GetObject( SwSectionFmt& rFmt )
1367 {
1368     return SwXTextSection::CreateXTextSection(&rFmt);
1369 }
1370 
1371 OUString SwXBookmarks::getImplementationName(void) throw( RuntimeException )
1372 {
1373     return OUString::createFromAscii("SwXBookmarks");
1374 }
1375 
1376 sal_Bool SwXBookmarks::supportsService(const OUString& rServiceName) throw( RuntimeException )
1377 {
1378     return OUString::createFromAscii("com.sun.star.text.Bookmarks") == rServiceName;
1379 }
1380 
1381 Sequence< OUString > SwXBookmarks::getSupportedServiceNames(void) throw( RuntimeException )
1382 {
1383     Sequence< OUString > aRet(1);
1384     aRet[0] = OUString::createFromAscii("com.sun.star.text.Bookmarks");
1385     return aRet;
1386 }
1387 
1388 SwXBookmarks::SwXBookmarks(SwDoc* _pDoc) :
1389     SwUnoCollection(_pDoc)
1390 { }
1391 
1392 SwXBookmarks::~SwXBookmarks()
1393 { }
1394 
1395 sal_Int32 SwXBookmarks::getCount(void)
1396     throw( uno::RuntimeException )
1397 {
1398     vos::OGuard aGuard(Application::GetSolarMutex());
1399     if(!IsValid())
1400         throw uno::RuntimeException();
1401     return GetDoc()->getIDocumentMarkAccess()->getBookmarksCount();
1402 }
1403 
1404 uno::Any SwXBookmarks::getByIndex(sal_Int32 nIndex)
1405     throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
1406 {
1407     vos::OGuard aGuard(Application::GetSolarMutex());
1408     if(!IsValid())
1409         throw uno::RuntimeException();
1410     IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
1411     if(nIndex < 0 || nIndex >= pMarkAccess->getBookmarksCount())
1412         throw IndexOutOfBoundsException();
1413 
1414     uno::Any aRet;
1415     ::sw::mark::IMark* pBkmk = pMarkAccess->getBookmarksBegin()[nIndex].get();
1416     const uno::Reference< text::XTextContent > xRef =
1417         SwXBookmark::CreateXBookmark(*GetDoc(), *pBkmk);
1418     aRet <<= xRef;
1419     return aRet;
1420 }
1421 
1422 uno::Any SwXBookmarks::getByName(const rtl::OUString& rName)
1423     throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException )
1424 {
1425     vos::OGuard aGuard(Application::GetSolarMutex());
1426     if(!IsValid())
1427         throw uno::RuntimeException();
1428 
1429     IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
1430     IDocumentMarkAccess::const_iterator_t ppBkmk = pMarkAccess->findBookmark(rName);
1431     if(ppBkmk == pMarkAccess->getBookmarksEnd())
1432         throw NoSuchElementException();
1433 
1434     uno::Any aRet;
1435     const uno::Reference< text::XTextContent > xRef =
1436         SwXBookmark::CreateXBookmark(*GetDoc(), *(ppBkmk->get()));
1437     aRet <<= xRef;
1438     return aRet;
1439 }
1440 
1441 uno::Sequence< OUString > SwXBookmarks::getElementNames(void)
1442     throw( uno::RuntimeException )
1443 {
1444     vos::OGuard aGuard(Application::GetSolarMutex());
1445     if(!IsValid())
1446         throw uno::RuntimeException();
1447 
1448     IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
1449     uno::Sequence<OUString> aSeq(pMarkAccess->getBookmarksCount());
1450     sal_Int32 nCnt = 0;
1451     for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getBookmarksBegin();
1452         ppMark != pMarkAccess->getBookmarksEnd();)
1453         aSeq[nCnt++] = (*ppMark++)->GetName();
1454     return aSeq;
1455 }
1456 
1457 sal_Bool SwXBookmarks::hasByName(const OUString& rName)
1458     throw( uno::RuntimeException )
1459 {
1460     vos::OGuard aGuard(Application::GetSolarMutex());
1461     if(!IsValid())
1462         throw uno::RuntimeException();
1463 
1464     IDocumentMarkAccess* const pMarkAccess = GetDoc()->getIDocumentMarkAccess();
1465     return pMarkAccess->findBookmark(rName) != pMarkAccess->getBookmarksEnd();
1466 }
1467 
1468 uno::Type SAL_CALL SwXBookmarks::getElementType()
1469     throw(uno::RuntimeException)
1470 {
1471     return ::getCppuType((uno::Reference<XTextContent>*)0);
1472 }
1473 
1474 sal_Bool SwXBookmarks::hasElements(void)
1475     throw( uno::RuntimeException )
1476 {
1477     vos::OGuard aGuard(Application::GetSolarMutex());
1478     if(!IsValid())
1479         throw uno::RuntimeException();
1480     return GetDoc()->getIDocumentMarkAccess()->getBookmarksCount() != 0;
1481 }
1482 
1483 /******************************************************************
1484  *
1485  ******************************************************************/
1486 
1487 SwXNumberingRulesCollection::SwXNumberingRulesCollection( SwDoc* _pDoc ) :
1488     SwUnoCollection(_pDoc)
1489 {
1490 }
1491 
1492 SwXNumberingRulesCollection::~SwXNumberingRulesCollection()
1493 {
1494 }
1495 
1496 sal_Int32 SwXNumberingRulesCollection::getCount(void) throw( uno::RuntimeException )
1497 {
1498     vos::OGuard aGuard(Application::GetSolarMutex());
1499     if(!IsValid())
1500         throw uno::RuntimeException();
1501     return GetDoc()->GetNumRuleTbl().Count();
1502 }
1503 
1504 uno::Any SwXNumberingRulesCollection::getByIndex(sal_Int32 nIndex)
1505     throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
1506 {
1507     vos::OGuard aGuard(Application::GetSolarMutex());
1508     uno::Any aRet;
1509     if(IsValid())
1510     {
1511         uno::Reference< XIndexReplace >  xRef;
1512         if ( nIndex < GetDoc()->GetNumRuleTbl().Count() )
1513         {
1514             xRef = new SwXNumberingRules( *GetDoc()->GetNumRuleTbl()[ static_cast< sal_uInt16 >(nIndex) ] );
1515             aRet.setValue(&xRef, ::getCppuType((uno::Reference<XIndexReplace>*)0));
1516         }
1517 
1518         if(!xRef.is())
1519             throw IndexOutOfBoundsException();
1520     }
1521     else
1522         throw uno::RuntimeException();
1523     return aRet;
1524 }
1525 
1526 uno::Type SAL_CALL SwXNumberingRulesCollection::getElementType() throw(uno::RuntimeException)
1527 {
1528     return ::getCppuType((uno::Reference<XIndexReplace>*)0);
1529 }
1530 
1531 sal_Bool SwXNumberingRulesCollection::hasElements(void) throw( uno::RuntimeException )
1532 {
1533     vos::OGuard aGuard(Application::GetSolarMutex());
1534     if(!IsValid())
1535         throw uno::RuntimeException();
1536     return GetDoc()->GetNumRuleTbl().Count() > 0;
1537 }
1538 
1539 OUString SwXFootnotes::getImplementationName(void) throw( RuntimeException )
1540 {
1541 	return C2U("SwXFootnotes");
1542 }
1543 
1544 sal_Bool SwXFootnotes::supportsService(const OUString& rServiceName) throw( RuntimeException )
1545 {
1546 	return C2U("com.sun.star.text.Footnotes") == rServiceName;
1547 }
1548 
1549 Sequence< OUString > SwXFootnotes::getSupportedServiceNames(void) throw( RuntimeException )
1550 {
1551 	Sequence< OUString > aRet(1);
1552 	OUString* pArray = aRet.getArray();
1553 	pArray[0] = C2U("com.sun.star.text.Footnotes");
1554 	return aRet;
1555 }
1556 
1557 SwXFootnotes::SwXFootnotes(sal_Bool bEnd, SwDoc* _pDoc)
1558     : SwUnoCollection(_pDoc)
1559     , m_bEndnote(bEnd)
1560 {
1561 }
1562 
1563 SwXFootnotes::~SwXFootnotes()
1564 {
1565 }
1566 
1567 sal_Int32 SwXFootnotes::getCount(void) throw( uno::RuntimeException )
1568 {
1569 	vos::OGuard aGuard(Application::GetSolarMutex());
1570 	if(!IsValid())
1571 		throw uno::RuntimeException();
1572 	sal_Int32 nCount = 0;
1573 	sal_uInt16 n, nFtnCnt = GetDoc()->GetFtnIdxs().Count();
1574 	SwTxtFtn* pTxtFtn;
1575 	for( n = 0; n < nFtnCnt; ++n )
1576 	{
1577 		pTxtFtn = GetDoc()->GetFtnIdxs()[ n ];
1578 		const SwFmtFtn& rFtn = pTxtFtn->GetFtn();
1579         if ( rFtn.IsEndNote() != m_bEndnote )
1580 			continue;
1581 		nCount++;
1582 	}
1583 	return nCount;
1584 }
1585 
1586 uno::Any SwXFootnotes::getByIndex(sal_Int32 nIndex)
1587 	throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
1588 {
1589 	vos::OGuard aGuard(Application::GetSolarMutex());
1590 	uno::Any aRet;
1591 	sal_Int32 nCount = 0;
1592 	if(IsValid())
1593 	{
1594 		sal_uInt16 n, nFtnCnt = GetDoc()->GetFtnIdxs().Count();
1595 		SwTxtFtn* pTxtFtn;
1596 		uno::Reference< XFootnote >  xRef;
1597 		for( n = 0; n < nFtnCnt; ++n )
1598 		{
1599 			pTxtFtn = GetDoc()->GetFtnIdxs()[ n ];
1600 			const SwFmtFtn& rFtn = pTxtFtn->GetFtn();
1601             if ( rFtn.IsEndNote() != m_bEndnote )
1602 				continue;
1603 
1604 			if(nCount == nIndex)
1605 			{
1606                 xRef = SwXFootnote::CreateXFootnote(*GetDoc(), rFtn);
1607                 aRet <<= xRef;
1608 				break;
1609 			}
1610 			nCount++;
1611 		}
1612 		if(!xRef.is())
1613 			throw IndexOutOfBoundsException();
1614 	}
1615 	else
1616 		throw uno::RuntimeException();
1617 	return aRet;
1618 }
1619 
1620 uno::Type SAL_CALL SwXFootnotes::getElementType() throw(uno::RuntimeException)
1621 {
1622 	return ::getCppuType((uno::Reference<XFootnote>*)0);
1623 }
1624 
1625 sal_Bool SwXFootnotes::hasElements(void) throw( uno::RuntimeException )
1626 {
1627 	vos::OGuard aGuard(Application::GetSolarMutex());
1628 	if(!IsValid())
1629 		throw uno::RuntimeException();
1630 	return GetDoc()->GetFtnIdxs().Count() > 0;
1631 }
1632 
1633 Reference<XFootnote> 	SwXFootnotes::GetObject( SwDoc& rDoc, const SwFmtFtn& rFmt )
1634 {
1635     return SwXFootnote::CreateXFootnote(rDoc, rFmt);
1636 }
1637 
1638 /******************************************************************
1639  *
1640  ******************************************************************/
1641 
1642 OUString SwXReferenceMarks::getImplementationName(void) throw( RuntimeException )
1643 {
1644 	return C2U("SwXReferenceMarks");
1645 }
1646 
1647 sal_Bool SwXReferenceMarks::supportsService(const OUString& rServiceName) throw( RuntimeException )
1648 {
1649 	return C2U("com.sun.star.text.ReferenceMarks") == rServiceName;
1650 }
1651 
1652 Sequence< OUString > SwXReferenceMarks::getSupportedServiceNames(void) throw( RuntimeException )
1653 {
1654 	Sequence< OUString > aRet(1);
1655 	OUString* pArray = aRet.getArray();
1656 	pArray[0] = C2U("com.sun.star.text.ReferenceMarks");
1657 	return aRet;
1658 }
1659 
1660 SwXReferenceMarks::SwXReferenceMarks(SwDoc* _pDoc) :
1661 	SwUnoCollection(_pDoc)
1662 {
1663 }
1664 
1665 SwXReferenceMarks::~SwXReferenceMarks()
1666 {
1667 }
1668 
1669 sal_Int32 SwXReferenceMarks::getCount(void) throw( uno::RuntimeException )
1670 {
1671 	vos::OGuard aGuard(Application::GetSolarMutex());
1672 	if(!IsValid())
1673 		throw uno::RuntimeException();
1674 	return GetDoc()->GetRefMarks();
1675 }
1676 
1677 uno::Any SwXReferenceMarks::getByIndex(sal_Int32 nIndex)
1678 	throw( IndexOutOfBoundsException, WrappedTargetException, uno::RuntimeException )
1679 {
1680 	vos::OGuard aGuard(Application::GetSolarMutex());
1681 	uno::Any aRet;
1682 	if(!IsValid())
1683 		throw uno::RuntimeException();
1684 	uno::Reference< XTextContent >  xRef;
1685     if(0 <= nIndex && nIndex < USHRT_MAX)
1686 	{
1687 		const SwFmtRefMark* pMark = GetDoc()->GetRefMark( (sal_uInt16) nIndex );
1688 		if(pMark)
1689 		{
1690 			xRef = SwXReferenceMarks::GetObject( GetDoc(), pMark );
1691 			aRet.setValue(&xRef, ::getCppuType((uno::Reference<XTextContent>*)0));
1692 		}
1693 	}
1694 	if(!xRef.is())
1695 		throw IndexOutOfBoundsException();
1696 	return aRet;
1697 }
1698 
1699 uno::Any SwXReferenceMarks::getByName(const OUString& rName)
1700 	throw( NoSuchElementException, WrappedTargetException, uno::RuntimeException )
1701 {
1702 	vos::OGuard aGuard(Application::GetSolarMutex());
1703 	uno::Any aRet;
1704 	if(IsValid())
1705 	{
1706 		const SwFmtRefMark* pMark = GetDoc()->GetRefMark(rName);
1707 		if(pMark)
1708 		{
1709 			uno::Reference< XTextContent >  xRef = SwXReferenceMarks::GetObject( GetDoc(), pMark );
1710 			aRet.setValue(&xRef, ::getCppuType((uno::Reference<XTextContent>*)0));
1711 		}
1712 		else
1713 			throw NoSuchElementException();
1714 	}
1715 	else
1716 		throw uno::RuntimeException();
1717 	return aRet;
1718 }
1719 
1720 uno::Sequence< OUString > SwXReferenceMarks::getElementNames(void) throw( uno::RuntimeException )
1721 {
1722 	vos::OGuard aGuard(Application::GetSolarMutex());
1723 	uno::Sequence<OUString> aRet;
1724 	if(IsValid())
1725 	{
1726 		SvStringsDtor aStrings;
1727 		sal_uInt16 nCount = GetDoc()->GetRefMarks( &aStrings );
1728 		aRet.realloc(nCount);
1729 		OUString* pNames = aRet.getArray();
1730 		for(sal_uInt16 i = 0; i < nCount; i++)
1731 			pNames[i] = *aStrings.GetObject(i);
1732 	}
1733 	else
1734 		throw uno::RuntimeException();
1735 	return aRet;
1736 }
1737 
1738 sal_Bool SwXReferenceMarks::hasByName(const OUString& rName) throw( uno::RuntimeException )
1739 {
1740 	vos::OGuard aGuard(Application::GetSolarMutex());
1741 	if(!IsValid())
1742 		throw uno::RuntimeException();
1743 	return 0 != GetDoc()->GetRefMark( rName);
1744 }
1745 
1746 uno::Type SAL_CALL SwXReferenceMarks::getElementType() throw(uno::RuntimeException)
1747 {
1748 	return ::getCppuType((uno::Reference<XTextContent>*)0);
1749 }
1750 
1751 sal_Bool SwXReferenceMarks::hasElements(void) throw( uno::RuntimeException )
1752 {
1753 	vos::OGuard aGuard(Application::GetSolarMutex());
1754 	if(!IsValid())
1755 		throw uno::RuntimeException();
1756 	return 0 !=	GetDoc()->GetRefMarks();
1757 }
1758 
1759 SwXReferenceMark* SwXReferenceMarks::GetObject( SwDoc* pDoc, const SwFmtRefMark* pMark )
1760 {
1761 	vos::OGuard aGuard(Application::GetSolarMutex());
1762 
1763     return SwXReferenceMark::CreateXReferenceMark(*pDoc, *pMark);
1764 }
1765 
1766 /******************************************************************
1767  *
1768  ******************************************************************/
1769 
1770 void SwUnoCollection::Invalidate()
1771 {
1772 	bObjectValid = sal_False;
1773 	pDoc = 0;
1774 }
1775 
1776