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