LCOV - code coverage report
Current view: top level - sfx2/source/appl - appserv.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 19 552 3.4 %
Date: 2015-06-13 12:38:46 Functions: 3 21 14.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <config_features.h>
      21             : 
      22             : #include <com/sun/star/document/XEmbeddedScripts.hpp>
      23             : #include <com/sun/star/drawing/ModuleDispatcher.hpp>
      24             : #include <com/sun/star/embed/XStorage.hpp>
      25             : #include <com/sun/star/embed/ElementModes.hpp>
      26             : #include <com/sun/star/frame/Desktop.hpp>
      27             : #include <com/sun/star/frame/DispatchResultEvent.hpp>
      28             : #include <com/sun/star/frame/DispatchResultState.hpp>
      29             : #include <com/sun/star/frame/DispatchHelper.hpp>
      30             : #include <com/sun/star/frame/XDesktop.hpp>
      31             : #include <com/sun/star/frame/XFramesSupplier.hpp>
      32             : #include <com/sun/star/frame/XLayoutManager.hpp>
      33             : #include <com/sun/star/frame/XSynchronousFrameLoader.hpp>
      34             : #include <com/sun/star/sdbc/DriverManager.hpp>
      35             : #include <com/sun/star/system/SystemShellExecute.hpp>
      36             : #include <com/sun/star/system/SystemShellExecuteFlags.hpp>
      37             : #include <com/sun/star/system/SystemShellExecuteException.hpp>
      38             : #include <com/sun/star/task/XJobExecutor.hpp>
      39             : #include <com/sun/star/text/ModuleDispatcher.hpp>
      40             : #include <com/sun/star/ui/dialogs/AddressBookSourcePilot.hpp>
      41             : #include <com/sun/star/uno/Reference.hxx>
      42             : #include <com/sun/star/util/XCloseable.hpp>
      43             : #include <com/sun/star/util/CloseVetoException.hpp>
      44             : #include <org/freedesktop/PackageKit/SyncDbusSessionHelper.hpp>
      45             : 
      46             : #include <com/sun/star/frame/XComponentLoader.hpp>
      47             : 
      48             : #include <comphelper/processfactory.hxx>
      49             : #include <comphelper/storagehelper.hxx>
      50             : 
      51             : #include <svtools/addresstemplate.hxx>
      52             : #include <svtools/miscopt.hxx>
      53             : #include <svtools/restartdialog.hxx>
      54             : #include <svl/visitem.hxx>
      55             : #include <unotools/intlwrapper.hxx>
      56             : 
      57             : #include <unotools/configmgr.hxx>
      58             : #include <tools/diagnose_ex.h>
      59             : #include <vcl/layout.hxx>
      60             : #include <svl/intitem.hxx>
      61             : #include <svl/eitem.hxx>
      62             : #include <svl/stritem.hxx>
      63             : #include <basic/sbstar.hxx>
      64             : #include <basic/basmgr.hxx>
      65             : #include <basic/basrdll.hxx>
      66             : #include <svtools/sfxecode.hxx>
      67             : #include <svtools/ehdl.hxx>
      68             : #include <vcl/help.hxx>
      69             : #include <vcl/stdtext.hxx>
      70             : #include <rtl/ustrbuf.hxx>
      71             : #include <osl/file.hxx>
      72             : 
      73             : #include <unotools/pathoptions.hxx>
      74             : #include <unotools/moduleoptions.hxx>
      75             : #include <svtools/helpopt.hxx>
      76             : #include <toolkit/helper/vclunohelper.hxx>
      77             : #include <unotools/bootstrap.hxx>
      78             : #include <rtl/bootstrap.hxx>
      79             : #include <cppuhelper/exc_hlp.hxx>
      80             : 
      81             : #include <com/sun/star/script/provider/XScriptProviderFactory.hpp>
      82             : #include <com/sun/star/frame/ModuleManager.hpp>
      83             : #include <com/sun/star/beans/XPropertySet.hpp>
      84             : 
      85             : #include <sfx2/app.hxx>
      86             : #include <sfx2/request.hxx>
      87             : #include <sfx2/dispatch.hxx>
      88             : #include <sfx2/bindings.hxx>
      89             : #include <sfx2/msg.hxx>
      90             : #include <sfx2/objface.hxx>
      91             : #include <sfx2/objitem.hxx>
      92             : #include <sfx2/objsh.hxx>
      93             : #include <sfx2/hintpost.hxx>
      94             : #include <sfx2/viewsh.hxx>
      95             : #include <sfx2/docfac.hxx>
      96             : #include <sfx2/docfile.hxx>
      97             : #include <sfx2/docfilt.hxx>
      98             : #include <sfx2/new.hxx>
      99             : #include "sfxtypes.hxx"
     100             : #include <sfx2/tabdlg.hxx>
     101             : #include "arrdecl.hxx"
     102             : #include <sfx2/sfx.hrc>
     103             : #include "app.hrc"
     104             : #include <sfx2/passwd.hxx>
     105             : #include <sfx2/sfxresid.hxx>
     106             : #include <sfx2/childwin.hxx>
     107             : #include "appdata.hxx"
     108             : #include <sfx2/minfitem.hxx>
     109             : #include <sfx2/event.hxx>
     110             : #include <sfx2/module.hxx>
     111             : #include <sfx2/viewfrm.hxx>
     112             : #include "sfxpicklist.hxx"
     113             : #include "imestatuswindow.hxx"
     114             : #include <sfx2/sfxdlg.hxx>
     115             : #include <sfx2/dialogs.hrc>
     116             : #include "sorgitm.hxx"
     117             : #include <sfx2/sfxhelp.hxx>
     118             : #include <sfx2/zoomitem.hxx>
     119             : #include <sfx2/templatedlg.hxx>
     120             : 
     121             : #include <officecfg/Office/Common.hxx>
     122             : #include <officecfg/Setup.hxx>
     123             : #include <boost/scoped_ptr.hpp>
     124             : 
     125             : using namespace ::com::sun::star;
     126             : using namespace ::com::sun::star::beans;
     127             : using namespace ::com::sun::star::uno;
     128             : using namespace ::com::sun::star::frame;
     129             : using namespace ::com::sun::star::container;
     130             : using namespace ::com::sun::star::util;
     131             : using namespace ::com::sun::star::script;
     132             : using namespace ::com::sun::star::system;
     133             : using namespace ::com::sun::star::lang;
     134             : using namespace ::com::sun::star::document;
     135             : 
     136             : namespace
     137             : {
     138             :     // lp#527938, debian#602953, fdo#33266, i#105408
     139           0 :     static bool lcl_isBaseAvailable()
     140             :     {
     141             :         try
     142             :         {
     143             :             // if we get com::sun::star::sdbc::DriverManager, libsdbc2 is there
     144             :             // and the bibliography is assumed to work
     145           0 :             return com::sun::star::sdbc::DriverManager::create(comphelper::getProcessComponentContext()).is();
     146             :         }
     147           0 :         catch (Exception & e)
     148             :         {
     149             :             SAL_INFO(
     150             :                 "sfx.appl",
     151             :                 "assuming Base to be missing; caught " << e.Message);
     152           0 :             return false;
     153             :         }
     154             :     }
     155           0 :     static void lcl_tryLoadBibliography()
     156             :     {
     157             :         // lp#527938, debian#602953, fdo#33266, i#105408
     158             :         // make sure we actually can instanciate services from base first
     159           0 :         if(!lcl_isBaseAvailable())
     160             :         {
     161             :             try
     162             :             {
     163             :                 using namespace org::freedesktop::PackageKit;
     164             :                 using namespace svtools;
     165           0 :                 Reference< XSyncDbusSessionHelper > xSyncDbusSessionHelper(SyncDbusSessionHelper::create(comphelper::getProcessComponentContext()));
     166           0 :                 Sequence< OUString > vPackages(1);
     167           0 :                 vPackages[0] = "libreoffice-base";
     168           0 :                 OUString sInteraction;
     169           0 :                 xSyncDbusSessionHelper->InstallPackageNames(0, vPackages, sInteraction);
     170             :                 // Ill be back (hopefully)!
     171           0 :                 SolarMutexGuard aGuard;
     172           0 :                 executeRestartDialog(comphelper::getProcessComponentContext(), NULL, RESTART_REASON_BIBLIOGRAPHY_INSTALL);
     173             :             }
     174           0 :             catch (const Exception & e)
     175             :             {
     176             :                 SAL_INFO(
     177             :                     "sfx.appl",
     178             :                     "trying to install LibreOffice Base, caught " << e.Message);
     179             :             }
     180           0 :             return;
     181             :         }
     182             : 
     183             :         try // fdo#48775
     184             :         {
     185           0 :             SfxStringItem aURL(SID_FILE_NAME, OUString(".component:Bibliography/View1"));
     186           0 :             SfxStringItem aRef(SID_REFERER, OUString("private:user"));
     187           0 :             SfxStringItem aTarget(SID_TARGETNAME, OUString("_blank"));
     188           0 :             SfxViewFrame::Current()->GetDispatcher()->Execute( SID_OPENDOC, SfxCallMode::ASYNCHRON, &aURL, &aRef, &aTarget, 0L);
     189             :         }
     190           0 :         catch (const Exception & e)
     191             :         {
     192             :             SAL_INFO( "sfx.appl",
     193             :                       "trying to load bibliography database, caught " << e.Message);
     194             :         }
     195             :     }
     196             : }
     197             : /// Find the correct location of the document (LICENSE.fodt, etc.), and return
     198             : /// it in rURL if found.
     199           0 : static bool checkURL( const char *pName, const char *pExt, OUString &rURL )
     200             : {
     201             :     using namespace osl;
     202           0 :     DirectoryItem aDirItem;
     203             : 
     204           0 :     rURL = "$BRAND_BASE_DIR/" + OUString::createFromAscii( pName ) +
     205           0 :            OUString::createFromAscii( pExt );
     206           0 :     rtl::Bootstrap::expandMacros( rURL );
     207             : 
     208           0 :     if (!rURL.isEmpty())
     209           0 :         return DirectoryItem::get( rURL, aDirItem ) == DirectoryItem::E_None;
     210             :     else
     211           0 :         return false;
     212             : }
     213             : 
     214             : /// Displays CREDITS or LICENSE in any of the available version
     215           0 : static void showDocument( const char* pBaseName )
     216             : {
     217             :     try {
     218           0 :         Reference < XDesktop2 > xDesktop = Desktop::create( ::comphelper::getProcessComponentContext() );
     219           0 :         Sequence < com::sun::star::beans::PropertyValue > args(2);
     220           0 :         args[0].Name = "ViewOnly";
     221           0 :         args[0].Value <<= sal_True;
     222           0 :         args[1].Name = "ReadOnly";
     223           0 :         args[1].Value <<= sal_True;
     224             : 
     225           0 :         OUString aURL;
     226           0 :         if ( checkURL ( pBaseName, ".fodt", aURL ) ||
     227           0 :              checkURL ( pBaseName, ".html", aURL ) ||
     228           0 :              checkURL ( pBaseName, "", aURL ) ) {
     229           0 :             xDesktop->loadComponentFromURL( aURL, OUString("_blank"), 0, args );
     230           0 :         }
     231           0 :     } catch (const ::com::sun::star::uno::Exception &) {
     232             :     }
     233           0 : }
     234             : 
     235             : namespace
     236             : {
     237           0 :     class LicenseDialog : public ModalDialog
     238             :     {
     239             :     private:
     240             :         DECL_LINK(ShowHdl, void *);
     241             :     public:
     242             :         LicenseDialog(vcl::Window *pParent=NULL);
     243             :     };
     244             : 
     245           0 :     LicenseDialog::LicenseDialog(vcl::Window *pParent)
     246           0 :         : ModalDialog(pParent, "LicenseDialog", "sfx/ui/licensedialog.ui")
     247             :     {
     248           0 :         get<PushButton>("show")->SetClickHdl(LINK(this, LicenseDialog, ShowHdl));
     249           0 :     }
     250             : 
     251           0 :     IMPL_LINK_NOARG(LicenseDialog, ShowHdl)
     252             :     {
     253           0 :         EndDialog(RET_OK);
     254           0 :         showDocument("LICENSE");
     255           0 :         return 0;
     256             :     }
     257             : }
     258             : 
     259           0 : void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
     260             : {
     261           0 :     bool bDone = false;
     262           0 :     switch ( rReq.GetSlot() )
     263             :     {
     264             :         case SID_SETOPTIONS:
     265             :         {
     266           0 :             if( rReq.GetArgs() )
     267           0 :                 SetOptions_Impl( *rReq.GetArgs() );
     268           0 :             break;
     269             :         }
     270             : 
     271             :         case SID_QUITAPP:
     272             :         case SID_EXITANDRETURN:
     273             :         case SID_LOGOUT:
     274             :         {
     275             :             // protect against reentrant calls
     276           0 :             if ( pAppData_Impl->bInQuit )
     277           0 :                 return;
     278             : 
     279           0 :             if ( rReq.GetSlot() == SID_LOGOUT )
     280             :             {
     281           0 :                 for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst();
     282             :                     pObjSh; pObjSh = SfxObjectShell::GetNext( *pObjSh ) )
     283             :                 {
     284           0 :                     if ( !pObjSh->IsModified() )
     285           0 :                         continue;
     286             : 
     287           0 :                     SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pObjSh );
     288           0 :                     if ( !pFrame || !pFrame->GetWindow().IsReallyVisible() )
     289           0 :                         continue;
     290             : 
     291           0 :                     if (pObjSh->PrepareClose(true))
     292           0 :                         pObjSh->SetModified( false );
     293             :                     else
     294           0 :                         return;
     295             :                 }
     296             : 
     297           0 :                 SfxStringItem aNameItem( SID_FILE_NAME, OUString("vnd.sun.star.cmd:logout") );
     298           0 :                 SfxStringItem aReferer( SID_REFERER, "private/user" );
     299           0 :                 pAppData_Impl->pAppDispat->Execute( SID_OPENDOC, SfxCallMode::SLOT, &aNameItem, &aReferer, 0L );
     300           0 :                 return;
     301             :             }
     302             : 
     303             :             // aus verschachtelten Requests nach 100ms nochmal probieren
     304           0 :             if( Application::GetDispatchLevel() > 1 )
     305             :             {
     306             :                 /* Dont save the request for closing the application and try it later
     307             :                    again. This is an UI bound functionality ... and the user will  try it again
     308             :                    if the dialog is closed. But we should not close the application automatically
     309             :                    if this dialog is closed by the user ...
     310             :                    So we ignore this request now and wait for a new user decision.
     311             :                 */
     312             :                 OSL_TRACE( "QueryExit => sal_False (DispatchLevel == %u)", Application::GetDispatchLevel() );
     313           0 :                 return;
     314             :             }
     315             : 
     316             :             // block reentrant calls
     317           0 :             pAppData_Impl->bInQuit = true;
     318           0 :             Reference < XDesktop2 > xDesktop = Desktop::create ( ::comphelper::getProcessComponentContext() );
     319             : 
     320           0 :             rReq.ForgetAllArgs();
     321             : 
     322             :             // if terminate() failed, pAppData_Impl->bInQuit will now be sal_False, allowing further calls of SID_QUITAPP
     323           0 :             bool bTerminated = xDesktop->terminate();
     324           0 :             if (!bTerminated)
     325             :                 // if terminate() was successful, SfxApplication is now dead!
     326           0 :                 pAppData_Impl->bInQuit = false;
     327             : 
     328             :             // Set return value, terminate if possible
     329           0 :             rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bTerminated ) );
     330           0 :             return;
     331             :         }
     332             : 
     333             :         case SID_CONFIG:
     334             :         case SID_TOOLBOXOPTIONS:
     335             :         case SID_CONFIGSTATUSBAR:
     336             :         case SID_CONFIGMENU:
     337             :         case SID_CONFIGACCEL:
     338             :         case SID_CONFIGEVENT:
     339             :         {
     340             :             SfxAbstractDialogFactory* pFact =
     341           0 :                 SfxAbstractDialogFactory::Create();
     342             : 
     343           0 :             if ( pFact )
     344             :             {
     345           0 :                 SFX_REQUEST_ARG(rReq, pStringItem,
     346             :                     SfxStringItem, SID_CONFIG, false);
     347             : 
     348             :                 SfxItemSet aSet(
     349           0 :                     GetPool(), SID_CONFIG, SID_CONFIG );
     350             : 
     351           0 :                 if ( pStringItem )
     352             :                 {
     353             :                     aSet.Put( SfxStringItem(
     354           0 :                         SID_CONFIG, pStringItem->GetValue() ) );
     355             :                 }
     356             : 
     357           0 :                 Reference< XFrame > xFrame;
     358           0 :                 const SfxItemSet* pIntSet = rReq.GetInternalArgs_Impl();
     359           0 :                 SFX_ITEMSET_ARG( pIntSet, pFrameItem, SfxUnoFrameItem, SID_FILLFRAME, false );
     360           0 :                 if ( pFrameItem )
     361           0 :                     xFrame = pFrameItem->GetFrame();
     362             : 
     363             :                 boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateTabDialog(
     364             :                     RID_SVXDLG_CUSTOMIZE,
     365           0 :                     NULL, &aSet, xFrame ));
     366             : 
     367           0 :                 if ( pDlg )
     368             :                 {
     369           0 :                     const short nRet = pDlg->Execute();
     370             : 
     371           0 :                     if ( nRet )
     372           0 :                         bDone = true;
     373           0 :                 }
     374             :             }
     375           0 :             break;
     376             :         }
     377             : 
     378             :         case SID_CLOSEDOCS:
     379             :         case SID_CLOSEWINS:
     380             :         {
     381             : 
     382           0 :             Reference < XDesktop2 > xDesktop  = Desktop::create( ::comphelper::getProcessComponentContext() );
     383           0 :             Reference< XIndexAccess > xTasks( xDesktop->getFrames(), UNO_QUERY );
     384           0 :             if ( !xTasks.is() )
     385           0 :                 break;
     386             : 
     387           0 :             sal_Int32 n=0;
     388             :             do
     389             :             {
     390           0 :                 if ( xTasks->getCount() <= n )
     391           0 :                     break;
     392             : 
     393           0 :                 Any aAny = xTasks->getByIndex(n);
     394           0 :                 Reference < XCloseable > xTask;
     395           0 :                 aAny >>= xTask;
     396             :                 try
     397             :                 {
     398           0 :                     xTask->close(sal_True);
     399           0 :                     n++;
     400             :                 }
     401           0 :                 catch( CloseVetoException& )
     402             :                 {
     403           0 :                 }
     404             :             }
     405             :             while( true );
     406             : 
     407           0 :             bool bOk = ( n == 0);
     408           0 :             rReq.SetReturnValue( SfxBoolItem( 0, bOk ) );
     409           0 :             bDone = true;
     410           0 :             break;
     411             :         }
     412             : 
     413             :         case SID_SAVEDOCS:
     414             :         {
     415           0 :             bool bOK = true;
     416           0 :             for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst();
     417             :                   pObjSh;
     418             :                   pObjSh = SfxObjectShell::GetNext( *pObjSh ) )
     419             :             {
     420           0 :                 SfxRequest aReq( SID_SAVEDOC, SfxCallMode::SLOT, pObjSh->GetPool() );
     421           0 :                 if ( pObjSh->IsModified() )
     422             :                 {
     423           0 :                     pObjSh->ExecuteSlot( aReq );
     424           0 :                     const SfxBoolItem *pItem = PTR_CAST( SfxBoolItem, aReq.GetReturnValue() );
     425           0 :                     if ( !pItem || !pItem->GetValue() )
     426           0 :                         bOK = false;
     427             :                 }
     428           0 :             }
     429             : 
     430           0 :             rReq.SetReturnValue( SfxBoolItem( 0, bOK ) );
     431           0 :             rReq.Done();
     432           0 :             break;
     433             :         }
     434             : 
     435             :         case SID_SEND_FEEDBACK:
     436             :         {
     437           0 :             OUString module = SfxHelp::GetCurrentModuleIdentifier();
     438           0 :             OUString sURL("http://hub.libreoffice.org/send-feedback/?LOversion=" + utl::ConfigManager::getAboutBoxProductVersion() +
     439           0 :                 "&LOlocale=" + utl::ConfigManager::getLocale() + "&LOmodule=" + module.copy(module.lastIndexOf('.') + 1 )  );
     440             :             try
     441             :             {
     442             :                 uno::Reference< com::sun::star::system::XSystemShellExecute > xSystemShellExecute(
     443           0 :                     com::sun::star::system::SystemShellExecute::create(::comphelper::getProcessComponentContext()) );
     444           0 :                 xSystemShellExecute->execute( sURL, OUString(), com::sun::star::system::SystemShellExecuteFlags::URIS_ONLY );
     445             :             }
     446           0 :             catch ( uno::Exception& )
     447             :             {
     448             :             }
     449           0 :             break;
     450             :         }
     451             : 
     452             :         case SID_SHOW_LICENSE:
     453             :         {
     454           0 :             ScopedVclPtrInstance< LicenseDialog > aDialog;
     455           0 :             aDialog->Execute();
     456           0 :             break;
     457             :         }
     458             : 
     459             :         case SID_SHOW_CREDITS:
     460             :         {
     461           0 :             showDocument( "CREDITS" );
     462           0 :             break;
     463             :         }
     464             : 
     465             :         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     466             :         case SID_HELPINDEX:
     467             :         {
     468           0 :             Help* pHelp = Application::GetHelp();
     469           0 :             if ( pHelp )
     470             :             {
     471           0 :                 pHelp->Start( OUString(".uno:HelpIndex"), NULL ); // show start page
     472           0 :                 bDone = true;
     473             :             }
     474           0 :             break;
     475             :         }
     476             : 
     477             :         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     478             :         case SID_HELPTIPS:
     479             :         {
     480             :             // Evaluate Parameter
     481           0 :             SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELPTIPS, false);
     482             :             bool bOn = pOnItem
     483             :                             ? pOnItem->GetValue()
     484           0 :                             : !Help::IsQuickHelpEnabled();
     485             : 
     486           0 :             if ( bOn )
     487           0 :                 Help::EnableQuickHelp();
     488             :             else
     489           0 :                 Help::DisableQuickHelp();
     490           0 :             SvtHelpOptions().SetHelpTips( bOn );
     491           0 :             Invalidate(SID_HELPTIPS);
     492           0 :             bDone = true;
     493             : 
     494             :             // Record if possible
     495           0 :             if ( !rReq.IsAPI() )
     496           0 :                 rReq.AppendItem( SfxBoolItem( SID_HELPTIPS, bOn) );
     497           0 :             break;
     498             :         }
     499             :         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     500             :         case SID_EXTENDEDHELP:
     501             :         {
     502           0 :             Help::StartExtHelp();
     503           0 :             break;
     504             :         }
     505             :         case SID_HELPBALLOONS:
     506             :         {
     507             :             // Evaluate Parameter
     508           0 :             SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELPBALLOONS, false);
     509             :             bool bOn = pOnItem
     510             :                             ? pOnItem->GetValue()
     511           0 :                             : !Help::IsBalloonHelpEnabled();
     512             : 
     513           0 :             if ( bOn )
     514           0 :                 Help::EnableBalloonHelp();
     515             :             else
     516           0 :                 Help::DisableBalloonHelp();
     517           0 :             SvtHelpOptions().SetExtendedHelp( bOn );
     518           0 :             Invalidate(SID_HELPBALLOONS);
     519           0 :             bDone = true;
     520             : 
     521             :             // Record if possible
     522           0 :             if ( !rReq.IsAPI() )
     523           0 :                 rReq.AppendItem( SfxBoolItem( SID_HELPBALLOONS, bOn) );
     524           0 :             break;
     525             :         }
     526             : 
     527             :         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     528             :         case SID_ABOUT:
     529             :         {
     530           0 :             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
     531           0 :             if ( pFact )
     532             :             {
     533           0 :                 boost::scoped_ptr<VclAbstractDialog> pDlg(pFact->CreateVclDialog( 0, RID_DEFAULTABOUT ));
     534           0 :                 pDlg->Execute();
     535           0 :                 bDone = true;
     536             :             }
     537           0 :             break;
     538             :         }
     539             : 
     540             :         case SID_TEMPLATE_MANAGER:
     541             :         {
     542           0 :             ScopedVclPtrInstance< SfxTemplateManagerDlg > dlg;
     543           0 :             dlg->Execute();
     544           0 :             bDone = true;
     545           0 :             break;
     546             :         }
     547             : 
     548             :         case SID_TEMPLATE_ADDRESSBOKSOURCE:
     549             :         {
     550           0 :             ScopedVclPtrInstance< svt::AddressBookSourceDialog > aDialog(GetTopWindow(), ::comphelper::getProcessComponentContext());
     551           0 :             aDialog->Execute();
     552           0 :             bDone = true;
     553           0 :             break;
     554             :         }
     555             : 
     556             : #if HAVE_FEATURE_SCRIPTING
     557             :         case SID_BASICSTOP:
     558           0 :             StarBASIC::Stop();
     559           0 :             break;
     560             : 
     561             :         case SID_BASICBREAK :
     562           0 :             BasicDLL::BasicBreak();
     563           0 :             break;
     564             : #endif
     565             : 
     566             :         case SID_SHOW_IME_STATUS_WINDOW:
     567           0 :             if (sfx2::appl::ImeStatusWindow::canToggle())
     568             :             {
     569             :                 SfxBoolItem const * pItem = static_cast< SfxBoolItem const * >(
     570             :                     rReq.GetArg(SID_SHOW_IME_STATUS_WINDOW, false,
     571           0 :                                 TYPE(SfxBoolItem)));
     572             :                 bool bShow = pItem == 0
     573           0 :                     ? !pAppData_Impl->m_xImeStatusWindow->isShowing()
     574           0 :                     : pItem->GetValue();
     575           0 :                 pAppData_Impl->m_xImeStatusWindow->show(bShow);
     576           0 :                 if (pItem == 0)
     577             :                     rReq.AppendItem(SfxBoolItem(SID_SHOW_IME_STATUS_WINDOW,
     578           0 :                                                 bShow));
     579             :             }
     580           0 :             bDone = true;
     581           0 :             break;
     582             : 
     583             :         case SID_ZOOM_50_PERCENT:
     584             :         case SID_ZOOM_75_PERCENT:
     585             :         case SID_ZOOM_100_PERCENT:
     586             :         case SID_ZOOM_150_PERCENT:
     587             :         case SID_ZOOM_200_PERCENT:
     588             :         case SID_ZOOM_OPTIMAL:
     589             :         case SID_ZOOM_ENTIRE_PAGE:
     590             :         case SID_ZOOM_PAGE_WIDTH:
     591             :         {
     592           0 :             SfxObjectShell* pCurrentShell = SfxObjectShell::Current();
     593           0 :             if (!pCurrentShell)
     594           0 :                 return;
     595             : 
     596             :             // make sure aZoom is initialized with a proper value if SetType
     597             :             // doesn't work
     598           0 :             SvxZoomItem aZoom( SvxZoomType::PERCENT, 100 );
     599             : 
     600           0 :             switch (rReq.GetSlot())
     601             :             {
     602             :                 case SID_ZOOM_50_PERCENT:
     603           0 :                     aZoom.SetValue(50);
     604           0 :                     break;
     605             :                 case SID_ZOOM_75_PERCENT:
     606           0 :                     aZoom.SetValue(75);
     607           0 :                     break;
     608             :                 case SID_ZOOM_100_PERCENT:
     609           0 :                     aZoom.SetValue(100);
     610           0 :                     break;
     611             :                 case SID_ZOOM_150_PERCENT:
     612           0 :                     aZoom.SetValue(150);
     613           0 :                     break;
     614             :                 case SID_ZOOM_200_PERCENT:
     615           0 :                     aZoom.SetValue(200);
     616           0 :                     break;
     617             :                 case SID_ZOOM_OPTIMAL:
     618           0 :                     aZoom.SetType( SvxZoomType::OPTIMAL );
     619           0 :                     break;
     620             :                 case SID_ZOOM_ENTIRE_PAGE:
     621           0 :                     aZoom.SetType( SvxZoomType::WHOLEPAGE );
     622           0 :                     break;
     623             :                 case SID_ZOOM_PAGE_WIDTH:
     624           0 :                     aZoom.SetType( SvxZoomType::PAGEWIDTH );
     625           0 :                     break;
     626             :             }
     627             : 
     628           0 :             pCurrentShell->GetDispatcher()->Execute(SID_ATTR_ZOOM, SfxCallMode::ASYNCHRON, &aZoom, 0L);
     629             : 
     630           0 :             break;
     631             :         }
     632             :         case SID_AVAILABLE_TOOLBARS:
     633             :         {
     634             :             SfxStringItem const * pToolbarName = static_cast< SfxStringItem const *>(
     635           0 :                     rReq.GetArg(SID_AVAILABLE_TOOLBARS, false, TYPE(SfxStringItem)));
     636             : 
     637           0 :             if ( pToolbarName )
     638             :             {
     639           0 :                 Reference < XDesktop2 > xDesktop = Desktop::create ( ::comphelper::getProcessComponentContext() );
     640           0 :                 Reference< XFrame > xFrame = xDesktop->getActiveFrame();
     641             : 
     642           0 :                 Reference< com::sun::star::beans::XPropertySet > xPropSet( xFrame, UNO_QUERY );
     643           0 :                 Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
     644           0 :                 if ( xPropSet.is() )
     645             :                 {
     646             :                     try
     647             :                     {
     648           0 :                         Any aValue = xPropSet->getPropertyValue("LayoutManager");
     649           0 :                         aValue >>= xLayoutManager;
     650             :                     }
     651           0 :                     catch ( const ::com::sun::star::uno::RuntimeException& )
     652             :                     {
     653           0 :                         throw;
     654             :                     }
     655           0 :                     catch ( ::com::sun::star::uno::Exception& )
     656             :                     {
     657             :                     }
     658             :                 }
     659             : 
     660           0 :                 if ( xLayoutManager.is() )
     661             :                 {
     662           0 :                     OUString aToolbarResName( "private:resource/toolbar/" );
     663           0 :                     OUStringBuffer aBuf( aToolbarResName );
     664           0 :                     aBuf.append( pToolbarName->GetValue() );
     665             : 
     666             :                     // Evaluate Parameter
     667           0 :                     OUString aToolbarName( aBuf.makeStringAndClear() );
     668           0 :                     bool bShow( !xLayoutManager->isElementVisible( aToolbarName ));
     669             : 
     670           0 :                     if ( bShow )
     671             :                     {
     672           0 :                         xLayoutManager->createElement( aToolbarName );
     673           0 :                         xLayoutManager->showElement( aToolbarName );
     674             :                     }
     675             :                     else
     676           0 :                         xLayoutManager->hideElement( aToolbarName );
     677           0 :                 }
     678             :             }
     679             : 
     680           0 :             bDone = true;
     681           0 :             break;
     682             :         }
     683             : 
     684             :         default:
     685           0 :             break;
     686             :     }
     687             : 
     688           0 :     if ( bDone )
     689           0 :         rReq.Done();
     690             : }
     691             : 
     692             : 
     693             : 
     694        1756 : void SfxApplication::MiscState_Impl(SfxItemSet &rSet)
     695             : {
     696        1756 :     const sal_uInt16 *pRanges = rSet.GetRanges();
     697             :     DBG_ASSERT(pRanges && *pRanges, "Set without range");
     698        5274 :     while ( *pRanges )
     699             :     {
     700        3524 :         for(sal_uInt16 nWhich = *pRanges++; nWhich <= *pRanges; ++nWhich)
     701             :         {
     702        1762 :             switch(nWhich)
     703             :             {
     704             :                 case SID_TEMPLATE_ADDRESSBOKSOURCE:
     705           0 :                     if ( !SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::EModule::DATABASE) )
     706           0 :                         rSet.Put(SfxVisibilityItem(nWhich, false));
     707           0 :                     break;
     708             :                 case SID_EXITANDRETURN:
     709             :                 case SID_QUITAPP:
     710             :                 {
     711           0 :                     if ( pAppData_Impl->nDocModalMode )
     712           0 :                         rSet.DisableItem(nWhich);
     713             :                     else
     714           0 :                         rSet.Put(SfxStringItem(nWhich, SfxResId(STR_QUITAPP).toString()));
     715           0 :                     break;
     716             :                 }
     717             : 
     718             :                 case SID_CONFIG:
     719             :                 case SID_TOOLBOXOPTIONS:
     720             :                 case SID_CONFIGSTATUSBAR:
     721             :                 case SID_CONFIGMENU:
     722             :                 case SID_CONFIGACCEL:
     723             :                 case SID_CONFIGEVENT:
     724             :                 {
     725           1 :                     if( SvtMiscOptions().DisableUICustomization() )
     726           0 :                         rSet.DisableItem(nWhich);
     727           1 :                     break;
     728             :                 }
     729             : 
     730             : #if HAVE_FEATURE_SCRIPTING
     731             :                 case SID_BASICSTOP:
     732           0 :                     if ( !StarBASIC::IsRunning() )
     733           0 :                         rSet.DisableItem(nWhich);
     734           0 :                     break;
     735             : #endif
     736             : 
     737             :                 case SID_HELPTIPS:
     738             :                 {
     739           0 :                     rSet.Put( SfxBoolItem( SID_HELPTIPS, Help::IsQuickHelpEnabled() ) );
     740             :                 }
     741           0 :                 break;
     742             :                 case SID_HELPBALLOONS:
     743             :                 {
     744           0 :                     rSet.Put( SfxBoolItem( SID_HELPBALLOONS, Help::IsBalloonHelpEnabled() ) );
     745             :                 }
     746           0 :                 break;
     747             : 
     748             :                 case SID_EXTENDEDHELP:
     749             :                 {
     750             :                 }
     751        1719 :                 break;
     752             : 
     753             :                 case SID_CLOSEDOCS:
     754             :                 case SID_CLOSEWINS:
     755             :                 {
     756           0 :                     Reference < XDesktop2 > xDesktop = Desktop::create( ::comphelper::getProcessComponentContext() );
     757           0 :                     Reference< XIndexAccess > xTasks( xDesktop->getFrames(), UNO_QUERY );
     758           0 :                     if ( !xTasks.is() || !xTasks->getCount() )
     759           0 :                         rSet.DisableItem(nWhich);
     760           0 :                     break;
     761             :                 }
     762             : 
     763             :                 case SID_SAVEDOCS:
     764             :                 {
     765           0 :                     bool bModified = false;
     766           0 :                     for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst();
     767             :                           pObjSh;
     768             :                           pObjSh = SfxObjectShell::GetNext( *pObjSh ) )
     769             :                     {
     770           0 :                         if ( pObjSh->IsModified() )
     771             :                         {
     772           0 :                             bModified = true;
     773           0 :                             break;
     774             :                         }
     775             :                     }
     776             : 
     777           0 :                     if ( !bModified )
     778           0 :                         rSet.DisableItem( nWhich );
     779           0 :                     break;
     780             :                 }
     781             : 
     782             :                 case SID_SHOW_IME_STATUS_WINDOW:
     783           5 :                     if (sfx2::appl::ImeStatusWindow::canToggle())
     784             :                         rSet.Put(SfxBoolItem(
     785             :                                      SID_SHOW_IME_STATUS_WINDOW,
     786             :                                      pAppData_Impl->m_xImeStatusWindow->
     787           0 :                                          isShowing()));
     788             :                     else
     789           5 :                         rSet.DisableItem(SID_SHOW_IME_STATUS_WINDOW);
     790           5 :                     break;
     791             : 
     792             :                 case SID_TEMPLATE_MANAGER:
     793             :                     {
     794           0 :                         SvtMiscOptions aMiscOptions;
     795           0 :                         if ( !aMiscOptions.IsExperimentalMode() )
     796             :                         {
     797           0 :                            rSet.DisableItem( nWhich );
     798           0 :                            rSet.Put( SfxVisibilityItem( nWhich, false ) );
     799           0 :                         }
     800             :                     }
     801           0 :                     break;
     802             : 
     803             :                 case SID_ZOOM_50_PERCENT:
     804             :                 case SID_ZOOM_75_PERCENT:
     805             :                 case SID_ZOOM_100_PERCENT:
     806             :                 case SID_ZOOM_150_PERCENT:
     807             :                 case SID_ZOOM_200_PERCENT:
     808             :                 case SID_ZOOM_OPTIMAL:
     809             :                 case SID_ZOOM_ENTIRE_PAGE:
     810             :                 case SID_ZOOM_PAGE_WIDTH:
     811             :                     {
     812          36 :                         SfxObjectShell* pCurrentShell = SfxObjectShell::Current();
     813             : 
     814             :                         const SfxPoolItem *pItem;
     815             :                         SfxItemState aState = pCurrentShell ?
     816          36 :                             pCurrentShell->GetDispatcher()->QueryState(SID_ATTR_ZOOM, pItem) : SfxItemState::DISABLED;
     817          36 :                         if ( aState == SfxItemState::DISABLED )
     818           0 :                             rSet.DisableItem( nWhich );
     819             :                     }
     820          36 :                     break;
     821             : 
     822             :                 default:
     823           1 :                     break;
     824             :             }
     825             :         }
     826             : 
     827        1762 :         ++pRanges;
     828             :     }
     829        1756 : }
     830             : 
     831             : #if HAVE_FEATURE_SCRIPTING
     832             : 
     833             : #ifndef DISABLE_DYNLOADING
     834             : 
     835             : typedef rtl_uString* (SAL_CALL *basicide_choose_macro)(void*, sal_Bool, rtl_uString*);
     836             : 
     837           0 : extern "C" { static void SAL_CALL thisModule() {} }
     838             : 
     839             : #else
     840             : 
     841             : extern "C" rtl_uString* basicide_choose_macro(void*, sal_Bool, rtl_uString*);
     842             : 
     843             : #endif
     844             : 
     845           0 : OUString ChooseMacro( const Reference< XModel >& rxLimitToDocument, bool bChooseOnly, const OUString& rMacroDesc = OUString() )
     846             : {
     847             : #ifndef DISABLE_DYNLOADING
     848           0 :     osl::Module aMod;
     849             : 
     850             :     // load basctl module
     851           0 :     aMod.loadRelative(&thisModule, SVLIBRARY("basctl"), 0);
     852             : 
     853             :     // get symbol
     854           0 :     basicide_choose_macro pSymbol = reinterpret_cast<basicide_choose_macro>(aMod.getFunctionSymbol("basicide_choose_macro"));
     855             :     SAL_WARN_IF(!pSymbol, "sfx.doc", "SfxApplication::MacroOrganizer, no symbol!");
     856           0 :     if (!pSymbol)
     857           0 :         return OUString();
     858           0 :     aMod.release();
     859             : #else
     860             : #define pSymbol basicide_choose_macro
     861             : #endif
     862             : 
     863             :     // call basicide_choose_macro in basctl
     864           0 :     rtl_uString* pScriptURL = pSymbol( rxLimitToDocument.get(), bChooseOnly, rMacroDesc.pData );
     865           0 :     OUString aScriptURL( pScriptURL );
     866           0 :     rtl_uString_release( pScriptURL );
     867           0 :     return aScriptURL;
     868             : 
     869             : #ifdef DISABLE_DYNLOADING
     870             : #undef pSymbol
     871             : #endif
     872             : }
     873             : 
     874             : #endif
     875             : 
     876             : namespace
     877             : {
     878             : #if HAVE_FEATURE_SCRIPTING
     879           0 :     vcl::Window* lcl_getDialogParent( const Reference< XFrame >& _rxFrame, vcl::Window* _pFallback )
     880             :     {
     881           0 :         if ( !_rxFrame.is() )
     882           0 :             return _pFallback;
     883             : 
     884             :         try
     885             :         {
     886           0 :             Reference< awt::XWindow > xContainerWindow( _rxFrame->getContainerWindow(), UNO_SET_THROW );
     887           0 :             vcl::Window* pWindow = VCLUnoHelper::GetWindow( xContainerWindow );
     888             :             OSL_ENSURE( pWindow, "lcl_getDialogParent: cool, somebody implemented a VCL-less toolkit!" );
     889             : 
     890           0 :             if ( pWindow )
     891           0 :                 return pWindow->GetSystemWindow();
     892             :         }
     893           0 :         catch( const Exception& )
     894             :         {
     895             :             DBG_UNHANDLED_EXCEPTION();
     896             :         }
     897           0 :         return _pFallback;
     898             :     }
     899             : 
     900           0 :     static OUString lcl_getBasicIDEServiceName()
     901             :     {
     902           0 :         return OUString( "com.sun.star.script.BasicIDE");
     903             :     }
     904             : 
     905           0 :     SfxViewFrame* lcl_getBasicIDEViewFrame( SfxObjectShell* i_pBasicIDE )
     906             :     {
     907           0 :         SfxViewFrame* pView = SfxViewFrame::GetFirst( i_pBasicIDE );
     908           0 :         while ( pView )
     909             :         {
     910           0 :             if ( pView->GetObjectShell()->GetFactory().GetDocumentServiceName() == lcl_getBasicIDEServiceName() )
     911           0 :                 break;
     912           0 :             pView = SfxViewFrame::GetNext( *pView, i_pBasicIDE );
     913             :         }
     914           0 :         return pView;
     915             :     }
     916           0 :     Reference< XFrame > lcl_findStartModuleFrame( const Reference<XComponentContext> & rxContext )
     917             :     {
     918             :         try
     919             :         {
     920           0 :             Reference < XDesktop2 > xDesktop = Desktop::create( rxContext );
     921           0 :             Reference < XIndexAccess > xContainer( xDesktop->getFrames(), UNO_QUERY_THROW );
     922             : 
     923           0 :             Reference< XModuleManager2 > xCheck = ModuleManager::create(rxContext);
     924             : 
     925           0 :             sal_Int32 nCount = xContainer->getCount();
     926           0 :             for ( sal_Int32 i=0; i<nCount; ++i )
     927             :             {
     928             :                 try
     929             :                 {
     930           0 :                     Reference < XFrame > xFrame( xContainer->getByIndex(i), UNO_QUERY_THROW );
     931           0 :                     OUString sModule = xCheck->identify( xFrame );
     932           0 :                     if ( sModule == "com.sun.star.frame.StartModule" )
     933           0 :                         return xFrame;
     934             :                 }
     935           0 :                 catch( const UnknownModuleException& )
     936             :                 {
     937             :                     // silence
     938             :                 }
     939           0 :                 catch(const Exception&)
     940             :                 {
     941             :                     // re-throw, caught below
     942           0 :                     throw;
     943             :                 }
     944           0 :             }
     945             :         }
     946           0 :         catch( const Exception& )
     947             :         {
     948             :                DBG_UNHANDLED_EXCEPTION();
     949             :         }
     950           0 :         return NULL;
     951             :     }
     952             : #endif // HAVE_FEATURE_SCRIPTING
     953             : }
     954             : 
     955           0 : void SfxApplication::OfaExec_Impl( SfxRequest& rReq )
     956             : {
     957           0 :     switch ( rReq.GetSlot() )
     958             :     {
     959             :         case SID_OPTIONS_TREEDIALOG:
     960             :         {
     961           0 :             OUString sPageURL;
     962           0 :             SFX_REQUEST_ARG( rReq, pURLItem, SfxStringItem, SID_OPTIONS_PAGEURL, false );
     963           0 :             if ( pURLItem )
     964           0 :                 sPageURL = pURLItem->GetValue();
     965           0 :             const SfxItemSet* pArgs = rReq.GetInternalArgs_Impl();
     966           0 :             const SfxPoolItem* pItem = NULL;
     967           0 :             Reference < XFrame > xFrame;
     968           0 :             if ( pArgs && pArgs->GetItemState( SID_FILLFRAME, false, &pItem ) == SfxItemState::SET )
     969             :             {
     970             :                 OSL_ENSURE( pItem->ISA( SfxUnoFrameItem ), "SfxApplication::OfaExec_Impl: XFrames are to be transported via SfxUnoFrameItem by now!" );
     971           0 :                 xFrame = static_cast< const SfxUnoFrameItem*>( pItem )->GetFrame();
     972             :             }
     973           0 :             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
     974           0 :             if ( pFact )
     975             :             {
     976             :                 VclAbstractDialog* pDlg =
     977           0 :                     pFact->CreateFrameDialog( NULL, xFrame, rReq.GetSlot(), sPageURL );
     978           0 :                 short nRet = pDlg->Execute();
     979           0 :                 delete pDlg;
     980           0 :                 SfxViewFrame* pView = SfxViewFrame::GetFirst();
     981           0 :                 while ( pView )
     982             :                 {
     983           0 :                     if (nRet == RET_OK)
     984             :                     {
     985           0 :                         SfxObjectShell* pObjSh = pView->GetObjectShell();
     986           0 :                         if (pObjSh)
     987           0 :                             pObjSh->SetConfigOptionsChecked(false);
     988             :                     }
     989           0 :                     pView->GetBindings().InvalidateAll(false);
     990           0 :                     pView = SfxViewFrame::GetNext( *pView );
     991             :                 }
     992             :             }
     993           0 :             break;
     994             :         }
     995             : 
     996             :         case SID_MORE_DICTIONARIES:
     997             :         {
     998             :             try
     999             :             {
    1000             :                 uno::Reference< uno::XComponentContext > xContext =
    1001           0 :                     ::comphelper::getProcessComponentContext();
    1002             :                 uno::Reference< css::system::XSystemShellExecute > xSystemShell(
    1003           0 :                     css::system::SystemShellExecute::create(xContext) );
    1004             : 
    1005             :                 // read repository URL from configuration
    1006           0 :                 OUString sTemplRepoURL(officecfg::Office::Common::Dictionaries::RepositoryURL::get());
    1007             : 
    1008           0 :                 if ( xSystemShell.is() && !sTemplRepoURL.isEmpty() )
    1009             :                 {
    1010           0 :                     OUStringBuffer aURLBuf( sTemplRepoURL );
    1011           0 :                     aURLBuf.append("?lang=");
    1012             : 
    1013             :                     // read locale from configuration
    1014           0 :                     OUString sLocale(officecfg::Setup::L10N::ooLocale::get());
    1015           0 :                     if (sLocale.isEmpty())
    1016           0 :                         sLocale = "en-US";
    1017             : 
    1018           0 :                     aURLBuf.append( sLocale );
    1019           0 :                     xSystemShell->execute(
    1020             :                         aURLBuf.makeStringAndClear(),
    1021             :                         OUString(),
    1022           0 :                         css::system::SystemShellExecuteFlags::URIS_ONLY );
    1023           0 :                 }
    1024             :             }
    1025           0 :             catch( const ::com::sun::star::uno::Exception& )
    1026             :             {
    1027             :                 SAL_WARN( "sfx.appl", "SfxApplication::OfaExec_Impl(SID_MORE_DICTIONARIES): caught an exception!" );
    1028             :             }
    1029           0 :             break;
    1030             :         }
    1031             : #if HAVE_FEATURE_SCRIPTING
    1032             :         case SID_BASICIDE_APPEAR:
    1033             :         {
    1034           0 :             SfxViewFrame* pView = lcl_getBasicIDEViewFrame( NULL );
    1035           0 :             if ( !pView )
    1036             :             {
    1037           0 :                 SfxObjectShell* pBasicIDE = SfxObjectShell::CreateObject( lcl_getBasicIDEServiceName() );
    1038           0 :                 pBasicIDE->DoInitNew( 0 );
    1039           0 :                 pBasicIDE->SetModified( false );
    1040             :                 try
    1041             :                 {
    1042             :                     // load the Basic IDE via direct access to the SFX frame loader. A generic loadComponentFromURL
    1043             :                     // (which could be done via SfxViewFrame::LoadDocumentIntoFrame) is not feasible here, since the Basic IDE
    1044             :                     // does not really play nice with the framework's concept. For instance, it is a "singleton document",
    1045             :                     // which conflicts, at the latest, with the framework's concept of loading into _blank frames.
    1046             :                     // So, since we know that our frame loader can handle it, we skip the generic framework loader
    1047             :                     // mechanism, and the type detection (which doesn't know about the Basic IDE).
    1048           0 :                     Reference< XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
    1049             :                     Reference< XSynchronousFrameLoader > xLoader(
    1050           0 :                         xContext->getServiceManager()->createInstanceWithContext("com.sun.star.comp.office.FrameLoader", xContext),
    1051           0 :                         UNO_QUERY_THROW );
    1052           0 :                     ::comphelper::NamedValueCollection aLoadArgs;
    1053           0 :                     aLoadArgs.put( "Model", pBasicIDE->GetModel() );
    1054           0 :                     aLoadArgs.put( "URL", OUString( "private:factory/sbasic"  ) );
    1055             : 
    1056           0 :                     Reference< XFrame > xTargetFrame( lcl_findStartModuleFrame( xContext ) );
    1057           0 :                     if ( !xTargetFrame.is() )
    1058           0 :                         xTargetFrame = SfxFrame::CreateBlankFrame();
    1059           0 :                     ENSURE_OR_THROW( xTargetFrame.is(), "could not obtain a frameto load the Basic IDE into!" );
    1060             : 
    1061           0 :                     xLoader->load( aLoadArgs.getPropertyValues(), xTargetFrame );
    1062             :                 }
    1063           0 :                 catch( const Exception& )
    1064             :                 {
    1065             :                     DBG_UNHANDLED_EXCEPTION();
    1066             :                 }
    1067             : 
    1068           0 :                 pView = lcl_getBasicIDEViewFrame( pBasicIDE );
    1069           0 :                 if ( pView )
    1070           0 :                     pView->SetName( OUString( "BASIC:1" ) );
    1071             :             }
    1072             : 
    1073           0 :             if ( pView )
    1074           0 :                 pView->GetFrame().Appear();
    1075             : 
    1076           0 :             const SfxItemSet* pArgs = rReq.GetArgs();
    1077           0 :             if ( pArgs && pView )
    1078             :             {
    1079           0 :                 SfxViewShell* pViewShell = pView->GetViewShell();
    1080           0 :                 SfxObjectShell* pObjShell = pView->GetObjectShell();
    1081           0 :                 if ( pViewShell && pObjShell )
    1082             :                 {
    1083           0 :                     SfxRequest aReq( SID_BASICIDE_SHOWWINDOW, SfxCallMode::SYNCHRON, pObjShell->GetPool() );
    1084           0 :                     aReq.SetArgs( *pArgs );
    1085           0 :                     pViewShell->ExecuteSlot( aReq );
    1086             :                 }
    1087             :             }
    1088             : 
    1089           0 :             rReq.Done();
    1090             :         }
    1091           0 :         break;
    1092             : 
    1093             :         case SID_BASICCHOOSER:
    1094             :         {
    1095           0 :             const SfxItemSet* pArgs = rReq.GetArgs();
    1096             :             const SfxPoolItem* pItem;
    1097           0 :             bool bChooseOnly = false;
    1098           0 :             Reference< XModel > xLimitToModel;
    1099           0 :             if(pArgs && SfxItemState::SET == pArgs->GetItemState(SID_RECORDMACRO, false, &pItem) )
    1100             :             {
    1101           0 :                 bool bRecord = static_cast<const SfxBoolItem*>(pItem)->GetValue();
    1102           0 :                 if ( bRecord )
    1103             :                 {
    1104             :                     // !Hack
    1105           0 :                     bChooseOnly = false;
    1106           0 :                     SfxObjectShell* pCurrentShell = SfxObjectShell::Current();
    1107             :                     OSL_ENSURE( pCurrentShell, "macro recording outside an SFX document?" );
    1108           0 :                     if ( pCurrentShell )
    1109           0 :                         xLimitToModel = pCurrentShell->GetModel();
    1110             :                 }
    1111             :             }
    1112             : 
    1113           0 :             rReq.SetReturnValue( SfxStringItem( rReq.GetSlot(), ChooseMacro( xLimitToModel, bChooseOnly ) ) );
    1114           0 :             rReq.Done();
    1115             :         }
    1116           0 :         break;
    1117             : 
    1118             :         case SID_MACROORGANIZER:
    1119             :         {
    1120             :             OSL_TRACE("handling SID_MACROORGANIZER");
    1121           0 :             const SfxItemSet* pArgs = rReq.GetArgs();
    1122             :             const SfxPoolItem* pItem;
    1123           0 :             sal_Int16 nTabId = 0;
    1124           0 :             if(pArgs && SfxItemState::SET == pArgs->GetItemState(SID_MACROORGANIZER, false, &pItem) )
    1125             :             {
    1126           0 :                 nTabId = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
    1127             :             }
    1128             : 
    1129           0 :             SfxApplication::MacroOrganizer( nTabId );
    1130           0 :             rReq.Done();
    1131             :         }
    1132           0 :         break;
    1133             : 
    1134             :         case SID_RUNMACRO:
    1135             :         {
    1136           0 :             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
    1137             :             OSL_TRACE("SfxApplication::OfaExec_Impl: case ScriptOrg");
    1138             : 
    1139           0 :             Reference< XFrame > xFrame;
    1140           0 :             const SfxItemSet* pIntSet = rReq.GetInternalArgs_Impl();
    1141           0 :             SFX_ITEMSET_ARG( pIntSet, pFrameItem, SfxUnoFrameItem, SID_FILLFRAME, false );
    1142           0 :             if ( pFrameItem )
    1143           0 :                 xFrame = pFrameItem->GetFrame();
    1144             : 
    1145           0 :             if ( !xFrame.is() )
    1146             :             {
    1147           0 :                 const SfxViewFrame* pViewFrame = SfxViewFrame::Current();
    1148           0 :                 if ( pViewFrame )
    1149           0 :                     xFrame = pViewFrame->GetFrame().GetFrameInterface();
    1150             :             }
    1151             : 
    1152             :             do  // artificial loop for flow control
    1153             :             {
    1154             :                 boost::scoped_ptr<AbstractScriptSelectorDialog> pDlg(pFact->CreateScriptSelectorDialog(
    1155           0 :                     lcl_getDialogParent( xFrame, GetTopWindow() ), false, xFrame ));
    1156             :                 OSL_ENSURE( pDlg, "SfxApplication::OfaExec_Impl( SID_RUNMACRO ): no dialog!" );
    1157           0 :                 if ( !pDlg )
    1158           0 :                     break;
    1159           0 :                 pDlg->SetRunLabel();
    1160             : 
    1161           0 :                 short nDialogResult = pDlg->Execute();
    1162           0 :                 if ( !nDialogResult )
    1163           0 :                     break;
    1164             : 
    1165           0 :                 Sequence< Any > args;
    1166           0 :                 Sequence< sal_Int16 > outIndex;
    1167           0 :                 Sequence< Any > outArgs;
    1168           0 :                 Any ret;
    1169             : 
    1170           0 :                 Reference< XInterface > xScriptContext;
    1171             : 
    1172           0 :                 Reference< XController > xController;
    1173           0 :                 if ( xFrame.is() )
    1174           0 :                     xController = xFrame->getController();
    1175           0 :                 if ( xController.is() )
    1176           0 :                     xScriptContext = xController->getModel();
    1177           0 :                 if ( !xScriptContext.is() )
    1178           0 :                     xScriptContext = xController;
    1179             : 
    1180           0 :                 SfxObjectShell::CallXScript( xScriptContext, pDlg->GetScriptURL(), args, ret, outIndex, outArgs );
    1181             :             }
    1182             :             while ( false );
    1183           0 :             rReq.Done();
    1184             :         }
    1185           0 :         break;
    1186             : 
    1187             :         case SID_SCRIPTORGANIZER:
    1188             :         {
    1189           0 :             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
    1190             :             OSL_TRACE("SfxApplication::OfaExec_Impl: case ScriptOrg");
    1191           0 :             const SfxItemSet* pArgs = rReq.GetArgs();
    1192             :             const SfxPoolItem* pItem;
    1193           0 :             OUString aLanguage;
    1194           0 :             if(pArgs && SfxItemState::SET == pArgs->GetItemState(SID_SCRIPTORGANIZER, false, &pItem) )
    1195             :             {
    1196           0 :                 aLanguage = static_cast<const SfxScriptOrganizerItem*>(pItem)->getLanguage();
    1197             :             }
    1198             : 
    1199           0 :             OUString aLang( aLanguage );
    1200             :             OSL_TRACE("SfxApplication::OfaExec_Impl: about to create dialog for: %s", OUStringToOString( aLang , RTL_TEXTENCODING_ASCII_US ).pData->buffer);
    1201             :             // not sure about the vcl::Window*
    1202           0 :             VclAbstractDialog* pDlg = pFact->CreateSvxScriptOrgDialog( GetTopWindow(), aLanguage );
    1203           0 :             if( pDlg )
    1204             :             {
    1205           0 :                 pDlg->Execute();
    1206           0 :                 delete pDlg;
    1207             :             }
    1208             :             else
    1209             :             {
    1210             :                 OSL_TRACE("no dialog!!!");
    1211             :             }
    1212           0 :             rReq.Done();
    1213             :         }
    1214           0 :         break;
    1215             : #endif // HAVE_FEATURE_SCRIPTING
    1216             : 
    1217             :         case SID_OFFICE_CHECK_PLZ:
    1218             :         {
    1219           0 :             bool bRet = false;
    1220           0 :             SFX_REQUEST_ARG(rReq, pStringItem, SfxStringItem, rReq.GetSlot(), false);
    1221             : 
    1222           0 :             if ( pStringItem )
    1223             :             {
    1224           0 :                 bRet = true /*!!!SfxIniManager::CheckPLZ( aPLZ )*/;
    1225             :             }
    1226             : #if HAVE_FEATURE_SCRIPTING
    1227             :             else
    1228           0 :                 SbxBase::SetError( SbxERR_WRONG_ARGS );
    1229             : #endif
    1230           0 :             rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bRet ) );
    1231             :         }
    1232           0 :         break;
    1233             : 
    1234             :         case SID_AUTO_CORRECT_DLG:
    1235             :         {
    1236           0 :             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
    1237           0 :             if ( pFact )
    1238             :             {
    1239           0 :                 SfxItemSet aSet(GetPool(), SID_AUTO_CORRECT_DLG, SID_AUTO_CORRECT_DLG);
    1240           0 :                 const SfxPoolItem* pItem=NULL;
    1241           0 :                 const SfxItemSet* pSet = rReq.GetArgs();
    1242           0 :                 SfxItemPool* pSetPool = pSet ? pSet->GetPool() : NULL;
    1243           0 :                 if ( pSet && pSet->GetItemState( pSetPool->GetWhich( SID_AUTO_CORRECT_DLG ), false, &pItem ) == SfxItemState::SET )
    1244           0 :                     aSet.Put( *pItem );
    1245             : 
    1246           0 :                 boost::scoped_ptr<SfxAbstractTabDialog> pDlg(pFact->CreateTabDialog( RID_OFA_AUTOCORR_DLG, NULL, &aSet, NULL ));
    1247           0 :                 pDlg->Execute();
    1248             :             }
    1249             : 
    1250           0 :             break;
    1251             :         }
    1252             : 
    1253             :         case SID_SD_AUTOPILOT :
    1254             :         case SID_NEWSD :
    1255             :         {
    1256           0 :             SvtModuleOptions aModuleOpt;
    1257           0 :             if ( !aModuleOpt.IsImpress() )
    1258             :             {
    1259           0 :                 ScopedVclPtrInstance<MessageDialog>::Create( nullptr, SFX2_RESSTR( STR_MODULENOTINSTALLED ))->Execute();
    1260           0 :                 return;
    1261             :             }
    1262             : 
    1263           0 :             Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
    1264           0 :             Reference< frame::XDispatchProvider > xProv = drawing::ModuleDispatcher::create( xContext );
    1265             : 
    1266           0 :             OUString aCmd = OUString::createFromAscii( GetInterface()->GetSlot( rReq.GetSlot() )->GetUnoName() );
    1267           0 :             Reference< frame::XDispatchHelper > xHelper( frame::DispatchHelper::create(xContext) );
    1268           0 :             Sequence < beans::PropertyValue > aSeq;
    1269           0 :             if ( rReq.GetArgs() )
    1270           0 :                 TransformItems( rReq.GetSlot(), *rReq.GetArgs(), aSeq );
    1271           0 :             Any aResult = xHelper->executeDispatch( xProv, aCmd, OUString(), 0, aSeq );
    1272           0 :             frame::DispatchResultEvent aEvent;
    1273           0 :             bool bSuccess = (aResult >>= aEvent) &&
    1274           0 :                                 (aEvent.State == frame::DispatchResultState::SUCCESS);
    1275           0 :             rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bSuccess ) );
    1276             :         }
    1277           0 :         break;
    1278             : 
    1279             :         case FN_LABEL :
    1280             :         case FN_BUSINESS_CARD :
    1281             :         case FN_XFORMS_INIT :
    1282             :         {
    1283           0 :             Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
    1284           0 :             Reference< frame::XDispatchProvider > xProv = text::ModuleDispatcher::create( xContext );
    1285             : 
    1286           0 :             OUString aCmd = OUString::createFromAscii( GetInterface()->GetSlot( rReq.GetSlot() )->GetUnoName() );
    1287           0 :             Reference< frame::XDispatchHelper > xHelper( frame::DispatchHelper::create(xContext) );
    1288           0 :             Sequence < beans::PropertyValue > aSeq;
    1289           0 :             if ( rReq.GetArgs() )
    1290           0 :                 TransformItems( rReq.GetSlot(), *rReq.GetArgs(), aSeq );
    1291           0 :             Any aResult = xHelper->executeDispatch( xProv, aCmd, OUString(), 0, aSeq );
    1292           0 :             frame::DispatchResultEvent aEvent;
    1293           0 :             bool bSuccess = (aResult >>= aEvent) &&
    1294           0 :                                 (aEvent.State == frame::DispatchResultState::SUCCESS);
    1295           0 :             rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bSuccess ) );
    1296             :         }
    1297           0 :         break;
    1298             : 
    1299             :         case SID_ADDRESS_DATA_SOURCE:
    1300             :         {
    1301             :             try
    1302             :             {
    1303           0 :                 Reference< uno::XComponentContext > xORB = ::comphelper::getProcessComponentContext();
    1304           0 :                 Reference< ui::dialogs::XExecutableDialog > xDialog;
    1305           0 :                 xDialog = ui::dialogs::AddressBookSourcePilot::createWithParent(xORB, 0);
    1306           0 :                 xDialog->execute();
    1307             :             }
    1308           0 :             catch(const ::com::sun::star::uno::Exception&)
    1309             :             {
    1310             :                 DBG_UNHANDLED_EXCEPTION();
    1311             :             }
    1312             :         }
    1313           0 :         break;
    1314             : 
    1315             :         case SID_COMP_BIBLIOGRAPHY:
    1316           0 :             lcl_tryLoadBibliography();
    1317           0 :         break;
    1318             :     }
    1319             : }
    1320             : 
    1321           0 : void SfxApplication::OfaState_Impl(SfxItemSet &rSet)
    1322             : {
    1323           0 :     SvtModuleOptions aModuleOpt;
    1324             : 
    1325           0 :     if( !aModuleOpt.IsWriter())
    1326             :     {
    1327           0 :         rSet.DisableItem( FN_LABEL );
    1328           0 :         rSet.DisableItem( FN_BUSINESS_CARD );
    1329           0 :         rSet.DisableItem( FN_XFORMS_INIT );
    1330             :     }
    1331             : 
    1332           0 :     if ( !aModuleOpt.IsImpress() )
    1333           0 :         rSet.DisableItem( SID_SD_AUTOPILOT );
    1334         648 : }
    1335             : 
    1336             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11