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