[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r8502 - in trunk/gnue-forms/src: . GFObjects input/displayHandler
From: |
reinhard |
Subject: |
[gnue] r8502 - in trunk/gnue-forms/src: . GFObjects input/displayHandlers uidrivers/_commonGuiToolkit uidrivers/gtk2 uidrivers/win32 uidrivers/wx uidrivers/wx26 |
Date: |
Wed, 21 Jun 2006 03:26:30 -0500 (CDT) |
Author: reinhard
Date: 2006-06-21 03:26:29 -0500 (Wed, 21 Jun 2006)
New Revision: 8502
Modified:
trunk/gnue-forms/src/GFForm.py
trunk/gnue-forms/src/GFInstance.py
trunk/gnue-forms/src/GFObjects/GFButton.py
trunk/gnue-forms/src/input/displayHandlers/Cursor.py
trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/MenuBar.py
trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/ToolBar.py
trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py
trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py
trunk/gnue-forms/src/uidrivers/win32/MenuBar.py
trunk/gnue-forms/src/uidrivers/win32/ToolBar.py
trunk/gnue-forms/src/uidrivers/wx/MenuBar.py
trunk/gnue-forms/src/uidrivers/wx/ToolBar.py
trunk/gnue-forms/src/uidrivers/wx26/MenuBar.py
trunk/gnue-forms/src/uidrivers/wx26/ToolBar.py
trunk/gnue-forms/src/uidrivers/wx26/UIdriver.py
Log:
Introduced event_begin and event_end methods in GFForm that are called for
every user event (button press, menu selection, toolbar selection etc) and make
sure the form is in a consistent state while the event is processed.
Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py 2006-06-20 19:44:39 UTC (rev 8501)
+++ trunk/gnue-forms/src/GFForm.py 2006-06-21 08:26:29 UTC (rev 8502)
@@ -92,6 +92,9 @@
# Hackery until proper layout support is added
self._standardnamespaces = {'Char': 'GNUe:Forms:Char'}
+ # Set to True by GFInstance when we are closing the form
+ self._exiting = False
+
# The "None" init gives datasources time to setup master/detail
self._inits = [self.phase_1_init, None, self.phase_3_init]
@@ -472,13 +475,63 @@
- #===========================================================================
- # Events
- #
- # Incoming Event handlers
- #===========================================================================
+ # =========================================================================
+ # Events
+ #
+ # Incoming Event handlers
+ # =========================================================================
# -------------------------------------------------------------------------
+ # Function to be called at the begin of event handling code
+ # -------------------------------------------------------------------------
+
+ def event_begin (self):
+ """
+ Set the form into a defined state to prepare event handling.
+
+ This function sets the form into a consistent and defined state so that
+ event handling code (like triggers and actions) can rely on everything
+ being ok.
+
+ Most notably, this function updates the field value for the currently
+ edited entry and shows an hourglass mouse cursor.
+
+ This function has to be called at the beginning of each user event
+ being handled. At the end of handling the user event, L{event_end} has
+ to be called.
+ """
+
+ if hasattr(self._currentEntry, '_displayHandler'):
+ # FIXME: what if this fails?
+ self._currentEntry._displayHandler.updateFieldValue()
+ self.dispatchEvent('beginWAIT', _form=self);
+
+
+ # -------------------------------------------------------------------------
+ # Function to be called at the end of event handling code
+ # -------------------------------------------------------------------------
+
+ def event_end (self):
+ """
+ Set the form into a defined state to finalize event handling.
+
+ This function sets the form into a consistent and defined state after
+ event handling code (like triggers and actions) has been run.
+
+ Most notably, this function resets the mouse cursor from hourglass to
+ normal and updates the field values shown on the form to reflect any
+ data modifications done in the event handling code.
+
+ This function has to be called at the end of each user event being
+ handled, just like L{event_begin} is called at the beginning.
+ """
+
+ if not self._exiting:
+ self.dispatchEvent('endWAIT', _form=self);
+ self.refreshDisplay(self)
+
+
+ # -------------------------------------------------------------------------
# Create a new, empty record
# -------------------------------------------------------------------------
def newRecord(self):
@@ -644,21 +697,16 @@
message = None
self.dispatchEvent ('endENTERQUERY', _form = self);
- self.dispatchEvent ('beginWAIT', _form = self);
try:
- try:
- self._currentBlock.processQuery ()
+ self._currentBlock.processQuery ()
- except DBError:
- self.rollback (1)
- message = u_("Database query error:\n%(exType)s\n%(exMessage)s") \
- % {'exType' : sys.exc_info ()[0],
- 'exMessage': sys.exc_info ()[1]}
+ except DBError:
+ self.rollback (1)
+ message = u_("Database query error:\n%(exType)s\n%(exMessage)s") \
+ % {'exType' : sys.exc_info ()[0],
+ 'exMessage': sys.exc_info ()[1]}
- finally:
- self.dispatchEvent ('endWAIT', _form = self)
-
self.refreshDisplay (self._currentBlock)
if self._currentBlock.isEmpty ():
self.triggerSetStatusText (_('Query returned no results.'))
@@ -686,7 +734,6 @@
message = None
newBlock = None # block to jump to after commit
- self.dispatchEvent ('beginWAIT', _form = self)
try:
# Save all current records, since they get lost in the Pre-Commit
code
@@ -754,7 +801,6 @@
# occured during commit or in a trigger
if newBlock is not None and newBlock != self._currentBlock:
self.findAndChangeFocus (newBlock)
- self.dispatchEvent ('endWAIT', _form = self)
assert gLeave (4)
Modified: trunk/gnue-forms/src/GFInstance.py
===================================================================
--- trunk/gnue-forms/src/GFInstance.py 2006-06-20 19:44:39 UTC (rev 8501)
+++ trunk/gnue-forms/src/GFInstance.py 2006-06-21 08:26:29 UTC (rev 8502)
@@ -938,6 +938,7 @@
event._form.refreshUIEvents ()
else:
event._form.processTrigger ('On-Exit')
+ event._form._exiting = True
self.dispatchEvent ('exitApplication', _('Current data is saved'),
_formName = event._form.name, _form = event._form)
Modified: trunk/gnue-forms/src/GFObjects/GFButton.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFButton.py 2006-06-20 19:44:39 UTC (rev
8501)
+++ trunk/gnue-forms/src/GFObjects/GFButton.py 2006-06-21 08:26:29 UTC (rev
8502)
@@ -89,14 +89,14 @@
UI layer.
"""
- if hasattr(self._form._currentEntry, '_displayHandler'):
- self._form._currentEntry._displayHandler.updateFieldValue()
+ self._form.event_begin()
- # Fire the ON-ACTION trigger
- self.processTrigger('On-Action', False)
+ try:
+ # Fire the ON-ACTION trigger
+ self.processTrigger('On-Action', False)
- # Fire the action
- if self.__action is not None:
- self.__action.run()
-
- self._form.refreshDisplay(self._form)
+ # Fire the action
+ if self.__action is not None:
+ self.__action.run()
+ finally:
+ self._form.event_end()
Modified: trunk/gnue-forms/src/input/displayHandlers/Cursor.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Cursor.py 2006-06-20
19:44:39 UTC (rev 8501)
+++ trunk/gnue-forms/src/input/displayHandlers/Cursor.py 2006-06-21
08:26:29 UTC (rev 8502)
@@ -758,9 +758,10 @@
Update the associated field with the current value of the display handler
"""
- if self._buildValue ():
- if self.field._allowedValues and \
- not self.field._allowedValues.has_key ("%s" % self.value):
- raise InvalidFieldValueError, (self.field.name, self.value)
+ if self.isPending ():
+ if self._buildValue ():
+ if self.field._allowedValues and \
+ not self.field._allowedValues.has_key ("%s" % self.value):
+ raise InvalidFieldValueError, (self.field.name, self.value)
- self.field.setValue (self.value)
+ self.field.setValue (self.value)
Modified: trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/MenuBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/MenuBar.py 2006-06-20
19:44:39 UTC (rev 8501)
+++ trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/MenuBar.py 2006-06-21
08:26:29 UTC (rev 8502)
@@ -94,6 +94,20 @@
# ---------------------------------------------------------------------------
+ # Fire menu item
+ # ---------------------------------------------------------------------------
+
+ def _fire(self, userAction):
+
+ self.form.event_begin()
+ try:
+ event = "request%s" % userAction.event
+ self.driver.dispatchEvent (event, _form = self.form)
+ finally:
+ self.form.event_end()
+
+
+ # ---------------------------------------------------------------------------
# Create a menu item
# ---------------------------------------------------------------------------
@@ -136,8 +150,6 @@
self.disableItem (item)
-
-
# =============================================================================
# Default menu definition
# =============================================================================
Modified: trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/ToolBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/ToolBar.py 2006-06-20
19:44:39 UTC (rev 8501)
+++ trunk/gnue-forms/src/uidrivers/_commonGuiToolkit/ToolBar.py 2006-06-21
08:26:29 UTC (rev 8502)
@@ -112,6 +112,23 @@
self.driver.registerEventListeners (eventListeners)
+ # ---------------------------------------------------------------------------
+ # Fire tool bar item
+ # ---------------------------------------------------------------------------
+
+ def _fire(self, userAction, toggle):
+
+ self.form.event_begin()
+ try:
+ if toggle:
+ event = "request%s" % userAction.canToggle
+ else:
+ event = "request%s" % userAction.event
+ self.driver.dispatchEvent (event, _form = self.form)
+ finally:
+ self.form.event_end()
+
+
def __canRequestEvent(self, event):
item = self.__actionMap[event.__event__[3:]]
self.enableItem(item)
Modified: trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -113,8 +113,7 @@
def _menuHandler (self, menuItem, userAction):
- event = "request%s" % userAction.event
- self.driver.dispatchEvent (event, _form = self.form)
+ self._fire(userAction)
# ---------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -104,22 +104,16 @@
def _toggleEvent (self, button, userAction):
- if button.get_active ():
- event = 'request%s' % userAction.event
- else:
- event = 'request%s' % userAction.canToggle
+ self._fire(userAction, not button.get_active())
- self.driver.dispatchEvent (event, _form = self.form)
-
# ---------------------------------------------------------------------------
# Event handler for toolbar buttons
# ---------------------------------------------------------------------------
def _buttonPress (self, button, userAction):
- event = 'request%s' % userAction.event
- self.driver.dispatchEvent (event, _form = self.form)
+ self._fire(userAction, False)
# ---------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/uidrivers/win32/MenuBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/MenuBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/win32/MenuBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -71,8 +71,7 @@
id = getNextId()
self.container.addDescription(id, textEncode(userAction.description) or '')
win32gui.AppendMenu(parent, _menustyle, id, textEncode(label))
- event = 'request' + userAction.event
- self.container.Connect(id, lambda l=self.driver, e=event, f=self.form:
l.dispatchEvent(events.Event(e,_form=f)))
+ self.container.Connect(id, lambda u=userAction: self._fire(u))
return (parent, id)
Modified: trunk/gnue-forms/src/uidrivers/win32/ToolBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/ToolBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/win32/ToolBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -106,18 +106,16 @@
if userAction.canToggle:
self.container.Connect(id,
- lambda l=self.driver,
- e=event,
- te='request%s' % userAction.canToggle,
- tb=parent.GetHwnd(),
- f=self.form: l.dispatchEvent(
- (win32gui.SendMessage(tb, commctrl.TB_ISBUTTONCHECKED, id,
0) and e or te),_form=f))
+ lambda u=userAction,
+ tb=parent.GetHwnd(): self._fire(u,
+ not win32gui.SendMessage(tb, commctrl.TB_ISBUTTONCHECKED, id,
+ 0)))
check = 1
style = commctrl.TBSTYLE_CHECK
else:
self.container.Connect(id,
- lambda l=self.driver, e=event, f=self.form: l.dispatchEvent(e,_form=f))
+ lambda u=userAction: self._fire(u, False))
check = 0
style = commctrl.TBSTYLE_BUTTON
Modified: trunk/gnue-forms/src/uidrivers/wx/MenuBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/MenuBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/wx/MenuBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -92,9 +92,8 @@
parent.SetLabel(id, wxEncode(label))
- event = 'request' + userAction.event
EVT_MENU(self.driver._wxapp, id,
- lambda event, l=self.driver, e=event, f=self.form:
l.dispatchEvent(e,_form=f))
+ lambda event, u=userAction: self._fire(u))
return item
Modified: trunk/gnue-forms/src/uidrivers/wx/ToolBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/ToolBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/wx/ToolBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -55,14 +55,11 @@
event = 'request%s' % userAction.event
if userAction.canToggle:
EVT_MENU(self.driver._wxapp, id,
- lambda event, l=self.driver,
- e=event, i=id,
- te='request%s' % userAction.canToggle,
- s=self.toolbar.GetToolState,
- f=self.form: l.dispatchEvent((s(i) and e or te),_form=f))
+ lambda event, u=userAction, i=id, s=self.toolbar.GetToolState: \
+ self._fire(u, not s(i)))
else:
EVT_MENU(self.driver._wxapp, id,
- lambda event, l=self.driver, e=event, f=self.form:
l.dispatchEvent(e,_form=f))
+ lambda event, u=userAction: self._fire(u, False))
# Set the action icon if available
if iconloc:
Modified: trunk/gnue-forms/src/uidrivers/wx26/MenuBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/MenuBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/wx26/MenuBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -106,10 +106,8 @@
result.SetBitmap (icon)
- event = 'request' + userAction.event
- wx.EVT_MENU (wx.GetApp (), result.GetId (), \
- lambda event, l = self.driver, e = event, f = self.form: \
- l.dispatchEvent (e, _form = f))
+ wx.EVT_MENU (wx.GetApp (), result.GetId (),
+ lambda event, u = userAction: self._fire (u))
parent.AppendItem (result)
Modified: trunk/gnue-forms/src/uidrivers/wx26/ToolBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/ToolBar.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/wx26/ToolBar.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -110,16 +110,11 @@
item = self.toolbar.FindById (event.GetId ())
action = item.GetClientData ()
- tEvent = 'request%s' % action.event
+ self._fire(action, action.canToggle \
+ and not self.toolbar.GetToolState(item.GetId()))
- if action.canToggle:
- if not self.toolbar.GetToolState (item.GetId ()):
- tEvent = 'request%s' % action.canToggle
- self.driver.dispatchEvent (tEvent, _form = self.form)
-
-
# ---------------------------------------------------------------------------
# Finalize the toolbar creation process
# ---------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/uidrivers/wx26/UIdriver.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx26/UIdriver.py 2006-06-20 19:44:39 UTC
(rev 8501)
+++ trunk/gnue-forms/src/uidrivers/wx26/UIdriver.py 2006-06-21 08:26:29 UTC
(rev 8502)
@@ -251,6 +251,17 @@
# ---------------------------------------------------------------------------
+ # Begin/end wait cursor
+ # ---------------------------------------------------------------------------
+
+ def beginWait (self, event):
+ wx.BeginBusyCursor()
+
+ def endWait (self, event):
+ wx.EndBusyCursor()
+
+
+ # ---------------------------------------------------------------------------
# Form alert
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r8502 - in trunk/gnue-forms/src: . GFObjects input/displayHandlers uidrivers/_commonGuiToolkit uidrivers/gtk2 uidrivers/win32 uidrivers/wx uidrivers/wx26,
reinhard <=