[Erp5-report] r32789 nicolas - in /erp5/trunk/products/Formulator: Field.py Widget.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Feb 18 15:39:20 CET 2010


Author: nicolas
Date: Thu Feb 18 15:39:20 2010
New Revision: 32789

URL: http://svn.erp5.org?rev=32789&view=rev
Log:
Implement render_odt_view. eg. The read-only renderer for ooo
  * all widget.render_odt are renamed to widget.render_odt_view
  * field.render_odt call widget.render_odt or widget.render_odt_view
    according request parameter (editable_mode) or field configuration.
  * Backward compatibility is kept: widget.render_odt fallback to widget.render_odt_view
  * CheckBoxField now implement both editable modes
Reviewed by Romain

Modified:
    erp5/trunk/products/Formulator/Field.py
    erp5/trunk/products/Formulator/Widget.py

Modified: erp5/trunk/products/Formulator/Field.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Field.py?rev=32789&r1=32788&r2=32789&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Field.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Field.py [utf8] Thu Feb 18 15:39:20 2010
@@ -204,6 +204,20 @@
         return self.widget.render(self, key, value, REQUEST,
                                   render_prefix=render_prefix)
 
+    security.declarePrivate('_render_helper')
+    def _render_odt_helper(self, key, value, as_string, ooo_builder,
+                           REQUEST, render_prefix, attr_dict, local_name):
+      value = self._get_default(key, value, REQUEST)
+      __traceback_info__ = ('key=%s value=%r' % (key, value))
+      if not self.get_value('editable', REQUEST=REQUEST):
+        return self.widget.render_odt_view(self, value, as_string, ooo_builder,
+                                           REQUEST, render_prefix, attr_dict,
+                                           local_name)
+      else:
+        return self.widget.render_odt(self, value, as_string, ooo_builder,
+                                      REQUEST, render_prefix, attr_dict,
+                                      local_name)
+
     security.declarePrivate('_get_default')
     def _get_default(self, key, value, REQUEST):
         if value is not None:
@@ -286,11 +300,19 @@
     def render_odt(self, key=None, value=None, as_string=True, ooo_builder=None,
         REQUEST=None, render_prefix=None, attr_dict=None, local_name='p',
         key_prefix=None):
-      widget_key = self.generate_field_key(key=key, key_prefix=key_prefix)
-      value = self._get_default(widget_key, value, REQUEST)
-      return self.widget.render_odt(self, value, as_string, ooo_builder,
-                                    REQUEST, render_prefix, attr_dict,
-                                    local_name)
+      field_key = self.generate_field_key(key=key, key_prefix=key_prefix)
+      return self._render_odt_helper(field_key, value, as_string,
+                                     ooo_builder, REQUEST, render_prefix,
+                                     attr_dict, local_name)
+
+    security.declareProtected('View', 'render_odt_view')
+    def render_odt_view(self, value=None, as_string=True, ooo_builder=None,
+        REQUEST=None, render_prefix=None, attr_dict=None, local_name='p'):
+      """Call read-only renderer
+      """
+      return self.widget.render_odt_view(self, value, as_string, ooo_builder,
+                                         REQUEST, render_prefix, attr_dict,
+                                         local_name)
 
     security.declareProtected('View', 'render_odg')
     def render_odg(self, key=None, value=None, as_string=True, ooo_builder=None,

Modified: erp5/trunk/products/Formulator/Widget.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Widget.py?rev=32789&r1=32788&r2=32789&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Widget.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Widget.py [utf8] Thu Feb 18 15:39:20 2010
@@ -175,9 +175,18 @@
     return None
 
   def render_odt(self, field, value, as_string, ooo_builder, REQUEST,
-      render_prefix, attr_dict, local_name):
-    """
-      Return a field value rendered in odt format.
+                 render_prefix, attr_dict, local_name):
+    """This render dedicated to render fields inside OOo document
+      (eg. editable mode)
+    """
+    # XXX By default fallback to render_odt_view
+    return self.render_odt_view(field, value, as_string, ooo_builder, REQUEST,
+      render_prefix, attr_dict, local_name)
+
+  def render_odt_view(self, field, value, as_string, ooo_builder, REQUEST,
+                      render_prefix, attr_dict, local_name):
+    """
+      Return a field value rendered in odt format as read-only mode.
       - as_string return value as string or as xml object
       - attr_dict can be used for additional attributes (like style).
       - ooo_builder wrapper of ODF zipped archive usefull to insert images
@@ -234,7 +243,7 @@
     draw_node.append(text_p_node)
     draw_frame_node.append(draw_node)
 
-    # XXX copy from render_odt, need to be unified
+    # XXX copy from render_odt_view, need to be unified
     def replaceCharsByNode(match_object):
         #global text_span_node
         if match_object.group(1) is None:
@@ -416,7 +425,7 @@
     """
     <form:checkbox form:name="is_accepted"
                    form:control-implementation="ooo:com.sun.star.form.component.CheckBox"
-                   checkbox form:current-state="checked"
+                   form:current-state="checked"
                    form:id="control1"
                    form:image-position="center">
       <form:properties>
@@ -447,6 +456,24 @@
     if as_string:
       return etree.tostring(form_node)
     return form_node
+
+  def render_odt_view(self, field, value, as_string, ooo_builder, REQUEST,
+      render_prefix, attr_dict, local_name):
+    """
+    """
+    if attr_dict is None:
+      attr_dict = {}
+    if isinstance(value, int):
+      value = str(value)
+    if isinstance(value, str):
+      #required by lxml
+      value = value.decode('utf-8')
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+    text_node.text = value
+    text_node.attrib.update(attr_dict)
+    if as_string:
+      return etree.tostring(text_node)
+    return text_node
 
 CheckBoxWidgetInstance = CheckBoxWidget()
 
@@ -495,7 +522,7 @@
           return ''
         return value
 
-    def render_odt(self, field, value, as_string, ooo_builder, REQUEST,
+    def render_odt_view(self, field, value, as_string, ooo_builder, REQUEST,
         render_prefix, attr_dict, local_name):
         if attr_dict is None:
             attr_dict = {}
@@ -562,14 +589,14 @@
       value = [value]
     return string.join(value, field.get_value('view_separator'))
 
-  def render_odt(self, field, value, as_string, ooo_builder, REQUEST,
+  def render_odt_view(self, field, value, as_string, ooo_builder, REQUEST,
       render_prefix, attr_dict, local_name):
     if value is None:
       value = ['']
     elif isinstance(value, (str, unicode)):
       value = [value]
     value = '\n'.join(value)
-    return TextAreaWidget.render_odt(self, field, value, as_string,
+    return TextAreaWidget.render_odt_view(self, field, value, as_string,
                                      ooo_builder, REQUEST, render_prefix,
                                      attr_dict, local_name)
 
@@ -1329,7 +1356,7 @@
   def render_pdf(self, field, value, render_prefix=None):
     return self.format_value(field, value, mode='pdf')
 
-  def render_odt(self, field, value, as_string, ooo_builder, REQUEST,
+  def render_odt_view(self, field, value, as_string, ooo_builder, REQUEST,
       render_prefix, attr_dict, local_name):
     """
       Return a field value rendered in odt format.
@@ -1661,7 +1688,7 @@
             'format': format,
             'type': 'float'}
 
-  def render_odt(self, field, value, as_string, ooo_builder, REQUEST,
+  def render_odt_view(self, field, value, as_string, ooo_builder, REQUEST,
       render_prefix, attr_dict, local_name):
     if attr_dict is None:
       attr_dict = {}




More information about the Erp5-report mailing list