digits is no more always numeric so fallback to default value

issue2511
review304006
This commit is contained in:
Cédric Krier committed 2012-03-27 17:38:32 +02:00
1 parent 87f6211909
commit 806ed65192
5 files changed
+18 -12

No files matched your search

+10 -2
View File
@@ -285,6 +285,11 @@ class NumberField(CharField):
def get(self, record, check_load=True, readonly=True, modified=False):
return record.value.get(self.name, self._default)
def digits(self, record):
default = (16, 2)
return tuple(x or y for x, y in zip(
record.expr_eval(self.attrs.get('digits', default)), default))
class FloatField(NumberField):
@@ -300,7 +305,7 @@ class FloatField(NumberField):
def get_client(self, record):
value = record.value.get(self.name)
if value is not None:
digits = record.expr_eval(self.attrs.get('digits', (16, 2)))
digits = self.digits(record)
return locale.format('%.' + str(digits[1]) + 'f', value, True)
else:
return ''
@@ -320,7 +325,7 @@ class NumericField(NumberField):
def get_client(self, record):
value = record.value.get(self.name)
if value is not None:
digits = record.expr_eval(self.attrs.get('digits', (16, 2)))
digits = self.digits(record)
return locale.format('%.' + str(digits[1]) + 'f', value, True)
else:
return ''
@@ -343,6 +348,9 @@ class IntegerField(NumberField):
else:
return ''
def digits(self, record):
return (16, 0)
class BooleanField(CharField):
@@ -10,9 +10,7 @@ class Float(Integer):
def __init__(self, field_name, model_name, attrs=None):
super(Float, self).__init__(field_name, model_name, attrs=attrs)
self.digits = (16, 2)
self._default_value = ''
self.entry.set_width_chars(sum(self.digits))
self.entry.connect('key-press-event', self.key_press_event)
def set_value(self, record, field):
@@ -23,8 +21,7 @@ class Float(Integer):
if not field:
self.entry.set_text('')
return False
self.digits = field.attrs.get('digits', (16, 2))
digits = record.expr_eval(self.digits)
digits = field.digits(record)
self.entry.set_width_chars(sum(digits))
self.entry.set_text(field.get_client(record))
@@ -47,7 +44,7 @@ class Float(Integer):
if new_value in ('-', decimal_point):
return
digits = self.record.expr_eval(self.digits)
digits = self.field.digits(self.record)
try:
locale.atof(new_value)
@@ -44,7 +44,7 @@ class FloatTime(WidgetInterface):
value = self.entry.get_text()
if not value:
return field.set_client(record, 0.0)
digits = record.expr_eval(field.attrs.get('digits', (16, 2)))
digits = field.digits(record)
return field.set_client(record,
round(common.text_to_float_time(value, self.conv), digits[1]))
@@ -28,7 +28,7 @@ class ProgressBar(WidgetInterface):
self.widget.set_fraction(0.0)
return False
value = float(field.get(record) or 0.0)
digits = record.expr_eval(field.attrs.get('digits', (16, 2)))
digits = field.digits(record)
self.widget.set_text(locale.format('%.' + str(digits[1]) + 'f',
value, True))
self.widget.set_fraction(value / 100.0)
@@ -466,7 +466,7 @@ class Float(Char):
super(Float, self).setter(column, cell, store, iter)
record = store.get_value(iter, 0)
field = record[self.field_name]
digits = record.expr_eval(field.attrs.get('digits', (16, 2)))
digits = field.digits(record)
cell.digits = digits
@@ -485,7 +485,7 @@ class FloatTime(Char):
def value_from_text(self, record, text, callback=None):
field = record[self.field_name]
digits = record.expr_eval(field.attrs.get('digits', (16, 2)))
digits = field.digits(record)
field.set_client(record,
round(common.text_to_float_time(text, self.conv), digits[1]))
if callback:
@@ -934,9 +934,10 @@ class ProgressBar(object):
@realized
def setter(self, column, cell, store, iter):
record = store.get_value(iter, 0)
field = record[self.field_name]
value = float(self.get_textual_value(record) or 0.0)
cell.set_property('value', value)
digit = record.expr_eval(self.attrs.get('digits', (16, 2)))[1]
digit = field.digits(record)[1]
text = locale.format('%.' + str(digit) + 'f', value, True)
cell.set_property('text', text + '%')