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 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 ******************************************************************/ 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 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 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 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 605 SwXTextTables::SwXTextTables(SwDoc* pDc) : 606 SwUnoCollection(pDc) 607 { 608 609 } 610 611 SwXTextTables::~SwXTextTables() 612 { 613 614 } 615 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 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 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 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 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 722 SwXTextTables::getElementType( ) 723 throw(uno::RuntimeException) 724 { 725 return ::getCppuType((uno::Reference<XTextTable>*)0); 726 } 727 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 736 OUString SwXTextTables::getImplementationName(void) throw( uno::RuntimeException ) 737 { 738 return C2U("SwXTextTables"); 739 } 740 741 sal_Bool SwXTextTables::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) 742 { 743 return rServiceName == C2U("com.sun.star.text.TextTables"); 744 } 745 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 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; 776 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; 784 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; 792 static inline bool filter(const SwNode* const pNode) { return pNode->IsOLENode(); }; 793 }; 794 795 template<FlyCntType T> 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 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: 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> 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> 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> 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> 897 OUString SwXFrameEnumeration<T>::getImplementationName(void) throw( RuntimeException ) 898 { 899 return C2U("SwXFrameEnumeration"); 900 } 901 902 template<FlyCntType T> 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> 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 ******************************************************************/ 917 OUString SwXFrames::getImplementationName(void) throw( RuntimeException ) 918 { 919 return C2U("SwXFrames"); 920 } 921 922 sal_Bool SwXFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) 923 { 924 return C2U("com.sun.star.text.TextFrames") == rServiceName; 925 } 926 927 Sequence<OUString> SwXFrames::getSupportedServiceNames(void) throw( RuntimeException ) 928 { 929 return ::comphelper::makeSequence(C2U("com.sun.star.text.TextFrames")); 930 } 931 932 SwXFrames::SwXFrames(SwDoc* _pDoc, FlyCntType eSet) : 933 SwUnoCollection(_pDoc), 934 eType(eSet) 935 {} 936 937 SwXFrames::~SwXFrames() 938 {} 939 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 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 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 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 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 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 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 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 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 ******************************************************************/ 1084 OUString SwXTextFrames::getImplementationName(void) throw( RuntimeException ) 1085 { 1086 return C2U("SwXTextFrames"); 1087 } 1088 1089 sal_Bool SwXTextFrames::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1090 { 1091 return C2U("com.sun.star.text.TextFrames") == rServiceName; 1092 } 1093 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 1102 SwXTextFrames::SwXTextFrames(SwDoc* _pDoc) : 1103 SwXFrames(_pDoc, FLYCNTTYPE_FRM) 1104 { 1105 } 1106 1107 SwXTextFrames::~SwXTextFrames() 1108 { 1109 } 1110 1111 /****************************************************************** 1112 * SwXTextGraphicObjects 1113 ******************************************************************/ 1114 1115 OUString SwXTextGraphicObjects::getImplementationName(void) throw( RuntimeException ) 1116 { 1117 return C2U("SwXTextGraphicObjects"); 1118 } 1119 1120 sal_Bool SwXTextGraphicObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1121 { 1122 return C2U("com.sun.star.text.TextGraphicObjects") == rServiceName; 1123 } 1124 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 1133 SwXTextGraphicObjects::SwXTextGraphicObjects(SwDoc* _pDoc) : 1134 SwXFrames(_pDoc, FLYCNTTYPE_GRF) 1135 { 1136 } 1137 1138 SwXTextGraphicObjects::~SwXTextGraphicObjects() 1139 { 1140 } 1141 1142 /****************************************************************** 1143 * SwXTextEmbeddedObjects 1144 ******************************************************************/ 1145 OUString SwXTextEmbeddedObjects::getImplementationName(void) throw( RuntimeException ) 1146 { 1147 return C2U("SwXTextEmbeddedObjects"); 1148 } 1149 1150 sal_Bool SwXTextEmbeddedObjects::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1151 { 1152 return C2U("com.sun.star.text.TextEmbeddedObjects") == rServiceName; 1153 } 1154 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 1163 SwXTextEmbeddedObjects::SwXTextEmbeddedObjects(SwDoc* _pDoc) : 1164 SwXFrames(_pDoc, FLYCNTTYPE_OLE) 1165 { 1166 } 1167 1168 SwXTextEmbeddedObjects::~SwXTextEmbeddedObjects() 1169 { 1170 } 1171 1172 /****************************************************************** 1173 * 1174 ******************************************************************/ 1175 #define PASSWORD_STD_TIMEOUT 1000 1176 OUString SwXTextSections::getImplementationName(void) throw( RuntimeException ) 1177 { 1178 return C2U("SwXTextSections"); 1179 } 1180 1181 sal_Bool SwXTextSections::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1182 { 1183 return C2U("com.sun.star.text.TextSections") == rServiceName; 1184 } 1185 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 1194 SwXTextSections::SwXTextSections(SwDoc* _pDoc) : 1195 SwUnoCollection(_pDoc) 1196 { 1197 } 1198 1199 SwXTextSections::~SwXTextSections() 1200 { 1201 } 1202 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 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 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 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 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 1341 uno::Type SAL_CALL SwXTextSections::getElementType() throw(uno::RuntimeException) 1342 { 1343 return ::getCppuType((uno::Reference<XTextSection>*)0); 1344 } 1345 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 1360 uno::Reference< XTextSection > SwXTextSections::GetObject( SwSectionFmt& rFmt ) 1361 { 1362 return SwXTextSection::CreateXTextSection(&rFmt); 1363 } 1364 1365 OUString SwXBookmarks::getImplementationName(void) throw( RuntimeException ) 1366 { 1367 return OUString::createFromAscii("SwXBookmarks"); 1368 } 1369 1370 sal_Bool SwXBookmarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1371 { 1372 return OUString::createFromAscii("com.sun.star.text.Bookmarks") == rServiceName; 1373 } 1374 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 1382 SwXBookmarks::SwXBookmarks(SwDoc* _pDoc) : 1383 SwUnoCollection(_pDoc) 1384 { } 1385 1386 SwXBookmarks::~SwXBookmarks() 1387 { } 1388 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 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 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 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 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 1462 uno::Type SAL_CALL SwXBookmarks::getElementType() 1463 throw(uno::RuntimeException) 1464 { 1465 return ::getCppuType((uno::Reference<XTextContent>*)0); 1466 } 1467 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 1481 SwXNumberingRulesCollection::SwXNumberingRulesCollection( SwDoc* _pDoc ) : 1482 SwUnoCollection(_pDoc) 1483 { 1484 } 1485 1486 SwXNumberingRulesCollection::~SwXNumberingRulesCollection() 1487 { 1488 } 1489 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 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 1520 uno::Type SAL_CALL SwXNumberingRulesCollection::getElementType() throw(uno::RuntimeException) 1521 { 1522 return ::getCppuType((uno::Reference<XIndexReplace>*)0); 1523 } 1524 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 1533 OUString SwXFootnotes::getImplementationName(void) throw( RuntimeException ) 1534 { 1535 return C2U("SwXFootnotes"); 1536 } 1537 1538 sal_Bool SwXFootnotes::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1539 { 1540 return C2U("com.sun.star.text.Footnotes") == rServiceName; 1541 } 1542 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 1551 SwXFootnotes::SwXFootnotes(sal_Bool bEnd, SwDoc* _pDoc) 1552 : SwUnoCollection(_pDoc) 1553 , m_bEndnote(bEnd) 1554 { 1555 } 1556 1557 SwXFootnotes::~SwXFootnotes() 1558 { 1559 } 1560 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 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 1614 uno::Type SAL_CALL SwXFootnotes::getElementType() throw(uno::RuntimeException) 1615 { 1616 return ::getCppuType((uno::Reference<XFootnote>*)0); 1617 } 1618 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 1627 Reference<XFootnote> SwXFootnotes::GetObject( SwDoc& rDoc, const SwFmtFtn& rFmt ) 1628 { 1629 return SwXFootnote::CreateXFootnote(rDoc, rFmt); 1630 } 1631 1632 /****************************************************************** 1633 * 1634 ******************************************************************/ 1635 1636 OUString SwXReferenceMarks::getImplementationName(void) throw( RuntimeException ) 1637 { 1638 return C2U("SwXReferenceMarks"); 1639 } 1640 1641 sal_Bool SwXReferenceMarks::supportsService(const OUString& rServiceName) throw( RuntimeException ) 1642 { 1643 return C2U("com.sun.star.text.ReferenceMarks") == rServiceName; 1644 } 1645 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 1654 SwXReferenceMarks::SwXReferenceMarks(SwDoc* _pDoc) : 1655 SwUnoCollection(_pDoc) 1656 { 1657 } 1658 1659 SwXReferenceMarks::~SwXReferenceMarks() 1660 { 1661 } 1662 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 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 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 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 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 1740 uno::Type SAL_CALL SwXReferenceMarks::getElementType() throw(uno::RuntimeException) 1741 { 1742 return ::getCppuType((uno::Reference<XTextContent>*)0); 1743 } 1744 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 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 1764 void SwUnoCollection::Invalidate() 1765 { 1766 bObjectValid = sal_False; 1767 pDoc = 0; 1768 } 1769 1770 /* vim: set noet sw=4 ts=4: */ 1771