/[papo]/gnue/forms/src/GFObjects/GFEntry.py
ViewVC logotype

Diff of /gnue/forms/src/GFObjects/GFEntry.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by styxman, Mon Nov 18 17:57:56 2002 UTC revision 1.10.2.1 by anthonyl, Tue Mar 4 22:18:22 2003 UTC
# Line 16  Line 16 
16  # write to the Free Software Foundation, Inc., 59 Temple Place  # write to the Free Software Foundation, Inc., 59 Temple Place
17  # - Suite 330, Boston, MA 02111-1307, USA.  # - Suite 330, Boston, MA 02111-1307, USA.
18  #  #
19  # Copyright 2000-2002 Free Software Foundation  # Copyright 2000-2003 Free Software Foundation
20  #  #
21  # FILE:  # FILE:
22  # GFEntry.py  # GFEntry.py
# Line 40  import string Line 40  import string
40  #  #
41  # It send events to its parent GFBlock  # It send events to its parent GFBlock
42  #  #
43  class GFEntry(GFValue, GFTabStop):  class GFEntry(GFTabStop):
44    def __init__(self, parent=None, value=None):    def __init__(self, parent=None, value=None):
45      GFValue.__init__(self, parent, value, 'GFEntry')      GFTabStop.__init__(self, parent, 'GFEntry')
46    
47      # Default attributes (these may be replaced by parser)      # Default attributes (these may be replaced by parser)
48      self.height = float(gConfig('widgetHeight'))      self.height = float(gConfig('widgetHeight'))
49      self.width = float(gConfig('widgetWidth'))      self.width = float(gConfig('widgetWidth'))
50      self.typecast="text"      self.style = "default"
     self.case="mixed"  
     self.style="default"  
   
     # Runtime variables  
     self._uppercase = 0  
     self._lowercase = 0  
     self._numeric = 0  
     self._queryable = 1  
51    
52      self._inits = [self.initialize]      self._inits = [self.initialize]
     self._allowedValues = None  
     self._allowedValuesDescr = [""]  
53    
54      self._rows = 1      self._rows = 1
55      self._gap = 0      self._gap = 0
56    
57        # TODO: Conversion: Dunno about any of these triggers
58      #      #
59      # Trigger exposure      # Trigger exposure
60      #      #
# Line 71  class GFEntry(GFValue, GFTabStop): Line 62  class GFEntry(GFValue, GFTabStop):
62                             'POST-FOCUSOUT':  'Post-FocusOut',                             'POST-FOCUSOUT':  'Post-FocusOut',
63                             'PRE-FOCUSIN':    'Pre-FocusIn',                             'PRE-FOCUSIN':    'Pre-FocusIn',
64                             'POST-FOCUSIN':   'Post-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',  
65                           }                           }
66        self._triggerFunctions={'set':{'function':self.triggerSetValue},
     self._triggerFunctions={'allowedValues':{'function':self.allowedValues,},  
                             'autofillBySequence':{'function':self.triggerAutofillBySequence},  
                             'atomicModify':{'function':self.triggerAtomicModify},  
                             'isEmpty':{'function':self.isEmpty},  
                             'resetForeignKey':{'function':self.resetForeignKey},  
                             'set':{'function':self.triggerSetValue},  
67                              'get':{'function':self.getValue}                              'get':{'function':self.getValue}
68                              }                              }
     self._triggerProperties={'readonly':{'set':self.setReadonly,  
                                          'get':self.getReadonly  
                                          },  
                              'parent':  {'get':self.getParent}  
                              }  
69      self._triggerSet = self.triggerSetValue      self._triggerSet = self.triggerSetValue
70      self._triggerGet = self.getValue      self._triggerGet = self.getValue
71    
72    
   def triggerAutofillBySequence(self,sequenceName):  
     if (not self.getValue()) or self.getValue()=="":  
       sequenceNumber = self._block._dataSourceLink._dataObject.triggerExtensions.getSequence(sequenceName)  
       self.setValue(sequenceNumber)  
   
   def triggerAtomicModify(self,func):  
     if self.getValue() or self.getValue()!="":      
       self._block._dataSourceLink._dataObject.triggerExtensions.atomicModify(func=func, \  
                                                                              field=self.field, \  
                                                                              dataObject=self._block._dataSourceLink._dataObject,\  
                                                                              record=self._block._resultSet.current)  
   
   def isEmpty(self):  
     return self.getValue() in ("",None)  
   
   def getReadonly(self):  
     return self.readonly  
   
   def setReadonly(self,value):  
     self.readonly = value  
   
73    def _buildObject(self):    def _buildObject(self):
74      # Convert deprecated attributes      return GFTabStop._buildObject(self)
75    
76      # Numeric attributes (now typecast="..")    def initialize(self):
     # 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:  
       fk_data= string.split(self.foreign_key,'.')  
       if len (fk_data)==2:  
         # no table  
         (self.fk_source, self.fk_key) = fk_data  
       elif len (fk_data)==3:  
         # with table  
         (self.fk_source, self.fk_key) = (fk_data[0], "%s.%s" % (fk_data[1], fk_data[2]))  
       else:  
         raise "bad forign key reference (name)"  
       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  
77    
78      return GFValue._buildObject(self)      #
79        # Find parents/relatives
80        #
81    
82    def initialize(self):      # ...Block
83      if self.typecast == 'number':      try:
84        self._numeric = 1        self._block = block = self.findParentOfType('GFForm')._logic._blockMap[self.block]
85        self._allowFormulas = gConfig("AllowNumericFormulas")        block._entryList.append(self)
86      if self.case == 'upper':      except KeyError:
87        self._uppercase = 1        raise "Entry references non-existent block '%s'" % self.block
88      elif self.case == 'lower':  
89        self._lowercase = 1      # ...Field
90        try:
91          self._field = field = block._fieldMap[self.field]
92          field._entryList.append(self)
93        except KeyError:
94          raise "Entry references non-existent field '%s'" % self.field
95    
96        # ...Page
97        self._page = self.findParentOfType('GFPage')
98        self._page._entryList.append(self)
99    
100        self._form = self._block._form
101    
102    
103        # Navigable? or no?
104        self._navigable = self.navigable
105        if self.style == 'label' or self.hidden:
106          self._navigable = 0
107          self._queryable = 0 # TODO: is this used?
108    
109      self._formatmask = ""      self._formatmask = ""
110      self._inputmask = hasattr(self,'inputmask') and self.inputmask or ""      self._inputmask = hasattr(self,'inputmask') and self.inputmask or ""
111      self._displaymask = hasattr(self,'displaymask') and self.displaymask or ""      self._displaymask = hasattr(self,'displaymask') and self.displaymask or ""
112    
113      self._block = self.findParentOfType('GFBlock')      # TODO: Conversion: I'm torn... does this go here or in GFField??
   
     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  
   
   
114      # Create an appropriate display handler      # Create an appropriate display handler
115      if self.style == 'checkbox':      if self.style == 'checkbox':
116        self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,        self._displayHandler = GFDisplayHandler.CheckboxDisplayHandler(self,
117                 self._block._form._app.eventController)                 self._form._instance.eventController)
118      elif self.style == 'dropdown':      elif self.style == 'dropdown':
119        self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,        self._displayHandler = GFDisplayHandler.DropdownDisplayHandler(self,
120                 self._block._form._app.eventController)                 self._form._instance.eventController)
121      elif self.style == 'textlookup':      elif self.style == 'textlookup':
122        self._displayHandler = GFDisplayHandler.TextLookupDisplayHandler(self,        self._displayHandler = GFDisplayHandler.TextLookupDisplayHandler(self,
123                 self._block._form._app.eventController)                 self._form._instance.eventController)
124      elif self.typecast == 'text':      elif self._field.typecast == 'text':
125        self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,        self._displayHandler = GFDisplayHandler.TextDisplayHandler(self,
126                 self._block._form._app.eventController,                 self._form._instance.eventController,
127                 self._displaymask, self._inputmask)                 self._displaymask, self._inputmask)
128      elif self.typecast == 'number':      elif self._field.typecast == 'number':
129        self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,        self._displayHandler = GFDisplayHandler.NumberDisplayHandler(self,
130                 self._block._form._app.eventController,                 self._form._instance.eventController,
131                 self._displaymask, self._inputmask)                 self._displaymask, self._inputmask)
132      elif self.typecast == 'date':      elif self._field.typecast == 'date':
133        self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,        self._displayHandler = GFDisplayHandler.DateDisplayHandler(self,
134                 self._block._form._app.eventController,                 self._form._instance.eventController,
135                 self._displaymask, self._inputmask)                 self._displaymask, self._inputmask)
136    
137        # Row settings
138    def isQueryable(self):      if hasattr(self,'rows'):
139      return self._queryable        self._rows = self.rows
   
   
   #  
   # 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)  
   
140      else:      else:
141          value = self._block._resultSet.current.getField(self.field)        self._rows = self._field._rows
     # 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)  
142    
143      if self._block.mode == 'query':      if hasattr(self,'rowSpacer'):
144        self._block._queryValues[self] = value        self._gap = self.rowSpacer
145        else:
146          self._gap = self._field._gap
147    
     elif self._block.mode == 'precommit':  
       value = self._block._preCommitWorkingRecord.setField(self.field,value)  
148    
149      else:    # TODO: Conversion:  Does this belong here or not?
150        self.processTrigger('Pre-Change')    def getValue(self, *args, **parms):
151        self._block._resultSet.current.setField(self.field,value)      return self._field.getValue(*args, **parms)
       self.processTrigger('Post-Change')  
     self._block._form.updateUIEntry(self)  
   
   #  
   # allowedValues  
   #  
   def allowedValues(self, cond=None):  
     if not self._allowedValues and hasattr(self,'_fk_datasource'):  
       if cond:  
         rs = self._fk_datasource.createResultSet(cond)  
       else:  
         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()  
152    
153      # TODO: Conversion:  Does this belong here or not?
154      def triggerSetValue(self, *args, **parms):
155        return self._field.triggerSetValue(*args, **parms)
156    

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.10.2.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26