Salome HOME
5e94b549726ce952b5308dd0831203e7e7646401
[modules/gui.git] / src / SUIT / SUIT_Accel.cxx
1 // SUIT_Accel.cxx: implementation of the SUIT_Accel class.
2 //
3 //////////////////////////////////////////////////////////////////////
4
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"
10
11 #include <qaccel.h>
12
13 /*!\class SUIT_Accel
14  * Class handles keyboard accelerator bindings.
15  */
16
17 /*! Constructor.*/
18 SUIT_Accel::SUIT_Accel(SUIT_Desktop* theDesktop)
19   : QObject( theDesktop, "SUIT_Accel" ),
20     myDesktop( theDesktop )
21 {
22   myAccel = new QAccel( theDesktop, "SUIT_Accel_interal_qaccel" );
23   connect( myAccel, SIGNAL( activated( int ) ), this, SLOT( onActivated( int ) ) );
24 }
25
26 /*! Destructor.*/
27 SUIT_Accel::~SUIT_Accel()
28 {
29 }
30
31 /*! setActionKey  assign a ceratain action for a key accelerator */
32 void SUIT_Accel::setActionKey( const int action, const int key, const QString& type )
33 {    
34   // 1. get or generate interal "id" of action
35   int id = myAccel->findKey( key );
36   if ( id == -1 )
37     id = myAccel->insertItem( key );
38
39   IdActionMap idActionMap;
40   if ( myMap.contains( type ) )
41     idActionMap = myMap[type];
42
43   idActionMap[id] = action;
44   myMap[type] = idActionMap;
45 }
46
47 /*! onActivated  slot called when a registered key accelerator was activated */
48 void SUIT_Accel::onActivated( int id )
49 {
50   if ( myDesktop ) {
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] );
57         }
58       }
59     }
60   }
61 }
62