summaryrefslogtreecommitdiff
path: root/svtools/source/misc/acceleratorexecute.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svtools/source/misc/acceleratorexecute.cxx')
-rw-r--r--svtools/source/misc/acceleratorexecute.cxx519
1 files changed, 0 insertions, 519 deletions
diff --git a/svtools/source/misc/acceleratorexecute.cxx b/svtools/source/misc/acceleratorexecute.cxx
deleted file mode 100644
index 22431f8879..0000000000
--- a/svtools/source/misc/acceleratorexecute.cxx
+++ /dev/null
@@ -1,519 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svtools.hxx"
-#include <svtools/acceleratorexecute.hxx>
-
-//===============================================
-// includes
-#include <com/sun/star/frame/XModuleManager.hpp>
-#include <com/sun/star/frame/XDesktop.hpp>
-#include <com/sun/star/ui/XUIConfigurationManager.hpp>
-#include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>
-#include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
-#include <com/sun/star/awt/XTopWindow.hpp>
-#include <com/sun/star/awt/KeyModifier.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <toolkit/helper/vclunohelper.hxx>
-
-#include <vcl/window.hxx>
-#include <vcl/svapp.hxx>
-#include <osl/mutex.hxx>
-
-//===============================================
-// namespace
-
-namespace css = ::com::sun::star;
-
-namespace svt
-{
-
-//===============================================
-// definitions
-
-//-----------------------------------------------
-class SVT_DLLPRIVATE AsyncAccelExec
-{
- public:
- //---------------------------------------
- /** creates a new instance of this class, which can be used
- one times only!
-
- This instance can be forced to execute it's internal set request
- asynchronous. After that it deletes itself !
- */
- static AsyncAccelExec* createOnShotInstance(const css::uno::Reference< css::frame::XDispatch >& xDispatch,
- const css::util::URL& aURL );
-
- void execAsync();
-
- private:
- //---------------------------------------
- /** @short allow creation of instances of this class
- by using our factory only!
- */
- SVT_DLLPRIVATE AsyncAccelExec(const css::uno::Reference< css::frame::XDispatch >& xDispatch,
- const css::util::URL& aURL );
-
- DECL_DLLPRIVATE_LINK(impl_ts_asyncCallback, void*);
-
- private:
- ::vcl::EventPoster m_aAsyncCallback;
- css::uno::Reference< css::frame::XDispatch > m_xDispatch;
- css::util::URL m_aURL;
-};
-
-//-----------------------------------------------
-AcceleratorExecute::AcceleratorExecute()
- : TMutexInit ( )
- , m_aAsyncCallback(LINK(this, AcceleratorExecute, impl_ts_asyncCallback))
-{
-}
-
-//-----------------------------------------------
-AcceleratorExecute::AcceleratorExecute(const AcceleratorExecute&)
- : TMutexInit ( )
- , m_aAsyncCallback(LINK(this, AcceleratorExecute, impl_ts_asyncCallback))
-{
- // copy construction sint supported in real ...
- // but we need this ctor to init our async callback ...
-}
-
-//-----------------------------------------------
-AcceleratorExecute::~AcceleratorExecute()
-{
- // does nothing real
-}
-
-//-----------------------------------------------
-AcceleratorExecute* AcceleratorExecute::createAcceleratorHelper()
-{
- AcceleratorExecute* pNew = new AcceleratorExecute();
- return pNew;
-}
-
-//-----------------------------------------------
-void AcceleratorExecute::init(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR,
- const css::uno::Reference< css::frame::XFrame >& xEnv )
-{
- // SAFE -> ----------------------------------
- ::osl::ResettableMutexGuard aLock(m_aLock);
-
- // take over the uno service manager
- m_xSMGR = xSMGR;
-
- // specify our internal dispatch provider
- // frame or desktop?! => document or global config.
- sal_Bool bDesktopIsUsed = sal_False;
- m_xDispatcher = css::uno::Reference< css::frame::XDispatchProvider >(xEnv, css::uno::UNO_QUERY);
- if (!m_xDispatcher.is())
- {
- aLock.clear();
- // <- SAFE ------------------------------
-
- css::uno::Reference< css::frame::XDispatchProvider > xDispatcher(
- xSMGR->createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ))),
- css::uno::UNO_QUERY_THROW);
-
- // SAFE -> ------------------------------
- aLock.reset();
-
- m_xDispatcher = xDispatcher;
- bDesktopIsUsed = sal_True;
- }
-
- aLock.clear();
- // <- SAFE ----------------------------------
-
- // open all needed configuration objects
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xGlobalCfg;
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xModuleCfg;
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xDocCfg ;
-
- // global cfg
- xGlobalCfg = AcceleratorExecute::st_openGlobalConfig(xSMGR);
- if (!bDesktopIsUsed)
- {
- // module cfg
- xModuleCfg = AcceleratorExecute::st_openModuleConfig(xSMGR, xEnv);
-
- // doc cfg
- css::uno::Reference< css::frame::XController > xController;
- css::uno::Reference< css::frame::XModel > xModel;
- xController = xEnv->getController();
- if (xController.is())
- xModel = xController->getModel();
- if (xModel.is())
- xDocCfg = AcceleratorExecute::st_openDocConfig(xModel);
- }
-
- // SAFE -> ------------------------------
- aLock.reset();
-
- m_xGlobalCfg = xGlobalCfg;
- m_xModuleCfg = xModuleCfg;
- m_xDocCfg = xDocCfg ;
-
- aLock.clear();
- // <- SAFE ----------------------------------
-}
-
-//-----------------------------------------------
-sal_Bool AcceleratorExecute::execute(const KeyCode& aVCLKey)
-{
- css::awt::KeyEvent aAWTKey = AcceleratorExecute::st_VCLKey2AWTKey(aVCLKey);
- return execute(aAWTKey);
-}
-
-//-----------------------------------------------
-sal_Bool AcceleratorExecute::execute(const css::awt::KeyEvent& aAWTKey)
-{
- ::rtl::OUString sCommand = impl_ts_findCommand(aAWTKey);
-
- // No Command found? Do nothing! User isnt interested on any error handling .-)
- if (!sCommand.getLength())
- return sal_False;
-
- // SAFE -> ----------------------------------
- ::osl::ResettableMutexGuard aLock(m_aLock);
-
- css::uno::Reference< css::frame::XDispatchProvider > xProvider = m_xDispatcher;
-
- aLock.clear();
- // <- SAFE ----------------------------------
-
- // convert command in URL structure
- css::uno::Reference< css::util::XURLTransformer > xParser = impl_ts_getURLParser();
- css::util::URL aURL;
- aURL.Complete = sCommand;
- xParser->parseStrict(aURL);
-
- // ask for dispatch object
- css::uno::Reference< css::frame::XDispatch > xDispatch = xProvider->queryDispatch(aURL, ::rtl::OUString(), 0);
- sal_Bool bRet = xDispatch.is();
- if ( bRet )
- {
- // Note: Such instance can be used one times only and destroy itself afterwards .-)
- AsyncAccelExec* pExec = AsyncAccelExec::createOnShotInstance(xDispatch, aURL);
- pExec->execAsync();
- }
-
- return bRet;
-}
-
-//-----------------------------------------------
-css::awt::KeyEvent AcceleratorExecute::st_VCLKey2AWTKey(const KeyCode& aVCLKey)
-{
- css::awt::KeyEvent aAWTKey;
- aAWTKey.Modifiers = 0;
- aAWTKey.KeyCode = (sal_Int16)aVCLKey.GetCode();
-
- if (aVCLKey.IsShift())
- aAWTKey.Modifiers |= css::awt::KeyModifier::SHIFT;
- if (aVCLKey.IsMod1())
- aAWTKey.Modifiers |= css::awt::KeyModifier::MOD1;
- if (aVCLKey.IsMod2())
- aAWTKey.Modifiers |= css::awt::KeyModifier::MOD2;
- if (aVCLKey.IsMod3())
- aAWTKey.Modifiers |= css::awt::KeyModifier::MOD3;
- return aAWTKey;
-}
-
-//-----------------------------------------------
-KeyCode AcceleratorExecute::st_AWTKey2VCLKey(const css::awt::KeyEvent& aAWTKey)
-{
- sal_Bool bShift = ((aAWTKey.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT );
- sal_Bool bMod1 = ((aAWTKey.Modifiers & css::awt::KeyModifier::MOD1 ) == css::awt::KeyModifier::MOD1 );
- sal_Bool bMod2 = ((aAWTKey.Modifiers & css::awt::KeyModifier::MOD2 ) == css::awt::KeyModifier::MOD2 );
- sal_Bool bMod3 = ((aAWTKey.Modifiers & css::awt::KeyModifier::MOD3 ) == css::awt::KeyModifier::MOD3 );
- sal_uInt16 nKey = (sal_uInt16)aAWTKey.KeyCode;
-
- return KeyCode(nKey, bShift, bMod1, bMod2, bMod3);
-}
-//-----------------------------------------------
-::rtl::OUString AcceleratorExecute::findCommand(const css::awt::KeyEvent& aKey)
-{
- return impl_ts_findCommand(aKey);
-}
-//-----------------------------------------------
-::rtl::OUString AcceleratorExecute::impl_ts_findCommand(const css::awt::KeyEvent& aKey)
-{
- // SAFE -> ----------------------------------
- ::osl::ResettableMutexGuard aLock(m_aLock);
-
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xGlobalCfg = m_xGlobalCfg;
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xModuleCfg = m_xModuleCfg;
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xDocCfg = m_xDocCfg ;
-
- aLock.clear();
- // <- SAFE ----------------------------------
-
- ::rtl::OUString sCommand;
-
- try
- {
- if (xDocCfg.is())
- sCommand = xDocCfg->getCommandByKeyEvent(aKey);
- if (sCommand.getLength())
- return sCommand;
- }
- catch(const css::container::NoSuchElementException&)
- {}
-
- try
- {
- if (xModuleCfg.is())
- sCommand = xModuleCfg->getCommandByKeyEvent(aKey);
- if (sCommand.getLength())
- return sCommand;
- }
- catch(const css::container::NoSuchElementException&)
- {}
-
- try
- {
- if (xGlobalCfg.is())
- sCommand = xGlobalCfg->getCommandByKeyEvent(aKey);
- if (sCommand.getLength())
- return sCommand;
- }
- catch(const css::container::NoSuchElementException&)
- {}
-
- // fall back to functional key codes
- if( aKey.Modifiers == 0 )
- {
- switch( aKey.KeyCode )
- {
- case com::sun::star::awt::Key::DELETE_TO_BEGIN_OF_LINE:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DelToStartOfLine" ) );
- case com::sun::star::awt::Key::DELETE_TO_END_OF_LINE:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DelToEndOfLine" ) );
- case com::sun::star::awt::Key::DELETE_TO_BEGIN_OF_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DelToStartOfPara" ) );
- case com::sun::star::awt::Key::DELETE_TO_END_OF_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DelToEndOfPara" ) );
- case com::sun::star::awt::Key::DELETE_WORD_BACKWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DelToStartOfWord" ) );
- case com::sun::star::awt::Key::DELETE_WORD_FORWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DelToEndOfWord" ) );
- case com::sun::star::awt::Key::INSERT_LINEBREAK:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:InsertLinebreak" ) );
- case com::sun::star::awt::Key::INSERT_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:InsertPara" ) );
- case com::sun::star::awt::Key::MOVE_WORD_BACKWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToPrevWord" ) );
- case com::sun::star::awt::Key::MOVE_WORD_FORWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToNextWord" ) );
- case com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_LINE:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToStartOfLine" ) );
- case com::sun::star::awt::Key::MOVE_TO_END_OF_LINE:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToEndOfLine" ) );
- case com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToStartOfPara" ) );
- case com::sun::star::awt::Key::MOVE_TO_END_OF_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToEndOfPara" ) );
- case com::sun::star::awt::Key::MOVE_TO_BEGIN_OF_DOCUMENT:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToStartOfDoc" ) );
- case com::sun::star::awt::Key::MOVE_TO_END_OF_DOCUMENT:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GoToEndOfDoc" ) );
- case com::sun::star::awt::Key::SELECT_BACKWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharLeftSel" ) );
- case com::sun::star::awt::Key::SELECT_FORWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:CharRightSel" ) );
- case com::sun::star::awt::Key::SELECT_WORD_BACKWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:WordLeftSel" ) );
- case com::sun::star::awt::Key::SELECT_WORD_FORWARD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:WordRightSel" ) );
- case com::sun::star::awt::Key::SELECT_WORD:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:SelectWord" ) );
- case com::sun::star::awt::Key::SELECT_LINE:
- return rtl::OUString();
- case com::sun::star::awt::Key::SELECT_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:SelectText" ) );
- case com::sun::star::awt::Key::SELECT_TO_BEGIN_OF_LINE:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:StartOfLineSel" ) );
- case com::sun::star::awt::Key::SELECT_TO_END_OF_LINE:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:EndOfLineSel" ) );
- case com::sun::star::awt::Key::SELECT_TO_BEGIN_OF_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:StartOfParaSel" ) );
- case com::sun::star::awt::Key::SELECT_TO_END_OF_PARAGRAPH:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:EndOfParaSel" ) );
- case com::sun::star::awt::Key::SELECT_TO_BEGIN_OF_DOCUMENT:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:StartOfDocumentSel" ) );
- case com::sun::star::awt::Key::SELECT_TO_END_OF_DOCUMENT:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:EndOfDocumentSel" ) );
- case com::sun::star::awt::Key::SELECT_ALL:
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:SelectAll" ) );
- default:
- break;
- }
- }
-
- return ::rtl::OUString();
-}
-
-//-----------------------------------------------
-css::uno::Reference< css::ui::XAcceleratorConfiguration > AcceleratorExecute::st_openGlobalConfig(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR)
-{
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xAccCfg(
- xSMGR->createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.GlobalAcceleratorConfiguration" ))),
- css::uno::UNO_QUERY_THROW);
- return xAccCfg;
-}
-
-//-----------------------------------------------
-css::uno::Reference< css::ui::XAcceleratorConfiguration > AcceleratorExecute::st_openModuleConfig(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR ,
- const css::uno::Reference< css::frame::XFrame >& xFrame)
-{
- css::uno::Reference< css::frame::XModuleManager > xModuleDetection(
- xSMGR->createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ModuleManager" ))),
- css::uno::UNO_QUERY_THROW);
-
- ::rtl::OUString sModule;
- try
- {
- sModule = xModuleDetection->identify(xFrame);
- }
- catch(const css::uno::RuntimeException&rEx)
- { (void) rEx; throw; }
- catch(const css::uno::Exception&)
- { return css::uno::Reference< css::ui::XAcceleratorConfiguration >(); }
-
- css::uno::Reference< css::ui::XModuleUIConfigurationManagerSupplier > xUISupplier(
- xSMGR->createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.ModuleUIConfigurationManagerSupplier" ))),
- css::uno::UNO_QUERY_THROW);
-
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xAccCfg;
- try
- {
- css::uno::Reference< css::ui::XUIConfigurationManager > xUIManager = xUISupplier->getUIConfigurationManager(sModule);
- xAccCfg = css::uno::Reference< css::ui::XAcceleratorConfiguration >(xUIManager->getShortCutManager(), css::uno::UNO_QUERY_THROW);
- }
- catch(const css::container::NoSuchElementException&)
- {}
- return xAccCfg;
-}
-
-//-----------------------------------------------
-css::uno::Reference< css::ui::XAcceleratorConfiguration > AcceleratorExecute::st_openDocConfig(const css::uno::Reference< css::frame::XModel >& xModel)
-{
- css::uno::Reference< css::ui::XAcceleratorConfiguration > xAccCfg;
- css::uno::Reference< css::ui::XUIConfigurationManagerSupplier > xUISupplier(xModel, css::uno::UNO_QUERY);
- if (xUISupplier.is())
- {
- css::uno::Reference< css::ui::XUIConfigurationManager > xUIManager = xUISupplier->getUIConfigurationManager();
- xAccCfg.set(xUIManager->getShortCutManager(), css::uno::UNO_QUERY_THROW);
- }
- return xAccCfg;
-}
-
-//-----------------------------------------------
-css::uno::Reference< css::util::XURLTransformer > AcceleratorExecute::impl_ts_getURLParser()
-{
- // SAFE -> ----------------------------------
- ::osl::ResettableMutexGuard aLock(m_aLock);
-
- if (m_xURLParser.is())
- return m_xURLParser;
- css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xSMGR;
-
- aLock.clear();
- // <- SAFE ----------------------------------
-
- css::uno::Reference< css::util::XURLTransformer > xParser(
- xSMGR->createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ))),
- css::uno::UNO_QUERY_THROW);
-
- // SAFE -> ----------------------------------
- aLock.reset();
- m_xURLParser = xParser;
- aLock.clear();
- // <- SAFE ----------------------------------
-
- return xParser;
-}
-
-//-----------------------------------------------
-IMPL_LINK(AcceleratorExecute, impl_ts_asyncCallback, void*, EMPTYARG)
-{
- // replaced by AsyncAccelExec!
- return 0;
-}
-
-//-----------------------------------------------
-AsyncAccelExec::AsyncAccelExec(const css::uno::Reference< css::frame::XDispatch >& xDispatch,
- const css::util::URL& aURL )
- : m_aAsyncCallback(LINK(this, AsyncAccelExec, impl_ts_asyncCallback))
- , m_xDispatch (xDispatch )
- , m_aURL (aURL )
-{
-}
-
-//-----------------------------------------------
-AsyncAccelExec* AsyncAccelExec::createOnShotInstance(const css::uno::Reference< css::frame::XDispatch >& xDispatch,
- const css::util::URL& aURL )
-{
- AsyncAccelExec* pExec = new AsyncAccelExec(xDispatch, aURL);
- return pExec;
-}
-
-//-----------------------------------------------
-void AsyncAccelExec::execAsync()
-{
- m_aAsyncCallback.Post(0);
-}
-
-//-----------------------------------------------
-IMPL_LINK(AsyncAccelExec, impl_ts_asyncCallback, void*,)
-{
- if (! m_xDispatch.is())
- return 0;
-
- try
- {
- m_xDispatch->dispatch(m_aURL, css::uno::Sequence< css::beans::PropertyValue >());
- }
- catch(const css::lang::DisposedException&)
- {}
- catch(const css::uno::RuntimeException& )
- { throw; }
- catch(const css::uno::Exception&)
- {}
-
- delete this;
-
- return 0;
-}
-
-} // namespace svt
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */