commit-gnue
[Top][All Lists]
Advanced

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

gnue/forms src/GFDisplayHandler.py src/GFForm.p...


From: Jason Cater
Subject: gnue/forms src/GFDisplayHandler.py src/GFForm.p...
Date: Thu, 21 Nov 2002 21:57:25 -0500

CVSROOT:        /home/cvs
Module name:    gnue
Changes by:     Jason Cater <address@hidden>    02/11/21 21:57:24

Modified files:
        forms/src      : GFDisplayHandler.py GFForm.py GFInstance.py 
                         GFParser.py 
        forms/src/GFObjects: GFBlock.py GFButton.py GFEntry.py 
                             GFField.py GFLayout.py GFLogic.py GFPage.py 
        forms/src/uidrivers/_base: UIdriver.py 
        forms/utils    : gfd04to05.py 

Log message:
        more work on separation of logic and layout

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFDisplayHandler.py.diff?cvsroot=OldCVS&tr1=1.38&tr2=1.39&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFForm.py.diff?cvsroot=OldCVS&tr1=1.203&tr2=1.204&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFInstance.py.diff?cvsroot=OldCVS&tr1=1.66&tr2=1.67&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFParser.py.diff?cvsroot=OldCVS&tr1=1.87&tr2=1.88&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFBlock.py.diff?cvsroot=OldCVS&tr1=1.63&tr2=1.64&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFButton.py.diff?cvsroot=OldCVS&tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFEntry.py.diff?cvsroot=OldCVS&tr1=1.79&tr2=1.80&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFField.py.diff?cvsroot=OldCVS&tr1=1.79&tr2=1.80&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFLayout.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFLogic.py.diff?cvsroot=OldCVS&tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/GFObjects/GFPage.py.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/src/uidrivers/_base/UIdriver.py.diff?cvsroot=OldCVS&tr1=1.78&tr2=1.79&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/forms/utils/gfd04to05.py.diff?cvsroot=OldCVS&tr1=1.3&tr2=1.4&r1=text&r2=text

Patches:
Index: gnue/forms/src/GFDisplayHandler.py
diff -c gnue/forms/src/GFDisplayHandler.py:1.38 
gnue/forms/src/GFDisplayHandler.py:1.39
*** gnue/forms/src/GFDisplayHandler.py:1.38     Sun Nov 17 18:39:35 2002
--- gnue/forms/src/GFDisplayHandler.py  Thu Nov 21 21:57:23 2002
***************
*** 86,95 ****
      # TODO: invalid python so I'm just putting the old line back with what I 
think
      # TODO: would be the corrected patch line commented out.
      # if (self.handleCR and type(self.display)=='str'):
!     
      if self.handleCR:
        self.dispatchEvent(events.Event('updateEntryEditor',
!            object = self.entry,
             display=self.display, # string.replace(self.display,'\n','\r\n'),
             cursor=self.cursor + 
len(string.split(self.display[:self.cursor+1],'\n'))-1,
             selection=self.getSelectionArea(),
--- 86,95 ----
      # TODO: invalid python so I'm just putting the old line back with what I 
think
      # TODO: would be the corrected patch line commented out.
      # if (self.handleCR and type(self.display)=='str'):
! 
      if self.handleCR:
        self.dispatchEvent(events.Event('updateEntryEditor',
!            object = self.field,
             display=self.display, # string.replace(self.display,'\n','\r\n'),
             cursor=self.cursor + 
len(string.split(self.display[:self.cursor+1],'\n'))-1,
             selection=self.getSelectionArea(),
***************
*** 117,123 ****
      self.modified = 0
  
      # TODO: Replace with formatter
!     self.setValue(self.entry.getValue())
      self.work = self._buildDisplayHelper(self.value, 1)
      self._buildDisplay()
  
--- 117,123 ----
      self.modified = 0
  
      # TODO: Replace with formatter
!     self.setValue(self.field.getValue())
      self.work = self._buildDisplayHelper(self.value, 1)
      self._buildDisplay()
  
***************
*** 133,139 ****
        return
  
      if not self._loadedAllowedValues:
!       self.entry.allowedValues()
        self._loadedAllowedValues = 1
  
  
--- 133,139 ----
        return
  
      if not self._loadedAllowedValues:
!       self.field.allowedValues()
        self._loadedAllowedValues = 1
  
  
***************
*** 150,156 ****
  
      if self.modified:
        if self._buildValue():
!         if self.entry._allowedValues and not 
self.entry._allowedValues.has_key(str(self.value)):
            self.work = ""
            event.__error__ = 1
            event.__errortext__ = _("Invalid value '%s' for field") % self.value
--- 150,156 ----
  
      if self.modified:
        if self._buildValue():
!         if self.field._allowedValues and not 
self.field._allowedValues.has_key(str(self.value)):
            self.work = ""
            event.__error__ = 1
            event.__errortext__ = _("Invalid value '%s' for field") % self.value
***************
*** 159,165 ****
          self.editing = 0
          event.__results__ = self.value
          event.modified = self.modified
!         self.entry.setValue(self.value)
  
          self._buildDisplay()
  
--- 159,165 ----
          self.editing = 0
          event.__results__ = self.value
          event.modified = self.modified
!         self.field.setValue(self.value)
  
          self._buildDisplay()
  
***************
*** 172,185 ****
  
      value = event.text
  
!     if (self.entry.readonly and not self.entry._block.mode=='query'):
        event.__error__ = 1
        event.__errortext__ = _("Cannot modify field.  Form is read only")
        return
!     elif self.entry.editOnNull and \
           self.value != None and \
           self.value != "" and \
!          not self.entry._block._resultSet.current.isPending():
        event.__error__ = 1
        event.__errortext__ = _("Cannot modify field after initial creation.")
        return
--- 172,185 ----
  
      value = event.text
  
!     if (self.field.readonly and not self.field._block.mode=='query'):
        event.__error__ = 1
        event.__errortext__ = _("Cannot modify field.  Form is read only")
        return
!     elif self.field.editOnNull and \
           self.value != None and \
           self.value != "" and \
!          not self.field._block._resultSet.current.isPending():
        event.__error__ = 1
        event.__errortext__ = _("Cannot modify field after initial creation.")
        return
***************
*** 187,203 ****
      # Do some appropriate checks on the text
      # TODO: This will be moved to the mask system!!
  
!     if self.entry._lowercase:
        value = string.lower(event.text)
!     if self.entry._uppercase:
        value = string.upper(event.text)
  
!     if hasattr(self.entry,'max_length') and \
!        len(self.work)  + len(value) > self.entry.max_length:
        return
  
!     if ( self.entry._numeric and \
!          self.entry._block.mode == 'normal' ):
        for char in value:
          if not (char in string.digits or char in '.'):
            return
--- 187,203 ----
      # Do some appropriate checks on the text
      # TODO: This will be moved to the mask system!!
  
!     if self.field._lowercase:
        value = string.lower(event.text)
!     if self.field._uppercase:
        value = string.upper(event.text)
  
!     if hasattr(self.field,'max_length') and \
!        len(self.work)  + len(value) > self.field.max_length:
        return
  
!     if ( self.field._numeric and \
!          self.field._block.mode == 'normal' ):
        for char in value:
          if not (char in string.digits or char in '.'):
            return
***************
*** 225,238 ****
  
      else:
        # Otherwise just graft the new text in place
!       
        self.work = self.work[:self.cursor] \
                     + value                \
                     + self.work[self.cursor:]
  
        self.cursor += len(event.text)
  
!     
      event.__dropped__ = 1
      self.modified = 1
      self._buildDisplay()
--- 225,238 ----
  
      else:
        # Otherwise just graft the new text in place
! 
        self.work = self.work[:self.cursor] \
                     + value                \
                     + self.work[self.cursor:]
  
        self.cursor += len(event.text)
  
! 
      event.__dropped__ = 1
      self.modified = 1
      self._buildDisplay()
***************
*** 408,413 ****
--- 408,414 ----
      events.EventAware.__init__(self, eventHandler)
  
      self.entry = entry            # Our entry
+     self.field = entry._field
      self.editing = 0              # In editing mode??
      self.modified = 0             # Have we been modified??
      self.value = None             # The latest db-compat value
***************
*** 646,666 ****
  
    def beginEdit(self, event):
  
!     if not self._loadedAllowedValues and not 
hasattr(self.entry,'_allowedValues'):
!       self.entry.allowedValues()
        self._loadedAllowedValues = 1
  
      self.editing = 1
      self.modified = 0
  
      # TODO: Replace with formatter
!     self.setValue(self.entry.getValue())
  
      if self.value == None:
        self.work = ""
      else:
        try:
!         self.work = self.entry._allowedValues[str(self.value)]
        except KeyError:
          self.work = ""
          event.__error__ = 1
--- 647,667 ----
  
    def beginEdit(self, event):
  
!     if not self._loadedAllowedValues and not 
hasattr(self.field,'_allowedValues'):
!       self.field.allowedValues()
        self._loadedAllowedValues = 1
  
      self.editing = 1
      self.modified = 0
  
      # TODO: Replace with formatter
!     self.setValue(self.field.getValue())
  
      if self.value == None:
        self.work = ""
      else:
        try:
!         self.work = self.field._allowedValues[str(self.value)]
        except KeyError:
          self.work = ""
          event.__error__ = 1
***************
*** 680,694 ****
      if editing:
        i = 0
        val = string.lower(value)
!       for disp in self.entry._allowedValuesDescr:
          if disp[:len(val)] == val:
!           display = 
self.entry._allowedValues[self.entry._allowedValuesReverse[disp]]
            self._dropdownIndex = i
            return str(display)
  
        return str(value)
      else:
!       return self.entry._allowedValues[str(value)]
  
    def _buildDisplay(self):
      if self.editing:
--- 681,695 ----
      if editing:
        i = 0
        val = string.lower(value)
!       for disp in self.field._allowedValuesDescr:
          if disp[:len(val)] == val:
!           display = 
self.field._allowedValues[self.field._allowedValuesReverse[disp]]
            self._dropdownIndex = i
            return str(display)
  
        return str(value)
      else:
!       return self.field._allowedValues[str(value)]
  
    def _buildDisplay(self):
      if self.editing:
***************
*** 710,716 ****
        self.value = '' # None
      else:
        try:
!         self.value = self.entry._allowedValuesReverse[self.display]
        except KeyError:
          return 0
      return 1
--- 711,717 ----
        self.value = '' # None
      else:
        try:
!         self.value = self.field._allowedValuesReverse[self.display]
        except KeyError:
          return 0
      return 1
***************
*** 781,787 ****
      self.editing = 1
      self.modified = 0
  
!     self.setValue(self.entry.getValue())
  
      self.work = self.value
  
--- 782,788 ----
      self.editing = 1
      self.modified = 0
  
!     self.setValue(self.field.getValue())
  
      self.work = self.value
  
Index: gnue/forms/src/GFForm.py
diff -c gnue/forms/src/GFForm.py:1.203 gnue/forms/src/GFForm.py:1.204
*** gnue/forms/src/GFForm.py:1.203      Mon Nov 18 01:40:55 2002
--- gnue/forms/src/GFForm.py    Thu Nov 21 21:57:23 2002
***************
*** 69,76 ****
      self._currentBlock = None
      self._currentEntry = None
  
-     self._blockList = []
-     self._pageList = []
  
      self._app = app
  
--- 69,74 ----
***************
*** 167,172 ****
--- 165,177 ----
      # Initialize our events system
      events.EventAware.__init__(self, self._app.eventController)
  
+     # Find the logic and layout controllers
+     for child in self._children:
+       if child._type == 'GFLogic':
+         self._logic = child
+       elif child._type == 'GFLayout':
+         self._layout = child
+ 
      self.initTriggerSystem()
      self._triggerns.update(self._triggerNamespaceTree._globalNamespace)
      # TODO: Is this right
***************
*** 333,343 ****
    #
  
  
!   def updateUIEntry(self,entry):
!     self._app.dispatchEvent(events.Event('updateENTRY',entry));
  
    #
!   # Incomming Event handlers
    #
  
    def newRecord(self):
--- 338,349 ----
    #
  
  
!   def updateUIEntry(self,field):
!     for entry in field._entryList:
!       self._app.dispatchEvent(events.Event('updateENTRY',entry));
  
    #
!   # Incoming Event handlers
    #
  
    def newRecord(self):
***************
*** 349,355 ****
        self._currentBlock.deleteRecord()
  
    def isSaved(self):
!     for block in self._blockList:
        if not block.isSaved():
          return 0
      return 1
--- 355,361 ----
        self._currentBlock.deleteRecord()
  
    def isSaved(self):
!     for block in self._logic._blockList:
        if not block.isSaved():
          return 0
      return 1
***************
*** 357,368 ****
    def prepQuery(self):
      message = None
      if self._currentBlock.mode != 'query':
!       for block in self._blockList:
          if not block.isSaved():
            message = _('Data not saved. Save changes or clear the form to 
proceed.')
            return message
  
!     for block in self._blockList:
        block.processRollback()
        for entry in block._entryList:
          if hasattr(entry,'queryDefault'):
--- 363,374 ----
    def prepQuery(self):
      message = None
      if self._currentBlock.mode != 'query':
!       for block in self._logic._blockList:
          if not block.isSaved():
            message = _('Data not saved. Save changes or clear the form to 
proceed.')
            return message
  
!     for block in self._logic._blockList:
        block.processRollback()
        for entry in block._entryList:
          if hasattr(entry,'queryDefault'):
***************
*** 399,405 ****
            self._app.dispatchEvent(events.Event('endWAIT',None));
            return _("Form trigger returned error")
  
!         for block in self._blockList:
            GDebug.printMesg(1, "Saving %s"%block.name)
            try:
  
--- 405,411 ----
            self._app.dispatchEvent(events.Event('endWAIT',None));
            return _("Form trigger returned error")
  
!         for block in self._logic._blockList:
            GDebug.printMesg(1, "Saving %s"%block.name)
            try:
  
***************
*** 413,419 ****
              return _("Block trigger returned error")
            block.processTrigger('Post-Commit')
  
!         for block in self._blockList:
              block.switchRecord(0)
  
        else:
--- 419,425 ----
              return _("Block trigger returned error")
            block.processTrigger('Post-Commit')
  
!         for block in self._logic._blockList:
              block.switchRecord(0)
  
        else:
***************
*** 447,453 ****
  
    def rollback(self, recover=0):
      self.endEditing()
!     for block in self._blockList:
        block.processRollback(recover)
      self.refreshDisplay(self)
      self._currentBlock.jumpRecord(self._currentBlock._currentRecord)
--- 453,459 ----
  
    def rollback(self, recover=0):
      self.endEditing()
!     for block in self._logic._blockList:
        block.processRollback(recover)
      self.refreshDisplay(self)
      self._currentBlock.jumpRecord(self._currentBlock._currentRecord)
***************
*** 490,496 ****
            nextEntry = object
            break
  
!     if nextEntry == firstEntry and self._currentBlock.transparentBlock:
        # Jump to the next block if block is tagged as transparent
        self.nextBlock()
      else:
--- 496,502 ----
            nextEntry = object
            break
  
!     if nextEntry == firstEntry and self._currentBlock.transparent:
        # Jump to the next block if block is tagged as transparent
        self.nextBlock()
      else:
***************
*** 523,529 ****
  
          nextEntry = object
  
!     if self._currentBlock.transparentBlock and nextEntry == lastEntry: # Jump 
to the prev block if block is tagged as transparent
        prevBlock = self.findPreviousBlock()
        # Move to the new last record of the new current block
        for object in prevBlock._focusOrder:
--- 529,535 ----
  
          nextEntry = object
  
!     if self._currentBlock.transparent and nextEntry == lastEntry: # Jump to 
the prev block if block is tagged as transparent
        prevBlock = self.findPreviousBlock()
        # Move to the new last record of the new current block
        for object in prevBlock._focusOrder:
***************
*** 557,565 ****
    def nextBlock(self):
  
      try:
!       nextBlock = self._blockList[self._blockList.index(self._currentBlock)+1]
      except IndexError:
!       nextBlock = self._blockList[0]
  
      self.findAndChangeFocus(nextBlock)
  
--- 563,571 ----
    def nextBlock(self):
  
      try:
!       nextBlock = 
self._logic._blockList[self._logic._blockList.index(self._currentBlock)+1]
      except IndexError:
!       nextBlock = self._logic._blockList[0]
  
      self.findAndChangeFocus(nextBlock)
  
***************
*** 571,579 ****
    #
    def findPreviousBlock(self):
      try:
!       return self._blockList[self._blockList.index(self._currentBlock)-1]
      except IndexError:
!       return self._blockList[-1]
  
  
    #
--- 577,585 ----
    #
    def findPreviousBlock(self):
      try:
!       return 
self._logic._blockList[self._logic._blockList.index(self._currentBlock)-1]
      except IndexError:
!       return self._logic._blockList[-1]
  
  
    #
Index: gnue/forms/src/GFInstance.py
diff -c gnue/forms/src/GFInstance.py:1.66 gnue/forms/src/GFInstance.py:1.67
*** gnue/forms/src/GFInstance.py:1.66   Sun Nov 17 16:54:48 2002
--- gnue/forms/src/GFInstance.py        Thu Nov 21 21:57:23 2002
***************
*** 244,250 ****
    def gotoPage(self,event):
      if not self._form.endEditing():
        return
!     self._form.findAndChangeFocus(self._form._pageList[event.data])
      
self.dispatchEvent(events.Event('gotoENTRY',{'object':self._form._currentEntry}))
      self.updateStatus()
  
--- 244,250 ----
    def gotoPage(self,event):
      if not self._form.endEditing():
        return
!     self._form.findAndChangeFocus(self._form._layout._pageList[event.data])
      
self.dispatchEvent(events.Event('gotoENTRY',{'object':self._form._currentEntry}))
      self.updateStatus()
  
***************
*** 259,265 ****
      
self.dispatchEvent(events.Event('gotoENTRY',{'object':self._form._currentEntry}))
      self.updateRecordCounter()
      self.updateRecordStatus()
!   
    #
    # previousRecord
    #
--- 259,265 ----
      
self.dispatchEvent(events.Event('gotoENTRY',{'object':self._form._currentEntry}))
      self.updateRecordCounter()
      self.updateRecordStatus()
! 
    #
    # previousRecord
    #
***************
*** 457,464 ****
      
self.dispatchEvent(events.Event('uiUPDATESTATUS',[None,None,None,self._form._currentBlock._currentRecord+1,self._form._currentBlock._recordCount,None,None]))
  
    def updatePageCounter(self):
!     maxPages = len(self._form._pageList)
!     count = self._form._pageList.index(self._form._currentPage)
      
self.dispatchEvent(events.Event('uiUPDATESTATUS',[None,None,None,None,None,count+1,maxPages]))
  
    def updateTip(self):
--- 457,464 ----
      
self.dispatchEvent(events.Event('uiUPDATESTATUS',[None,None,None,self._form._currentBlock._currentRecord+1,self._form._currentBlock._recordCount,None,None]))
  
    def updatePageCounter(self):
!     maxPages = len(self._form._layout._pageList)
!     count = self._form._layout._pageList.index(self._form._currentPage)
      
self.dispatchEvent(events.Event('uiUPDATESTATUS',[None,None,None,None,None,count+1,maxPages]))
  
    def updateTip(self):
***************
*** 500,507 ****
      if not self._form.endEditing():
        return
      if event.data._type=='GFEntry':
!       if event.data.hidden:
!         # is it possible ever to get into hidden field?
          return
        if (event.data.readonly and self._form._currentBlock.mode!='query'):
          GDebug.printMesg(2,"You can focus readonly field, but you won't be 
able to change it.")
--- 500,507 ----
      if not self._form.endEditing():
        return
      if event.data._type=='GFEntry':
!       if not event.data._navigable:
!         # is it possible ever to get into non-navigable field?
          return
        if (event.data.readonly and self._form._currentBlock.mode!='query'):
          GDebug.printMesg(2,"You can focus readonly field, but you won't be 
able to change it.")
***************
*** 520,526 ****
    def requestQuery(self, event):
      if not self._form.endEditing():
        return
!     
  #    if hasattr(self._form._currentBlock._dataSourceLink,"master"):
  #      messageBox = GFMsgBox(self, _("Query from detail blocks currently not 
supported"))
  #      messageBox.show()
--- 520,526 ----
    def requestQuery(self, event):
      if not self._form.endEditing():
        return
! 
  #    if hasattr(self._form._currentBlock._dataSourceLink,"master"):
  #      messageBox = GFMsgBox(self, _("Query from detail blocks currently not 
supported"))
  #      messageBox.show()
***************
*** 571,577 ****
      block.mode = 'precommit'
      block.processTrigger(trigger)
      for child in block._children:
!       if child._type == 'GFEntry':
          child.processTrigger(trigger)
      block.mode = saveMode
  
--- 571,577 ----
      block.mode = 'precommit'
      block.processTrigger(trigger)
      for child in block._children:
!       if child._type == 'GFField':
          child.processTrigger(trigger)
      block.mode = saveMode
  
Index: gnue/forms/src/GFObjects/GFBlock.py
diff -c gnue/forms/src/GFObjects/GFBlock.py:1.63 
gnue/forms/src/GFObjects/GFBlock.py:1.64
*** gnue/forms/src/GFObjects/GFBlock.py:1.63    Wed Nov 20 22:50:24 2002
--- gnue/forms/src/GFObjects/GFBlock.py Thu Nov 21 21:57:24 2002
***************
*** 57,64 ****
      #self._datasource = None
      self._resultSet = None
      self._dataSourceLink = None
!     self._entryList = []
! 
      self._currentRecord = 0
      self._recordCount = 0
      self._queryDefaults = {}
--- 57,63 ----
      #self._datasource = None
      self._resultSet = None
      self._dataSourceLink = None
!     
      self._currentRecord = 0
      self._recordCount = 0
      self._queryDefaults = {}
***************
*** 67,72 ****
--- 66,78 ----
      self._autocreate =  int(gConfig('autocreate'))
      self._gap = 0
      self._rows = 1
+     
+     # Populated by GFEntry's initialize
+     self._entryList = []
+ 
+     # Populated by GFField's initialize
+     self._fieldMap = {}
+     self._fieldList = []
  
      #
      # Trigger exposure
***************
*** 76,82 ****
                    'ON-NEWRECORD':   'On-NewRecord',
                    'PRE-COMMIT':     'Pre-Commit',
                    'POST-COMMIT':    'Post-Commit',
!                   'POST-QUERY':     'Post-Query', 
                    'PRE-MODIFY':     'Pre-Modify',
                    'PRE-INSERT':     'Pre-Insert',
                    'PRE-DELETE':     'Pre-Delete',
--- 82,88 ----
                    'ON-NEWRECORD':   'On-NewRecord',
                    'PRE-COMMIT':     'Pre-Commit',
                    'POST-COMMIT':    'Post-Commit',
!                   'POST-QUERY':     'Post-Query',
                    'PRE-MODIFY':     'Pre-Modify',
                    'PRE-INSERT':     'Pre-Insert',
                    'PRE-DELETE':     'Pre-Delete',
***************
*** 91,109 ****
      self._triggerFunctions={'clear':{'function':self.processClear,
                                       'description':''},
                              'commit':{'function':self.commit,
!                                       'description':''},                      
                
                              'deleteRecord':{'function':self.deleteRecord,
!                                             'description':''},                
                      
                              'executeQuery':{'function':self.processQuery,
!                                             'description':''},                
                      
                              'gotoRecord':{'function':self.jumpRecord,
!                                           'description':''},                  
                    
                              'firstRecord':{'function':self.firstRecord,
!                                            'description':'Navigates the block 
to the first record it contains.'},                                      
                              'isEmpty':{'function':self.isEmpty,
!                                        'description':'Returns 1 if block is 
empty.'},                                      
                              'isSaved':{'function':self.isSaved,
!                                        'description':'Returns 1 if block 
contains no modified records.'},                                      
                              'lastRecord':{'function':self.lastRecord,
                                        'description':'Navigates the block to 
the last record it contains.'},                                      
                              'newRecord':{'function':self.newRecord,
--- 97,115 ----
      self._triggerFunctions={'clear':{'function':self.processClear,
                                       'description':''},
                              'commit':{'function':self.commit,
!                                       'description':''},
                              'deleteRecord':{'function':self.deleteRecord,
!                                             'description':''},
                              'executeQuery':{'function':self.processQuery,
!                                             'description':''},
                              'gotoRecord':{'function':self.jumpRecord,
!                                           'description':''},
                              'firstRecord':{'function':self.firstRecord,
!                                            'description':'Navigates the block 
to the first record it contains.'},
                              'isEmpty':{'function':self.isEmpty,
!                                        'description':'Returns 1 if block is 
empty.'},
                              'isSaved':{'function':self.isSaved,
!                                        'description':'Returns 1 if block 
contains no modified records.'},
                              'lastRecord':{'function':self.lastRecord,
                                        'description':'Navigates the block to 
the last record it contains.'},                                      
                              'newRecord':{'function':self.newRecord,
***************
*** 152,181 ****
    #
    def initialize(self):
      self._form = form = self.findParentOfType('GFForm')
! ##    self._page = self.findParentOfType('GFPage')
  
!     form._blockList.append(self)
  
      # Initialize our events system
!     events.EventAware.__init__(self, self._form._app.eventController)
  
      # Get all focusable items, ordered correctly
      self._focusOrder = self.getFocusOrder()
  
-     # Find all GFEntry's
-     for object in self._focusOrder:
-       if object._type == 'GFEntry':
-         self._entryList.append(object)
- 
      # Create a stub/non-bound datasource if we aren't bound to one
      if not hasattr(self,'datasource') or not self.datasource:
        ds = GFDataSource(self)
        self.datasource = ds.name = "dts_%s" % self
!       self._form._datasourceDictionary[ds.name] = ds
        ds._buildObject()
        ds.phaseInit()
  
!     self._dataSourceLink = self._form._datasourceDictionary[self.datasource]
  
      # We will monitor our own resultSet changes
      self._dataSourceLink.registerResultSetListener(self._loadResultSet)
--- 158,183 ----
    #
    def initialize(self):
      self._form = form = self.findParentOfType('GFForm')
!     self._logic = logic = self.findParentOfType('GFLogic')
  
!     logic._blockList.append(self)
!     logic._blockMap[self.name] = self
  
      # Initialize our events system
!     events.EventAware.__init__(self, form._app.eventController)
  
      # Get all focusable items, ordered correctly
      self._focusOrder = self.getFocusOrder()
  
      # Create a stub/non-bound datasource if we aren't bound to one
      if not hasattr(self,'datasource') or not self.datasource:
        ds = GFDataSource(self)
        self.datasource = ds.name = "dts_%s" % self
!       form._datasourceDictionary[ds.name] = ds
        ds._buildObject()
        ds.phaseInit()
  
!     self._dataSourceLink = form._datasourceDictionary[self.datasource]
  
      # We will monitor our own resultSet changes
      self._dataSourceLink.registerResultSetListener(self._loadResultSet)
***************
*** 240,248 ****
    #
    def switchRecord(self, adjustment):
      self._currentRecord = self._resultSet.getRecordNumber()
!     for entry in self._entryList:
!       entry.recalculateVisible( adjustment, self._currentRecord, 
self._recordCount)
!       self._form.updateUIEntry(entry)
  
      if adjustment <> 0:
        self.processTrigger('ON-SWITCH')
--- 242,252 ----
    #
    def switchRecord(self, adjustment):
      self._currentRecord = self._resultSet.getRecordNumber()
!     for field in self._fieldList:
!       for entry in field._entryList:
!         # This for loop is probably better somewhere else
!         entry.recalculateVisible( adjustment, self._currentRecord, 
self._recordCount)
!       self._form.updateUIEntry(field)
  
      if adjustment <> 0:
        self.processTrigger('ON-SWITCH')
***************
*** 357,384 ****
      # If Enter-Query is hit thrice, cancel the query and go into normal mode.
  
      if self.mode != 'query':
!       for block in self._form._blockList:
          block.mode = 'query'
          block._query2 = int(gConfig("RememberLastQuery"))
          block._queryValues = {}
          block._queryValues.update(self._queryDefaults)
          block.switchRecord(0)
      elif self._query2:
!       for block in self._form._blockList:
          block._query2 = 0
          block._queryValues = {}
          block._queryValues.update(block._lastQueryValues)
          block.switchRecord(0)
      else:
!       for block in self._form._blockList:
          block.mode = 'normal'
          block.switchRecord(0)
  
!                 
    def processQuery(self):
      maxList = [self._dataSourceLink._dataObject]
!  
!     for block in self._form._blockList:
        if block._queryValues.keys():
          list = [block._dataSourceLink._dataObject]
          while list[-1]._masterObject:
--- 361,388 ----
      # If Enter-Query is hit thrice, cancel the query and go into normal mode.
  
      if self.mode != 'query':
!       for block in self._logic._blockList:
          block.mode = 'query'
          block._query2 = int(gConfig("RememberLastQuery"))
          block._queryValues = {}
          block._queryValues.update(self._queryDefaults)
          block.switchRecord(0)
      elif self._query2:
!       for block in self._logic._blockList:
          block._query2 = 0
          block._queryValues = {}
          block._queryValues.update(block._lastQueryValues)
          block.switchRecord(0)
      else:
!       for block in self._logic._blockList:
          block.mode = 'normal'
          block.switchRecord(0)
  
! 
    def processQuery(self):
      maxList = [self._dataSourceLink._dataObject]
! 
!     for block in self._logic._blockList:
        if block._queryValues.keys():
          list = [block._dataSourceLink._dataObject]
          while list[-1]._masterObject:
***************
*** 387,393 ****
  
      SQL = ""
      for dataobject in maxList[:-1]:
!       for block in self._form._blockList:
          if dataobject == block._dataSourceLink._dataObject:
            break
        conditions = _generateConditional(block)
--- 391,397 ----
  
      SQL = ""
      for dataobject in maxList[:-1]:
!       for block in self._logic._blockList:
          if dataobject == block._dataSourceLink._dataObject:
            break
        conditions = _generateConditional(block)
***************
*** 407,419 ****
  ##               newValue += letter+"%"
  ##           entry.setValue(newValue)
  
!     for block in self._form._blockList:
       if maxList[-1] == block._dataSourceLink._dataObject:
        break
      rootBlock = block
  
      # Store block states
!     for block in self._form._blockList:
        block.mode = 'normal'
        block._lastQueryValues = {}
        block._lastQueryValues.update(block._queryValues)
--- 411,423 ----
  ##               newValue += letter+"%"
  ##           entry.setValue(newValue)
  
!     for block in self._logic._blockList:
       if maxList[-1] == block._dataSourceLink._dataObject:
        break
      rootBlock = block
  
      # Store block states
!     for block in self._logic._blockList:
        block.mode = 'normal'
        block._lastQueryValues = {}
        block._lastQueryValues.update(block._queryValues)
***************
*** 423,429 ****
        
      rootBlock._recordCount = rootBlock._resultSet.getRecordCount()
  
!     for block in self._form._blockList:
        block.processTrigger('POST-QUERY')
  
  
--- 427,433 ----
        
      rootBlock._recordCount = rootBlock._resultSet.getRecordCount()
  
!     for block in self._logic._blockList:
        block.processTrigger('POST-QUERY')
  
  
Index: gnue/forms/src/GFObjects/GFButton.py
diff -c gnue/forms/src/GFObjects/GFButton.py:1.11 
gnue/forms/src/GFObjects/GFButton.py:1.12
*** gnue/forms/src/GFObjects/GFButton.py:1.11   Mon Nov 18 01:40:55 2002
--- gnue/forms/src/GFObjects/GFButton.py        Thu Nov 21 21:57:24 2002
***************
*** 44,50 ****
  
  
    def initialize(self):
- ##    self._block = self.findParentOfType('GFBlock')
      self._page = self.findParentOfType('GFPage')
  
  
--- 44,49 ----
Index: gnue/forms/src/GFObjects/GFEntry.py
diff -c gnue/forms/src/GFObjects/GFEntry.py:1.79 
gnue/forms/src/GFObjects/GFEntry.py:1.80
*** gnue/forms/src/GFObjects/GFEntry.py:1.79    Mon Nov 18 01:40:55 2002
--- gnue/forms/src/GFObjects/GFEntry.py Thu Nov 21 21:57:24 2002
***************
*** 40,69 ****
  #
  # It send events to its parent GFBlock
  #
! class GFEntry(GFValue, GFTabStop):
    def __init__(self, parent=None, value=None):
!     GFValue.__init__(self, parent, value, 'GFEntry')
  
      # Default attributes (these may be replaced by parser)
      self.height = float(gConfig('widgetHeight'))
      self.width = float(gConfig('widgetWidth'))
!     self.typecast="text"
!     self.case="mixed"
!     self.style="default"
! 
!     # Runtime variables
!     self._uppercase = 0
!     self._lowercase = 0
!     self._numeric = 0
!     self._queryable = 1
  
      self._inits = [self.initialize]
-     self._allowedValues = None
-     self._allowedValuesDescr = [""]
  
      self._rows = 1
      self._gap = 0
  
      #
      # Trigger exposure
      #
--- 40,60 ----
  #
  # It send events to its parent GFBlock
  #
! class GFEntry(GFTabStop):
    def __init__(self, parent=None, value=None):
!     GFTabStop.__init__(self, parent, 'GFEntry')
  
      # Default attributes (these may be replaced by parser)
      self.height = float(gConfig('widgetHeight'))
      self.width = float(gConfig('widgetWidth'))
!     self.style = "default"
  
      self._inits = [self.initialize]
  
      self._rows = 1
      self._gap = 0
  
+     # TODO: Conversion: Dunno about any of these triggers
      #
      # Trigger exposure
      #
***************
*** 71,339 ****
                             'POST-FOCUSOUT':  'Post-FocusOut',
                             'PRE-FOCUSIN':    'Pre-FocusIn',
                             'POST-FOCUSIN':   'Post-FocusIn',
-                            'ON-SWITCH':      'On-Switch',
-                            'PRE-COMMIT':     'Pre-Commit',
-                            'POST-COMMIT':    'Post-Commit',
-                            'POST-QUERY':     'Post-Query',
-                            'PRE-MODIFY':     'Pre-Modify',
-                            'PRE-INSERT':     'Pre-Insert',
-                            'PRE-DELETE':     'Pre-Delete',
-                            'PRE-UPDATE':     'Pre-Update',
-                            'PRE-CHANGE':     'Pre-Change',
-                            'POST-CHANGE':    'Post-Change',
                           }
! 
!     self._triggerFunctions={'allowedValues':{'function':self.allowedValues,},
!                             
'autofillBySequence':{'function':self.triggerAutofillBySequence},
!                             'isEmpty':{'function':self.isEmpty},
!                             
'resetForeignKey':{'function':self.resetForeignKey},
!                             'set':{'function':self.triggerSetValue},
                              'get':{'function':self.getValue}
                              }
-     self._triggerProperties={'readonly':{'set':self.setReadonly,
-                                          'get':self.getReadonly
-                                          },
-                              'parent':  {'get':self.getParent}
-                              }
      self._triggerSet = self.triggerSetValue
      self._triggerGet = self.getValue
  
  
!   def triggerAutofillBySequence(self,sequenceName):
!     if (not self.getValue()) or self.getValue()=="":
!       sequenceNumber = 
self._block._dataSourceLink._dataObject.triggerExtensions.getSequence(sequenceName)
!       self.setValue(sequenceNumber)
  
!   def isEmpty(self):
!     return self.getValue() in ("",None)
  
!   def getReadonly(self):
!     return self.readonly
  
!   def setReadonly(self,value):
!     self.readonly = value
  
!   def _buildObject(self):
!     # Convert deprecated attributes
  
!     # Numeric attributes (now typecast="..")
!     # DEPRECATED with 0.1.x
!     if hasattr(self,'numeric') and self.numeric:
!       del self.numeric
!       self.typecast = 'number'
! 
!     # visibleCount attributes... (now rows="..")
!     # DEPRECATED with 0.1.x
!     if not hasattr(self, 'rows') and hasattr(self,'visibleCount'):
!       self.rows = self.visibleCount
!       del self.visibleCount
! 
!     # Case attributes... (now case="..")
!     # DEPRECATED with 0.1.x
!     if hasattr(self,'uppercase') and self.uppercase:
!       del self.uppercase
!       self.case = 'upper'
!     elif hasattr(self,'lowercase') and self.lowercase:
!       del self.lowercase
!       self.case = 'lower'
! 
!     # Foreign keys
!     # DEPRECATED with 0.4.x
!     if hasattr(self,'foreign_key') and self.foreign_key:
!       (self.fk_source, self.fk_key) = string.split(self.foreign_key,'.')
!       del self.foreign_key
!     if hasattr(self,'foreign_key_description') and 
self.foreign_key_description:
!       self.fk_description = self.foreign_key_description
!       del self.foreign_key_description
! 
! 
!     # Force 'label' styles into "readonly" mode
!     if self.style == 'label':
!       self.readonly = 1
!       self._queryable = 0
  
-     return GFValue._buildObject(self)
  
!   def initialize(self):
!     # Find parents/relatives
!     self._block = self.findParentOfType('GFBlock')
!     self._page = self.findParentOfType('GFPage')
!     
!     if self.typecast == 'number':
!       self._numeric = 1
!       self._allowFormulas = gConfig("AllowNumericFormulas")
!     if self.case == 'upper':
!       self._uppercase = 1
!     elif self.case == 'lower':
!       self._lowercase = 1
  
      self._formatmask = ""
      self._inputmask = hasattr(self,'inputmask') and self.inputmask or ""
      self._displaymask = hasattr(self,'displaymask') and self.displaymask or ""
  
! 
!     if hasattr(self, 'default') and self.default != None and 
len(self.default):
!       default = self.default
!     else:
!       default = None
! 
!     if not hasattr(self,'field') or not len(self.field):
!       self.field = "__GNUe__%s" % self.name
!       self._block._dataSourceLink.referenceUnboundField(self.field, default)
!       self._bound = 0
!     else:
!       self._block._dataSourceLink.referenceField(self.field, default)
!       self._bound = 1
! 
!     # Initialize the foreign key lookup (if necessary)
!     if hasattr(self,'fk_source'):
!       try:
!         self.fk_key
!       except NameError:
!         raise "fk_source specified, but no fk_key"
! 
!       try:
!         self._fk_descr = string.split(self.fk_description,',')
!       except NameError:
!         self.fk_description = self.fk_key
!         self._fk_descr = string.split(self.fk_key,',')
! 
!       self._fk_datasource = \
!          self._block._form._datasourceDictionary[string.lower(self.fk_source)]
! 
!       # Reference the foreign keys to their datasources
!       # (so they are selected)
!       for field in [self.fk_key] + self._fk_descr:
!         self._fk_datasource.referenceField(field, None)
! 
!     if hasattr(self, 'queryDefault') and \
!          self.queryDefault != None and \
!          self._bound and \
!          len(self.queryDefault):
!       self._block._queryDefaults[self] = self.queryDefault
! 
! 
      # Create an appropriate display handler
      if self.style == 'checkbox':
        self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
!                self._block._form._app.eventController)
      elif self.style == 'dropdown':
        self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
!                self._block._form._app.eventController)
!     elif self.typecast == 'text':
        self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
!                self._block._form._app.eventController,
                 self._displaymask, self._inputmask)
!     elif self.typecast == 'number':
        self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
!                self._block._form._app.eventController,
                 self._displaymask, self._inputmask)
!     elif self.typecast == 'date':
        self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
!                self._block._form._app.eventController,
                 self._displaymask, self._inputmask)
  
! 
!   def isQueryable(self):
!     return self._queryable
! 
! 
!   #
!   # Pulls the proper value from the resultSet
!   #
!   def getValue(self):
!     # TODO: No longer true...
!     # We have to check to see if the _block has been
!     # setup yet.  The Trigger system calls getValue
!     # before it's ready so we fake it
!     #if hasattr(self,'_block'):
!     if self._block.mode == 'query':
!           try:
!             value = self._block._queryValues[self]
!           except KeyError:
!             value = None
!     elif self._block.mode == 'precommit':
!         value = self._block._preCommitWorkingRecord.getField(self.field)
! 
!     else:
!         value = self._block._resultSet.current.getField(self.field)
!     # TODO: part of the removed block check from above
!     #else:
!     #  value = None
! 
!     if value == None:       value = ''
! 
!     # TODO: check to see if this is still needed
!     #CheckBox does not work if comment following "if" block (ra3vat)
!     if self.style == 'checkbox' and value == '':      value = 0
! 
!     return value
! 
!   #
!   # triggerSetValue
!   #
!   # does proper typecasting when value is set via a trigger
!   #
!   def triggerSetValue(self, value):
!     if self.style=='checkbox' and value =='':
!       value = 0
!     if self.typecast == "number" and value != None:
!       value = float(value)
!     self.setValue(value)
! 
!   def setValue(self, value):
!     # TODO: This is now being done in the display handler
!     #if self.style=='checkbox' and value =='':
!     #  value = 0
!     #
!     # Number fields
!     #if self.typecast == "number" and value != None:
!     #  value = float(value)
! 
!     if self._block.mode == 'query':
!       self._block._queryValues[self] = value
! 
!     elif self._block.mode == 'precommit':
!       value = self._block._preCommitWorkingRecord.setField(self.field,value)
! 
!     else:
!       self.processTrigger('Pre-Change')
!       self._block._resultSet.current.setField(self.field,value)
!       self.processTrigger('Post-Change')
!     self._block._form.updateUIEntry(self)
! 
!   #
!   # allowedValues
!   #
!   def allowedValues(self):
!     if not self._allowedValues and hasattr(self,'_fk_datasource'):
!       rs = self._fk_datasource.createResultSet()
!       more = rs.firstRecord()
!       self._allowedValues = {"":""}
!       self._allowedValuesDescr = [""]
!       self._allowedValuesReverse = {"":""}
!       dropdownSeparator = gConfig('DropdownSeparator')
!       while more:
!         try:
!           key = "%s" % rs.current.getField(self.fk_key)
!           descriptions = []
!           for i in self._fk_descr:
!             descriptions.append("%s" % rs.current.getField(i))
!           descr = string.join(descriptions,dropdownSeparator)
! 
!           self._allowedValues[key] = descr
!           self._allowedValuesDescr.append(descr)
!           self._allowedValuesReverse[descr] = key
!         except AttributeError:
!           # TODO: What's this for?
!           self._allowedValues[rs.current.getField(self.fk_key)] = None
!         more = rs.nextRecord()
!       GDebug.printMesg (5,'Created for DropDown: %s' % self._allowedValues)
! 
!     return (self._allowedValues, self._allowedValuesDescr)
! 
!   def resetForeignKey(self):
!     self._allowedValues = None
!     self.allowedValues()
! 
  
--- 62,140 ----
                             'POST-FOCUSOUT':  'Post-FocusOut',
                             'PRE-FOCUSIN':    'Pre-FocusIn',
                             'POST-FOCUSIN':   'Post-FocusIn',
                           }
!     self._triggerFunctions={'set':{'function':self.triggerSetValue},
                              'get':{'function':self.getValue}
                              }
      self._triggerSet = self.triggerSetValue
      self._triggerGet = self.getValue
  
  
!   def _buildObject(self):
!     return GFTabStop._buildObject(self)
  
!   def initialize(self):
  
!     #
!     # Find parents/relatives
!     #
  
!     # ...Block
!     try:
!       self._block = block = 
self.findParentOfType('GFForm')._logic._blockMap[self.block]
!       block._entryList.append(self)
!     except KeyError:
!       raise "Entry references non-existent block '%s'" % self.block
! 
!     # ...Field
!     try:
!       self._field = field = block._fieldMap[self.field]
!       field._entryList.append(self)
!     except KeyError:
!       raise "Entry references non-existent field '%s'" % self.field
  
!     # ...Page
!     self._page = self.findParentOfType('GFPage')
  
!     self._form = self._block._form
  
  
!     # Navigable? or no?
!     self._navigable = self.navigable
!     if self.style == 'label' or self.hidden:
!       self._navigable = 0
!       self._queryable = 0 # TODO: is this used?
  
      self._formatmask = ""
      self._inputmask = hasattr(self,'inputmask') and self.inputmask or ""
      self._displaymask = hasattr(self,'displaymask') and self.displaymask or ""
  
!     # TODO: Conversion: I'm torn... does this go here or in GFField??
      # Create an appropriate display handler
      if self.style == 'checkbox':
        self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
!                self._form._app.eventController)
      elif self.style == 'dropdown':
        self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
!                self._form._app.eventController)
!     elif self._field.typecast == 'text':
        self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
!                self._form._app.eventController,
                 self._displaymask, self._inputmask)
!     elif self._field.typecast == 'number':
        self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
!                self._form._app.eventController,
                 self._displaymask, self._inputmask)
!     elif self._field.typecast == 'date':
        self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
!                self._form._app.eventController,
                 self._displaymask, self._inputmask)
  
!   # TODO: Conversion:  Does this belong here or not?
!   def getValue(self, *args, **parms):
!     return self._field.getValue(*args, **parms)
! 
!   # TODO: Conversion:  Does this belong here or not?
!   def triggerSetValue(self, *args, **parms):
!     return self._field.triggerSetValue(*args, **parms)
  
Index: gnue/forms/src/GFObjects/GFField.py
diff -c gnue/forms/src/GFObjects/GFField.py:1.79 
gnue/forms/src/GFObjects/GFField.py:1.80
*** gnue/forms/src/GFObjects/GFField.py:1.79    Mon Nov 18 01:40:55 2002
--- gnue/forms/src/GFObjects/GFField.py Thu Nov 21 21:57:24 2002
***************
*** 30,36 ****
  from gnue.common import GDebug, FormatMasks
  from gnue.forms import GFDisplayHandler
  from GFValue import GFValue
- from GFTabStop import GFTabStop
  import string
  
  ############################################################
--- 30,35 ----
***************
*** 40,46 ****
  #
  # It send events to its parent GFBlock
  #
! class GFField(GFValue, GFTabStop):
    def __init__(self, parent=None, value=None):
      GFValue.__init__(self, parent, value, 'GFField')
  
--- 39,45 ----
  #
  # It send events to its parent GFBlock
  #
! class GFField(GFValue):
    def __init__(self, parent=None, value=None):
      GFValue.__init__(self, parent, value, 'GFField')
  
***************
*** 64,69 ****
--- 63,71 ----
      self._rows = 1
      self._gap = 0
  
+     # This will be populated by GFEntry's initialize
+     self._entryList = []
+ 
      #
      # Trigger exposure
      #
***************
*** 89,100 ****
                              
'resetForeignKey':{'function':self.resetForeignKey},
                              'set':{'function':self.triggerSetValue},
                              'get':{'function':self.getValue}
!                             }
      self._triggerProperties={'readonly':{'set':self.setReadonly,
                                           'get':self.getReadonly
                                           },
                               'parent':  {'get':self.getParent}
!                              }
      self._triggerSet = self.triggerSetValue
      self._triggerGet = self.getValue
  
--- 91,102 ----
                              
'resetForeignKey':{'function':self.resetForeignKey},
                              'set':{'function':self.triggerSetValue},
                              'get':{'function':self.getValue}
!                            }
      self._triggerProperties={'readonly':{'set':self.setReadonly,
                                           'get':self.getReadonly
                                           },
                               'parent':  {'get':self.getParent}
!                             }
      self._triggerSet = self.triggerSetValue
      self._triggerGet = self.getValue
  
***************
*** 116,142 ****
    def _buildObject(self):
      # Convert deprecated attributes
  
-     # Numeric attributes (now typecast="..")
-     # DEPRECATED with 0.1.x
-     if hasattr(self,'numeric') and self.numeric:
-       del self.numeric
-       self.typecast = 'number'
- 
-     # visibleCount attributes... (now rows="..")
-     # DEPRECATED with 0.1.x
-     if not hasattr(self, 'rows') and hasattr(self,'visibleCount'):
-       self.rows = self.visibleCount
-       del self.visibleCount
- 
-     # Case attributes... (now case="..")
-     # DEPRECATED with 0.1.x
-     if hasattr(self,'uppercase') and self.uppercase:
-       del self.uppercase
-       self.case = 'upper'
-     elif hasattr(self,'lowercase') and self.lowercase:
-       del self.lowercase
-       self.case = 'lower'
- 
      # Foreign keys
      # DEPRECATED with 0.4.x
      if hasattr(self,'foreign_key') and self.foreign_key:
--- 118,123 ----
***************
*** 147,160 ****
        del self.foreign_key_description
  
  
-     # Force 'label' styles into "readonly" mode
-     if self.style == 'label':
-       self.readonly = 1
-       self._queryable = 0
- 
      return GFValue._buildObject(self)
  
    def initialize(self):
      if self.typecast == 'number':
        self._numeric = 1
        self._allowFormulas = gConfig("AllowNumericFormulas")
--- 128,141 ----
        del self.foreign_key_description
  
  
      return GFValue._buildObject(self)
  
    def initialize(self):
+ 
+     self._block = block = self.findParentOfType('GFBlock')
+     block._fieldMap[self.name] = self
+     block._fieldList.append(self)
+ 
      if self.typecast == 'number':
        self._numeric = 1
        self._allowFormulas = gConfig("AllowNumericFormulas")
***************
*** 163,173 ****
      elif self.case == 'lower':
        self._lowercase = 1
  
-     self._formatmask = ""
-     self._inputmask = hasattr(self,'inputmask') and self.inputmask or ""
-     self._displaymask = hasattr(self,'displaymask') and self.displaymask or ""
  
!     self._block = self.findParentOfType('GFBlock')
  
      if hasattr(self, 'default') and self.default != None and 
len(self.default):
        default = self.default
--- 144,154 ----
      elif self.case == 'lower':
        self._lowercase = 1
  
  
! ##    self._formatmask = ""
! ##    self._inputmask = hasattr(self,'inputmask') and self.inputmask or ""
! ##    self._displaymask = hasattr(self,'displaymask') and self.displaymask or 
""
! 
  
      if hasattr(self, 'default') and self.default != None and 
len(self.default):
        default = self.default
***************
*** 196,202 ****
          self._fk_descr = string.split(self.fk_key,',')
  
        self._fk_datasource = \
!          self._block._form._datasourceDictionary[string.lower(self.fk_source)]
  
        # Reference the foreign keys to their datasources
        # (so they are selected)
--- 177,183 ----
          self._fk_descr = string.split(self.fk_key,',')
  
        self._fk_datasource = \
!          block._form._datasourceDictionary[string.lower(self.fk_source)]
  
        # Reference the foreign keys to their datasources
        # (so they are selected)
***************
*** 207,234 ****
           self.queryDefault != None and \
           self._bound and \
           len(self.queryDefault):
!       self._block._queryDefaults[self] = self.queryDefault
  
  
!     # Create an appropriate display handler
!     if self.style == 'checkbox':
!       self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
!                self._block._form._app.eventController)
!     elif self.style == 'dropdown':
!       self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
!                self._block._form._app.eventController)
!     elif self.typecast == 'text':
!       self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
!                self._block._form._app.eventController,
!                self._displaymask, self._inputmask)
!     elif self.typecast == 'number':
!       self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
!                self._block._form._app.eventController,
!                self._displaymask, self._inputmask)
!     elif self.typecast == 'date':
!       self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
!                self._block._form._app.eventController,
!                self._displaymask, self._inputmask)
  
  
    def isQueryable(self):
--- 188,215 ----
           self.queryDefault != None and \
           self._bound and \
           len(self.queryDefault):
!       block._queryDefaults[self] = self.queryDefault
  
  
! ##    # Create an appropriate display handler
! ##    if self.style == 'checkbox':
! ##      self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
! ##               self._block._form._app.eventController)
! ##    elif self.style == 'dropdown':
! ##      self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
! ##               self._block._form._app.eventController)
! ##    elif self.typecast == 'text':
! ##      self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
! ##               self._block._form._app.eventController,
! ##               self._displaymask, self._inputmask)
! ##    elif self.typecast == 'number':
! ##      self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
! ##               self._block._form._app.eventController,
! ##               self._displaymask, self._inputmask)
! ##    elif self.typecast == 'date':
! ##      self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
! ##               self._block._form._app.eventController,
! ##               self._displaymask, self._inputmask)
  
  
    def isQueryable(self):
Index: gnue/forms/src/GFObjects/GFLayout.py
diff -c gnue/forms/src/GFObjects/GFLayout.py:1.1 
gnue/forms/src/GFObjects/GFLayout.py:1.2
*** gnue/forms/src/GFObjects/GFLayout.py:1.1    Wed Nov 20 20:39:37 2002
--- gnue/forms/src/GFObjects/GFLayout.py        Thu Nov 21 21:57:24 2002
***************
*** 39,44 ****
--- 39,45 ----
    def __init__(self, parent=None):
      GFObj.__init__(self, parent, "GFLayout")
      self._inits =[self.initialize]
+     self._pageList = []
  
    def _buildObject(self):
      return GFObj._buildObject(self)
Index: gnue/forms/src/GFObjects/GFLogic.py
diff -c gnue/forms/src/GFObjects/GFLogic.py:1.1 
gnue/forms/src/GFObjects/GFLogic.py:1.2
*** gnue/forms/src/GFObjects/GFLogic.py:1.1     Wed Nov 20 20:39:37 2002
--- gnue/forms/src/GFObjects/GFLogic.py Thu Nov 21 21:57:24 2002
***************
*** 39,44 ****
--- 39,46 ----
    def __init__(self, parent=None):
      GFObj.__init__(self, parent, "GFLogic")
      self._inits =[self.initialize]
+     self._blockMap = {}
+     self._blockList = []
  
    def _buildObject(self):
      return GFObj._buildObject(self)
Index: gnue/forms/src/GFObjects/GFPage.py
diff -c gnue/forms/src/GFObjects/GFPage.py:1.5 
gnue/forms/src/GFObjects/GFPage.py:1.6
*** gnue/forms/src/GFObjects/GFPage.py:1.5      Thu Oct 31 21:40:53 2002
--- gnue/forms/src/GFObjects/GFPage.py  Thu Nov 21 21:57:24 2002
***************
*** 46,53 ****
  
  
    def initialize(self):
!     form = self.findParentOfType('GFForm')
!     form._pageList.append(self)
  
  
  
--- 46,53 ----
  
  
    def initialize(self):
!     layout = self.findParentOfType('GFLayout')
!     layout._pageList.append(self)
  
  
  
Index: gnue/forms/src/GFParser.py
diff -c gnue/forms/src/GFParser.py:1.87 gnue/forms/src/GFParser.py:1.88
*** gnue/forms/src/GFParser.py:1.87     Wed Nov 20 22:50:24 2002
--- gnue/forms/src/GFParser.py  Thu Nov 21 21:57:24 2002
***************
*** 22,28 ****
  # GFParser.py
  #
  # DESCRIPTION:
! # Class that contains a sax based xml processor for GNUE forms
  #
  # NOTES:
  #
--- 22,28 ----
  # GFParser.py
  #
  # DESCRIPTION:
! # Class that contains a sax based xml processor for GNUe forms
  #
  # NOTES:
  #
***************
*** 290,295 ****
--- 290,301 ----
              'formatmask': {
                 'Typecast': GTypecast.text,
                 'Description': 'TODO' },
+             'inputmask': {
+                'Typecast': GTypecast.text,
+                'Description': 'TODO' },
+             'displaymask': {
+                'Typecast': GTypecast.text,
+                'Description': 'TODO' },
              'value': {
                 'Typecast': GTypecast.text,
                 'Description': 'TODO' },
***************
*** 382,390 ****
                 'Required': 1,
                 'Description': 'The name of the field that this ties to.' },
              'block': {
!                'Typecast': GTypecast.block,
                 'Required': 1,
!                'Description': 'The name of the field that this ties to.' },
              'height': {
                 'Typecast': GTypecast.whole,
                 'Default': 1,
--- 388,396 ----
                 'Required': 1,
                 'Description': 'The name of the field that this ties to.' },
              'block': {
!                'Typecast': GTypecast.name,
                 'Required': 1,
!                'Description': 'The name of the block that this ties to.' },
              'height': {
                 'Typecast': GTypecast.whole,
                 'Default': 1,
***************
*** 428,439 ****
                                '{fk_source}, {fk_key}, and {fk_description} '
                                'attributes. The {label} style implies the '
                                '{readonly} attribute.'  },
-             'inputmask': {
-                'Typecast': GTypecast.text,
-                'Description': 'TODO' },
-             'displaymask': {
-                'Typecast': GTypecast.text,
-                'Description': 'TODO' },
              'x': {
                 'Required': 1,
                 'Typecast': GTypecast.whole,
--- 434,439 ----
Index: gnue/forms/src/uidrivers/_base/UIdriver.py
diff -c gnue/forms/src/uidrivers/_base/UIdriver.py:1.78 
gnue/forms/src/uidrivers/_base/UIdriver.py:1.79
*** gnue/forms/src/uidrivers/_base/UIdriver.py:1.78     Sun Nov 17 20:27:05 2002
--- gnue/forms/src/uidrivers/_base/UIdriver.py  Thu Nov 21 21:57:24 2002
***************
*** 327,332 ****
--- 327,333 ----
        return
  
      entry = event.data
+     field = entry._field
      handler = entry._displayHandler
      prehandling = handler.editing
      handler.editing = 0
Index: gnue/forms/utils/gfd04to05.py
diff -c gnue/forms/utils/gfd04to05.py:1.3 gnue/forms/utils/gfd04to05.py:1.4
*** gnue/forms/utils/gfd04to05.py:1.3   Wed Nov 20 20:39:37 2002
--- gnue/forms/utils/gfd04to05.py       Thu Nov 21 21:57:24 2002
***************
*** 242,248 ****
        if attr == 'name':
          eattr['field'] = v
        elif attr in ('x','y','width','height','style','hidden','focusorder',
!                     'rows','rowSpacer','inputmask','displaymask'):
          eattr[attr] = v
          del object._properties[attr]
  
--- 242,248 ----
        if attr == 'name':
          eattr['field'] = v
        elif attr in ('x','y','width','height','style','hidden','focusorder',
!                     'rows','rowSpacer'):
          eattr[attr] = v
          del object._properties[attr]
  




reply via email to

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