[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r6653 - trunk/gnue-common/src/datasources/drivers/Base
From: |
reinhard |
Subject: |
r6653 - trunk/gnue-common/src/datasources/drivers/Base |
Date: |
Mon, 8 Nov 2004 10:51:11 -0600 (CST) |
Author: reinhard
Date: 2004-11-08 10:51:10 -0600 (Mon, 08 Nov 2004)
New Revision: 6653
Modified:
trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
Log:
Added a possibility to notify other objects that the current record has moved.
Modified: trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2004-11-08
15:03:52 UTC (rev 6652)
+++ trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2004-11-08
16:51:10 UTC (rev 6653)
@@ -57,6 +57,8 @@
self._defaultValues = {}
self._defaultValues.update(defaultValues)
+ self.__listeners = []
+
self.current = None
if masterRecordSet:
@@ -121,6 +123,16 @@
return self._cachedRecords[record]
+ # Move to a record number already in cache
+ def __move (self, record):
+ if record != self._currentRecord \
+ or self.current != self._cachedRecords [self._currentRecord]:
+ self._currentRecord = record
+ self.current = self._cachedRecords [self._currentRecord]
+ self.notifyDetailObjects ()
+ self.__notifyListeners ()
+
+
# move to record #, returns record or None if record number out of range
def setRecord(self, record):
@@ -129,26 +141,18 @@
if record >= len(self._cachedRecords):
return None
- elif record == self._currentRecord \
- and self.current == self._cachedRecords [self._currentRecord]:
- # Nothing has changed - no need to do anything
- return self.current
-
else:
- self._currentRecord = record
- self.current = self._cachedRecords[self._currentRecord]
- self.notifyDetailObjects()
+ self.__move (record)
return self.current
+
# returns next record, or None if no more records
def nextRecord(self):
if self._currentRecord + 1 == len(self._cachedRecords):
if not self._cacheNextRecord():
return None
- self._currentRecord += 1
- self.current = self._cachedRecords[self._currentRecord]
- self.notifyDetailObjects()
+ self.__move (self._currentRecord + 1)
return self.current
@@ -157,9 +161,7 @@
if self._currentRecord < 1:
return None
else:
- self._currentRecord -= 1
- self.current = self._cachedRecords[self._currentRecord]
- self.notifyDetailObjects()
+ self.__move (self._currentRecord - 1)
return self.current
@@ -169,13 +171,10 @@
if not self._cacheNextRecord():
return None
- self._currentRecord = 0
- self.current = self._cachedRecords[0]
- self.notifyDetailObjects()
+ self.__move (0)
return self.current
-
# returns 1=at last record, 0=No records loaded
def lastRecord(self):
if self._currentRecord == -1:
@@ -183,9 +182,7 @@
else:
while self._cacheNextRecord():
pass
- self._currentRecord = len(self._cachedRecords) - 1
- self.current = self._cachedRecords[self._currentRecord]
- self.notifyDetailObjects()
+ self.__move (len (self._cachedRecords) - 1)
return self.current
@@ -223,6 +220,7 @@
i += 1
self.notifyDetailObjects()
+ self.__notifyListeners ()
return self.current
@@ -340,6 +338,24 @@
detail[0]._masterRecordChanged(self))
+ # Other objects can register here. Their currentRecordMoved method will then
+ # get called whenever the current record of this ResultSet changes.
+ def registerListener (self, listener):
+ if listener not in self.__listeners:
+ self.__listeners.append (listener)
+ # Inform new listener about current record
+ if self._currentRecord >= 0:
+ listener.currentRecordMoved ()
+
+
+ # This gets called whenever the ResultSet gets a new current recordset,
+ # that happens in case of record navigation and in case of inserting a new
+ # record.
+ def __notifyListeners (self):
+ for listener in self.__listeners:
+ listener.currentRecordMoved ()
+
+
# Returns 1=Field is bound to a database field
def isFieldBound(self, fieldName):
if self._dataObject._fieldReferences.has_key(fieldName):
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6653 - trunk/gnue-common/src/datasources/drivers/Base,
reinhard <=