diff --git a/gluon/contrib/spreadsheet.py b/gluon/contrib/spreadsheet.py index 40663d81..3f3f9377 100644 --- a/gluon/contrib/spreadsheet.py +++ b/gluon/contrib/spreadsheet.py @@ -16,7 +16,7 @@ def quote(text): class Node: def __init__(self, name, value, url='.', readonly=False, active=True, - onchange=None, **kwarg): + onchange=None, select=False, size=4, **kwarg): self.url = url self.name = name self.value = str(value) @@ -26,11 +26,21 @@ class Node: self.readonly = readonly self.active = active self.onchange = onchange - self.size = 4 + self.size = size self.locked = False + self.select = value if select and not isinstance(value, str) else False def xml(self): - return """ @@ -391,7 +401,8 @@ class Sheet: def __init__(self, rows, cols, url='.', readonly=False, active=True, onchange=None, value=None, data=None, - headers=None, update_button="", **kwarg): + headers=None, update_button="", c_headers=None, + r_headers=None, **kwarg): """ Arguments: @@ -425,6 +436,9 @@ class Sheet: self.tr_attributes = {} self.td_attributes = {} + self.c_headers = c_headers + self.r_headers = r_headers + self.data = data self.readonly = readonly @@ -505,7 +519,7 @@ class Sheet: self.environment[name] = obj def cell(self, key, value, readonly=False, active=True, - onchange=None, **kwarg): + onchange=None, select=False, **kwarg): """ key is the name of the cell value is the initial value of the cell. It can be a formula "=1+3" @@ -528,7 +542,7 @@ class Sheet: value = value(r, c) node = Node(key, value, self.url, readonly, active, - onchange, **kwarg) + onchange, select=select, **kwarg) self.nodes[key] = node self[key] = value @@ -781,11 +795,19 @@ class Sheet: gluon.html.TH, gluon.html.BR, gluon.html.SCRIPT) regex = re.compile('r\d+c\d+') - header = TR(TH(), *[TH('c%s' % c) + if not self.c_headers: + header = TR(TH(), *[TH('c%s' % c) for c in range(self.cols)]) + else: + header = TR(TH(), *[TH('%s' % c) + for c in self.c_headers]) + rows = [] for r in range(self.rows): - tds = [TH('r%s' % r), ] + if not self.r_headers: + tds = [TH('r%s' % r), ] + else: + tds = [TH('%s' % self.r_headers[r]), ] for c in range(self.cols): key = 'r%sc%s' % (r, c) attributes = {"_class": "w2p_spreadsheet_col_%s" % diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 49fe24c4..ba7bf702 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1668,6 +1668,9 @@ class SQLFORM(FORM): elif field.type == 'double': if value is not None: fields[fieldname] = safe_float(value) + elif field.type in ('string', 'text'): + if fieldname in self.request_vars: + fields[fieldname] = self.request_vars[fieldname] for fieldname in self.vars: if fieldname != 'id' and fieldname in self.table.fields\ diff --git a/gluon/validators.py b/gluon/validators.py index 10dc5b7f..299c49df 100644 --- a/gluon/validators.py +++ b/gluon/validators.py @@ -578,9 +578,9 @@ class IS_IN_DB(Validator): records = self.dbset(table).select(table.ALL, **dd) self.theset = [str(r[self.kfield]) for r in records] if isinstance(self.label, str): - self.labels = [self.label % r for r in records] + self.labels = [self.label % r for r in records.render()] else: - self.labels = [self.label(r) for r in records] + self.labels = [self.label(r) for r in records.render] def options(self, zero=True): self.build_set()