1 // SUIT_Accel.cxx: implementation of the SUIT_Accel class.
3 //////////////////////////////////////////////////////////////////////
5 #include "SUIT_Accel.h"
6 #include "SUIT_Desktop.h"
7 #include "SUIT_ViewManager.h"
8 #include "SUIT_ViewWindow.h"
9 #include "SUIT_ViewModel.h"
14 * Class handles keyboard accelerator bindings.
18 SUIT_Accel::SUIT_Accel(SUIT_Desktop* theDesktop)
19 : QObject( theDesktop, "SUIT_Accel" ),
20 myDesktop( theDesktop )
22 myAccel = new QAccel( theDesktop, "SUIT_Accel_interal_qaccel" );
23 connect( myAccel, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
27 SUIT_Accel::~SUIT_Accel()
31 /*! setActionKey assign a ceratain action for a key accelerator */
32 void SUIT_Accel::setActionKey( const int action, const int key, const QString& type )
34 // 1. get or generate interal "id" of action
35 int id = myAccel->findKey( key );
37 id = myAccel->insertItem( key );
39 IdActionMap idActionMap;
40 if ( myMap.contains( type ) )
41 idActionMap = myMap[type];
43 idActionMap[id] = action;
44 myMap[type] = idActionMap;
47 /*! onActivated slot called when a registered key accelerator was activated */
48 void SUIT_Accel::onActivated( int id )
51 if ( SUIT_ViewWindow* vw = myDesktop->activeWindow() ) {
52 QString type = vw->getViewManager()->getViewModel()->getType();
53 if ( myMap.contains( type ) ) {
54 IdActionMap idActionMap = myMap[type];
55 if ( idActionMap.contains( id ) ) {
56 vw->onAccelAction( idActionMap[id] );