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_sc.hxx" 26 27 #include <tools/debug.hxx> 28 #include <svtools/unoimap.hxx> 29 #include <svx/unofill.hxx> 30 #include <editeng/unonrule.hxx> 31 #include <com/sun/star/sheet/XSpreadsheetDocument.hpp> 32 33 #include "servuno.hxx" 34 #include "unoguard.hxx" 35 #include "unonames.hxx" 36 #include "cellsuno.hxx" 37 #include "fielduno.hxx" 38 #include "styleuno.hxx" 39 #include "afmtuno.hxx" 40 #include "defltuno.hxx" 41 #include "drdefuno.hxx" 42 #include "docsh.hxx" 43 #include "drwlayer.hxx" 44 #include "confuno.hxx" 45 #include "shapeuno.hxx" 46 #include "cellvaluebinding.hxx" 47 #include "celllistsource.hxx" 48 #include "addruno.hxx" 49 #include "chart2uno.hxx" 50 #include "tokenuno.hxx" 51 52 // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver 53 #include <svx/xmleohlp.hxx> 54 #include <svx/xmlgrhlp.hxx> 55 #include <sfx2/docfile.hxx> 56 #include <sfx2/docfilt.hxx> 57 #include <com/sun/star/script/ScriptEventDescriptor.hpp> 58 #include <com/sun/star/script/vba/XVBAEventProcessor.hpp> 59 #include <com/sun/star/document/XCodeNameQuery.hpp> 60 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> 61 #include <com/sun/star/form/XFormsSupplier.hpp> 62 #include <svx/unomod.hxx> 63 #include <vbahelper/vbaaccesshelper.hxx> 64 65 #include <comphelper/processfactory.hxx> 66 #include <basic/basmgr.hxx> 67 #include <sfx2/app.hxx> 68 69 using namespace ::com::sun::star; 70 71 class ScVbaObjectForCodeNameProvider : public ::cppu::WeakImplHelper1< container::XNameAccess > 72 { 73 uno::Any maWorkbook; 74 uno::Any maCachedObject; 75 ScDocShell* mpDocShell; 76 public: 77 ScVbaObjectForCodeNameProvider( ScDocShell* pDocShell ) : mpDocShell( pDocShell ) 78 { 79 ScDocument* pDoc = mpDocShell->GetDocument(); 80 if ( !pDoc ) 81 throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("")), uno::Reference< uno::XInterface >() ); 82 83 uno::Sequence< uno::Any > aArgs(2); 84 // access the application object ( parent for workbook ) 85 aArgs[0] = uno::Any( ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.Application", uno::Sequence< uno::Any >() ) ); 86 aArgs[1] = uno::Any( mpDocShell->GetModel() ); 87 maWorkbook <<= ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.excel.Workbook", aArgs ); 88 } 89 90 virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw (::com::sun::star::uno::RuntimeException ) 91 { 92 ScUnoGuard aGuard; 93 maCachedObject = uno::Any(); // clear cached object 94 String sName = aName; 95 96 ScDocument* pDoc = mpDocShell->GetDocument(); 97 if ( !pDoc ) 98 throw uno::RuntimeException(); 99 if ( sName == pDoc->GetCodeName() ) 100 maCachedObject = maWorkbook; 101 else 102 { 103 String sCodeName; 104 SCTAB nCount = pDoc->GetTableCount(); 105 for( SCTAB i = 0; i < nCount; i++ ) 106 { 107 pDoc->GetCodeName( i, sCodeName ); 108 if( sCodeName == sName ) 109 { 110 String sSheetName; 111 if( pDoc->GetName( i, sSheetName ) ) 112 { 113 uno::Reference< frame::XModel > xModel( mpDocShell->GetModel() ); 114 uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( xModel, uno::UNO_QUERY_THROW ); 115 uno::Reference<sheet::XSpreadsheets > xSheets( xSpreadDoc->getSheets(), uno::UNO_QUERY_THROW ); 116 uno::Reference< container::XIndexAccess > xIndexAccess( xSheets, uno::UNO_QUERY_THROW ); 117 uno::Reference< sheet::XSpreadsheet > xSheet( xIndexAccess->getByIndex( i ), uno::UNO_QUERY_THROW ); 118 uno::Sequence< uno::Any > aArgs(3); 119 aArgs[0] = maWorkbook; 120 aArgs[1] = uno::Any( xModel ); 121 aArgs[2] = uno::Any( rtl::OUString( sSheetName ) ); 122 // use the convience function 123 maCachedObject <<= ooo::vba::createVBAUnoAPIServiceWithArgs( mpDocShell, "ooo.vba.excel.Worksheet", aArgs ); 124 break; 125 } 126 } 127 } 128 } 129 return maCachedObject.hasValue(); 130 131 } 132 ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) 133 { 134 ScUnoGuard aGuard; 135 OSL_TRACE("ScVbaObjectForCodeNameProvider::getByName( %s )", 136 rtl::OUStringToOString( aName, RTL_TEXTENCODING_UTF8 ).getStr() ); 137 if ( !hasByName( aName ) ) 138 throw ::com::sun::star::container::NoSuchElementException(); 139 return maCachedObject; 140 } 141 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException) 142 { 143 ScUnoGuard aGuard; 144 ScDocument* pDoc = mpDocShell->GetDocument(); 145 if ( !pDoc ) 146 throw uno::RuntimeException(); 147 SCTAB nCount = pDoc->GetTableCount(); 148 uno::Sequence< rtl::OUString > aNames( nCount + 1 ); 149 SCTAB index = 0; 150 String sCodeName; 151 for( ; index < nCount; ++index ) 152 { 153 pDoc->GetCodeName( index, sCodeName ); 154 aNames[ index ] = sCodeName; 155 } 156 aNames[ index ] = pDoc->GetCodeName(); 157 return aNames; 158 } 159 // XElemenAccess 160 virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException){ return uno::Type(); } 161 virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException ) { return sal_True; } 162 163 }; 164 165 class ScVbaCodeNameProvider : public ::cppu::WeakImplHelper1< document::XCodeNameQuery > 166 { 167 ScDocShell* mpDocShell; 168 public: 169 ScVbaCodeNameProvider( ScDocShell* pDocShell ) : mpDocShell( pDocShell ) {} 170 // XCodeNameQuery 171 rtl::OUString SAL_CALL getCodeNameForObject( const uno::Reference< uno::XInterface >& xIf ) throw( uno::RuntimeException ) 172 { 173 ScUnoGuard aGuard; 174 rtl::OUString sCodeName; 175 if ( mpDocShell ) 176 { 177 OSL_TRACE( "*** In ScVbaCodeNameProvider::getCodeNameForObject"); 178 // need to find the page ( and index ) for this control 179 uno::Reference< drawing::XDrawPagesSupplier > xSupplier( mpDocShell->GetModel(), uno::UNO_QUERY_THROW ); 180 uno::Reference< container::XIndexAccess > xIndex( xSupplier->getDrawPages(), uno::UNO_QUERY_THROW ); 181 sal_Int32 nLen = xIndex->getCount(); 182 bool bMatched = false; 183 uno::Sequence< script::ScriptEventDescriptor > aFakeEvents; 184 for ( sal_Int32 index = 0; index < nLen; ++index ) 185 { 186 try 187 { 188 uno::Reference< form::XFormsSupplier > xFormSupplier( xIndex->getByIndex( index ), uno::UNO_QUERY_THROW ); 189 uno::Reference< container::XIndexAccess > xFormIndex( xFormSupplier->getForms(), uno::UNO_QUERY_THROW ); 190 // get the www-standard container 191 uno::Reference< container::XIndexAccess > xFormControls( xFormIndex->getByIndex(0), uno::UNO_QUERY_THROW ); 192 sal_Int32 nCntrls = xFormControls->getCount(); 193 for( sal_Int32 cIndex = 0; cIndex < nCntrls; ++cIndex ) 194 { 195 uno::Reference< uno::XInterface > xControl( xFormControls->getByIndex( cIndex ), uno::UNO_QUERY_THROW ); 196 bMatched = ( xControl == xIf ); 197 if ( bMatched ) 198 { 199 String sName; 200 mpDocShell->GetDocument()->GetCodeName( static_cast<SCTAB>( index ), sName ); 201 sCodeName = sName; 202 } 203 } 204 } 205 catch( uno::Exception& ) {} 206 if ( bMatched ) 207 break; 208 } 209 } 210 // Probably should throw here ( if !bMatched ) 211 return sCodeName; 212 } 213 214 }; 215 216 //------------------------------------------------------------------------ 217 // 218 struct ProvNamesId_Type 219 { 220 const char * pName; 221 sal_uInt16 nType; 222 }; 223 224 static const ProvNamesId_Type __FAR_DATA aProvNamesId[] = 225 { 226 { "com.sun.star.sheet.Spreadsheet", SC_SERVICE_SHEET }, 227 { "com.sun.star.text.TextField.URL", SC_SERVICE_URLFIELD }, 228 { "com.sun.star.text.TextField.PageNumber", SC_SERVICE_PAGEFIELD }, 229 { "com.sun.star.text.TextField.PageCount", SC_SERVICE_PAGESFIELD }, 230 { "com.sun.star.text.TextField.Date", SC_SERVICE_DATEFIELD }, 231 { "com.sun.star.text.TextField.Time", SC_SERVICE_TIMEFIELD }, 232 { "com.sun.star.text.TextField.DocumentTitle", SC_SERVICE_TITLEFIELD }, 233 { "com.sun.star.text.TextField.FileName", SC_SERVICE_FILEFIELD }, 234 { "com.sun.star.text.TextField.SheetName", SC_SERVICE_SHEETFIELD }, 235 { "com.sun.star.style.CellStyle", SC_SERVICE_CELLSTYLE }, 236 { "com.sun.star.style.PageStyle", SC_SERVICE_PAGESTYLE }, 237 { "com.sun.star.sheet.TableAutoFormat", SC_SERVICE_AUTOFORMAT }, 238 { "com.sun.star.sheet.SheetCellRanges", SC_SERVICE_CELLRANGES }, 239 { "com.sun.star.drawing.GradientTable", SC_SERVICE_GRADTAB }, 240 { "com.sun.star.drawing.HatchTable", SC_SERVICE_HATCHTAB }, 241 { "com.sun.star.drawing.BitmapTable", SC_SERVICE_BITMAPTAB }, 242 { "com.sun.star.drawing.TransparencyGradientTable", SC_SERVICE_TRGRADTAB }, 243 { "com.sun.star.drawing.MarkerTable", SC_SERVICE_MARKERTAB }, 244 { "com.sun.star.drawing.DashTable", SC_SERVICE_DASHTAB }, 245 { "com.sun.star.text.NumberingRules", SC_SERVICE_NUMRULES }, 246 { "com.sun.star.sheet.Defaults", SC_SERVICE_DOCDEFLTS }, 247 { "com.sun.star.drawing.Defaults", SC_SERVICE_DRAWDEFLTS }, 248 { "com.sun.star.comp.SpreadsheetSettings", SC_SERVICE_DOCSPRSETT }, 249 { "com.sun.star.document.Settings", SC_SERVICE_DOCCONF }, 250 { "com.sun.star.image.ImageMapRectangleObject", SC_SERVICE_IMAP_RECT }, 251 { "com.sun.star.image.ImageMapCircleObject", SC_SERVICE_IMAP_CIRC }, 252 { "com.sun.star.image.ImageMapPolygonObject", SC_SERVICE_IMAP_POLY }, 253 254 // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver 255 { "com.sun.star.document.ExportGraphicObjectResolver", SC_SERVICE_EXPORT_GOR }, 256 { "com.sun.star.document.ImportGraphicObjectResolver", SC_SERVICE_IMPORT_GOR }, 257 { "com.sun.star.document.ExportEmbeddedObjectResolver", SC_SERVICE_EXPORT_EOR }, 258 { "com.sun.star.document.ImportEmbeddedObjectResolver", SC_SERVICE_IMPORT_EOR }, 259 260 { SC_SERVICENAME_VALBIND, SC_SERVICE_VALBIND }, 261 { SC_SERVICENAME_LISTCELLBIND, SC_SERVICE_LISTCELLBIND }, 262 { SC_SERVICENAME_LISTSOURCE, SC_SERVICE_LISTSOURCE }, 263 { SC_SERVICENAME_CELLADDRESS, SC_SERVICE_CELLADDRESS }, 264 { SC_SERVICENAME_RANGEADDRESS, SC_SERVICE_RANGEADDRESS }, 265 266 { "com.sun.star.sheet.DocumentSettings",SC_SERVICE_SHEETDOCSET }, 267 268 { SC_SERVICENAME_CHDATAPROV, SC_SERVICE_CHDATAPROV }, 269 { SC_SERVICENAME_FORMULAPARS, SC_SERVICE_FORMULAPARS }, 270 { SC_SERVICENAME_OPCODEMAPPER, SC_SERVICE_OPCODEMAPPER }, 271 { "ooo.vba.VBAObjectModuleObjectProvider", SC_SERVICE_VBAOBJECTPROVIDER }, 272 { "ooo.vba.VBACodeNameProvider", SC_SERVICE_VBACODENAMEPROVIDER }, 273 { "ooo.vba.VBAGlobals", SC_SERVICE_VBAGLOBALS }, 274 275 // case-correct versions of the service names (#i102468#) 276 { "com.sun.star.text.textfield.URL", SC_SERVICE_URLFIELD }, 277 { "com.sun.star.text.textfield.PageNumber", SC_SERVICE_PAGEFIELD }, 278 { "com.sun.star.text.textfield.PageCount", SC_SERVICE_PAGESFIELD }, 279 { "com.sun.star.text.textfield.Date", SC_SERVICE_DATEFIELD }, 280 { "com.sun.star.text.textfield.Time", SC_SERVICE_TIMEFIELD }, 281 { "com.sun.star.text.textfield.DocumentTitle", SC_SERVICE_TITLEFIELD }, 282 { "com.sun.star.text.textfield.FileName", SC_SERVICE_FILEFIELD }, 283 { "com.sun.star.text.textfield.SheetName", SC_SERVICE_SHEETFIELD } 284 }; 285 286 // 287 // old service names that were in 567 still work in createInstance, 288 // in case some macro is still using them 289 // 290 291 static const sal_Char* __FAR_DATA aOldNames[SC_SERVICE_COUNT] = 292 { 293 "", // SC_SERVICE_SHEET 294 "stardiv.one.text.TextField.URL", // SC_SERVICE_URLFIELD 295 "stardiv.one.text.TextField.PageNumber", // SC_SERVICE_PAGEFIELD 296 "stardiv.one.text.TextField.PageCount", // SC_SERVICE_PAGESFIELD 297 "stardiv.one.text.TextField.Date", // SC_SERVICE_DATEFIELD 298 "stardiv.one.text.TextField.Time", // SC_SERVICE_TIMEFIELD 299 "stardiv.one.text.TextField.DocumentTitle", // SC_SERVICE_TITLEFIELD 300 "stardiv.one.text.TextField.FileName", // SC_SERVICE_FILEFIELD 301 "stardiv.one.text.TextField.SheetName", // SC_SERVICE_SHEETFIELD 302 "stardiv.one.style.CellStyle", // SC_SERVICE_CELLSTYLE 303 "stardiv.one.style.PageStyle", // SC_SERVICE_PAGESTYLE 304 "", // SC_SERVICE_AUTOFORMAT 305 "", // SC_SERVICE_CELLRANGES 306 "", // SC_SERVICE_GRADTAB 307 "", // SC_SERVICE_HATCHTAB 308 "", // SC_SERVICE_BITMAPTAB 309 "", // SC_SERVICE_TRGRADTAB 310 "", // SC_SERVICE_MARKERTAB 311 "", // SC_SERVICE_DASHTAB 312 "", // SC_SERVICE_NUMRULES 313 "", // SC_SERVICE_DOCDEFLTS 314 "", // SC_SERVICE_DRAWDEFLTS 315 "", // SC_SERVICE_DOCSPRSETT 316 "", // SC_SERVICE_DOCCONF 317 "", // SC_SERVICE_IMAP_RECT 318 "", // SC_SERVICE_IMAP_CIRC 319 "", // SC_SERVICE_IMAP_POLY 320 321 // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver 322 "", // SC_SERVICE_EXPORT_GOR 323 "", // SC_SERVICE_IMPORT_GOR 324 "", // SC_SERVICE_EXPORT_EOR 325 "", // SC_SERVICE_IMPORT_EOR 326 327 "", // SC_SERVICE_VALBIND 328 "", // SC_SERVICE_LISTCELLBIND 329 "", // SC_SERVICE_LISTSOURCE 330 "", // SC_SERVICE_CELLADDRESS 331 "", // SC_SERVICE_RANGEADDRESS 332 "", // SC_SERVICE_SHEETDOCSET 333 "", // SC_SERVICE_CHDATAPROV 334 "", // SC_SERVICE_FORMULAPARS 335 "", // SC_SERVICE_OPCODEMAPPER 336 "", // SC_SERVICE_VBAOBJECTPROVIDER 337 "", // SC_SERVICE_VBACODENAMEPROVIDER 338 "", // SC_SERVICE_VBAGLOBALS 339 }; 340 341 342 343 344 //------------------------------------------------------------------------ 345 346 // alles static 347 348 //UNUSED2008-05 String ScServiceProvider::GetProviderName(sal_uInt16 nObjectType) 349 //UNUSED2008-05 { 350 //UNUSED2008-05 String sRet; 351 //UNUSED2008-05 if (nObjectType < SC_SERVICE_COUNT) 352 //UNUSED2008-05 sRet = String::CreateFromAscii( aProvNames[nObjectType] ); 353 //UNUSED2008-05 return sRet; 354 //UNUSED2008-05 } 355 356 sal_uInt16 ScServiceProvider::GetProviderType(const String& rServiceName) 357 { 358 if (rServiceName.Len()) 359 { 360 const sal_uInt16 nEntries = 361 sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); 362 for (sal_uInt16 i = 0; i < nEntries; i++) 363 { 364 if (rServiceName.EqualsAscii( aProvNamesId[i].pName )) 365 { 366 return aProvNamesId[i].nType; 367 } 368 } 369 370 sal_uInt16 i; 371 for (i=0; i<SC_SERVICE_COUNT; i++) 372 { 373 DBG_ASSERT( aOldNames[i], "ScServiceProvider::GetProviderType: no oldname => crash"); 374 if (rServiceName.EqualsAscii( aOldNames[i] )) 375 { 376 DBG_ERROR("old service name used"); 377 return i; 378 } 379 } 380 } 381 return SC_SERVICE_INVALID; 382 } 383 384 uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance( 385 sal_uInt16 nType, ScDocShell* pDocShell ) 386 { 387 uno::Reference<uno::XInterface> xRet; 388 switch (nType) 389 { 390 case SC_SERVICE_SHEET: 391 // noch nicht eingefuegt - DocShell=Null 392 xRet.set((sheet::XSpreadsheet*)new ScTableSheetObj(NULL,0)); 393 break; 394 case SC_SERVICE_URLFIELD: 395 xRet.set((text::XTextField*)new ScCellFieldObj( NULL, ScAddress(), ESelection() )); 396 break; 397 case SC_SERVICE_PAGEFIELD: 398 case SC_SERVICE_PAGESFIELD: 399 case SC_SERVICE_DATEFIELD: 400 case SC_SERVICE_TIMEFIELD: 401 case SC_SERVICE_TITLEFIELD: 402 case SC_SERVICE_FILEFIELD: 403 case SC_SERVICE_SHEETFIELD: 404 xRet.set((text::XTextField*)new ScHeaderFieldObj( NULL, 0, nType, ESelection() )); 405 break; 406 case SC_SERVICE_CELLSTYLE: 407 xRet.set((style::XStyle*)new ScStyleObj( NULL, SFX_STYLE_FAMILY_PARA, String() )); 408 break; 409 case SC_SERVICE_PAGESTYLE: 410 xRet.set((style::XStyle*)new ScStyleObj( NULL, SFX_STYLE_FAMILY_PAGE, String() )); 411 break; 412 case SC_SERVICE_AUTOFORMAT: 413 xRet.set((container::XIndexAccess*)new ScAutoFormatObj( SC_AFMTOBJ_INVALID )); 414 break; 415 case SC_SERVICE_CELLRANGES: 416 // wird nicht eingefuegt, sondern gefuellt 417 // -> DocShell muss gesetzt sein, aber leere Ranges 418 if (pDocShell) 419 xRet.set((sheet::XSheetCellRanges*)new ScCellRangesObj( pDocShell, ScRangeList() )); 420 break; 421 422 case SC_SERVICE_DOCDEFLTS: 423 if (pDocShell) 424 xRet.set((beans::XPropertySet*)new ScDocDefaultsObj( pDocShell )); 425 break; 426 case SC_SERVICE_DRAWDEFLTS: 427 if (pDocShell) 428 xRet.set((beans::XPropertySet*)new ScDrawDefaultsObj( pDocShell )); 429 break; 430 431 // Drawing layer tables are not in SvxUnoDrawMSFactory, 432 // because SvxUnoDrawMSFactory doesn't have a SdrModel pointer. 433 // Drawing layer is always allocated if not there (MakeDrawLayer). 434 435 case SC_SERVICE_GRADTAB: 436 if (pDocShell) 437 xRet.set(SvxUnoGradientTable_createInstance( pDocShell->MakeDrawLayer() )); 438 break; 439 case SC_SERVICE_HATCHTAB: 440 if (pDocShell) 441 xRet.set(SvxUnoHatchTable_createInstance( pDocShell->MakeDrawLayer() )); 442 break; 443 case SC_SERVICE_BITMAPTAB: 444 if (pDocShell) 445 xRet.set(SvxUnoBitmapTable_createInstance( pDocShell->MakeDrawLayer() )); 446 break; 447 case SC_SERVICE_TRGRADTAB: 448 if (pDocShell) 449 xRet.set(SvxUnoTransGradientTable_createInstance( pDocShell->MakeDrawLayer() )); 450 break; 451 case SC_SERVICE_MARKERTAB: 452 if (pDocShell) 453 xRet.set(SvxUnoMarkerTable_createInstance( pDocShell->MakeDrawLayer() )); 454 break; 455 case SC_SERVICE_DASHTAB: 456 if (pDocShell) 457 xRet.set(SvxUnoDashTable_createInstance( pDocShell->MakeDrawLayer() )); 458 break; 459 case SC_SERVICE_NUMRULES: 460 if (pDocShell) 461 xRet.set(SvxCreateNumRule( pDocShell->MakeDrawLayer() )); 462 break; 463 case SC_SERVICE_DOCSPRSETT: 464 case SC_SERVICE_SHEETDOCSET: 465 case SC_SERVICE_DOCCONF: 466 if (pDocShell) 467 xRet.set((beans::XPropertySet*)new ScDocumentConfiguration(pDocShell)); 468 break; 469 470 case SC_SERVICE_IMAP_RECT: 471 xRet.set(SvUnoImageMapRectangleObject_createInstance( ScShapeObj::GetSupportedMacroItems() )); 472 break; 473 case SC_SERVICE_IMAP_CIRC: 474 xRet.set(SvUnoImageMapCircleObject_createInstance( ScShapeObj::GetSupportedMacroItems() )); 475 break; 476 case SC_SERVICE_IMAP_POLY: 477 xRet.set(SvUnoImageMapPolygonObject_createInstance( ScShapeObj::GetSupportedMacroItems() )); 478 break; 479 480 // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver 481 case SC_SERVICE_EXPORT_GOR: 482 xRet.set((::cppu::OWeakObject * )new SvXMLGraphicHelper( GRAPHICHELPER_MODE_WRITE )); 483 break; 484 485 case SC_SERVICE_IMPORT_GOR: 486 xRet.set((::cppu::OWeakObject * )new SvXMLGraphicHelper( GRAPHICHELPER_MODE_READ )); 487 break; 488 489 case SC_SERVICE_EXPORT_EOR: 490 if (pDocShell) 491 xRet.set((::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_WRITE )); 492 break; 493 494 case SC_SERVICE_IMPORT_EOR: 495 if (pDocShell) 496 xRet.set((::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_READ )); 497 break; 498 499 case SC_SERVICE_VALBIND: 500 case SC_SERVICE_LISTCELLBIND: 501 if (pDocShell) 502 { 503 sal_Bool bListPos = ( nType == SC_SERVICE_LISTCELLBIND ); 504 uno::Reference<sheet::XSpreadsheetDocument> xDoc( pDocShell->GetBaseModel(), uno::UNO_QUERY ); 505 xRet.set(*new calc::OCellValueBinding( xDoc, bListPos )); 506 } 507 break; 508 case SC_SERVICE_LISTSOURCE: 509 if (pDocShell) 510 { 511 uno::Reference<sheet::XSpreadsheetDocument> xDoc( pDocShell->GetBaseModel(), uno::UNO_QUERY ); 512 xRet.set(*new calc::OCellListSource( xDoc )); 513 } 514 break; 515 case SC_SERVICE_CELLADDRESS: 516 case SC_SERVICE_RANGEADDRESS: 517 if (pDocShell) 518 { 519 sal_Bool bRange = ( nType == SC_SERVICE_RANGEADDRESS ); 520 xRet.set(*new ScAddressConversionObj( pDocShell, bRange )); 521 } 522 break; 523 524 case SC_SERVICE_CHDATAPROV: 525 if (pDocShell && pDocShell->GetDocument()) 526 xRet = *new ScChart2DataProvider( pDocShell->GetDocument() ); 527 break; 528 529 case SC_SERVICE_FORMULAPARS: 530 if (pDocShell) 531 xRet.set(static_cast<sheet::XFormulaParser*>(new ScFormulaParserObj( pDocShell ))); 532 break; 533 534 case SC_SERVICE_OPCODEMAPPER: 535 if (pDocShell) 536 { 537 ScDocument* pDoc = pDocShell->GetDocument(); 538 ScAddress aAddress; 539 ScCompiler* pComp = new ScCompiler(pDoc,aAddress); 540 pComp->SetGrammar( pDoc->GetGrammar() ); 541 xRet.set(static_cast<sheet::XFormulaOpCodeMapper*>(new ScFormulaOpCodeMapperObj(::std::auto_ptr<formula::FormulaCompiler> (pComp)))); 542 break; 543 } 544 case SC_SERVICE_VBAOBJECTPROVIDER: 545 if (pDocShell && pDocShell->GetDocument()->IsInVBAMode()) 546 { 547 OSL_TRACE("**** creating VBA Object mapper"); 548 xRet.set(static_cast<container::XNameAccess*>(new ScVbaObjectForCodeNameProvider( pDocShell ))); 549 } 550 break; 551 case SC_SERVICE_VBACODENAMEPROVIDER: 552 if (pDocShell && pDocShell->GetDocument()->IsInVBAMode()) 553 { 554 OSL_TRACE("**** creating VBA Object provider"); 555 xRet.set(static_cast<document::XCodeNameQuery*>(new ScVbaCodeNameProvider( pDocShell ))); 556 } 557 break; 558 case SC_SERVICE_VBAGLOBALS: 559 if (pDocShell) 560 { 561 uno::Any aGlobs; 562 if ( !pDocShell->GetBasicManager()->GetGlobalUNOConstant( "VBAGlobals", aGlobs ) ) 563 { 564 uno::Sequence< uno::Any > aArgs(1); 565 aArgs[ 0 ] <<= pDocShell->GetModel(); 566 xRet = ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.excel.Globals" ) ), aArgs ); 567 pDocShell->GetBasicManager()->SetGlobalUNOConstant( "VBAGlobals", uno::Any( xRet ) ); 568 BasicManager* pAppMgr = SFX_APP()->GetBasicManager(); 569 if ( pAppMgr ) 570 pAppMgr->SetGlobalUNOConstant( "ThisExcelDoc", aArgs[ 0 ] ); 571 572 // create the VBA document event processor 573 uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( 574 ::ooo::vba::createVBAUnoAPIServiceWithArgs( pDocShell, "com.sun.star.script.vba.VBASpreadsheetEventProcessor", aArgs ), uno::UNO_QUERY ); 575 pDocShell->GetDocument()->SetVbaEventProcessor( xVbaEvents ); 576 } 577 } 578 break; 579 } 580 581 return xRet; 582 } 583 584 uno::Sequence<rtl::OUString> ScServiceProvider::GetAllServiceNames() 585 { 586 const sal_uInt16 nEntries = sizeof(aProvNamesId) / sizeof(aProvNamesId[0]); 587 uno::Sequence<rtl::OUString> aRet(nEntries); 588 rtl::OUString* pArray = aRet.getArray(); 589 for (sal_uInt16 i = 0; i < nEntries; i++) 590 { 591 pArray[i] = rtl::OUString::createFromAscii( aProvNamesId[i].pName ); 592 } 593 return aRet; 594 } 595 596 597 598 599