dabo Commit
Revision 7144
Date: 2012-04-25 12:52:38 -0700 (Wed, 25 Apr 2012)
Author: Ed
Trac: http://trac.dabodev.com/changeset/7144

Changed:
U   trunk/dabo/ui/uiwx/dGrid.py

Log:
Fixed the problem of all grid columns using the default string renderer, even 
if they had set an explicit DataType. Also fixed an edge case where GetValue() 
could fail for a column if called early in the grid creation process.

Diff:
Modified: trunk/dabo/ui/uiwx/dGrid.py
===================================================================
--- trunk/dabo/ui/uiwx/dGrid.py 2012-04-25 19:51:01 UTC (rev 7143)
+++ trunk/dabo/ui/uiwx/dGrid.py 2012-04-25 19:52:38 UTC (rev 7144)
@@ -96,7 +96,7 @@
                if r is not None:
                        rnd = r()
                        attr.SetRenderer(rnd)
-                       if r is dcol.floatRendererClass:
+                       if r in (dcol.floatRendererClass, 
dcol.decimalRendererClass):
                                rnd.SetPrecision(dcol.Precision)
                # Now check for alternate row coloration
                if self.alternateRowColoring:
@@ -326,16 +326,18 @@
                if dynamicUpdate:
                        col_obj._updateDynamicProps()
                        col_obj._updateCellDynamicProps(row)
+               ret = ""
                if bizobj:
                        if field and (row < bizobj.RowCount):
-                               ret = 
self.getStringValue(bizobj.getFieldVal(field, row))
-                       else:
-                               ret = ""
+                               try:
+                                       ret = 
self.getStringValue(bizobj.getFieldVal(field, row))
+                               except dException.FieldNotFoundException:
+                                       pass
                else:
                        try:
                                ret = self.grid.DataSet[row][field]
                        except (TypeError, IndexError, KeyError):
-                               ret = ""
+                               pass
                if ret is None and convertNoneToString:
                        ret = self.grid.NoneDisplay
                self.__cachedVals[(row, col)] = (ret, time.time())
@@ -513,6 +515,8 @@
                self.defaultRenderers = {
                        "str" : self.stringRendererClass,
                        "string" : self.stringRendererClass,
+                       "date" : self.stringRendererClass,
+                       "datetime" : self.stringRendererClass,
                        "bool" : self.boolRendererClass,
                        "int" : self.intRendererClass,
                        "long" : self.longRendererClass,
@@ -521,6 +525,8 @@
                        "list" : self.listRendererClass,
                        str : self.stringRendererClass,
                        unicode : self.stringRendererClass,
+                       datetime.date : self.stringRendererClass,
+                       datetime.datetime : self.stringRendererClass,
                        bool : self.boolRendererClass,
                        int : self.intRendererClass,
                        long : self.longRendererClass,
@@ -530,6 +536,8 @@
                self.defaultEditors = {
                        "str" : self.stringEditorClass,
                        "string" : self.stringEditorClass,
+                       "date" : self.stringEditorClass,
+                       "datetime" : self.stringEditorClass,
                        "bool" : self.boolEditorClass,
                        "int" : self.intEditorClass,
                        "integer" : self.intEditorClass,
@@ -539,6 +547,8 @@
                        "list" : self.listEditorClass,
                        str : self.stringEditorClass,
                        unicode : self.stringEditorClass,
+                       datetime.date : self.stringEditorClass,
+                       datetime.datetime : self.stringEditorClass,
                        bool : self.boolEditorClass,
                        int : self.intEditorClass,
                        long : self.longEditorClass,
@@ -557,6 +567,14 @@
                dabo.ui.callAfter(self._restoreFontZoom)
 
 
+       def _setRenderer(self):
+               try:
+                       typ = type(self.Value)
+               except dException.FieldNotFoundException:
+                       typ = None
+               self._rendererClass = self.defaultRenderers.get(typ, 
self.stringRendererClass)
+
+
        @dabo.ui.deadCheck
        def _updateDynamicProps(self):
                for prop, func in self._dynamic.items():
@@ -781,13 +799,11 @@
 
        def _updateRenderer(self):
                """The Field, DataType, or CustomRenderer has changed: set in 
the attr"""
-               rendClass = self.CustomRendererClass
+               self._setRenderer()
+               rendClass = self.CustomRendererClass or self.RendererClass
                if rendClass is None:
-                       rendClass = self.defaultRenderers.get(self.DataType)
-               if rendClass is None:
                        renderer = None
                else:
-                       self._rendererClass = rendClass
                        renderer = rendClass()
                self._gridColAttr.SetRenderer(renderer)
 
@@ -1357,6 +1373,7 @@
        def _setPrecision(self, val):
                if self._constructed():
                        self._precision = val
+                       dabo.ui.callAfterInterval(50, self.Parent.refresh)
                else:
                        self._properties["Precision"] = val
 
@@ -1402,6 +1419,8 @@
 
        def _getValue(self):
                grid = self.Parent
+               if grid is None:
+                       return None
                biz = grid.getBizobj()
                if self.DataField:
                        if biz and (grid.CurrentRow < biz.RowCount):
@@ -1669,7 +1688,7 @@
                        to their relative Order. (int)""") )
 
        Precision = property(_getPrecision, _setPrecision, None,
-                       _("Number of decimal places to display for float values 
 (int)"))
+                       _("Number of decimal places to display for float and 
decimal values  (int)"))
 
        RendererClass = property(_getRendererClass, None, None,
                        _("""Returns the renderer class used for cells in the 
column. This will be
@@ -1929,6 +1948,13 @@
                dabo.ui.callAfter(self._updateColumnWidths)
 
 
+       @dabo.ui.deadCheck
+       def _afterInitAll(self):
+               super(dGrid, self)._afterInitAll()
+               for col in self.Columns:
+                       col._setRenderer()
+
+
        def _initEvents(self):
                ## pkm: Don't do the grid_cell mouse events, because we handle 
it manually and it
                ##      would result in doubling up the events.



_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: 
http://leafe.com/archives/byMID/[email protected]

Reply via email to