[Top][All Lists]
[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':
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6063 - in trunk/gnue-forms/src: . GFObjects,
reinhard <=