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_sfx2.hxx" 26 #include <com/sun/star/uno/Reference.hxx> 27 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 28 #include <com/sun/star/lang/IllegalArgumentException.hpp> 29 #include <com/sun/star/frame/DispatchResultEvent.hpp> 30 #include <com/sun/star/frame/DispatchResultState.hpp> 31 #include <com/sun/star/task/XJobExecutor.hpp> 32 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> 33 #include <com/sun/star/frame/XDesktop.hpp> 34 #include <com/sun/star/frame/XDispatchHelper.hpp> 35 #include <com/sun/star/frame/XFramesSupplier.hpp> 36 #include <com/sun/star/util/XCloseable.hpp> 37 #include <com/sun/star/util/CloseVetoException.hpp> 38 #include <com/sun/star/frame/XLayoutManager.hpp> 39 #include <com/sun/star/document/XEmbeddedScripts.hpp> 40 #include <com/sun/star/embed/XStorage.hpp> 41 #include <com/sun/star/embed/ElementModes.hpp> 42 #include <com/sun/star/system/SystemShellExecute.hpp> 43 #include <com/sun/star/system/SystemShellExecuteFlags.hpp> 44 #include <com/sun/star/system/SystemShellExecuteException.hpp> 45 46 #include <comphelper/processfactory.hxx> 47 #include <comphelper/storagehelper.hxx> 48 #include "comphelper/configurationhelper.hxx" 49 50 #include <svtools/addresstemplate.hxx> 51 #include <svl/visitem.hxx> 52 #include <unotools/intlwrapper.hxx> 53 54 #include <unotools/configmgr.hxx> 55 #include <tools/config.hxx> 56 #include <tools/diagnose_ex.h> 57 #include <vcl/msgbox.hxx> 58 #include <svl/intitem.hxx> 59 #include <svl/eitem.hxx> 60 #include <svl/stritem.hxx> 61 #include <basic/sbstar.hxx> 62 #include <basic/basmgr.hxx> 63 #include <basic/basrdll.hxx> 64 #include <svtools/sfxecode.hxx> 65 #include <svtools/ehdl.hxx> 66 #include <vcl/help.hxx> 67 #include <vcl/stdtext.hxx> 68 #include <rtl/ustrbuf.hxx> 69 70 #include <unotools/pathoptions.hxx> 71 #include <unotools/moduleoptions.hxx> 72 #include <svtools/helpopt.hxx> 73 #include <toolkit/helper/vclunohelper.hxx> 74 #include <tools/shl.hxx> 75 #include <unotools/bootstrap.hxx> 76 #include <vos/process.hxx> 77 #include <rtl/bootstrap.hxx> 78 #include <cppuhelper/exc_hlp.hxx> 79 #include <rtl/ustrbuf.hxx> 80 81 #include <com/sun/star/script/provider/XScriptProviderFactory.hpp> 82 #include <com/sun/star/frame/XModuleManager.hpp> 83 #include <com/sun/star/beans/XPropertySet.hpp> 84 85 #include "frmload.hxx" 86 #include "referers.hxx" 87 #include <sfx2/app.hxx> 88 #include <sfx2/request.hxx> 89 #include <sfx2/dispatch.hxx> 90 #include <sfx2/bindings.hxx> 91 #include <sfx2/msg.hxx> 92 #include <sfx2/objface.hxx> 93 #include <sfx2/objitem.hxx> 94 #include <sfx2/objsh.hxx> 95 #include <sfx2/hintpost.hxx> 96 #include <sfx2/viewsh.hxx> 97 #include <sfx2/docfac.hxx> 98 #include <sfx2/docfile.hxx> 99 #include <sfx2/docfilt.hxx> 100 #include "docvor.hxx" 101 #include <sfx2/new.hxx> 102 #include <sfx2/templdlg.hxx> 103 #include "sfxtypes.hxx" 104 #include <sfx2/tabdlg.hxx> 105 #include "arrdecl.hxx" 106 #include "fltfnc.hxx" 107 #include <sfx2/sfx.hrc> 108 #include "app.hrc" 109 #include <sfx2/passwd.hxx> 110 #include "sfx2/sfxresid.hxx" 111 #include "arrdecl.hxx" 112 #include <sfx2/childwin.hxx> 113 #include "appdata.hxx" 114 #include "sfx2/minfitem.hxx" 115 #include <sfx2/event.hxx> 116 #include <sfx2/module.hxx> 117 #include <sfx2/viewfrm.hxx> 118 #include "sfxpicklist.hxx" 119 #include "imestatuswindow.hxx" 120 #include <sfx2/sfxdlg.hxx> 121 #include <sfx2/dialogs.hrc> 122 #include "sorgitm.hxx" 123 #include "sfx2/sfxhelp.hxx" 124 #include <tools/svlibrary.hxx> 125 126 using namespace ::com::sun::star; 127 using namespace ::com::sun::star::beans; 128 using namespace ::com::sun::star::uno; 129 using namespace ::com::sun::star::frame; 130 using namespace ::com::sun::star::container; 131 using namespace ::com::sun::star::util; 132 using namespace ::com::sun::star::script; 133 using namespace ::com::sun::star::system; 134 using namespace ::com::sun::star::lang; 135 using namespace ::com::sun::star::document; 136 137 namespace css = com::sun::star; 138 139 //------------------------------------------------------------------------- 140 long QuitAgain_Impl( void* pObj, void* pArg ) 141 { 142 SfxApplication* pApp = (SfxApplication*)pObj; 143 Timer* pTimer = (Timer*)pArg; 144 delete pTimer; 145 pApp->GetDispatcher_Impl()->Execute( SID_QUITAPP, SFX_CALLMODE_ASYNCHRON ); 146 return 0; 147 } 148 149 void SfxApplication::MiscExec_Impl( SfxRequest& rReq ) 150 { 151 DBG_MEMTEST(); 152 bool bDone = sal_False; 153 switch ( rReq.GetSlot() ) 154 { 155 case SID_SETOPTIONS: 156 { 157 if( rReq.GetArgs() ) 158 SetOptions_Impl( *rReq.GetArgs() ); 159 break; 160 } 161 162 case SID_QUITAPP: 163 case SID_EXITANDRETURN: 164 case SID_LOGOUT: 165 { 166 // protect against reentrant calls 167 if ( pAppData_Impl->bInQuit ) 168 return; 169 170 if ( rReq.GetSlot() == SID_LOGOUT ) 171 { 172 for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst(); 173 pObjSh; pObjSh = SfxObjectShell::GetNext( *pObjSh ) ) 174 { 175 if ( !pObjSh->IsModified() ) 176 continue; 177 178 SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pObjSh ); 179 if ( !pFrame || !pFrame->GetWindow().IsReallyVisible() ) 180 continue; 181 182 if ( pObjSh->PrepareClose(2) ) 183 pObjSh->SetModified( sal_False ); 184 else 185 return; 186 } 187 188 String aName = String::CreateFromAscii("vnd.sun.star.cmd:logout"); 189 SfxStringItem aNameItem( SID_FILE_NAME, aName ); 190 SfxStringItem aReferer( SID_REFERER, DEFINE_CONST_UNICODE( "private/user" ) ); 191 pAppData_Impl->pAppDispat->Execute( SID_OPENDOC, SFX_CALLMODE_SLOT, &aNameItem, &aReferer, 0L ); 192 return; 193 } 194 195 // aus verschachtelten Requests nach 100ms nochmal probieren 196 if( Application::GetDispatchLevel() > 1 ) 197 { 198 /* Dont save the request for closing the application and try it later 199 again. This is an UI bound functionality ... and the user will try it again 200 if the dialog is closed. But we shouldnt close the application automaticly 201 if this dialog is closed by the user ... 202 So we ignore this request now and wait for a new user decision. 203 */ 204 DBG_TRACE1( "QueryExit => FALSE (DispatchLevel == %u)", Application::GetDispatchLevel() ); 205 return; 206 } 207 208 // block reentrant calls 209 pAppData_Impl->bInQuit = sal_True; 210 Reference < XDesktop > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY ); 211 212 rReq.ForgetAllArgs(); 213 214 // if terminate() failed, pAppData_Impl->bInQuit will now be sal_False, allowing further calls of SID_QUITAPP 215 sal_Bool bTerminated = xDesktop->terminate(); 216 if (!bTerminated) 217 // if terminate() was successful, SfxApplication is now dead! 218 pAppData_Impl->bInQuit = sal_False; 219 220 // Returnwert setzten, ggf. terminieren 221 rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bTerminated ) ); 222 return; 223 } 224 225 case SID_CONFIG: 226 case SID_TOOLBOXOPTIONS: 227 case SID_CONFIGSTATUSBAR: 228 case SID_CONFIGMENU: 229 case SID_CONFIGACCEL: 230 case SID_CONFIGEVENT: 231 { 232 SfxAbstractDialogFactory* pFact = 233 SfxAbstractDialogFactory::Create(); 234 235 if ( pFact ) 236 { 237 SFX_REQUEST_ARG(rReq, pStringItem, 238 SfxStringItem, SID_CONFIG, sal_False); 239 240 SfxItemSet aSet( 241 GetPool(), SID_CONFIG, SID_CONFIG ); 242 243 if ( pStringItem ) 244 { 245 aSet.Put( SfxStringItem( 246 SID_CONFIG, pStringItem->GetValue() ) ); 247 } 248 249 Reference< XFrame > xFrame; 250 const SfxItemSet* pIntSet = rReq.GetInternalArgs_Impl(); 251 SFX_ITEMSET_ARG( pIntSet, pFrameItem, SfxUnoFrameItem, SID_FILLFRAME, sal_False ); 252 if ( pFrameItem ) 253 xFrame = pFrameItem->GetFrame(); 254 255 SfxAbstractTabDialog* pDlg = pFact->CreateTabDialog( 256 RID_SVXDLG_CUSTOMIZE, 257 NULL, &aSet, xFrame ); 258 259 if ( pDlg ) 260 { 261 const short nRet = pDlg->Execute(); 262 263 if ( nRet ) 264 bDone = sal_True; 265 266 delete pDlg; 267 } 268 } 269 break; 270 } 271 272 case SID_CLOSEDOCS: 273 case SID_CLOSEWINS: 274 { 275 276 Reference < XFramesSupplier > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY ); 277 Reference< XIndexAccess > xTasks( xDesktop->getFrames(), UNO_QUERY ); 278 if ( !xTasks.is() ) 279 break; 280 281 sal_Int32 n=0; 282 do 283 { 284 if ( xTasks->getCount() <= n ) 285 break; 286 287 Any aAny = xTasks->getByIndex(n); 288 Reference < XCloseable > xTask; 289 aAny >>= xTask; 290 try 291 { 292 xTask->close(sal_True); 293 n++; 294 } 295 catch( CloseVetoException& ) 296 { 297 } 298 } 299 while( sal_True ); 300 301 sal_Bool bOk = ( n == 0); 302 rReq.SetReturnValue( SfxBoolItem( 0, bOk ) ); 303 bDone = sal_True; 304 break; 305 } 306 307 case SID_SAVEDOCS: 308 { 309 sal_Bool bOK = sal_True; 310 sal_Bool bTmpDone = sal_True; 311 for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst(); 312 pObjSh; 313 pObjSh = SfxObjectShell::GetNext( *pObjSh ) ) 314 { 315 SfxRequest aReq( SID_SAVEDOC, 0, pObjSh->GetPool() ); 316 if ( pObjSh->IsModified() ) 317 { 318 pObjSh->ExecuteSlot( aReq ); 319 SfxBoolItem *pItem = PTR_CAST( SfxBoolItem, aReq.GetReturnValue() ); 320 bTmpDone = aReq.IsDone(); 321 if ( !pItem || !pItem->GetValue() ) 322 bOK = sal_False; 323 } 324 } 325 326 rReq.SetReturnValue( SfxBoolItem( 0, bOK ) ); 327 rReq.Done(); 328 break; 329 } 330 331 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 332 case SID_HELPINDEX: 333 case SID_HELP_SUPPORTPAGE: 334 { 335 Help* pHelp = Application::GetHelp(); 336 if ( pHelp ) 337 { 338 if ( rReq.GetSlot() == SID_HELP_SUPPORTPAGE ) 339 { 340 // show Support page with new URL 341 // Create a dummy Help URL to get the Language and System 342 // but don't use a real command, otherwise we may get an anchor 343 rtl::OUString sEmpty; 344 rtl::OUString sTmp( SfxHelp::CreateHelpURL( sEmpty, sEmpty ) ); 345 346 rtl::OUStringBuffer aBuff; 347 aBuff.appendAscii( RTL_CONSTASCII_STRINGPARAM( "vnd.sun.star.help://shared/text/shared/05/00000001.xhp" ) ); 348 aBuff.append( sTmp.copy( sTmp.indexOf( sal_Unicode( '?' ) ) ) ); 349 aBuff.appendAscii( RTL_CONSTASCII_STRINGPARAM( "&UseDB=no" ) ); 350 351 pHelp->Start( aBuff.makeStringAndClear(), NULL ); 352 } 353 else 354 pHelp->Start( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:HelpIndex")), NULL ); // show start page 355 bDone = sal_True; 356 } 357 break; 358 } 359 360 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 361 case SID_HELPTIPS: 362 { 363 // Parameter aus werten 364 SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELPTIPS, sal_False); 365 bool bOn = pOnItem 366 ? ((SfxBoolItem*)pOnItem)->GetValue() 367 : !Help::IsQuickHelpEnabled(); 368 369 // ausf"uhren 370 if ( bOn ) 371 Help::EnableQuickHelp(); 372 else 373 Help::DisableQuickHelp(); 374 SvtHelpOptions().SetHelpTips( bOn ); 375 Invalidate(SID_HELPTIPS); 376 bDone = sal_True; 377 378 // ggf. recorden 379 if ( !rReq.IsAPI() ) 380 rReq.AppendItem( SfxBoolItem( SID_HELPTIPS, bOn) ); 381 break; 382 } 383 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 384 case SID_EXTENDEDHELP: 385 { 386 Help::StartExtHelp(); 387 break; 388 } 389 case SID_HELPBALLOONS: 390 { 391 // Parameter auswerten 392 SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELPBALLOONS, sal_False); 393 bool bOn = pOnItem 394 ? ((SfxBoolItem*)pOnItem)->GetValue() 395 : !Help::IsBalloonHelpEnabled(); 396 397 // ausf"uhren 398 if ( bOn ) 399 Help::EnableBalloonHelp(); 400 else 401 Help::DisableBalloonHelp(); 402 SvtHelpOptions().SetExtendedHelp( bOn ); 403 Invalidate(SID_HELPBALLOONS); 404 bDone = sal_True; 405 406 // ggf. recorden 407 if ( !rReq.IsAPI() ) 408 rReq.AppendItem( SfxBoolItem( SID_HELPBALLOONS, bOn) ); 409 break; 410 } 411 412 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 413 case SID_HELP_PI: 414 { 415 SvtHelpOptions aHelpOpt; 416 SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELP_PI, sal_False); 417 sal_Bool bOn = pOnItem 418 ? ((SfxBoolItem*)pOnItem)->GetValue() 419 : !aHelpOpt.IsHelpAgentAutoStartMode(); 420 aHelpOpt.SetHelpAgentAutoStartMode( bOn ); 421 Invalidate(SID_HELP_PI); 422 bDone = sal_True; 423 break; 424 } 425 426 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 427 case SID_ABOUT: 428 { 429 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 430 if ( pFact ) 431 { 432 VclAbstractDialog* pDlg = pFact->CreateVclDialog( 0, RID_DEFAULTABOUT ); 433 pDlg->Execute(); 434 delete pDlg; 435 bDone = sal_True; 436 } 437 break; 438 } 439 440 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 441 case SID_ORGANIZER: 442 { 443 SfxTemplateOrganizeDlg *pDlg = 444 new SfxTemplateOrganizeDlg(NULL); 445 pDlg->Execute(); 446 delete pDlg; 447 bDone = sal_True; 448 break; 449 } 450 451 case SID_TEMPLATE_ADDRESSBOKSOURCE: 452 { 453 svt::AddressBookSourceDialog aDialog(GetTopWindow(), ::comphelper::getProcessServiceFactory()); 454 aDialog.Execute(); 455 bDone = sal_True; 456 break; 457 } 458 459 case SID_BASICSTOP: 460 StarBASIC::Stop(); 461 break; 462 463 case SID_BASICBREAK : 464 BASIC_DLL()->BasicBreak(); 465 break; 466 467 case SID_CRASH : 468 { 469 // Provoke a crash: 470 char * crash = 0; 471 *crash = 0; 472 break; 473 } 474 475 case SID_SHOW_IME_STATUS_WINDOW: 476 if (pAppData_Impl->m_xImeStatusWindow->canToggle()) 477 { 478 SfxBoolItem const * pItem = static_cast< SfxBoolItem const * >( 479 rReq.GetArg(SID_SHOW_IME_STATUS_WINDOW, false, 480 TYPE(SfxBoolItem))); 481 bool bShow = pItem == 0 482 ? !pAppData_Impl->m_xImeStatusWindow->isShowing() 483 : ( pItem->GetValue() == sal_True ); 484 pAppData_Impl->m_xImeStatusWindow->show(bShow); 485 if (pItem == 0) 486 rReq.AppendItem(SfxBoolItem(SID_SHOW_IME_STATUS_WINDOW, 487 bShow)); 488 } 489 bDone = true; 490 break; 491 492 case SID_AVAILABLE_TOOLBARS: 493 { 494 SfxStringItem const * pToolbarName = static_cast< SfxStringItem const *>( 495 rReq.GetArg(SID_AVAILABLE_TOOLBARS, false, TYPE(SfxStringItem))); 496 497 if ( pToolbarName ) 498 { 499 com::sun::star::uno::Reference< com::sun::star::frame::XFrame > xFrame; 500 Reference < XFramesSupplier > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( 501 DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY ); 502 xFrame = xDesktop->getActiveFrame(); 503 504 Reference< com::sun::star::beans::XPropertySet > xPropSet( xFrame, UNO_QUERY ); 505 Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager; 506 if ( xPropSet.is() ) 507 { 508 try 509 { 510 Any aValue = xPropSet->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" ))); 511 aValue >>= xLayoutManager; 512 } 513 catch ( ::com::sun::star::uno::RuntimeException& e ) 514 { 515 throw e; 516 } 517 catch ( ::com::sun::star::uno::Exception& ) 518 { 519 } 520 } 521 522 if ( xLayoutManager.is() ) 523 { 524 rtl::OUString aToolbarResName( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/" )); 525 rtl::OUStringBuffer aBuf( aToolbarResName ); 526 aBuf.append( pToolbarName->GetValue() ); 527 528 // Parameter auswerten 529 rtl::OUString aToolbarName( aBuf.makeStringAndClear() ); 530 sal_Bool bShow( !xLayoutManager->isElementVisible( aToolbarName )); 531 532 if ( bShow ) 533 { 534 xLayoutManager->createElement( aToolbarName ); 535 xLayoutManager->showElement( aToolbarName ); 536 } 537 else 538 xLayoutManager->hideElement( aToolbarName ); 539 } 540 } 541 542 bDone = true; 543 break; 544 } 545 546 default: 547 break; 548 } 549 550 if ( bDone ) 551 rReq.Done(); 552 } 553 554 //-------------------------------------------------------------------- 555 556 void SfxApplication::MiscState_Impl(SfxItemSet &rSet) 557 { 558 DBG_MEMTEST(); 559 560 LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() ); 561 const sal_uInt16 *pRanges = rSet.GetRanges(); 562 DBG_ASSERT(pRanges && *pRanges, "Set ohne Bereich"); 563 while ( *pRanges ) 564 { 565 for(sal_uInt16 nWhich = *pRanges++; nWhich <= *pRanges; ++nWhich) 566 { 567 switch(nWhich) 568 { 569 case SID_TEMPLATE_ADDRESSBOKSOURCE: 570 if ( !SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SDATABASE) ) 571 rSet.Put(SfxVisibilityItem(nWhich, sal_False)); 572 break; 573 case SID_EXITANDRETURN: 574 case SID_QUITAPP: 575 { 576 if ( pAppData_Impl->nDocModalMode ) 577 rSet.DisableItem(nWhich); 578 else 579 rSet.Put(SfxStringItem(nWhich, String(SfxResId(STR_QUITAPP)))); 580 break; 581 } 582 583 case SID_BASICSTOP: 584 if ( !StarBASIC::IsRunning() ) 585 rSet.DisableItem(nWhich); 586 break; 587 588 case SID_HELPTIPS: 589 { 590 rSet.Put( SfxBoolItem( SID_HELPTIPS, Help::IsQuickHelpEnabled() ) ); 591 } 592 break; 593 case SID_HELPBALLOONS: 594 { 595 rSet.Put( SfxBoolItem( SID_HELPBALLOONS, Help::IsBalloonHelpEnabled() ) ); 596 } 597 break; 598 case SID_HELP_PI: 599 { 600 rSet.Put( SfxBoolItem( SID_HELP_PI, SvtHelpOptions().IsHelpAgentAutoStartMode() ) ); 601 } 602 break; 603 604 case SID_EXTENDEDHELP: 605 { 606 } 607 break; 608 609 case SID_CLOSEDOCS: 610 case SID_CLOSEWINS: 611 { 612 Reference < XFramesSupplier > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY ); 613 Reference< XIndexAccess > xTasks( xDesktop->getFrames(), UNO_QUERY ); 614 if ( !xTasks.is() || !xTasks->getCount() ) 615 rSet.DisableItem(nWhich); 616 break; 617 } 618 619 case SID_SAVEDOCS: 620 { 621 sal_Bool bModified = sal_False; 622 for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst(); 623 pObjSh; 624 pObjSh = SfxObjectShell::GetNext( *pObjSh ) ) 625 { 626 if ( pObjSh->IsModified() ) 627 { 628 bModified = sal_True; 629 break; 630 } 631 } 632 633 if ( !bModified ) 634 rSet.DisableItem( nWhich ); 635 break; 636 } 637 638 case SID_SHOW_IME_STATUS_WINDOW: 639 if (pAppData_Impl->m_xImeStatusWindow->canToggle()) 640 rSet.Put(SfxBoolItem( 641 SID_SHOW_IME_STATUS_WINDOW, 642 pAppData_Impl->m_xImeStatusWindow-> 643 isShowing())); 644 else 645 rSet.DisableItem(SID_SHOW_IME_STATUS_WINDOW); 646 break; 647 648 default: 649 break; 650 } 651 } 652 653 ++pRanges; 654 } 655 } 656 657 typedef rtl_uString* (SAL_CALL *basicide_choose_macro)(XModel*, sal_Bool, rtl_uString*); 658 typedef void (SAL_CALL *basicide_macro_organizer)( sal_Int16 ); 659 660 #define DOSTRING( x ) #x 661 #define STRING( x ) DOSTRING( x ) 662 663 extern "C" { static void SAL_CALL thisModule() {} } 664 665 ::rtl::OUString ChooseMacro( const Reference< XModel >& rxLimitToDocument, sal_Bool bChooseOnly, const ::rtl::OUString& rMacroDesc = ::rtl::OUString() ) 666 { 667 // get basctl dllname 668 static ::rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "basctl" ) ) ); 669 670 // load module 671 oslModule handleMod = osl_loadModuleRelative( 672 &thisModule, aLibName.pData, 0 ); 673 674 // get symbol 675 ::rtl::OUString aSymbol( RTL_CONSTASCII_USTRINGPARAM( "basicide_choose_macro" ) ); 676 basicide_choose_macro pSymbol = (basicide_choose_macro) osl_getFunctionSymbol( handleMod, aSymbol.pData ); 677 678 // call basicide_choose_macro in basctl 679 rtl_uString* pScriptURL = pSymbol( rxLimitToDocument.get(), bChooseOnly, rMacroDesc.pData ); 680 ::rtl::OUString aScriptURL( pScriptURL ); 681 rtl_uString_release( pScriptURL ); 682 return aScriptURL; 683 } 684 685 void MacroOrganizer( sal_Int16 nTabId ) 686 { 687 // get basctl dllname 688 static ::rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "basctl" ) ) ); 689 690 // load module 691 oslModule handleMod = osl_loadModuleRelative( 692 &thisModule, aLibName.pData, 0 ); 693 694 // get symbol 695 ::rtl::OUString aSymbol( RTL_CONSTASCII_USTRINGPARAM( "basicide_macro_organizer" ) ); 696 basicide_macro_organizer pSymbol = (basicide_macro_organizer) osl_getFunctionSymbol( handleMod, aSymbol.pData ); 697 698 // call basicide_macro_organizer in basctl 699 pSymbol( nTabId ); 700 } 701 702 #define RID_ERRBOX_MODULENOTINSTALLED (RID_OFA_START + 72) 703 704 ResMgr* SfxApplication::GetOffResManager_Impl() 705 { 706 if ( !pAppData_Impl->pOfaResMgr ) 707 pAppData_Impl->pOfaResMgr = CreateResManager( "ofa"); 708 return pAppData_Impl->pOfaResMgr; 709 } 710 711 namespace 712 { 713 Window* lcl_getDialogParent( const Reference< XFrame >& _rxFrame, Window* _pFallback ) 714 { 715 if ( !_rxFrame.is() ) 716 return _pFallback; 717 718 try 719 { 720 Reference< awt::XWindow > xContainerWindow( _rxFrame->getContainerWindow(), UNO_SET_THROW ); 721 Window* pWindow = VCLUnoHelper::GetWindow( xContainerWindow ); 722 OSL_ENSURE( pWindow, "lcl_getDialogParent: cool, somebody implemented a VCL-less toolkit!" ); 723 724 if ( pWindow ) 725 return pWindow->GetSystemWindow(); 726 } 727 catch( const Exception& ) 728 { 729 DBG_UNHANDLED_EXCEPTION(); 730 } 731 return _pFallback; 732 } 733 734 const ::rtl::OUString& lcl_getBasicIDEServiceName() 735 { 736 static const ::rtl::OUString s_sBasicName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.script.BasicIDE" ) ); 737 return s_sBasicName; 738 } 739 740 SfxViewFrame* lcl_getBasicIDEViewFrame( SfxObjectShell* i_pBasicIDE ) 741 { 742 SfxViewFrame* pView = SfxViewFrame::GetFirst( i_pBasicIDE ); 743 while ( pView ) 744 { 745 if ( pView->GetObjectShell()->GetFactory().GetDocumentServiceName() == lcl_getBasicIDEServiceName() ) 746 break; 747 pView = SfxViewFrame::GetNext( *pView, i_pBasicIDE ); 748 } 749 return pView; 750 } 751 Reference< XFrame > lcl_findStartModuleFrame( const ::comphelper::ComponentContext& i_rContext ) 752 { 753 try 754 { 755 Reference < XFramesSupplier > xSupplier( i_rContext.createComponent( "com.sun.star.frame.Desktop" ), UNO_QUERY_THROW ); 756 Reference < XIndexAccess > xContainer( xSupplier->getFrames(), UNO_QUERY_THROW ); 757 758 Reference< XModuleManager > xCheck( i_rContext.createComponent( "com.sun.star.frame.ModuleManager" ), UNO_QUERY_THROW ); 759 760 sal_Int32 nCount = xContainer->getCount(); 761 for ( sal_Int32 i=0; i<nCount; ++i ) 762 { 763 try 764 { 765 Reference < XFrame > xFrame( xContainer->getByIndex(i), UNO_QUERY_THROW ); 766 ::rtl::OUString sModule = xCheck->identify( xFrame ); 767 if ( sModule.equalsAscii( "com.sun.star.frame.StartModule" ) ) 768 return xFrame; 769 } 770 catch( const UnknownModuleException& ) 771 { 772 // silence 773 } 774 catch(const Exception&) 775 { 776 // re-throw, caught below 777 throw; 778 } 779 } 780 } 781 catch( const Exception& ) 782 { 783 DBG_UNHANDLED_EXCEPTION(); 784 } 785 return NULL; 786 } 787 } 788 789 static ::rtl::OUString getConfigurationStringValue( 790 const ::rtl::OUString& rPackage, 791 const ::rtl::OUString& rRelPath, 792 const ::rtl::OUString& rKey, 793 const ::rtl::OUString& rDefaultValue ) 794 { 795 ::rtl::OUString aDefVal( rDefaultValue ); 796 797 try 798 { 799 ::comphelper::ConfigurationHelper::readDirectKey( 800 comphelper::getProcessServiceFactory(), 801 rPackage, 802 rRelPath, 803 rKey, 804 ::comphelper::ConfigurationHelper::E_READONLY) >>= aDefVal; 805 } 806 catch(const com::sun::star::uno::RuntimeException& exRun) 807 { throw exRun; } 808 catch(const com::sun::star::uno::Exception&) 809 {} 810 811 return aDefVal; 812 } 813 814 void SfxApplication::OfaExec_Impl( SfxRequest& rReq ) 815 { 816 DBG_MEMTEST(); 817 switch ( rReq.GetSlot() ) 818 { 819 case SID_OPTIONS_TREEDIALOG: 820 { 821 String sPageURL; 822 SFX_REQUEST_ARG( rReq, pURLItem, SfxStringItem, SID_OPTIONS_PAGEURL, sal_False ); 823 if ( pURLItem ) 824 sPageURL = pURLItem->GetValue(); 825 const SfxItemSet* pArgs = rReq.GetInternalArgs_Impl(); 826 const SfxPoolItem* pItem = NULL; 827 Reference < XFrame > xFrame; 828 if ( pArgs && pArgs->GetItemState( SID_FILLFRAME, sal_False, &pItem ) == SFX_ITEM_SET ) 829 { 830 OSL_ENSURE( pItem->ISA( SfxUnoFrameItem ), "SfxApplication::OfaExec_Impl: XFrames are to be transported via SfxUnoFrameItem by now!" ); 831 xFrame = static_cast< const SfxUnoFrameItem*>( pItem )->GetFrame(); 832 } 833 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 834 if ( pFact ) 835 { 836 VclAbstractDialog* pDlg = 837 pFact->CreateFrameDialog( NULL, xFrame, rReq.GetSlot(), sPageURL ); 838 pDlg->Execute(); 839 delete pDlg; 840 SfxViewFrame* pView = SfxViewFrame::GetFirst(); 841 while ( pView ) 842 { 843 pView->GetBindings().InvalidateAll(sal_False); 844 pView = SfxViewFrame::GetNext( *pView ); 845 } 846 } 847 break; 848 } 849 850 case SID_MORE_DICTIONARIES: 851 { 852 try 853 { 854 uno::Reference< css::system::XSystemShellExecute > xSystemShell( 855 css::system::SystemShellExecute::create( 856 ::comphelper::getProcessComponentContext() ) ); 857 858 // read repository URL from configuration 859 ::rtl::OUString sTemplRepoURL = 860 getConfigurationStringValue( 861 ::rtl::OUString::createFromAscii("org.openoffice.Office.Common"), 862 ::rtl::OUString::createFromAscii("Dictionaries"), 863 ::rtl::OUString::createFromAscii("RepositoryURL"), 864 ::rtl::OUString()); 865 866 if ( xSystemShell.is() && sTemplRepoURL.getLength() > 0 ) 867 { 868 ::rtl::OUStringBuffer aURLBuf( sTemplRepoURL ); 869 aURLBuf.appendAscii( "?" ); 870 aURLBuf.appendAscii( "lang=" ); 871 872 // read locale from configuration 873 ::rtl::OUString sLocale = getConfigurationStringValue( 874 ::rtl::OUString::createFromAscii("org.openoffice.Setup"), 875 ::rtl::OUString::createFromAscii("L10N"), 876 ::rtl::OUString::createFromAscii("ooLocale"), 877 ::rtl::OUString::createFromAscii("en-US")); 878 879 aURLBuf.append( sLocale ); 880 xSystemShell->execute( 881 aURLBuf.makeStringAndClear(), 882 ::rtl::OUString(), 883 css::system::SystemShellExecuteFlags::DEFAULTS ); 884 } 885 } 886 catch( const ::com::sun::star::uno::Exception& ) 887 { 888 DBG_ERRORFILE( "SfxApplication::OfaExec_Impl(SID_MORE_DICTIONARIES): caught an exception!" ); 889 } 890 break; 891 } 892 893 case SID_BASICIDE_APPEAR: 894 { 895 SfxViewFrame* pView = lcl_getBasicIDEViewFrame( NULL ); 896 if ( !pView ) 897 { 898 SfxObjectShell* pBasicIDE = SfxObjectShell::CreateObject( lcl_getBasicIDEServiceName() ); 899 pBasicIDE->DoInitNew( 0 ); 900 pBasicIDE->SetModified( sal_False ); 901 try 902 { 903 // load the Basic IDE via direct access to the SFX frame loader. A generic loadComponentFromURL 904 // (which could be done via SfxViewFrame::LoadDocumentIntoFrame) is not feasible here, since the Basic IDE 905 // does not really play nice with the framework's concept. For instance, it is a "singleton document", 906 // which conflicts, at the latest, with the framework's concept of loading into _blank frames. 907 // So, since we know that our frame loader can handle it, we skip the generic framework loader 908 // mechanism, and the type detection (which doesn't know about the Basic IDE). 909 ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() ); 910 Reference< XSynchronousFrameLoader > xLoader( aContext.createComponent( 911 SfxFrameLoader_Impl::impl_getStaticImplementationName() ), UNO_QUERY_THROW ); 912 ::comphelper::NamedValueCollection aLoadArgs; 913 aLoadArgs.put( "Model", pBasicIDE->GetModel() ); 914 aLoadArgs.put( "URL", ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:factory/sbasic" ) ) ); 915 916 Reference< XFrame > xTargetFrame( lcl_findStartModuleFrame( aContext ) ); 917 if ( !xTargetFrame.is() ) 918 xTargetFrame = SfxFrame::CreateBlankFrame(); 919 ENSURE_OR_THROW( xTargetFrame.is(), "could not obtain a frameto load the Basic IDE into!" ); 920 921 xLoader->load( aLoadArgs.getPropertyValues(), xTargetFrame ); 922 } 923 catch( const Exception& ) 924 { 925 DBG_UNHANDLED_EXCEPTION(); 926 } 927 928 pView = lcl_getBasicIDEViewFrame( pBasicIDE ); 929 if ( pView ) 930 pView->SetName( String( RTL_CONSTASCII_USTRINGPARAM( "BASIC:1" ) ) ); 931 } 932 933 if ( pView ) 934 pView->GetFrame().Appear(); 935 936 const SfxItemSet* pArgs = rReq.GetArgs(); 937 if ( pArgs && pView ) 938 { 939 SfxViewShell* pViewShell = pView->GetViewShell(); 940 SfxObjectShell* pObjShell = pView->GetObjectShell(); 941 if ( pViewShell && pObjShell ) 942 { 943 SfxRequest aReq( SID_BASICIDE_SHOWWINDOW, SFX_CALLMODE_SYNCHRON, pObjShell->GetPool() ); 944 aReq.SetArgs( *pArgs ); 945 pViewShell->ExecuteSlot( aReq ); 946 } 947 } 948 949 rReq.Done(); 950 } 951 break; 952 953 case SID_BASICCHOOSER: 954 { 955 const SfxItemSet* pArgs = rReq.GetArgs(); 956 const SfxPoolItem* pItem; 957 sal_Bool bChooseOnly = sal_False; 958 Reference< XModel > xLimitToModel; 959 if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_RECORDMACRO, sal_False, &pItem) ) 960 { 961 sal_Bool bRecord = ((SfxBoolItem*)pItem)->GetValue(); 962 if ( bRecord ) 963 { 964 // !Hack 965 bChooseOnly = sal_False; 966 SfxObjectShell* pCurrentShell = SfxObjectShell::Current(); 967 OSL_ENSURE( pCurrentShell, "macro recording outside an SFX document?" ); 968 if ( pCurrentShell ) 969 xLimitToModel = pCurrentShell->GetModel(); 970 } 971 } 972 973 rReq.SetReturnValue( SfxStringItem( rReq.GetSlot(), ChooseMacro( xLimitToModel, bChooseOnly ) ) ); 974 rReq.Done(); 975 } 976 break; 977 978 case SID_MACROORGANIZER: 979 { 980 OSL_TRACE("handling SID_MACROORGANIZER"); 981 const SfxItemSet* pArgs = rReq.GetArgs(); 982 const SfxPoolItem* pItem; 983 sal_Int16 nTabId = 0; 984 if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_MACROORGANIZER, sal_False, &pItem) ) 985 { 986 nTabId = ((SfxUInt16Item*)pItem)->GetValue(); 987 } 988 989 SfxApplication::MacroOrganizer( nTabId ); 990 rReq.Done(); 991 } 992 break; 993 994 case SID_RUNMACRO: 995 { 996 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 997 OSL_TRACE("SfxApplication::OfaExec_Impl: case ScriptOrg"); 998 999 Reference< XFrame > xFrame; 1000 const SfxItemSet* pIntSet = rReq.GetInternalArgs_Impl(); 1001 SFX_ITEMSET_ARG( pIntSet, pFrameItem, SfxUnoFrameItem, SID_FILLFRAME, sal_False ); 1002 if ( pFrameItem ) 1003 xFrame = pFrameItem->GetFrame(); 1004 1005 if ( !xFrame.is() ) 1006 { 1007 const SfxViewFrame* pViewFrame = SfxViewFrame::Current(); 1008 if ( pViewFrame ) 1009 xFrame = pViewFrame->GetFrame().GetFrameInterface(); 1010 } 1011 1012 do // artificial loop for flow control 1013 { 1014 AbstractScriptSelectorDialog* pDlg = pFact->CreateScriptSelectorDialog( 1015 lcl_getDialogParent( xFrame, GetTopWindow() ), sal_False, xFrame ); 1016 OSL_ENSURE( pDlg, "SfxApplication::OfaExec_Impl( SID_RUNMACRO ): no dialog!" ); 1017 if ( !pDlg ) 1018 break; 1019 pDlg->SetRunLabel(); 1020 1021 short nDialogResult = pDlg->Execute(); 1022 if ( !nDialogResult ) 1023 break; 1024 1025 Sequence< Any > args; 1026 Sequence< sal_Int16 > outIndex; 1027 Sequence< Any > outArgs; 1028 Any ret; 1029 1030 Reference< XInterface > xScriptContext; 1031 1032 Reference< XController > xController; 1033 if ( xFrame.is() ) 1034 xController = xFrame->getController(); 1035 if ( xController.is() ) 1036 xScriptContext = xController->getModel(); 1037 if ( !xScriptContext.is() ) 1038 xScriptContext = xController; 1039 1040 SfxObjectShell::CallXScript( xScriptContext, pDlg->GetScriptURL(), args, ret, outIndex, outArgs ); 1041 } 1042 while ( false ); 1043 rReq.Done(); 1044 } 1045 break; 1046 1047 case SID_SCRIPTORGANIZER: 1048 { 1049 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 1050 OSL_TRACE("SfxApplication::OfaExec_Impl: case ScriptOrg"); 1051 const SfxItemSet* pArgs = rReq.GetArgs(); 1052 const SfxPoolItem* pItem; 1053 String aLanguage; 1054 if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_SCRIPTORGANIZER, sal_False, &pItem) ) 1055 { 1056 aLanguage = ((SfxScriptOrganizerItem*)pItem)->getLanguage(); 1057 } 1058 1059 ::rtl::OUString aLang( aLanguage ); 1060 OSL_TRACE("SfxApplication::OfaExec_Impl: about to create dialog for: %s", ::rtl::OUStringToOString( aLang , RTL_TEXTENCODING_ASCII_US ).pData->buffer); 1061 // not sure about the Window* 1062 VclAbstractDialog* pDlg = pFact->CreateSvxScriptOrgDialog( GetTopWindow(), aLanguage ); 1063 if( pDlg ) 1064 { 1065 pDlg->Execute(); 1066 } 1067 else 1068 { 1069 OSL_TRACE("no dialog!!!"); 1070 } 1071 rReq.Done(); 1072 } 1073 break; 1074 1075 case SID_OFFICE_CHECK_PLZ: 1076 { 1077 sal_Bool bRet = sal_False; 1078 SFX_REQUEST_ARG(rReq, pStringItem, SfxStringItem, rReq.GetSlot(), sal_False); 1079 1080 if ( pStringItem ) 1081 { 1082 String aPLZ = pStringItem->GetValue(); 1083 bRet = sal_True /*!!!SfxIniManager::CheckPLZ( aPLZ )*/; 1084 } 1085 else 1086 SbxBase::SetError( SbxERR_WRONG_ARGS ); 1087 rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bRet ) ); 1088 } 1089 break; 1090 1091 case SID_AUTO_CORRECT_DLG: 1092 { 1093 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 1094 if ( pFact ) 1095 { 1096 SfxItemSet aSet(GetPool(), SID_AUTO_CORRECT_DLG, SID_AUTO_CORRECT_DLG); 1097 const SfxPoolItem* pItem=NULL; 1098 const SfxItemSet* pSet = rReq.GetArgs(); 1099 SfxItemPool* pSetPool = pSet ? pSet->GetPool() : NULL; 1100 if ( pSet && pSet->GetItemState( pSetPool->GetWhich( SID_AUTO_CORRECT_DLG ), sal_False, &pItem ) == SFX_ITEM_SET ) 1101 aSet.Put( *pItem ); 1102 1103 SfxAbstractTabDialog* pDlg = pFact->CreateTabDialog( RID_OFA_AUTOCORR_DLG, NULL, &aSet, NULL ); 1104 pDlg->Execute(); 1105 delete pDlg; 1106 } 1107 1108 break; 1109 } 1110 1111 case SID_SD_AUTOPILOT : 1112 case SID_NEWSD : 1113 { 1114 SvtModuleOptions aModuleOpt; 1115 if ( !aModuleOpt.IsImpress() ) 1116 { 1117 ErrorBox( 0, ResId( RID_ERRBOX_MODULENOTINSTALLED, *GetOffResManager_Impl() )).Execute(); 1118 return; 1119 } 1120 1121 Reference< com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory(); 1122 Reference< com::sun::star::frame::XDispatchProvider > xProv( 1123 xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.drawing.ModuleDispatcher")), UNO_QUERY ); 1124 1125 if ( xProv.is() ) 1126 { 1127 ::rtl::OUString aCmd = ::rtl::OUString::createFromAscii( GetInterface()->GetSlot( rReq.GetSlot() )->GetUnoName() ); 1128 Reference< com::sun::star::frame::XDispatchHelper > xHelper( 1129 xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.frame.DispatchHelper")), UNO_QUERY ); 1130 if ( xHelper.is() ) 1131 { 1132 Sequence < com::sun::star::beans::PropertyValue > aSeq; 1133 if ( rReq.GetArgs() ) 1134 TransformItems( rReq.GetSlot(), *rReq.GetArgs(), aSeq ); 1135 Any aResult = xHelper->executeDispatch( xProv, aCmd, ::rtl::OUString(), 0, aSeq ); 1136 ::com::sun::star::frame::DispatchResultEvent aEvent; 1137 sal_Bool bSuccess = ( 1138 (aResult >>= aEvent) && 1139 (aEvent.State == ::com::sun::star::frame::DispatchResultState::SUCCESS) 1140 ); 1141 rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bSuccess ) ); 1142 } 1143 } 1144 } 1145 break; 1146 1147 case FN_LABEL : 1148 case FN_BUSINESS_CARD : 1149 case FN_XFORMS_INIT : 1150 { 1151 Reference< com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory(); 1152 Reference< com::sun::star::frame::XDispatchProvider > xProv( 1153 xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.text.ModuleDispatcher")), UNO_QUERY ); 1154 1155 if ( xProv.is() ) 1156 { 1157 ::rtl::OUString aCmd = ::rtl::OUString::createFromAscii( GetInterface()->GetSlot( rReq.GetSlot() )->GetUnoName() ); 1158 Reference< com::sun::star::frame::XDispatchHelper > xHelper( 1159 xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.frame.DispatchHelper")), UNO_QUERY ); 1160 if ( xHelper.is() ) 1161 { 1162 Sequence < com::sun::star::beans::PropertyValue > aSeq; 1163 if ( rReq.GetArgs() ) 1164 TransformItems( rReq.GetSlot(), *rReq.GetArgs(), aSeq ); 1165 Any aResult = xHelper->executeDispatch( xProv, aCmd, ::rtl::OUString(), 0, aSeq ); 1166 ::com::sun::star::frame::DispatchResultEvent aEvent; 1167 sal_Bool bSuccess = ( 1168 (aResult >>= aEvent) && 1169 (aEvent.State == ::com::sun::star::frame::DispatchResultState::SUCCESS) 1170 ); 1171 rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bSuccess ) ); 1172 } 1173 } 1174 } 1175 break; 1176 1177 case SID_ADDRESS_DATA_SOURCE: 1178 { 1179 ::rtl::OUString sDialogServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.AddressBookSourcePilot" ) ); 1180 try 1181 { 1182 Reference< com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory(); 1183 Reference< com::sun::star::ui::dialogs::XExecutableDialog > xDialog; 1184 if (xORB.is()) 1185 xDialog = Reference< com::sun::star::ui::dialogs::XExecutableDialog >(xORB->createInstance(sDialogServiceName), UNO_QUERY); 1186 if (xDialog.is()) 1187 xDialog->execute(); 1188 else 1189 ShowServiceNotAvailableError(NULL, sDialogServiceName, sal_True); 1190 } 1191 catch(::com::sun::star::uno::Exception&) 1192 { 1193 } 1194 } 1195 break; 1196 1197 case SID_COMP_BIBLIOGRAPHY: 1198 { 1199 SfxStringItem aURL(SID_FILE_NAME, String::CreateFromAscii(".component:Bibliography/View1")); 1200 SfxStringItem aRef(SID_REFERER, String::CreateFromAscii("private:user")); 1201 SfxStringItem aTarget(SID_TARGETNAME, String::CreateFromAscii("_blank")); 1202 SfxViewFrame::Current()->GetDispatcher()->Execute( SID_OPENDOC, SFX_CALLMODE_ASYNCHRON, &aURL, &aRef, &aTarget, 0L); 1203 } 1204 break; 1205 } 1206 } 1207 1208 void SfxApplication::OfaState_Impl(SfxItemSet &rSet) 1209 { 1210 SvtModuleOptions aModuleOpt; 1211 1212 if( !aModuleOpt.IsWriter()) 1213 { 1214 rSet.DisableItem( FN_LABEL ); 1215 rSet.DisableItem( FN_BUSINESS_CARD ); 1216 rSet.DisableItem( FN_XFORMS_INIT ); 1217 } 1218 1219 if ( !aModuleOpt.IsImpress() ) 1220 rSet.DisableItem( SID_SD_AUTOPILOT ); 1221 } 1222