Changeset 4032

Show
Ignore:
Timestamp:
04/06/08 09:04:33 (8 months ago)
Author:
ed
Message:

Modified the dColumn class to automatically set its DataType? property when its DataField? prop gets changed.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dabo/ui/uiwx/dGrid.py

    r3946 r4032  
    3737except ImportError: 
    3838    _USE_DECIMAL = False 
     39    # This is needed so that references to this class don't throw 
     40    # errors when running in Python 2.3 
     41    Decimal = float 
    3942 
    4043 
     
    4346    def __init__(self, parent): 
    4447        super(dGridDataTable, self).__init__() 
    45  
    4648        self.grid = parent 
    4749        self._initTable() 
     
    136138                    nm = "" 
    137139            colName = "Column_%s" % nm 
    138  
    139140            pos = col._getUserSetting("Order") 
    140141            if pos is not None: 
     
    506507            "decimal" : self.decimalRendererClass, 
    507508            "float" : self.floatRendererClass, 
    508             "list" : self.listRendererClass  } 
     509            "list" : self.listRendererClass, 
     510            str : self.stringRendererClass, 
     511            unicode : self.stringRendererClass, 
     512            bool : self.boolRendererClass, 
     513            int : self.intRendererClass, 
     514            long : self.longRendererClass, 
     515            float : self.floatRendererClass, 
     516            list : self.listRendererClass} 
    509517        self.defaultEditors = { 
    510518            "str" : self.stringEditorClass, 
     
    515523            "decimal" : self.decimalEditorClass, 
    516524            "float" : self.floatEditorClass, 
    517             "list" : self.listEditorClass } 
     525            "list" : self.listEditorClass, 
     526            str : self.stringEditorClass, 
     527            unicode : self.stringEditorClass, 
     528            bool : self.boolEditorClass, 
     529            int : self.intEditorClass, 
     530            long : self.longEditorClass, 
     531            float : self.floatEditorClass, 
     532            list : self.listEditorClass} 
     533        if _USE_DECIMAL: 
     534            self.defaultRenderers[Decimal] = self.decimalRendererClass 
     535            self.defaultEditors[Decimal] = self.decimalEditorClass 
    518536 
    519537        # Default to string renderer 
     
    687705 
    688706 
     707    def _setDataTypeFromDataField(self, fld): 
     708        """When a column has its DataField changed, we need to set the  
     709        correct DataType based on the new value. 
     710        """ 
     711        if self.Parent: 
     712            currDT = self.DataType 
     713            dt = self.Parent.typeFromDataField(fld) 
     714            if dt is not None and (dt != currDT): 
     715                self.DataType = dt 
     716                self._updateRenderer() 
     717                self._updateEditor() 
     718 
     719 
    689720    def _getUserSetting(self, prop): 
    690721        """Get the property value from the user settings table.""" 
     
    942973        if self._constructed(): 
    943974            self._dataField = val 
     975            # Use a callAfter, since the parent may not be finished instantiating yet. 
     976            dabo.ui.callAfter(self._setDataTypeFromDataField, val) 
    944977            if not self.Name or self.Name == "?": 
    945978                self._name = _("col_%s") % val 
     
    18821915        #self.SetCellRenderer(row, col, rnd) 
    18831916 
     1917 
     1918    def typeFromDataField(self, df): 
     1919        """When the DataField is set for a column, it needs to set the corresponding  
     1920        value of its DataType property. Will return the Python data type, or None if  
     1921        there is no bizobj, or no DataStructure info available in the bizobj. 
     1922        """ 
     1923        biz = self.getBizobj() 
     1924        if biz is None: 
     1925            return None 
     1926        try: 
     1927            pyType = biz.getDataTypeForField(df) 
     1928        except ValueError, e: 
     1929            dabo.errorLog.write(e) 
     1930            return None 
     1931        return pyType 
     1932         
    18841933 
    18851934    def getTableClass(cls):