[Erp5-report] r16994 - /erp5/trunk/products/ERP5Form/OOoChart.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Sun Oct 14 17:24:56 CEST 2007
Author: jp
Date: Sun Oct 14 17:24:56 2007
New Revision: 16994
URL: http://svn.erp5.org?rev=16994&view=rev
Log:
Proof of concept
Added:
erp5/trunk/products/ERP5Form/OOoChart.py
Added: erp5/trunk/products/ERP5Form/OOoChart.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/OOoChart.py?rev=16994&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Form/OOoChart.py (added)
+++ erp5/trunk/products/ERP5Form/OOoChart.py Sun Oct 14 17:24:56 2007
@@ -1,0 +1,265 @@
+##############################################################################
+#
+# Copyright (c) 2007 Nexedi SA and Contributors. All Rights Reserved.
+# Jean-Paul Smets <jp at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from Products.Formulator import Widget
+from Products.Formulator import Widget, Validator
+from Products.Formulator.DummyField import fields
+from Products.Formulator.Field import ZMIField
+from Selection import Selection
+
+from zLOG import LOG
+
+# XXX This should be move to preferences - just as for image
+defaultdisplays = {'thumbnail' : (128,128),
+ 'xsmall' : (200,200),
+ 'small' : (320,320),
+ 'medium' : (480,480),
+ 'large' : (768,768),
+ 'xlarge' : (1024,1024)
+ }
+
+class OOoChartWidget(Widget.Widget):
+ """
+ This class is capabale of producing ODF
+ charts based on data obtained through a
+ listbox.
+ """
+ property_names = list(Widget.Widget.property_names)
+
+ # Default has no meaning in OOoChart.
+ property_names.remove('default')
+
+ form_id = fields.StringField(
+ 'form_id',
+ title='Form ID',
+ description= \
+ "ID of the master form.",
+ default="",
+ required=1)
+ property_names.append('form_id')
+
+ field_id = fields.StringField(
+ 'field_id',
+ title='Field ID',
+ description= \
+ "ID of the listbox in the master form.",
+ default="",
+ required=1)
+ property_names.append('field_id')
+
+ image_display = fields.StringField('image_display',
+ title='Image Display',
+ description=(
+ "Render size of this chart in HTML mode."),
+ default='large',
+ required=1)
+ property_names.append('image_display')
+
+ image_format = fields.StringField('image_format',
+ title='Image Format',
+ description=(
+ "The format in which the chart should be converted to."),
+ default='png',
+ required=0)
+ property_names.append('image_format')
+
+ ooo_template = fields.StringField('ooo_template',
+ title='OOo Template',
+ description=('The ID of a OOo Page Template'
+ ' to render the ListBox'),
+ default='',
+ required=0)
+ property_names.append('ooo_template')
+
+ colour_column_list = fields.ListTextAreaField('colour_column_list',
+ title="Data Colour",
+ description=(
+ "A list of colours for each data associated to a column."),
+ default=[],
+ required=1)
+ property_names.append('colour_column_list')
+
+ chart_japanese_candle_stick = fields.CheckBoxField('chart_japanese_candle_stick',
+ title='Japanese Candle Stick',
+ description=('XXX Unknown'),
+ default=0,
+ required=0)
+ property_names.append('chart_japanese_candle_stick')
+
+
+ chart_three_dimensional = fields.CheckBoxField('chart_three_dimensional',
+ title='3D',
+ description=('Render the chart in three dimensions rather in flat mode'),
+ default=0,
+ required=0)
+ property_names.append('chart_three_dimensional')
+
+
+#"""
+#chart:japanese-candle-stick="false" chart:stock-with-volume="false" chart:three-dimensional="false" chart:deep="false" chart:lines="false" chart:interpolation="none" chart:symbol-type="none" chart:vertical="true" chart:lines-used="0" chart:connect-bars="false" chart:series-source="columns" chart:mean-value="false" chart:error-margin="0" chart:error-lower-limit="0" chart:error-upper-limit="0" chart:error-category="none" chart:error-percentage="0" chart:regression-type="none" chart:data-label-number="none" chart:data-label-text="false" chart:data-label-symbol="false"/>
+#"""
+
+ default = fields.TextAreaField('default',
+ title='Default',
+ description=(
+ "Default value of the text in the widget."),
+ default="",
+ width=20, height=3,
+ required=0)
+
+ selection_name = fields.StringField('selection_name',
+ title='Selection Name',
+ description=('The name of the selection to store'
+ 'params of selection'),
+ default='',
+ required=0)
+
+ data_method = fields.StringField('data_method',
+ title='Data Method',
+ description=('The method wich returns data'),
+ default='',
+ required=0)
+
+ chart_style = fields.StringField('chart_style',
+ title='Chart Style',
+ description=('The kind of Chart we want'),
+ default='bar_3d',
+ required=0)
+
+ chart_title = fields.StringField('chart_title',
+ title='Chart Title',
+ description=('The Title on the top of the chart'),
+ default='',
+ required=0)
+
+ x_title = fields.StringField('x_title',
+ title='X Title',
+ description=('The Title for the X axis'),
+ default='',
+ required=0)
+
+ y_title = fields.StringField('y_title',
+ title='Y Title',
+ description=('The Title for the Y axis'),
+ default='',
+ required=0)
+
+ default_params = fields.ListTextAreaField('default_params',
+ title="Default Parameters",
+ description=(
+ "Default Parameters for the List Method."),
+ default=[],
+ required=0)
+
+ bg_transparent = fields.CheckBoxField('bg_transparent',
+ title='Transparent Background',
+ description=('Allows to set the background transparent'),
+ default='',
+ required=0)
+
+ def render_view(self, field, value, REQUEST=None, render_format='html'):
+ """
+ Render a Chart in read-only.
+ """
+ if REQUEST is None: REQUEST=get_request()
+ return self.render(field, key, value, REQUEST, render_format=render_format)
+
+ def render(self, field, key, value, REQUEST, render_format='html'):
+
+ """
+ Render a chart.
+
+ render_format -- If the format is set to html, render the chart
+ as a URL to ourselves with a png render_format
+
+ If the format is set to 'raw', render the chart
+ as raw XML.
+
+ If the format is set to an image type (ex. png)
+ render the chart using that format.
+ """
+ title = field.get_value('title')
+
+ # Update the render format based on REQUEST parameters
+ render_format = getattr(REQUEST, 'render_format', render_format)
+ if render_format == 'html':
+ css_class = field.get_value('css_class')
+ format = field.get_value('image_format')
+ display = field.get_value('image_display')
+ alternate_name = field.get_value('alternate_name')
+ main_content = """\
+<div class="OOoChartContent">
+ <img class="%s" src="%s?render_format=%s&display=%s" title="%s" alt="%s"/">
+</div>""" % (css_class, field.absolute_url(), format, display, title, alternate_name)
+ return main_content
+
+ # Find the applicable context
+ form = field.aq_parent
+ here = getattr(form, 'aq_parent', REQUEST)
+
+ def stringBoolean(value):
+ return str(bool(value)).lower()
+
+ # Build the parameters
+ extra_argument_dict = dict(
+ chart_title = field.get_value('title'),
+ colour_column_dict = dict(field.get_value('colour_column_list')),
+ chart_three_dimensional = stringBoolean(field.get_value('chart_three_dimensional')),
+ chart_japanese_candle_stick = stringBoolean(field.get_value('chart_japanese_candle_stick')),
+ )
+ LOG('extra_argument_dict', 0, repr(extra_argument_dict))
+ for k, v in extra_argument_dict.items():
+ if REQUEST.get(k) is None:
+ REQUEST.form[k] = v
+
+ # Find the page template
+ method_id = field.get_value('ooo_template')
+ ooo_template = getattr(here, method_id)
+
+ # Render the chart
+ if render_format == 'raw':
+ return ooo_template()
+ return ooo_template(format=render_format)
+
+OOoChartWidgetInstance = OOoChartWidget()
+
+class OOoChartValidator(Validator.Validator):
+ property_names = Validator.Validator.property_names
+
+ def validate(self, field, key, REQUEST):
+ result = {}
+ return result
+
+OOoChartValidatorInstance = OOoChartValidator()
+
+class OOoChart(ZMIField):
+ meta_type = "OOoChart"
+
+ widget = OOoChartWidgetInstance
+ validator = OOoChartValidatorInstance
+
More information about the Erp5-report
mailing list