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 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 ******************************************************************/ 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 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 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 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 607 SwXTextTables::SwXTextTables(SwDoc* pDc) : 608 SwUnoCollection(pDc) 609 { 610 611 } 612 613 SwXTextTables::~SwXTextTables() 614 { 615 616 } 617 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 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 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 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 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 724 SwXTextTables::getElementType( ) 725 throw(uno::RuntimeException) 726 { 727 return ::getCppuType((uno::Reference<XTextTable>*)0); 728 } 729 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 738 OUString SwXTextTables::getImplementationName(void) throw( uno::RuntimeException ) 739 { 740 return C2U("SwXTextTables"); 741 } 742 743 sal_Bool SwXTextTables::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) 744 { 745 return rServiceName == C2U("com.sun.star.text.TextTables"); 746 } 747 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 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; 778 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; 786 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; 794 static inline bool filter(const SwNode* const pNode) { return pNode->IsOLENode(); }; 795 }; 796 797 template<FlyCntType T> 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 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: 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> 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> 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> 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> 899 OUString SwXFrameEnumeration<T>::getImplementationName(void) throw( RuntimeException ) 900 { 901 return C2U("SwXFrameEnumeration"); 902 } 903 904 template<FlyCntType T> 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> 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 ******************************************************************/ 919 OUString SwXFrames::getImplementationName(void) throw( RuntimeException ) 920 { 921 return C2U("SwXFrames"); 922 } 923 924 sal_Bool SwXFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) 925 { 926 return C2U("com.sun.star.text.TextFrames") == rServiceName; 927 } 928 929 Sequence<OUString> SwXFrames::getSupportedServiceNames(void) throw( RuntimeException ) 930 { 931 return ::comphelper::makeSequence(C2U("com.sun.star.text.TextFrames")); 932 } 933 934 SwXFrames::SwXFrames(SwDoc* _pDoc, FlyCntType eSet) : 935 SwUnoCollection(_pDoc), 936 eType(eSet) 937 {} 938 939 SwXFrames::~SwXFrames() 940 {} 941 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 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 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 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 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 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 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 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 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 ******************************************************************/ 1086 OUString SwXTextFrames::getImplementationName(void) throw( RuntimeException ) 1087 { 1088 return C2U("SwXTextFrames"); 1089 } 1090 1091 sal_Bool SwXTextFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1092 { 1093 return C2U("com.sun.star.text.TextFrames") == rServiceName; 1094 } 1095 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 1104 SwXTextFrames::SwXTextFrames(SwDoc* _pDoc) : 1105 SwXFrames(_pDoc, FLYCNTTYPE_FRM) 1106 { 1107 } 1108 1109 SwXTextFrames::~SwXTextFrames() 1110 { 1111 } 1112 1113 /****************************************************************** 1114 * SwXTextGraphicObjects 1115 ******************************************************************/ 1116 1117 OUString SwXTextGraphicObjects::getImplementationName(void) throw( RuntimeException ) 1118 { 1119 return C2U("SwXTextGraphicObjects"); 1120 } 1121 1122 sal_Bool SwXTextGraphicObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1123 { 1124 return C2U("com.sun.star.text.TextGraphicObjects") == rServiceName; 1125 } 1126 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 1135 SwXTextGraphicObjects::SwXTextGraphicObjects(SwDoc* _pDoc) : 1136 SwXFrames(_pDoc, FLYCNTTYPE_GRF) 1137 { 1138 } 1139 1140 SwXTextGraphicObjects::~SwXTextGraphicObjects() 1141 { 1142 } 1143 1144 /****************************************************************** 1145 * SwXTextEmbeddedObjects 1146 ******************************************************************/ 1147 OUString SwXTextEmbeddedObjects::getImplementationName(void) throw( RuntimeException ) 1148 { 1149 return C2U("SwXTextEmbeddedObjects"); 1150 } 1151 1152 sal_Bool SwXTextEmbeddedObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1153 { 1154 return C2U("com.sun.star.text.TextEmbeddedObjects") == rServiceName; 1155 } 1156 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 1165 SwXTextEmbeddedObjects::SwXTextEmbeddedObjects(SwDoc* _pDoc) : 1166 SwXFrames(_pDoc, FLYCNTTYPE_OLE) 1167 { 1168 } 1169 1170 SwXTextEmbeddedObjects::~SwXTextEmbeddedObjects() 1171 { 1172 } 1173 1174 /****************************************************************** 1175 * 1176 ******************************************************************/ 1177 #define PASSWORD_STD_TIMEOUT 1000 1178 OUString SwXTextSections::getImplementationName(void) throw( RuntimeException ) 1179 { 1180 return C2U("SwXTextSections"); 1181 } 1182 1183 sal_Bool SwXTextSections::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1184 { 1185 return C2U("com.sun.star.text.TextSections") == rServiceName; 1186 } 1187 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 1196 SwXTextSections::SwXTextSections(SwDoc* _pDoc) : 1197 SwUnoCollection(_pDoc) 1198 { 1199 } 1200 1201 SwXTextSections::~SwXTextSections() 1202 { 1203 } 1204 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 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 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 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 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 1343 uno::Type SAL_CALL SwXTextSections::getElementType() throw(uno::RuntimeException) 1344 { 1345 return ::getCppuType((uno::Reference<XTextSection>*)0); 1346 } 1347 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 1362 uno::Reference< XTextSection > SwXTextSections::GetObject( SwSectionFmt& rFmt ) 1363 { 1364 return SwXTextSection::CreateXTextSection(&rFmt); 1365 } 1366 1367 OUString SwXBookmarks::getImplementationName(void) throw( RuntimeException ) 1368 { 1369 return OUString::createFromAscii("SwXBookmarks"); 1370 } 1371 1372 sal_Bool SwXBookmarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1373 { 1374 return OUString::createFromAscii("com.sun.star.text.Bookmarks") == rServiceName; 1375 } 1376 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 1384 SwXBookmarks::SwXBookmarks(SwDoc* _pDoc) : 1385 SwUnoCollection(_pDoc) 1386 { } 1387 1388 SwXBookmarks::~SwXBookmarks() 1389 { } 1390 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 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 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 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 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 1464 uno::Type SAL_CALL SwXBookmarks::getElementType() 1465 throw(uno::RuntimeException) 1466 { 1467 return ::getCppuType((uno::Reference<XTextContent>*)0); 1468 } 1469 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 1483 SwXNumberingRulesCollection::SwXNumberingRulesCollection( SwDoc* _pDoc ) : 1484 SwUnoCollection(_pDoc) 1485 { 1486 } 1487 1488 SwXNumberingRulesCollection::~SwXNumberingRulesCollection() 1489 { 1490 } 1491 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 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 1522 uno::Type SAL_CALL SwXNumberingRulesCollection::getElementType() throw(uno::RuntimeException) 1523 { 1524 return ::getCppuType((uno::Reference<XIndexReplace>*)0); 1525 } 1526 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 1535 OUString SwXFootnotes::getImplementationName(void) throw( RuntimeException ) 1536 { 1537 return C2U("SwXFootnotes"); 1538 } 1539 1540 sal_Bool SwXFootnotes::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1541 { 1542 return C2U("com.sun.star.text.Footnotes") == rServiceName; 1543 } 1544 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 1553 SwXFootnotes::SwXFootnotes(sal_Bool bEnd, SwDoc* _pDoc) 1554 : SwUnoCollection(_pDoc) 1555 , m_bEndnote(bEnd) 1556 { 1557 } 1558 1559 SwXFootnotes::~SwXFootnotes() 1560 { 1561 } 1562 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 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 1616 uno::Type SAL_CALL SwXFootnotes::getElementType() throw(uno::RuntimeException) 1617 { 1618 return ::getCppuType((uno::Reference<XFootnote>*)0); 1619 } 1620 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 1629 Reference<XFootnote> SwXFootnotes::GetObject( SwDoc& rDoc, const SwFmtFtn& rFmt ) 1630 { 1631 return SwXFootnote::CreateXFootnote(rDoc, rFmt); 1632 } 1633 1634 /****************************************************************** 1635 * 1636 ******************************************************************/ 1637 1638 OUString SwXReferenceMarks::getImplementationName(void) throw( RuntimeException ) 1639 { 1640 return C2U("SwXReferenceMarks"); 1641 } 1642 1643 sal_Bool SwXReferenceMarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1644 { 1645 return C2U("com.sun.star.text.ReferenceMarks") == rServiceName; 1646 } 1647 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 1656 SwXReferenceMarks::SwXReferenceMarks(SwDoc* _pDoc) : 1657 SwUnoCollection(_pDoc) 1658 { 1659 } 1660 1661 SwXReferenceMarks::~SwXReferenceMarks() 1662 { 1663 } 1664 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 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 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 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 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 1742 uno::Type SAL_CALL SwXReferenceMarks::getElementType() throw(uno::RuntimeException) 1743 { 1744 return ::getCppuType((uno::Reference<XTextContent>*)0); 1745 } 1746 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 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 1766 void SwUnoCollection::Invalidate() 1767 { 1768 bObjectValid = sal_False; 1769 pDoc = 0; 1770 } 1771 1772