[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r7601 - in trunk: gnue-common/src/datasources gnue-forms/src/GFOb
From: |
reinhard |
Subject: |
[gnue] r7601 - in trunk: gnue-common/src/datasources gnue-forms/src/GFObjects |
Date: |
Thu, 16 Jun 2005 15:43:48 -0500 (CDT) |
Author: reinhard
Date: 2005-06-16 15:43:47 -0500 (Thu, 16 Jun 2005)
New Revision: 7601
Modified:
trunk/gnue-common/src/datasources/GDataSource.py
trunk/gnue-forms/src/GFObjects/GFBlock.py
trunk/gnue-forms/src/GFObjects/GFField.py
Log:
Replaced ResultSetListener system by standard event handling system.
Modified: trunk/gnue-common/src/datasources/GDataSource.py
===================================================================
--- trunk/gnue-common/src/datasources/GDataSource.py 2005-06-16 20:40:17 UTC
(rev 7600)
+++ trunk/gnue-common/src/datasources/GDataSource.py 2005-06-16 20:43:47 UTC
(rev 7601)
@@ -29,6 +29,7 @@
from gnue.common.apps import errors
from gnue.common.definitions import GObjects, GParser, GParserHelpers
+from gnue.common import events
from gnue.common.formatting import GTypecast
from gnue.common.datasources import Exceptions, GConditions, GConnections
@@ -42,6 +43,15 @@
Class that handles DataSources. This is a subclass of GObj, which
means this class can be created from XML markup and stored in an
Object tree (e.g., a Forms tree).
+
+ Each GDataSource object maintains its own event controller and issues the
+ following events:
+ - dsResultSetActivated (parameters: resultSet) whenever the current ResultSet
+ of this datasource changes; this happens when a query is executed or when
+ the master of this datasource moves to another record.
+ - dsResultSetChanged (parameters: resultSet) whenever the current ResultSet
+ has been reloaded from the backend; this happens after each commit if the
+ "requery" option of this datasource is in use.
"""
#
---------------------------------------------------------------------------
@@ -77,10 +87,14 @@
# (pk_fields, fk_fields) tuples.
self.__details = {}
+ # We maintain our own event controller, so an object interested in *our*
+ # events doesn't get the events of other datasources
+ self.__eventController = events.EventController ()
+ self.registerEventListeners = self.__eventController.registerEventListeners
+
self._inits = [self.__primaryInit, self.__secondaryInit,
self.__tertiaryInit]
self._currentResultSet = None
- self._resultSetListeners = []
self._toplevelParent = None # Needs to be set by subclass
# so that _topObject gets set
self._topObject = None
@@ -419,14 +433,6 @@
# ---------------------------------------------------------------------------
- # Register a listener for changes of the ResultSet
- # ---------------------------------------------------------------------------
-
- def registerResultSetListener(self, listener):
- self._resultSetListeners.append(listener)
-
-
- # ---------------------------------------------------------------------------
# Called by dbdrivers whenever this datasource's master has changed
# ---------------------------------------------------------------------------
@@ -490,9 +496,9 @@
newResultSet.close ()
# If this is the current result set, then the UI has to follow the changes.
- # FIXME: this should be a different method than for a new result set.
if resultSet == self._currentResultSet:
- self.__notifyResultSetListeners ()
+ self.__eventController.dispatchEvent ('dsResultSetChanged',
+ resultSet = resultSet)
# ---------------------------------------------------------------------------
@@ -587,19 +593,11 @@
def _activateResultSet (self, resultSet):
self._currentResultSet = resultSet
- self.__notifyResultSetListeners ()
+ self.__eventController.dispatchEvent ('dsResultSetActivated',
+ resultSet = resultSet)
# ---------------------------------------------------------------------------
- # Notify everybody who's interested in newly loaded result sets
- # ---------------------------------------------------------------------------
-
- def __notifyResultSetListeners (self):
- for listener in self._resultSetListeners:
- listener (self._currentResultSet)
-
-
- # ---------------------------------------------------------------------------
# Post all changes in this datasource to the backend
# ---------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py 2005-06-16 20:40:17 UTC (rev
7600)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2005-06-16 20:43:47 UTC (rev
7601)
@@ -226,6 +226,12 @@
'block': self.name}
self._dataSourceLink.setBlock (self)
+ # Register event handling functions
+ self._dataSourceLink.registerEventListeners ({
+ 'dsResultSetActivated': self.__dsResultSetActivated,
+ 'dsResultSetChanged' : self.__dsResultSetActivated, # sic!
+ })
+
# Get min and max child rows, if applicable
try:
self._minChildRows = self._dataSourceLink.detailmin
@@ -236,9 +242,6 @@
except AttributeError:
self._maxChildRows = None
- # We will monitor our own resultSet changes
- self._dataSourceLink.registerResultSetListener(self._loadResultSet)
-
self.walk(self.__setChildRowSettings)
def __setChildRowSettings(self, object):
@@ -252,9 +255,33 @@
else:
object._gap = self._gap
+
+ # ---------------------------------------------------------------------------
+ # Event handling functions for datasource events
+ # ---------------------------------------------------------------------------
+
+ def __dsResultSetActivated (self, event):
+
+ self._resultSet = event.resultSet
+
+ self._recordCount = self._resultSet.getRecordCount ()
+
+ # This makes the resultSet call our currentRecordMoved method
+ self._resultSet.registerListener (self)
+
+ # Do this again because currentRecordMoved doesn't act on -1
+ self._currentRecord = self._resultSet.getRecordNumber ()
+
+ # If the ResultSet already has a current record loaded, stay there.
+ # Otherwise, jump to the first record. If there is none, create an empty
+ # record.
+ if self._currentRecord == -1 and not self._resultSet.firstRecord ():
+ self.newRecord ()
+
+
+ # ---------------------------------------------------------------------------
#
#
- #
def getFocusOrder(self):
list = []
for field in self._children:
@@ -295,29 +322,6 @@
self._resultSet.current.delete()
#
- #
- def _loadResultSet(self, resultSet):
- """
- Load and process a resultset
- """
- self._resultSet = resultSet
-
- self._recordCount = self._resultSet.getRecordCount ()
-
- # This makes the resultSet call our currentRecordMoved method
- resultSet.registerListener (self)
-
- # Do this again because currentRecordMoved doesn't act on -1
- self._currentRecord = self._resultSet.getRecordNumber ()
-
- # If the ResultSet already has a current record loaded, stay there.
- # Otherwise, jump to the first record. If there is none, create an empty
- # record.
- if self._currentRecord == -1 and not self._resultSet.firstRecord ():
- self.newRecord ()
-
-
- #
# isEmpty()
#
def isEmpty(self):
Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py 2005-06-16 20:40:17 UTC (rev
7600)
+++ trunk/gnue-forms/src/GFObjects/GFField.py 2005-06-16 20:43:47 UTC (rev
7601)
@@ -217,9 +217,13 @@
for field in [self.fk_key] + self._fk_descr:
self._fk_datasource.referenceField(field, None)
- # Register as a result set listener
- self._fk_datasource.registerResultSetListener (self.__loadAllowedValues)
+ # Register event handling functions
+ self._fk_datasource.registerEventListeners ({
+ 'dsResultSetActivated': self.__dsResultSetActivated,
+ 'dsResultSetChanged' : self.__dsResultSetActivated, # sic!
+ })
+
if hasattr(self, 'queryDefault') and \
self.queryDefault != None and \
self._bound and \
@@ -227,6 +231,18 @@
block._queryDefaults[self] = self.queryDefault
+ # ---------------------------------------------------------------------------
+ # Event handling functions for datasource events
+ # ---------------------------------------------------------------------------
+
+ def __dsResultSetActivated (self, event):
+ self.__loadAllowedValues (event.resultSet)
+
+
+ # ---------------------------------------------------------------------------
+ #
+ # ---------------------------------------------------------------------------
+
def isQueryable(self):
return self._queryable
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7601 - in trunk: gnue-common/src/datasources gnue-forms/src/GFObjects,
reinhard <=