00001 # Copyright (C) 2009 by Albert Cervera i Areny albert@nan-tic.com 00002 # 00003 # This program is free software; you can redistribute it and/or modify 00004 # it under the terms of the GNU General Public License as published by 00005 # the Free Software Foundation; either version 2 of the License, or 00006 # (at your option) any later version. 00007 # 00008 # This program is distributed in the hope that it will be useful, 00009 # but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00011 # GNU General Public License for more details. 00012 # 00013 # You should have received a copy of the GNU General Public License 00014 # along with this program; if not, write to the 00015 # Free Software Foundation, Inc., 00016 # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 00018 from PyQt4.QtCore import * 00019 from PyQt4.QtGui import * 00020 00021 ## @brief The EnterEventFilter class provides an eventFilter that treats 00022 # Enter key events as if they were Tab Key hits. Exceptions are buttons 00023 # (in which it's replaced with space) and QTextEdits in which it's the event 00024 # is sent as is. 00025 # 00026 # To install it in an application use 'app.installEventFilter( Koo.Common.EnterEventFilter( mainWindow ) )' 00027 class EnterEventFilter(QObject): 00028 ## @brief Creates a new EnterEventFilter object. 00029 def __init__(self, parent=None): 00030 QObject.__init__(self, parent) 00031 00032 ## @brief Reimplements eventFilter() to send the Tab Key press 00033 def eventFilter(self, obj, event): 00034 if event.type() in (QEvent.KeyPress, QEvent.KeyRelease) and event.key() in (Qt.Key_Return, Qt.Key_Enter): 00035 if isinstance(obj, QPushButton) or isinstance(obj, QToolButton): 00036 event = QKeyEvent( event.type(), Qt.Key_Space, event.modifiers(), event.text(), event.isAutoRepeat(), event.count() ) 00037 QApplication.sendEvent( obj, event ) 00038 return True 00039 elif type(obj) in (QLineEdit, QComboBox, QCheckBox): 00040 if obj.parent() and obj.parent().inherits( 'AbstractFieldWidget' ): 00041 event = QKeyEvent( event.type(), Qt.Key_Tab, event.modifiers(), event.text(), event.isAutoRepeat(), event.count() ) 00042 QApplication.sendEvent( obj, event ) 00043 return True 00044 return QObject.eventFilter( self, obj, event ) 00045