/[papo]/gnue/forms/src/GFDisplayHandler.py
ViewVC logotype

Diff of /gnue/forms/src/GFDisplayHandler.py

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

revision 1.6 by styxman, Thu Nov 14 22:16:53 2002 UTC revision 1.6.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 2002 Free Software Foundation  # Copyright 2002-2003 Free Software Foundation
20  #  #
21  # FILE:  # FILE:
22  # GFDisplayHandler.py  # GFDisplayHandler.py
# Line 71  class FieldDisplayHandler(events.EventAw Line 71  class FieldDisplayHandler(events.EventAw
71      return self.value      return self.value
72    
73    
74    def getDisplay(self):  ##   def getDisplay(self):
75      return self.display  ##     return self.display
76    
77    
78    def getDisplayFiller(self, value):    def getDisplayFiller(self, value):
# Line 81  class FieldDisplayHandler(events.EventAw Line 81  class FieldDisplayHandler(events.EventAw
81    
82    def generateRefreshEvent(self):    def generateRefreshEvent(self):
83      # TODO: this should probably actually happen in UIwxpython!      # TODO: this should probably actually happen in UIwxpython!
84      #      if (self.handleCR and type(self.display)=='str'):
     # TODO: I think this is what btami was going for but the patch commited was  
     # 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:  
85        self.dispatchEvent(events.Event('updateEntryEditor',        self.dispatchEvent(events.Event('updateEntryEditor',
86             object = self.entry,             object = self.field,
87             display=self.display, # string.replace(self.display,'\n','\r\n'),             display=self.display, # string.replace(self.display,'\n','\r\n'),
88             cursor=self.cursor + len(string.split(self.display[:self.cursor+1],'\n'))-1,             cursor=self.cursor + len(string.split(self.display[:self.cursor+1],'\n'))-1,
89             selection=self.getSelectionArea(),             selection=self.getSelectionArea(),
# Line 106  class FieldDisplayHandler(events.EventAw Line 101  class FieldDisplayHandler(events.EventAw
101    #    #
102    # Editing methods    # Editing methods
103    #    #
104      
105    #    #
106    # beginEdit    # beginEdit
107    # called when a widget first gets focus    # called when a widget first gets focus
# Line 116  class FieldDisplayHandler(events.EventAw Line 111  class FieldDisplayHandler(events.EventAw
111      self.modified = 0      self.modified = 0
112    
113      # TODO: Replace with formatter      # TODO: Replace with formatter
114      self.setValue(self.entry.getValue())      self.setValue(self.field.getValue())
115      self.work = self._buildDisplayHelper(self.value, 1)      self.work = self._buildDisplayHelper(self.value, 1)
116      self._buildDisplay()      self._buildDisplay()
117    
# Line 132  class FieldDisplayHandler(events.EventAw Line 127  class FieldDisplayHandler(events.EventAw
127        return        return
128    
129      if not self._loadedAllowedValues:      if not self._loadedAllowedValues:
130        self.entry.allowedValues()        self.field.allowedValues()
131        self._loadedAllowedValues = 1        self._loadedAllowedValues = 1
132    
133    
# Line 149  class FieldDisplayHandler(events.EventAw Line 144  class FieldDisplayHandler(events.EventAw
144    
145      if self.modified:      if self.modified:
146        if self._buildValue():        if self._buildValue():
147          if self.entry._allowedValues and not self.entry._allowedValues.has_key(str(self.value)):          if self.field._allowedValues and not self.field._allowedValues.has_key(str(self.value)):
148            self.work = ""            self.work = ""
149            event.__error__ = 1            event.__error__ = 1
150            event.__errortext__ = _("Invalid value '%s' for field") % self.value            event.__errortext__ = _("Invalid value '%s' for field") % self.value
# Line 158  class FieldDisplayHandler(events.EventAw Line 153  class FieldDisplayHandler(events.EventAw
153          self.editing = 0          self.editing = 0
154          event.__results__ = self.value          event.__results__ = self.value
155          event.modified = self.modified          event.modified = self.modified
156          self.entry.setValue(self.value)          self.field.setValue(self.value)
157    
158          self._buildDisplay()          self._buildDisplay()
159    
# Line 171  class FieldDisplayHandler(events.EventAw Line 166  class FieldDisplayHandler(events.EventAw
166    
167      value = event.text      value = event.text
168    
169      if (self.entry.readonly and not self.entry._block.mode=='query'):      if (self.field.readonly and not self.field._block.mode=='query'):
170        event.__error__ = 1        event.__error__ = 1
171        event.__errortext__ = _("Cannot modify field.  Form is read only")        event.__errortext__ = _("Cannot modify field.  Form is read only")
172        return        return
173      elif self.entry.editOnNull and \      elif self.field.editOnNull and \
174           self.value != None and \           self.value != None and \
175           self.value != "" and \           self.value != "" and \
176           not self.entry._block._resultSet.current.isPending():           not self.field._block._resultSet.current.isPending():
177        event.__error__ = 1        event.__error__ = 1
178        event.__errortext__ = _("Cannot modify field after initial creation.")        event.__errortext__ = _("Cannot modify field after initial creation.")
179        return        return
# Line 186  class FieldDisplayHandler(events.EventAw Line 181  class FieldDisplayHandler(events.EventAw
181      # Do some appropriate checks on the text      # Do some appropriate checks on the text
182      # TODO: This will be moved to the mask system!!      # TODO: This will be moved to the mask system!!
183    
184      if self.entry._lowercase:      if self.field._lowercase:
185        value = string.lower(event.text)        value = string.lower(event.text)
186      if self.entry._uppercase:      if self.field._uppercase:
187        value = string.upper(event.text)        value = string.upper(event.text)
188    
189      if hasattr(self.entry,'max_length') and \      if hasattr(self.field,'max_length') and \
190         len(self.work)  + len(value) > self.entry.max_length:         len(self.work)  + len(value) > self.field.max_length:
191        return        return
192    
193      if ( self.entry._numeric and \      if ( self.field._numeric and \
194           self.entry._block.mode == 'normal' ):           self.field._block.mode == 'normal' ):
195        for char in value:        for char in value:
196          if not (char in string.digits or char in '.'):          if not (char in string.digits or char in '.'):
197            return            return
# Line 224  class FieldDisplayHandler(events.EventAw Line 219  class FieldDisplayHandler(events.EventAw
219    
220      else:      else:
221        # Otherwise just graft the new text in place        # Otherwise just graft the new text in place
222          
223        self.work = self.work[:self.cursor] \        self.work = self.work[:self.cursor] \
224                     + value                \                     + value                \
225                     + self.work[self.cursor:]                     + self.work[self.cursor:]
226    
227        self.cursor += len(event.text)        self.cursor += len(event.text)
228    
229        
230      event.__dropped__ = 1      event.__dropped__ = 1
231      self.modified = 1      self.modified = 1
232      self._buildDisplay()      self._buildDisplay()
# Line 252  class FieldDisplayHandler(events.EventAw Line 247  class FieldDisplayHandler(events.EventAw
247      if self.cursor != precurs:      if self.cursor != precurs:
248        event.overstrike = 1        event.overstrike = 1
249        event.text = ""        event.text = ""
250          
251        self.addText(event)        self.addText(event)
252    
253    # Delete forward one character    # Delete forward one character
254    def delete(self, event):    def delete(self, event):
255      event.overstrike = 1      event.overstrike = 1
256      event.text = ""      event.text = ""
257        
258      self.addText(event)      self.addText(event)
259    
260    
# Line 407  class FieldDisplayHandler(events.EventAw Line 402  class FieldDisplayHandler(events.EventAw
402      events.EventAware.__init__(self, eventHandler)      events.EventAware.__init__(self, eventHandler)
403    
404      self.entry = entry            # Our entry      self.entry = entry            # Our entry
405        self.field = entry._field
406      self.editing = 0              # In editing mode??      self.editing = 0              # In editing mode??
407      self.modified = 0             # Have we been modified??      self.modified = 0             # Have we been modified??
408      self.value = None             # The latest db-compat value      self.value = None             # The latest db-compat value
# Line 583  class DateDisplayHandler(FieldDisplayHan Line 579  class DateDisplayHandler(FieldDisplayHan
579    # TODO: Replace with format mask    # TODO: Replace with format mask
580    def _buildDisplayHelper(self, value, editing):    def _buildDisplayHelper(self, value, editing):
581      format = "%d/%m/%Y"      format = "%d/%m/%Y"
582        
583      if value in (None,""):      if value in (None,""):
584        return ""        return ""
585      try:      try:
# Line 642  class DropdownDisplayHandler(FieldDispla Line 638  class DropdownDisplayHandler(FieldDispla
638    
639    def beginEdit(self, event):    def beginEdit(self, event):
640    
641      if not self._loadedAllowedValues and not hasattr(self.entry,'_allowedValues'):      if not self._loadedAllowedValues and not hasattr(self.field,'_allowedValues'):
642        self.entry.allowedValues()        self.field.allowedValues()
643        self._loadedAllowedValues = 1        self._loadedAllowedValues = 1
644    
645      self.editing = 1      self.editing = 1
646      self.modified = 0      self.modified = 0
647    
648      # TODO: Replace with formatter      # TODO: Replace with formatter
649      self.setValue(self.entry.getValue())      self.setValue(self.field.getValue())
650    
651      if self.value == None:      if self.value == None:
652        self.work = ""        self.work = ""
653      else:      else:
654        try:        try:
655          self.work = self.entry._allowedValues[str(self.value)]          self.work = self.field._allowedValues[str(self.value)]
656        except KeyError:        except KeyError:
657          self.work = ""          self.work = ""
658          event.__error__ = 1          event.__error__ = 1
# Line 676  class DropdownDisplayHandler(FieldDispla Line 672  class DropdownDisplayHandler(FieldDispla
672      if editing:      if editing:
673        i = 0        i = 0
674        val = string.lower(value)        val = string.lower(value)
675        for disp in self.entry._allowedValuesDescr:        for disp in self.field._allowedValuesDescr:
676          if disp[:len(val)] == val:          if disp[:len(val)] == val:
677            display = self.entry._allowedValues[self.entry._allowedValuesReverse[disp]]            display = self.field._allowedValues[self.field._allowedValuesReverse[disp]]
678            self._dropdownIndex = i            self._dropdownIndex = i
679            return str(display)            return str(display)
680    
681        return str(value)        return str(value)
682      else:      else:
683        return self.entry._allowedValues[str(value)]        return self.field._allowedValues[str(value)]
684    
685    def _buildDisplay(self):    def _buildDisplay(self):
686      if self.editing:      if self.editing:
# Line 706  class DropdownDisplayHandler(FieldDispla Line 702  class DropdownDisplayHandler(FieldDispla
702        self.value = '' # None        self.value = '' # None
703      else:      else:
704        try:        try:
705          self.value = self.entry._allowedValuesReverse[self.display]          self.value = self.field._allowedValuesReverse[self.display]
706        except KeyError:        except KeyError:
707          return 0          return 0
708      return 1      return 1
# Line 728  class TextLookupDisplayHandler(FieldDisp Line 724  class TextLookupDisplayHandler(FieldDisp
724      if value in (None,""):      if value in (None,""):
725        return ""        return ""
726      descr = ""      descr = ""
727      if hasattr(self.entry,'fk_source'):      if hasattr(self.field,'fk_source'):
728        if hasattr(self.entry,'fk_key'):        if hasattr(self.field,'fk_key'):
729          foreignKeyContent = string.split(self.entry.fk_key,'.')          foreignKeyContent = string.split(self.field.fk_key,'.')
730          if len(foreignKeyContent) > 1:          if len(foreignKeyContent) > 1:
731            tmpFieldName = foreignKeyContent[0]+'.'+foreignKeyContent[1]            tmpFieldName = foreignKeyContent[0]+'.'+foreignKeyContent[1]
732          else:          else:
733            tmpFieldName = foreignKeyContent[0]            tmpFieldName = foreignKeyContent[0]
734                
735        lResultSet = self.entry._fk_datasource.createResultSet({tmpFieldName:value})        lResultSet = self.field._fk_datasource.createResultSet({tmpFieldName:value})
736      if (lResultSet.firstRecord()):      if (lResultSet.firstRecord()):
737        if hasattr(self.entry,'fk_description'):        if hasattr(self.field,'fk_description'):
738          descr = "%s" % lResultSet.current.getField(self.entry.fk_description)          descr = "%s" % lResultSet.current.getField(self.field.fk_description)
739    
740      return descr      return descr
741    
742    def _buildDisplay(self):    def _buildDisplay(self):
743      self.display = self._buildDisplayHelper(self.value, 0)      self.display = self._buildDisplayHelper(self.value, 0)
744    
745    def endEdit(self,event):    def endEdit(self,event):
746      pass      pass
747    
748    
749  #############################################################################  #############################################################################
750  #  #
751  # Handler for Checkbox types  # Handler for Checkbox types
# Line 772  class CheckboxDisplayHandler(FieldDispla Line 769  class CheckboxDisplayHandler(FieldDispla
769    
770    def setValue(self, value):    def setValue(self, value):
771      # Force to 0 or 1      # Force to 0 or 1
772      if ("%s" % value)[:1] in self.trueValues:      self.value = self._sanitizeValue(value)
       self.value = 1  
     elif ("%s" % value)[:1] in self.falseValues:  
       self.value = 0  
     else:  
       self.value = value and 1 or 0  
773    
774      self.modified = 0      self.modified = 0
775      self._buildDisplay()      self._buildDisplay()
776    
777    
778    def _buildValue(self):    def _sanitizeValue(self, value):
     if int(self.work):  
       return self.trueValue  
     else:  
       return self.falseValue  
   
   
   # TODO: Replace with format mask  
   def _buildDisplayHelper(self, value, editing):  
   
779      if ("%s" % value)[:1] in self.trueValues:      if ("%s" % value)[:1] in self.trueValues:
780        return 1        return 1
781      elif ("%s" % value)[:1] in self.falseValues:      elif ("%s" % value)[:1] in self.falseValues:
# Line 800  class CheckboxDisplayHandler(FieldDispla Line 783  class CheckboxDisplayHandler(FieldDispla
783      else:      else:
784        return value and 1 or 0        return value and 1 or 0
785    
786      def _buildValue(self):
787        self.value = self.work
788        return 1
789    
790    def getDisplay(self):  
791      return self.display    # TODO: Replace with format mask
792      def _buildDisplayHelper(self, value, editing):
793        return self._sanitizeValue(value)
794    
795    ##  def getDisplay(self):
796    ##    return self.display
797    
798    
799    def toggle(self, event):    def toggle(self, event):
800      if event.data == None:      if event.data == None:
801        if self.value == 1:        self.work = not self.work
         self.setValue('0')  
       else:  
         self.setValue('1')  
802      else:      else:
803        self.setValue(event.data[1])        self.work = self._sanitizeValue(event.data[1])
804        self.modified = 1
805        self._buildDisplay()
806    
807    
808    def beginEdit(self, event):    def beginEdit(self, event):
# Line 820  class CheckboxDisplayHandler(FieldDispla Line 810  class CheckboxDisplayHandler(FieldDispla
810      self.editing = 1      self.editing = 1
811      self.modified = 0      self.modified = 0
812    
813      # TODO: Replace with formatter      self.setValue(self.field.getValue())
     self.setValue(self.entry.getValue())  
814    
815      self.work = self.value      self.work = self.value
816    
# Line 916  class CheckboxDisplayHandler(FieldDispla Line 905  class CheckboxDisplayHandler(FieldDispla
905    def clipboardPaste(self, event):    def clipboardPaste(self, event):
906      event.text = self.dispatchEvent(events.Event('getClipboard'))      event.text = self.dispatchEvent(events.Event('getClipboard'))
907      if event.text != None:      if event.text != None:
908        self.addText(event)        self.work = self._sanitizeValue(event.data)
909          self.modified = 1
910          self._buildDisplay()
911    
912    
913    

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.6.2.1

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