digits is no more always numeric so fallback to default value
issue2511 review304006
This commit is contained in:
1 parent
87f6211909
commit
806ed65192
5 files changed
+18
-12
No files matched your search
@@ -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 + '%')
|
||||
|
||||
|
||||
Reference in new issue
Block a user