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

Generated by: LCOV version 1.10