23#include <com/sun/star/frame/ModuleManager.hpp>
24#include <com/sun/star/frame/Desktop.hpp>
25#include <com/sun/star/ui/GlobalAcceleratorConfiguration.hpp>
26#include <com/sun/star/ui/XUIConfigurationManager.hpp>
27#include <com/sun/star/ui/XUIConfigurationManager2.hpp>
28#include <com/sun/star/ui/XModuleUIConfigurationManager2.hpp>
29#include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
30#include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
31#include <com/sun/star/awt/KeyModifier.hpp>
32#include <com/sun/star/uno/Sequence.hxx>
33#include <com/sun/star/beans/PropertyValue.hpp>
34#include <com/sun/star/util/URLTransformer.hpp>
50class AsyncAccelExec :
public cppu::WeakImplHelper<css::lang::XEventListener>
53 css::uno::Reference<css::lang::XComponent>
m_xFrame;
66 const css::uno::Reference<css::frame::XDispatch>& xDispatch,
67 const css::util::URL& rURL);
72 virtual void SAL_CALL disposing(
const css::lang::EventObject&)
override
82 AsyncAccelExec(css::uno::Reference<css::lang::XComponent> xFrame,
83 css::uno::Reference< css::frame::XDispatch > xDispatch,
108 const css::uno::Reference< css::frame::XFrame >& xEnv )
111 std::unique_lock aLock(
m_aLock);
118 bool bDesktopIsUsed =
false;
125 css::uno::Reference< css::frame::XDispatchProvider > xDispatcher(css::frame::Desktop::create(rxContext), css::uno::UNO_QUERY_THROW);
131 bDesktopIsUsed =
true;
138 css::uno::Reference< css::ui::XAcceleratorConfiguration > xGlobalCfg;
139 css::uno::Reference< css::ui::XAcceleratorConfiguration > xModuleCfg;
140 css::uno::Reference< css::ui::XAcceleratorConfiguration > xDocCfg ;
143 xGlobalCfg = css::ui::GlobalAcceleratorConfiguration::create(rxContext);
150 css::uno::Reference< css::frame::XController >
xController;
151 css::uno::Reference< css::frame::XModel >
xModel;
190 std::unique_lock aLock(
m_aLock);
192 css::uno::Reference< css::frame::XDispatchProvider > xProvider =
m_xDispatcher;
200 aURL.Complete = sCommand;
201 xParser->parseStrict(
aURL);
204 css::uno::Reference< css::frame::XDispatch >
xDispatch = xProvider->queryDispatch(
aURL, OUString(), 0);
209 css::uno::Reference<css::lang::XComponent>
xFrame(xProvider, css::uno::UNO_QUERY);
213 xDispatch->dispatch (
aURL, css::uno::Sequence< css::beans::PropertyValue >());
215 catch(
const css::uno::Exception&ev)
217 SAL_INFO(
"svtools",
"exception on key emission: " << ev.Message);
233 css::awt::KeyEvent aAWTKey;
234 aAWTKey.Modifiers = 0;
235 aAWTKey.KeyCode =
static_cast<sal_Int16
>(aVCLKey.
GetCode());
238 aAWTKey.Modifiers |= css::awt::KeyModifier::SHIFT;
240 aAWTKey.Modifiers |= css::awt::KeyModifier::MOD1;
242 aAWTKey.Modifiers |= css::awt::KeyModifier::MOD2;
244 aAWTKey.Modifiers |= css::awt::KeyModifier::MOD3;
251 bool bShift = ((aAWTKey.Modifiers & css::awt::KeyModifier::SHIFT) == css::awt::KeyModifier::SHIFT );
252 bool bMod1 = ((aAWTKey.Modifiers & css::awt::KeyModifier::MOD1 ) == css::awt::KeyModifier::MOD1 );
253 bool bMod2 = ((aAWTKey.Modifiers & css::awt::KeyModifier::MOD2 ) == css::awt::KeyModifier::MOD2 );
254 bool bMod3 = ((aAWTKey.Modifiers & css::awt::KeyModifier::MOD3 ) == css::awt::KeyModifier::MOD3 );
255 sal_uInt16 nKey =
static_cast<sal_uInt16
>(aAWTKey.KeyCode);
268 std::unique_lock aLock(
m_aLock);
270 css::uno::Reference< css::ui::XAcceleratorConfiguration > xGlobalCfg =
m_xGlobalCfg;
271 css::uno::Reference< css::ui::XAcceleratorConfiguration > xModuleCfg =
m_xModuleCfg;
272 css::uno::Reference< css::ui::XAcceleratorConfiguration > xDocCfg =
m_xDocCfg ;
282 sCommand = xDocCfg->getCommandByKeyEvent(aKey);
283 if (!sCommand.isEmpty())
286 catch(
const css::container::NoSuchElementException&)
292 sCommand = xModuleCfg->getCommandByKeyEvent(aKey);
293 if (!sCommand.isEmpty())
296 catch(
const css::container::NoSuchElementException&)
302 sCommand = xGlobalCfg->getCommandByKeyEvent(aKey);
303 if (!sCommand.isEmpty())
306 catch(
const css::container::NoSuchElementException&)
310 if( aKey.Modifiers == 0 )
312 switch( aKey.KeyCode )
314 case css::awt::Key::DELETE_TO_BEGIN_OF_LINE:
315 return ".uno:DelToStartOfLine";
316 case css::awt::Key::DELETE_TO_END_OF_LINE:
317 return ".uno:DelToEndOfLine";
318 case css::awt::Key::DELETE_TO_BEGIN_OF_PARAGRAPH:
319 return ".uno:DelToStartOfPara";
320 case css::awt::Key::DELETE_TO_END_OF_PARAGRAPH:
321 return ".uno:DelToEndOfPara";
322 case css::awt::Key::DELETE_WORD_BACKWARD:
323 return ".uno:DelToStartOfWord";
324 case css::awt::Key::DELETE_WORD_FORWARD:
325 return ".uno:DelToEndOfWord";
326 case css::awt::Key::INSERT_LINEBREAK:
327 return ".uno:InsertLinebreak";
328 case css::awt::Key::INSERT_PARAGRAPH:
329 return ".uno:InsertPara";
330 case css::awt::Key::MOVE_WORD_BACKWARD:
331 return ".uno:GoToPrevWord";
332 case css::awt::Key::MOVE_WORD_FORWARD:
333 return ".uno:GoToNextWord";
334 case css::awt::Key::MOVE_TO_BEGIN_OF_LINE:
335 return ".uno:GoToStartOfLine";
336 case css::awt::Key::MOVE_TO_END_OF_LINE:
337 return ".uno:GoToEndOfLine";
338 case css::awt::Key::MOVE_TO_BEGIN_OF_PARAGRAPH:
339 return ".uno:GoToStartOfPara";
340 case css::awt::Key::MOVE_TO_END_OF_PARAGRAPH:
341 return ".uno:GoToEndOfPara";
342 case css::awt::Key::MOVE_TO_BEGIN_OF_DOCUMENT:
343 return ".uno:GoToStartOfDoc";
344 case css::awt::Key::MOVE_TO_END_OF_DOCUMENT:
345 return ".uno:GoToEndOfDoc";
346 case css::awt::Key::SELECT_BACKWARD:
347 return ".uno:CharLeftSel";
348 case css::awt::Key::SELECT_FORWARD:
349 return ".uno:CharRightSel";
350 case css::awt::Key::SELECT_WORD_BACKWARD:
351 return ".uno:WordLeftSel";
352 case css::awt::Key::SELECT_WORD_FORWARD:
353 return ".uno:WordRightSel";
354 case css::awt::Key::SELECT_WORD:
355 return ".uno:SelectWord";
356 case css::awt::Key::SELECT_LINE:
358 case css::awt::Key::SELECT_PARAGRAPH:
359 return ".uno:SelectText";
360 case css::awt::Key::SELECT_TO_BEGIN_OF_LINE:
361 return ".uno:StartOfLineSel";
362 case css::awt::Key::SELECT_TO_END_OF_LINE:
363 return ".uno:EndOfLineSel";
364 case css::awt::Key::SELECT_TO_BEGIN_OF_PARAGRAPH:
365 return ".uno:StartOfParaSel";
366 case css::awt::Key::SELECT_TO_END_OF_PARAGRAPH:
367 return ".uno:EndOfParaSel";
368 case css::awt::Key::SELECT_TO_BEGIN_OF_DOCUMENT:
369 return ".uno:StartOfDocumentSel";
370 case css::awt::Key::SELECT_TO_END_OF_DOCUMENT:
371 return ".uno:EndOfDocumentSel";
372 case css::awt::Key::SELECT_ALL:
373 return ".uno:SelectAll";
384 const css::uno::Reference< css::frame::XFrame >& xFrame)
386 css::uno::Reference< css::frame::XModuleManager2 > xModuleDetection(
387 css::frame::ModuleManager::create(rxContext));
392 sModule = xModuleDetection->identify(
xFrame);
394 catch(
const css::uno::RuntimeException&)
396 catch(
const css::uno::Exception&)
397 {
return css::uno::Reference< css::ui::XAcceleratorConfiguration >(); }
399 css::uno::Reference< css::ui::XModuleUIConfigurationManagerSupplier > xUISupplier(
400 css::ui::theModuleUIConfigurationManagerSupplier::get(rxContext) );
402 css::uno::Reference< css::ui::XAcceleratorConfiguration > xAccCfg;
405 css::uno::Reference< css::ui::XUIConfigurationManager > xUIManager = xUISupplier->getUIConfigurationManager(sModule);
406 xAccCfg = xUIManager->getShortCutManager();
408 catch(
const css::container::NoSuchElementException&)
415 css::uno::Reference< css::ui::XModuleUIConfigurationManagerSupplier > xUISupplier(css::ui::theModuleUIConfigurationManagerSupplier::get(rxContext));
419 css::uno::Reference<css::ui::XUIConfigurationManager> xUIManager = xUISupplier->getUIConfigurationManager(sModule);
421 css::ui::XModuleUIConfigurationManager2*
t =
static_cast<css::ui::XModuleUIConfigurationManager2*
>(xUIManager.get());
424 return t->createShortCutManager();
426 catch(
const css::container::NoSuchElementException&)
429 return css::uno::Reference<css::ui::XAcceleratorConfiguration>();
439 css::uno::Reference< css::ui::XAcceleratorConfiguration > xAccCfg;
440 css::uno::Reference< css::ui::XUIConfigurationManagerSupplier > xUISupplier(
xModel, css::uno::UNO_QUERY);
441 if (xUISupplier.is())
443 css::uno::Reference< css::ui::XUIConfigurationManager > xUIManager = xUISupplier->getUIConfigurationManager();
444 xAccCfg = xUIManager->getShortCutManager();
453 std::unique_lock aLock(
m_aLock);
457 css::uno::Reference< css::uno::XComponentContext > xContext =
m_xContext;
462 css::uno::Reference< css::util::XURLTransformer > xParser = css::util::URLTransformer::create( xContext );
473AsyncAccelExec::AsyncAccelExec(css::uno::Reference<css::lang::XComponent> xFrame,
474 css::uno::Reference<css::frame::XDispatch> xDispatch,
485 const css::uno::Reference< css::frame::XDispatch >& xDispatch,
486 const css::util::URL& rURL)
493void AsyncAccelExec::execAsync()
507 m_xFrame->removeEventListener(
this);
508 m_xDispatch->dispatch(
m_aURL, css::uno::Sequence< css::beans::PropertyValue >());
510 catch(
const css::uno::Exception&)
css::uno::Reference< css::lang::XComponent > m_xFrame
vcl::EventPoster m_aAsyncCallback
css::uno::Reference< css::frame::XDispatch > m_xDispatch
@descr implements a helper, which can be used to convert vcl key codes into awt key codes ....
css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xDocCfg
static css::uno::Reference< css::ui::XAcceleratorConfiguration > st_openDocConfig(const css::uno::Reference< css::frame::XModel > &xModel)
TODO document me.
css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xGlobalCfg
TODO document me.
~AcceleratorExecute()
fight against inlining ...
OUString findCommand(const css::awt::KeyEvent &aKey)
search the command for the given key event.
css::uno::Reference< css::frame::XDispatchProvider > m_xDispatcher
TODO document me.
static vcl::KeyCode st_AWTKey2VCLKey(const css::awt::KeyEvent &aKey)
css::uno::Reference< css::ui::XAcceleratorConfiguration > m_xModuleCfg
static css::awt::KeyEvent st_VCLKey2AWTKey(const vcl::KeyCode &aKey)
TODO document me.
void init(const css::uno::Reference< css::uno::XComponentContext > &rxContext, const css::uno::Reference< css::frame::XFrame > &xEnv)
init this instance.
css::uno::Reference< css::uno::XComponentContext > m_xContext
TODO document me.
static std::unique_ptr< AcceleratorExecute > createAcceleratorHelper()
factory method to create new accelerator helper instance.
static css::uno::Reference< css::ui::XAcceleratorConfiguration > st_openModuleConfig(const css::uno::Reference< css::uno::XComponentContext > &rxContext, const css::uno::Reference< css::frame::XFrame > &xFrame)
TODO document me.
void lok_setModuleConfig(css::uno::Reference< css::ui::XAcceleratorConfiguration > acceleratorConfig)
SVT_DLLPRIVATE css::uno::Reference< css::util::XURLTransformer > impl_ts_getURLParser()
TODO document me.
css::uno::Reference< css::util::XURLTransformer > m_xURLParser
TODO document me.
SVT_DLLPRIVATE OUString impl_ts_findCommand(const css::awt::KeyEvent &aKey)
TODO document me.
static css::uno::Reference< css::ui::XAcceleratorConfiguration > lok_createNewAcceleratorConfiguration(const css::uno::Reference< css::uno::XComponentContext > &rxContext, OUString sModule)
SVT_DLLPRIVATE AcceleratorExecute()
allow creation of instances of this class by using our factory only!
bool execute(const vcl::KeyCode &aKey)
trigger this accelerator.
sal_uInt16 GetCode() const
Reference< XDispatch > xDispatch
DECL_LINK(CheckNameHdl, SvxNameDialog &, bool)
#define LINK(Instance, Class, Member)
#define SAL_INFO(area, stream)
if(aStr !=aBuf) UpdateName_Impl(m_xFollowLb.get()
IMPL_LINK_NOARG(OCommonPicker, OnCancelPicker, void *, void)
Reference< XController > xController
Reference< XFrame > xFrame
Reference< XModel > xModel