[Formed-commits] r294 - in trunk: . formed/formed/io formed/formed/model formed/formed/plugins/web
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Mon Nov 10 12:33:13 CET 2008
Author: torsten
Date: 2008-11-10 12:33:03 +0100 (Mon, 10 Nov 2008)
New Revision: 294
Modified:
trunk/ChangeLog
trunk/formed/formed/io/document.py
trunk/formed/formed/model/data.py
trunk/formed/formed/plugins/web/view_renderer.py
Log:
Implemented radio-matrix elements.
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-11-05 10:25:24 UTC (rev 293)
+++ trunk/ChangeLog 2008-11-10 11:33:03 UTC (rev 294)
@@ -1,3 +1,14 @@
+2008-11-10 Torsten Irländer <torsten.irlaender at intevation.de>
+
+ Implemented radio-matrix elements. radio elelement having the same
+ options can now be rendered in table form.
+
+ * formed/formed/model/data.py,
+ formed/formed/io/document.py: Added new radio-matrix element to the
+ model and gui
+ * formed/formed/plugins/web/view_renderer.py: Write html-renderer for
+ the radio-matrix element.
+
2008-11.03 Torsten Irländer <torsten.irlaender at intevation.de>
* formed/formed/model/data.py: Fixed import error
Modified: trunk/formed/formed/io/document.py
===================================================================
--- trunk/formed/formed/io/document.py 2008-11-05 10:25:24 UTC (rev 293)
+++ trunk/formed/formed/io/document.py 2008-11-10 11:33:03 UTC (rev 294)
@@ -23,6 +23,7 @@
DOCUMENT_TAG = u"document"
PAGE_TAG = u"page"
GROUP_TAG = u"group"
+MATRIX_TAG = u"radio-matrix"
RADIO_TAG = u"radio"
BOOL_TAG = u"bool"
INT_TAG = u"int"
@@ -38,6 +39,7 @@
DOCUMENT_TAG: RootNode,
PAGE_TAG: PageNode,
GROUP_TAG: GroupNode,
+ MATRIX_TAG: MatrixNode,
RADIO_TAG: RadioNode,
BOOL_TAG: BoolLeaf,
CHOICE_TAG: ChoiceNode,
@@ -53,6 +55,7 @@
DOCUMENT_TAG: SimpleCreator(DocumentFactory, RootNode),
PAGE_TAG: SimpleCreator(NodeFactory, PageNode),
GROUP_TAG: SimpleCreator(NodeFactory, GroupNode),
+ MATRIX_TAG: SimpleCreator(NodeFactory, MatrixNode),
RADIO_TAG: SimpleCreator(NodeFactory, RadioNode),
CHOICE_TAG: SimpleCreator(NodeFactory, ChoiceNode),
EXT_CHOICE_LIST_TAG: SimpleCreator(NodeComponentFactory, ExternalChoiceListLeaf),
@@ -68,6 +71,7 @@
RootNode: DOCUMENT_TAG,
PageNode: PAGE_TAG,
GroupNode: GROUP_TAG,
+ MatrixNode: MATRIX_TAG,
RadioNode: RADIO_TAG,
ChoiceNode: CHOICE_TAG,
IntLeaf: INT_TAG,
Modified: trunk/formed/formed/model/data.py
===================================================================
--- trunk/formed/formed/model/data.py 2008-11-05 10:25:24 UTC (rev 293)
+++ trunk/formed/formed/model/data.py 2008-11-10 11:33:03 UTC (rev 294)
@@ -66,7 +66,6 @@
# widgets.append(nc)
#
# return widgets
-
class GroupNode(Node):
def __init__(self):
Node.__init__(self)
@@ -108,6 +107,10 @@
return widgets
+class MatrixNode(GroupNode):
+ def __init__(self):
+ GroupNode.__init__(self)
+
class RadioNode(Node):
def __init__(self):
Node.__init__(self)
Modified: trunk/formed/formed/plugins/web/view_renderer.py
===================================================================
--- trunk/formed/formed/plugins/web/view_renderer.py 2008-11-05 10:25:24 UTC (rev 293)
+++ trunk/formed/formed/plugins/web/view_renderer.py 2008-11-10 11:33:03 UTC (rev 294)
@@ -176,6 +176,62 @@
#self.toTarget(Text('<br class="newline">\n'), node.getTarget())
@checkMode
+ def _renderMatrix(self, node):
+ description = node.getDescription()
+ name = node.getName()
+
+ help = self.formdata.getHelp(name)
+ data = self.formdata.getData(name)
+ error = self.formdata.getError(name)
+ legend = []
+
+ out = []
+
+ error = self.formdata.getData(name)
+ if node.isInvisible():
+ if description:
+ out.append("<!-- %s -->\n" % escape(description))
+ if error:
+ out.append('<p class="errormsg">%s</p>' % escape(error))
+
+ out.append(self._renderRecursive(node))
+ else:
+ if error:
+ out.append('<p class="errormsg">%s</p>\n' % error)
+ try:
+ out.append('<table class="formed-radiomatrix">')
+ # write table header take
+ out.append("<tr>")
+ out.append('<th class="formed-radiomatrix-label">%s</th>' % description)
+ for hcol in node.children[0].children:
+ alternative = hcol.getAlternative()
+ description = hcol.getDescription()
+ if alternative == '':
+ header = description
+ else:
+ header = alternative
+ legend.append("<strong>%s</strong>:%s" % (alternative, description))
+ out.append("<th>%s</th>" % header )
+ out.append("</tr>")
+ # write table body
+ for row in node.children:
+ out.append("<tr>")
+ out.append('<td class="formed-radiomatrix-label">%s</td>' % row.getDescription())
+ self.stateStack.append(self.formdata.getData(row.getName()))
+ for col in row.children:
+ out.append("<td>%s</td>" % self._renderRadioMatrixBool(col))
+ self.stateStack.pop()
+ out.append("</tr>")
+ # write legend
+ if legend:
+ out.append('<tr><td colspan=%s><div class="formed-radiomatrix-legend">%s</div></td></tr>' % (len(node.children[0].children)+1, ", ".join(legend)))
+ out.append("</table>")
+ except:
+ pass
+ self.toTarget(Item("".join(out)), node.getTarget())
+ #self.toTarget(Text('<br class="newline">\n'), node.getTarget())
+
+ @checkMode
def _renderInfo(self, info):
if info.isInvisible(): return
text, depth = info.getValue(), visibleDepth(info)
@@ -257,6 +313,35 @@
out = "<option %s %s>%s</option>\n" % (value, selected, description)
self.toTarget(Text(out), bool.getTarget());
+ def _renderRadioMatrixBool(self, bool):
+ '''Radio cool without any label'''
+
+ name = bool.getName()
+ pname = bool.parent.getName()
+ description = bool.getDescription()
+ value = bool.getValue()
+
+ toCheck = self.stateStack[-1]
+
+ checked = toCheck == value and "checked" or ""
+
+ if value:
+ value = 'value="%s"' % escape(value, True)
+ else:
+ value = ""
+
+ if pname: oname = 'name="%s"' % escape(pname, True)
+ elif name: oname = 'name="%s"' % escape(name, True)
+ else: oname = ''
+
+ if name: id = 'id="%s"' % escape(name, True)
+ else: id = ""
+
+ out = '<input type="radio" %s %s %s %s>\n' % ( oname, id, value, checked)
+
+ return out
+ #self.toTarget(Text(out), bool.getTarget())
+
def _renderRadioBool(self, bool):
name = bool.getName()
@@ -509,8 +594,11 @@
def _renderChild(self, child):
if isinstance(child, Node):
- if isinstance(child, data.GroupNode):
+ if isinstance(child, data.MatrixNode):
if not child.isRepeat():
+ self._renderMatrix(child)
+ elif isinstance(child, data.GroupNode):
+ if not child.isRepeat():
self._renderGroup(child)
elif isinstance(child, data.ChoiceNode):
self._renderChoice(child)
More information about the Formed-commits
mailing list