commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r6063 - in trunk/gnue-forms/src: . GFObjects


From: reinhard
Subject: r6063 - in trunk/gnue-forms/src: . GFObjects
Date: Sat, 24 Jul 2004 07:37:31 -0500 (CDT)

Author: reinhard
Date: 2004-07-24 07:37:30 -0500 (Sat, 24 Jul 2004)
New Revision: 6063

Modified:
   trunk/gnue-forms/src/GFDisplayHandler.py
   trunk/gnue-forms/src/GFInstance.py
   trunk/gnue-forms/src/GFObjects/GFButton.py
   trunk/gnue-forms/src/GFObjects/GFEntry.py
   trunk/gnue-forms/src/GFObjects/GFTabStop.py
Log:
Use __before__ event handler hook to pass events to the current focus entry.
Buttons now react on KEYPRESS events.


Modified: trunk/gnue-forms/src/GFDisplayHandler.py
===================================================================
--- trunk/gnue-forms/src/GFDisplayHandler.py    2004-07-24 12:33:46 UTC (rev 
6062)
+++ trunk/gnue-forms/src/GFDisplayHandler.py    2004-07-24 12:37:30 UTC (rev 
6063)
@@ -462,7 +462,7 @@
   #
   # Internal methods
   #
-  def __init__(self, entry, eventHandler, formatter=None):
+  def __init__(self, entry, eventHandler, subEventHandler, formatter=None):
     events.EventAware.__init__(self, eventHandler)
 
     self.entry = entry            # Our entry
@@ -476,6 +476,7 @@
     self.selection2 = None        # End of highlight
     self.cursor = 0               # Cursor position
     self._loadedAllowedValues = False # the allowed values already been loaded
+    self.subEventHandler = subEventHandler
 
     # TODO: replace w/an event that asks the
     # TODO: UIdriver if this should happen!
@@ -484,8 +485,7 @@
     # Needs to be set by the child classes
     self.formatter = formatter
 
-    self.subevents = events.EventController()
-    self.subevents.registerEventListeners( {
+    self.subEventHandler.registerEventListeners( {
 
                  # "Entry" events
                  'requestKEYPRESS'     : self.addText,
@@ -539,10 +539,12 @@
 #
 #
 class TextDisplayHandler(FieldDisplayHandler):
-  def __init__(self, entry, eventHandler, displayMask, inputMask):
+  def __init__(self, entry, eventHandler, subEventHandler, displayMask,
+               inputMask):
 ##    FieldDisplayHandler.__init__(self, entry, eventHandler,
 ##            TextMask.TextMask(displayMask, inputMask, formatMask))
-    FieldDisplayHandler.__init__(self, entry, eventHandler, None)
+    FieldDisplayHandler.__init__(self, entry, eventHandler, subEventHandler,
+                                 None)
 
 
 #############################################################################
@@ -550,10 +552,12 @@
 #
 #
 class PasswordDisplayHandler(TextDisplayHandler):
-  def __init__(self, entry, eventHandler, displayMask, inputMask):
+  def __init__(self, entry, eventHandler, subEventHandler, displayMask,
+               inputMask):
 ##    FieldDisplayHandler.__init__(self, entry, eventHandler,
 ##            TextMask.TextMask(displayMask, inputMask, formatMask))
-    FieldDisplayHandler.__init__(self, entry, eventHandler, None)
+    FieldDisplayHandler.__init__(self, entry, eventHandler, subEventHandler,
+                                 None)
 
   #
   # beginEdit
@@ -595,10 +599,12 @@
 # Handler for Numeric types
 #
 class NumberDisplayHandler(FieldDisplayHandler):
-  def __init__(self, entry, eventHandler, displayMask, inputMask):
+  def __init__(self, entry, eventHandler, subEventHandler, displayMask,
+               inputMask):
 ##    FieldDisplayHandler.__init__(self, entry, eventHandler,
 ##            DateMask.DateMask(displayMask, inputMask, displayMask))
-    FieldDisplayHandler.__init__(self, entry, eventHandler, None)
+    FieldDisplayHandler.__init__(self, entry, eventHandler, subEventHandler,
+                                 None)
 
 
   def setValue(self, value):
@@ -679,10 +685,12 @@
 # Handler for Date types
 #
 class DateDisplayHandler(FieldDisplayHandler):
-  def __init__(self, entry, eventHandler, displayMask, inputMask):
+  def __init__(self, entry, eventHandler, subEventHandler, displayMask,
+               inputMask):
 ##    FieldDisplayHandler.__init__(self, entry, eventHandler,
 ##            DateMask.DateMask(displayMask, inputMask, displayMask))
-    FieldDisplayHandler.__init__(self, entry, eventHandler, None)
+    FieldDisplayHandler.__init__(self, entry, eventHandler, subEventHandler,
+                                 None)
     self.__displayMask = displayMask
     self.__inputMask = inputMask
 
@@ -764,7 +772,7 @@
     FieldDisplayHandler.__init__(self, *args, **params)
 
     # My events...
-    self.subevents.registerEventListeners( {
+    self.subEventHandler.registerEventListeners( {
            'requestREPLACEVALUE' : self.replaceText,
            'requestCOMBODROPPED' : self.beginEdit } )
 
@@ -866,7 +874,7 @@
     FieldDisplayHandler.__init__(self, *args, **params)
 
     # My events...
-    self.subevents.registerEventListeners( {
+    self.subEventHandler.registerEventListeners( {
            'requestREPLACEVALUE' : self.replaceText } )
 
 
@@ -959,7 +967,7 @@
     FieldDisplayHandler.__init__(self, *args, **params)
 
     # My events...
-    self.subevents.registerEventListeners( {
+    self.subEventHandler.registerEventListeners( {
            'requestTOGGLECHKBOX' : self.handleToggleChkbox} )
 
 
@@ -1141,10 +1149,11 @@
 # ImageDiplayHandler
 #
 class ImageDisplayHandler(FieldDisplayHandler):
-  def __init__(self, entry, eventHandler):
+  def __init__(self, entry, eventHandler, subEventHandler):
     if not Image:
       raise "Form contains a <image> and image support not loaded"
-    FieldDisplayHandler.__init__(self, entry, eventHandler, None)
+    FieldDisplayHandler.__init__(self, entry, eventHandler, subEventHandler,
+                                 None)
 
   def _buildDisplayHelper(self, value, editing):
     if string.lower(self.entry.type) == 'url':
@@ -1163,8 +1172,9 @@
 # ComponentDiplayHandler
 #
 class ComponentDisplayHandler(FieldDisplayHandler):
-  def __init__(self, entry, eventHandler):
-    FieldDisplayHandler.__init__(self, entry, eventHandler, None)
+  def __init__(self, entry, eventHandler, subEventHandler):
+    FieldDisplayHandler.__init__(self, entry, eventHandler, subEventHandler,
+                                 None)
 
   def _buildDisplayHelper(self, value, editing):
     if string.lower(self.entry.type) == 'url':

Modified: trunk/gnue-forms/src/GFInstance.py
===================================================================
--- trunk/gnue-forms/src/GFInstance.py  2004-07-24 12:33:46 UTC (rev 6062)
+++ trunk/gnue-forms/src/GFInstance.py  2004-07-24 12:37:30 UTC (rev 6063)
@@ -60,6 +60,9 @@
     self.eventController = events.EventController()
     events.EventAware.__init__(self, self.eventController)
     self.registerEventListeners( {
+                           # First, all events are passed to the focus widget
+                           '__before__'          : self.__beforeEvent,
+
                            # Datasource trigger events
                            'preCommit'           : self.preCommit,
                            'preUpdate'           : self.preUpdate,
@@ -108,34 +111,6 @@
 
 ##                            # Dialog Support
 ##                            'requestDIALOG'        : self.activateDialog,
-
-                           # "Entry" events (proxied)
-                           'requestKEYPRESS'     : self.proxyEntryEvent,
-                           'requestREPLACEVALUE' : self.proxyEntryEvent,
-                           'requestCURSORMOVE'   : self.proxyEntryEvent,
-                           'requestCURSORLEFT'   : self.proxyEntryEvent,
-                           'requestCURSORRIGHT'  : self.proxyEntryEvent,
-                           'requestCURSOREND'    : self.proxyEntryEvent,
-                           'requestCURSORHOME'   : self.proxyEntryEvent,
-                           'requestBACKSPACE'    : self.proxyEntryEvent,
-                           'requestDELETE'       : self.proxyEntryEvent,
-                           'requestTOGGLECHKBOX' : self.proxyEntryEvent,
-                           'beginEDITMODE'       : self.proxyEntryEvent,
-                           'endEDITMODE'         : self.proxyEntryEvent,
-                           'requestINSERTAT'     : self.proxyEntryEvent,
-                           'requestDELETERANGE'  : self.proxyEntryEvent,
-                           'requestCOMBODROPPED' : self.proxyEntryEvent,
-
-                           # Selection/clipboard events (proxied)
-                           'requestSELECTWITHMOUSE' : self.proxyEntryEvent,
-                           'requestSELECTALL'    : self.proxyEntryEvent,
-                           'requestSELECTTOHOME' : self.proxyEntryEvent,
-                           'requestSELECTTOEND'  : self.proxyEntryEvent,
-                           'requestSELECTLEFT'   : self.proxyEntryEvent,
-                           'requestSELECTRIGHT'  : self.proxyEntryEvent,
-                           'requestCOPY'         : self.proxyEntryEvent,
-                           'requestCUT'          : self.proxyEntryEvent,
-                           'requestPASTE'        : self.proxyEntryEvent,
                      } )
 
     self.connections = connections       # Link to the GBaseApp's GConnections
@@ -448,30 +423,28 @@
     self.updateRecordStatus(form)
 
 
-  def proxyEntryEvent(self, event):
+  def __beforeEvent(self, event):
     """
-    This serves as a proxy for any entry-level events.
-    Since we don't want all entries listening for all
-    events (only the *current* entry), we will capture
-    any relevant events here and pass on to the entry.
+    This is called before any normal event processing is done. This method
+    passes the event to the current focus widget and sees if that widget wants
+    to handle that event.
 
     @param event: The event currently being processed.
     """
-    if event._form._currentEntry and \
-       event._form._currentEntry._type != 'GFButton':
+    if hasattr (event, '_form') and event._form._currentEntry:
 
-      handler = event._form._currentEntry._displayHandler
-
       # If the display will need to be refreshed,
       # then the proxied event should set this to 1
       event.refreshDisplay = 0
 
       # Pass off the event to the current entry's event handler
-      handler.subevents.dispatchEvent(event)
+      event._form._currentEntry.subEventHandler.dispatchEvent(event)
 
       # Refresh entry display if appropriate
       if event.refreshDisplay:
-        handler.generateRefreshEvent()
+        # FIXME: This is not clean. Maybe the event should set event.__after__?
+        if hasattr (event._form._currentEntry, '_displayHandler'):
+          event._form._currentEntry._displayHandler.generateRefreshEvent()
         event._form.refreshUIEvents()
 
       # If the entry needs an error message displayed,

Modified: trunk/gnue-forms/src/GFObjects/GFButton.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFButton.py  2004-07-24 12:33:46 UTC (rev 
6062)
+++ trunk/gnue-forms/src/GFObjects/GFButton.py  2004-07-24 12:37:30 UTC (rev 
6063)
@@ -50,6 +50,12 @@
     self._form = self.findParentOfType('GFForm')
     self._page._entryList.append(self)
 
+    listeners = {
+      'requestKEYPRESS': self.__handleKEYPRESS,
+      'requestENTER':    self.__handleENTER
+    }
+    self.subEventHandler.registerEventListeners(listeners)
+
   def isNavigable(self, mode):
     # Buttons aren't navigable during queries
     if mode == 'query':
@@ -58,7 +64,18 @@
       return GFTabStop.isNavigable(self, mode)
 
 
+  # Helper method for user events: fire button
+  def __fire(self):
+    self.processTrigger('On-Action')
 
 
+  # Event handlers
 
+  def __handleKEYPRESS(self, event):
+    if event.text == ' ':
+      self.__fire()
+      event.drop()
 
+  def __handleENTER(self, event):
+    self.__fire()
+    event.drop()

Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py   2004-07-24 12:33:46 UTC (rev 
6062)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py   2004-07-24 12:37:30 UTC (rev 
6063)
@@ -128,28 +128,28 @@
     # Create an appropriate display handler
     if self.style == 'checkbox':
       self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
-               self._form._instance.eventController)
+               self._form._instance.eventController, self.subEventHandler)
     elif self.style == 'dropdown':
       self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
-               self._form._instance.eventController)
+               self._form._instance.eventController, self.subEventHandler)
     elif self.style == 'listbox':
       self._displayHandler = GFDisplayHandler.ListboxDisplayHandler(self,
-               self._form._instance.eventController)
+               self._form._instance.eventController, self.subEventHandler)
     elif self.style == 'password':
       self._displayHandler = GFDisplayHandler.PasswordDisplayHandler(self,
-               self._form._instance.eventController,
+               self._form._instance.eventController, self.subEventHandler,
                self._displaymask, self._inputmask)
     elif self._field.typecast == 'text':
       self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
-               self._form._instance.eventController,
+               self._form._instance.eventController, self.subEventHandler,
                self._displaymask, self._inputmask)
     elif self._field.typecast == 'number':
       self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
-               self._form._instance.eventController,
+               self._form._instance.eventController, self.subEventHandler,
                self._displaymask, self._inputmask)
     elif self._field.typecast == 'date':
       self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
-               self._form._instance.eventController,
+               self._form._instance.eventController, self.subEventHandler,
                self._displaymask, self._inputmask)
 
     # Row settings

Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2004-07-24 12:33:46 UTC (rev 
6062)
+++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2004-07-24 12:37:30 UTC (rev 
6063)
@@ -26,11 +26,17 @@
 A base class for all GFObjects that can be containers
 """
 
+from gnue.common import events
+
 from GFObj import GFObj
 
 class GFTabStop(GFObj):
   _navigable = True
 
+  def __init__(self, parent, type):
+    GFObj.__init__(self, parent, type)
+    self.subEventHandler = events.EventController()
+
   def isNavigable(self, mode="edit"):
     # TODO: Check for read-only, etc
     if mode == 'query':





reply via email to

[Prev in Thread] Current Thread [Next in Thread]