commit-gnue
[Top][All Lists]
Advanced

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

r6696 - trunk/gnue-forms/src/GFObjects


From: reinhard
Subject: r6696 - trunk/gnue-forms/src/GFObjects
Date: Wed, 17 Nov 2004 18:09:27 -0600 (CST)

Author: reinhard
Date: 2004-11-17 18:09:26 -0600 (Wed, 17 Nov 2004)
New Revision: 6696

Modified:
   trunk/gnue-forms/src/GFObjects/GFField.py
Log:
Synchronize lookup fields with the underlying resultset.


Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py   2004-11-18 00:05:19 UTC (rev 
6695)
+++ trunk/gnue-forms/src/GFObjects/GFField.py   2004-11-18 00:09:26 UTC (rev 
6696)
@@ -214,18 +214,8 @@
         self._fk_datasource.referenceField(field, None)
 
       # Register as a result set listener
-      # if self._fk_datasource.hasMaster (): - not usable before phase 2 init
-      if hasattr (self._fk_datasource, 'master') and 
self._fk_datasource.master:
-        self._fk_datasource.registerResultSetListener 
(self.__loadAllowedValues)
-      else:
-        if (self._fk_datasource.prequery == True):
-          self.__loadAllowedValues (self._fk_datasource.createResultSet ())
-        else:
-          self._allowedValues = {"":""}
-          self._allowedValuesDescr = [""]
-          self._allowedValuesReverse = {"":""}
+      self._fk_datasource.registerResultSetListener (self.__loadAllowedValues)
 
-
     if hasattr(self, 'queryDefault') and \
          self.queryDefault != None and \
          self._bound and \
@@ -352,7 +342,7 @@
 
     # If the field is a foreign key, move the result set to the selected value
     if hasattr(self,'_fk_datasource'):
-      self._fk_datasource.findRecord({self.fk_key: value})
+      self.__fk_resultSet.findRecord({self.fk_key: value})
 
   #
   # allowedValues
@@ -368,24 +358,26 @@
            len(dropdownSeparator) > 2:
       dropdownSeparator = dropdownSeparator[1:-1]
 
+    array = resultSet.getArray ([self.fk_key] + self._fk_descr)
 
+    for line in array:
+      key = "%s" % line [0]
+      descr = string.join (["%s" % i for i in line [1:]], dropdownSeparator)
+
+      self._allowedValues[key] = descr
+      self._allowedValuesDescr.append(descr)
+      self._allowedValuesReverse[descr] = key
+
+    # And now, position the resultSet to the correct record according to the
+    # current field content
+    resultSet.findRecord({self.fk_key: self.getValue()})
+
+    # Remember the resultSet for later
+    self.__fk_resultSet = resultSet
  
-    more = resultSet.firstRecord()
-    while more:
-      try:
-        key = "%s" % resultSet.current.getField(self.fk_key)
-        descriptions = []
-        for i in self._fk_descr:
-          descriptions.append("%s" % resultSet.current.getField(i))
-        descr = string.join(descriptions,dropdownSeparator)
+    # Register as a listener to resultset movements
+    resultSet.registerListener(self)
 
-        self._allowedValues[key] = descr
-        self._allowedValuesDescr.append(descr)
-        self._allowedValuesReverse[descr] = key
-      except AttributeError:
-        # TODO: What's this for?
-        self._allowedValues[resultSet.current.getField(self.fk_key)] = None
-      more = resultSet.nextRecord()
     gDebug (5,'Created for DropDown: %s' % self._allowedValues)
 
   def allowedValues(self):
@@ -404,6 +396,12 @@
       self.__loadAllowedValues(resultSet)
     pass
 
+  # This gets called by the resultSet whenever the current record changes.
+  # We want the field to follow the selection then.
+  def currentRecordMoved (self):
+    if self._block._resultSet:  # make sure we don't call setValue too early
+      self.setValue (self.__fk_resultSet.current [self.fk_key])
+
   def isEditable(self, mode):
     if mode == 'query':
       return self.queryable and self._block.queryable





reply via email to

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