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]