00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 from PyQt4.QtCore import *
00020 from KeyboardWidget import *
00021 from KeypadWidget import *
00022 
00023 
00024 
00025 
00026 
00027 
00028 class PosEventFilter(QObject):
00029         
00030         def __init__(self, parent=None):
00031                 QObject.__init__(self, parent)
00032                 self.currentWidget = None
00033                 self.keyboard = None
00034 
00035         
00036         
00037         def eventFilter(self, obj, event):
00038                 if event.type() == QEvent.MouseButtonPress:
00039                         if obj != self.currentWidget:
00040                                 if obj.inherits( 'QLineEdit' ) or obj.inherits( 'QTextEdit' ):
00041                                         self.currentWidget = obj
00042                                         self.openKeyboard( obj )
00043                 elif event.type() == QEvent.FocusOut:
00044                         if obj and obj == self.currentWidget and self.keyboard:
00045                                 self.keyboard.hide()
00046                                 self.keyboard = None
00047                                 self.currentWidget = None
00048                 return QObject.eventFilter( self, obj, event )
00049 
00050         def tabKeyPressed(self):
00051                 widget = QApplication.focusWidget()
00052                 if widget and ( widget.inherits( 'QLineEdit' ) or widget.inherits( 'QTextEdit' ) ):
00053                         self.openKeyboard( widget )
00054                 else:
00055                         self.closeKeyboard()
00056 
00057         def openKeyboard(self, obj):
00058                 self.closeKeyboard()
00059                 if obj.parent() and ( obj.parent().inherits( 'FloatFieldWidget' ) or obj.parent().inherits( 'IntegerFieldWidget' ) ): 
00060                         self.keyboard = KeypadWidget( obj )
00061                 else:
00062                         self.keyboard = KeyboardWidget( obj )
00063                 self.connect( self.keyboard, SIGNAL( 'tabKeyPressed' ), self.tabKeyPressed )
00064 
00065         def closeKeyboard(self):
00066                 if self.keyboard:
00067                         try:
00068                                 self.keyboard.setParent(None)
00069                                 del self.keyboard
00070                         except:
00071                                 pass
00072                         self.keyboard = None
00073