+/*! getParentViewWindow() : returns given object or any of its parents-grandparents-.. if it is a SUIT_ViewWindow */
+SUIT_ViewWindow* getParentViewWindow( const QObject* obj )
+{
+ if ( obj )
+ {
+ if ( obj->inherits( "SUIT_ViewWindow" ) )
+ return (SUIT_ViewWindow*)obj;
+ else
+ return getParentViewWindow( obj->parent() );
+ }
+ return 0;
+}
+
+/*! getKey() : returns integer key code (with modifiers) made of key pressed 'inside' given event */
+int getKey( QKeyEvent* keyEvent )
+{
+ int key = keyEvent->key(), state = keyEvent->modifiers();
+ if ( state & Qt::ShiftModifier )
+ key += Qt::SHIFT;
+ if ( state & Qt::ControlModifier )
+ key += Qt::CTRL;
+ if ( state & Qt::AltModifier )
+ key += Qt::ALT;
+ if ( state & Qt::MetaModifier )
+ key += Qt::META;
+ return key;
+}
+
+/*!
+ Returns key pressed if
+ -# event was KeyPress
+ -# pressed key is a registered accelerator
+*/
+int SUIT_Accel::getAccelKey( QEvent *event )
+{
+ if ( event && event->type() == QEvent::KeyPress ) {
+ int key = ::getKey( (QKeyEvent*)event );
+ if ( myOptMap.contains( key ) )
+ return key;
+ }
+ return 0;
+}
+
+/*! eventFilter() : filtering ALL events of QApplication. */
+bool SUIT_Accel::eventFilter( QObject *obj, QEvent *event )
+{
+ const int key = getAccelKey( event );
+ if ( key ) {
+ SUIT_ViewWindow* vw = ::getParentViewWindow( obj );
+ if ( vw ) {
+ if ( vw->getViewManager() && vw->getViewManager()->getViewModel() )
+ {
+ QString type = vw->getViewManager()->getViewModel()->getType();
+ if ( myMap.contains( type ) ) {
+ IdActionMap idActionMap = myMap[type];
+ if ( idActionMap.contains( key ) ) {
+ return vw->onAccelAction( idActionMap[key] );
+ }
+ }
+ }
+ }
+ }
+ return false;
+}
+