diff --git a/bt5/erp5_odt_style/SkinTemplateItem/portal_skins/erp5_odt_style/form_view.xml b/bt5/erp5_odt_style/SkinTemplateItem/portal_skins/erp5_odt_style/form_view.xml index 82d87605747f16be9cb1170da039d7edfb11daee..56380311e81a767d4919f350caa7684060b3db94 100644 --- a/bt5/erp5_odt_style/SkinTemplateItem/portal_skins/erp5_odt_style/form_view.xml +++ b/bt5/erp5_odt_style/SkinTemplateItem/portal_skins/erp5_odt_style/form_view.xml @@ -114,7 +114,7 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value> <key> <string>_text</string> </key> <value> <string encoding="cdata"><![CDATA[ -<office:document-content \n +<office:document-content\n xmlns:draw=\'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\'\n xmlns:office=\'urn:oasis:names:tc:opendocument:xmlns:office:1.0\'\n xmlns:text=\'urn:oasis:names:tc:opendocument:xmlns:text:1.0\'\n @@ -143,6 +143,7 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value> xmlns:metal=\'http://xml.zope.org/namespaces/metal\'\n tal:attributes=\'dummy python:request.RESPONSE.setHeader("Content-Type", "text/html;; charset=utf-8")\'\n office:version=\'1.0\'>\n +\n <office:scripts/>\n <office:font-face-decls>\n <style:font-face svg:font-family="\'DejaVu Sans\'" style:font-family-generic=\'roman\' style:name=\'DejaVu Sans\' style:font-pitch=\'variable\'/>\n @@ -219,133 +220,216 @@ bWxQSwUGAAAAAAIAAgCeAAAAhwwAAAAA</string> </value> </office:automatic-styles>\n <office:body>\n <office:text>\n - <text:sequence-decls>\n + <office:forms form:automatic-focus="false" form:apply-design-mode="false"/>\n + <text:sequence-decls>\n <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Illustration\'/>\n <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Table\'/>\n <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Text\'/>\n <text:sequence-decl text:display-outline-level=\'0\' text:name=\'Drawing\'/>\n - </text:sequence-decls> \n - <tal:block metal:define-macro="form_layout"\n + </text:sequence-decls>\n + <tal:block metal:define-macro="form_layout"\n tal:define="dummy python: request.set(\'here\',here); ">\n <!-- standard groups -->\n - <tal:block tal:repeat="group python: [g for g in form.get_groups() if g not in (\'bottom\', \'center\', \'hidden\')]">\n - <tal:block tal:define="field_list python: form.get_fields_in_group(group)">\n - <tal:block tal:condition="field_list">\n - <table:table table:style-name=\'field-table\' table:name=\'field-table\'>\n - <table:table-column table:style-name=\'field-table.A\'/>\n - <table:table-column table:style-name=\'field-table.A\'/>\n - <tal:block tal:repeat="field field_list">\n - <tal:block tal:define="field_type python: field.meta_type == \'ProxyField\' and field.getRecursiveTemplateField().meta_type or field.meta_type">\n - <tal:block tal:condition="python:field_type not in (\'HiddenStringField\', \'FileField\')">\n - <table:table-row>\n - <table:table-cell table:style-name=\'field-table.A1\' office:value-type=\'string\'>\n - <text:p text:style-name=\'field-label\' \n + <tal:block tal:repeat="group python: [g for g in form.get_groups() if g not in (\'bottom\', \'center\', \'hidden\')]">\n + <tal:block tal:define="field_list python: form.get_fields_in_group(group)">\n + <tal:block tal:condition="field_list">\n + <table:table table:style-name=\'field-table\' table:name=\'field-table\'>\n + <table:table-column table:style-name=\'field-table.A\'/>\n + <table:table-column table:style-name=\'field-table.A\'/>\n + <tal:block tal:repeat="field field_list">\n + <tal:block tal:define="field_type python: field.meta_type == \'ProxyField\' and field.getRecursiveTemplateField().meta_type or field.meta_type">\n + <tal:block tal:condition="python:field_type not in (\'HiddenStringField\', \'FileField\')">\n + <table:table-row>\n + <table:table-cell table:style-name=\'field-table.A1\' office:value-type=\'string\'>\n + <text:p text:style-name=\'field-label\' \n i18n:domain=\'ui\'\n i18n:translate=\'\'\n tal:content="python: field.get_value(\'title\')"/>\n - </table:table-cell>\n - <tal:block tal:define="item_list python:field.has_value(\'items\') and field.get_value(\'items\') or None">\n - <table:table-cell table:style-name=\'field-table.B1\' \n + </table:table-cell>\n + <tal:block tal:define="item_list python:field.has_value(\'items\') and field.get_value(\'items\') or None">\n + <table:table-cell table:style-name=\'field-table.B1\' \n office:value-type=\'string\'\n tal:define="value python: field.get_value(\'default\')">\n \n - <tal:block tal:condition="python: field_type not in (\'ImageField\', )">\n - <tal:block tal:condition="python: same_type(value,[]) or same_type(value,())">\n - <tal:block tal:repeat="item value">\n - <text:p text:style-name=\'field-content\'\n + <tal:block tal:condition="python: field_type not in (\'ImageField\', \'OOoChart\',)">\n + <tal:block tal:condition="python: same_type(value,[]) or same_type(value,())">\n + <tal:block tal:repeat="item value">\n + <text:p text:style-name=\'field-content\'\n tal:content="python: str(item)"\n tal:condition="not:item_list"/>\n - <text:p text:style-name=\'field-content\'\n + <text:p text:style-name=\'field-content\'\n tal:content="python: [i[0] for i in item_list if i[1] == item][0]"\n tal:condition="item_list" />\n - </tal:block>\n - </tal:block>\n - <tal:block tal:condition="python: (not (same_type(value,[]) or same_type(value,()) )) and (value != None)">\n + </tal:block>\n + </tal:block>\n + <tal:block tal:condition="python: (not (same_type(value,[]) or same_type(value,()) )) and (value != None)">\n <text:p text:style-name=\'field-content\'\n tal:content="python:str(value)"\n tal:condition="not:item_list" />\n <text:p text:style-name=\'field-content\'\n tal:content="python: field.render_pdf(value)"\n tal:condition="item_list" />\n - </tal:block>\n - <tal:block tal:condition="python: value is None">\n - <text:p text:style-name=\'field-content\' tal:content="python: \' \'" />\n - </tal:block> \n - </tal:block>\n - <tal:block tal:condition="python: field_type == \'ImageField\'">\n - <text:p text:style-name=\'field-content\'\n - tal:define="size python: modules[\'Products.ERP5.Document.Image\'].getSizeFromImageDisplay(field.get_value(\'image_display\'))">\n - <office:include_img tal:attributes="width python: (size and size[0] or 100) / 20.;\n - path python: \'/\'.join(request.physicalPathFromURL(field.get_value(\'default\')));"/>\n - </text:p>\n + </tal:block>\n + <tal:block tal:condition="python: value is None">\n + <text:p text:style-name=\'field-content\' tal:content="python: \' \'" />\n + </tal:block>\n + </tal:block>\n + <!-- With this max_size, pictures and graph stay in a table cell-->\n + <tal:block tal:define="global max_size python:9;"/>\n + <tal:block tal:condition="python: field_type == \'ImageField\'">\n + <text:p text:style-name=\'field-content\'\n + tal:define="size python:modules[\'Products.ERP5.Document.Image\'].getSizeFromImageDisplay(field.get_value(\'image_display\'));\n + width python:(((size and size[0] ) / 20.) < max_size and (size and size[0] ) / 20.) or max_size">\n + <tal:block>\n + <office:include_img tal:attributes="width width;\n + path python: \'/\'.join(request.physicalPathFromURL(field.get_value(\'default\')));"/>\n + </tal:block>\n + </text:p>\n + </tal:block>\n + <tal:block tal:condition="python: field_type == \'OOoChart\'">\n + <tal:block tal:define="display python: field.get_value(\'image_display\') "\n + tal:condition="display">\n + <tal:block tal:define="preferred_method_height_id python: \'getPreferred%sImageHeight\' % (display.capitalize());\n + preferred_method_width_id python: \'getPreferred%sImageWidth\'\n + % (display.capitalize());\n + " >\n + <tal:block tal:define="\n + width python:int((getattr(here.portal_preferences, preferred_method_width_id)()));\n + height python:int((getattr(here.portal_preferences, preferred_method_height_id)()));\n + width_graph python:(width *0.02 < max_size and width*0.02 ) or max_size;\n + height_graph python:(height*0.02 < max_size and height*0.02 ) or max_size">\n + <text:p text:style-name=\'field-content\'>\n + <draw:frame draw:style-name=\'gr1\'\n + draw:layer=\'layout\'\n + text:anchor-type="paragraph"\n + tal:attributes="svg:height python:str(height_graph)+\'cm\';\n + svg:width python:str(width_graph)+\'cm\'">\n + <tal:block tal:replace="python: field.render_odf()"/>\n + </draw:frame>\n + </text:p>\n + </tal:block>\n + </tal:block>\n + </tal:block>\n + </tal:block>\n + </table:table-cell>\n </tal:block>\n - </table:table-cell>\n + </table:table-row>\n </tal:block>\n - </table:table-row>\n + </tal:block>\n </tal:block>\n - </tal:block>\n - </tal:block>\n - </table:table> \n - <text:p></text:p>\n + </table:table>\n + <text:p></text:p>\n + </tal:block>\n </tal:block>\n </tal:block>\n - </tal:block>\n \n <!-- center group -->\n - <tal:block tal:define="field_list python: form.get_fields_in_group(\'center\')">\n - <tal:block tal:repeat="field field_list">\n - <tal:block tal:define="field_type python: field.meta_type == \'ProxyField\' and field.getRecursiveTemplateField().meta_type or field.meta_type">\n - <tal:block tal:condition="python: field_type not in (\'ImageField\', )">\n - <text:p text:style-name=\'field-label-center\' i18n:domain="ui" i18n:translate=""\n + <tal:block tal:define="field_list python: form.get_fields_in_group(\'center\')">\n + <tal:block tal:repeat="field field_list">\n + <tal:block tal:define="field_type python: field.meta_type == \'ProxyField\' and field.getRecursiveTemplateField().meta_type or field.meta_type">\n + <tal:block tal:condition="python: field_type not in (\'ImageField\',\'OOoChart\' )">\n + <text:p text:style-name=\'field-label-center\' i18n:domain="ui" i18n:translate=""\n tal:content="python: field.get_value(\'title\')"/>\n - <text:p text:style-name=\'field-content-center\'\n + <text:p text:style-name=\'field-content-center\'\n tal:content="structure python: field.get_value(\'default\').replace(\'&\', \'&amp;\').replace(\'>\', \'&gt;\').replace(\'<\', \'&lt;\').replace(\'\\n\', \'<text:line-break/>\')"/>\n - </tal:block>\n - <tal:block tal:condition="python: field_type == \'ImageField\'">\n - <text:p text:style-name=\'field-label-center\' i18n:domain="ui" i18n:translate=""\n + </tal:block>\n + <tal:block tal:condition="python: field_type == \'ImageField\'">\n + <text:p text:style-name=\'field-label-center\' i18n:domain="ui" i18n:translate=""\n tal:content="python: field.get_value(\'title\')"/>\n \n - <text:p text:style-name=\'field-content-center\'\n - tal:define="size python: modules[\'Products.ERP5.Document.Image\'].getSizeFromImageDisplay(field.get_value(\'image_display\'))">\n - <office:include_img style="inline-graphic"\n + <text:p text:style-name=\'field-content-center\'\n + tal:define="size python: modules[\'Products.ERP5.Document.Image\'].getSizeFromImageDisplay(field.get_value(\'image_display\'))">\n + <office:include_img style="inline-graphic"\n tal:attributes="width python: (size and size[0] or 100) / 20.;\n path python: \'/\'.join(request.physicalPathFromURL(field.get_value(\'default\')));"/>\n - </text:p>\n - </tal:block>\n - </tal:block>\n - </tal:block>\n - </tal:block> \n + </text:p>\n + </tal:block>\n + <tal:block tal:condition="python: field_type == \'OOoChart\'">\n + <text:p text:style-name=\'field-label-center\' i18n:domain="ui" i18n:translate=""\n + tal:content="python: field.get_value(\'title\')"/>\n + <text:p text:style-name=\'standard\'/>\n + <tal:block tal:define="display python: field.get_value(\'image_display\') "\n + tal:condition="display">\n + <tal:block tal:define="preferred_method_height_id python: \'getPreferred%sImageHeight\' % (display.capitalize());\n + preferred_method_width_id python: \'getPreferred%sImageWidth\'\n + % (display.capitalize());\n + " >\n + <tal:block tal:define="global height python:\'%scm\' % (int((getattr(here.portal_preferences, preferred_method_height_id)())) * 0.020) ;\n + global width python: \'%scm\' % (int((getattr(here.portal_preferences, preferred_method_width_id)())) * 0.020 );"/>\n + </tal:block>\n + </tal:block>\n + <text:p text:style-name=\'field-content-center\'>\n + <draw:frame draw:style-name=\'inline-graphic\'\n + draw:layer=\'layout\'\n + text:anchor-type="paragraph"\n + tal:attributes="svg:height python:height;\n + svg:width python:width">\n + <tal:block tal:replace="python: field.render_odf()"/>\n + </draw:frame>\n + </text:p>\n \n - <!-- bottom group -->\n - <tal:block tal:define="field_list python: form.get_fields_in_group(\'bottom\')">\n - <tal:block tal:repeat="field field_list">\n - <tal:block tal:define="field_type python: field.meta_type == \'ProxyField\' and field.getRecursiveTemplateField().meta_type or field.meta_type">\n - <tal:block tal:condition="python: field_type == \'MatrixBox\'">\n - <tal:block tal:define="matrixbox python:field;">\n - <div metal:use-macro="here/matrixbox_odt_macro/macros/matrixbox" />\n - </tal:block>\n + </tal:block>\n + </tal:block>\n + </tal:block>\n + </tal:block>\n +\n + <!-- bottom group -->\n + <tal:block tal:define="field_list python: form.get_fields_in_group(\'bottom\')">\n + <tal:block tal:repeat="field field_list">\n + <tal:block tal:define="field_type python: field.meta_type == \'ProxyField\' and field.getRecursiveTemplateField().meta_type or field.meta_type">\n + <tal:block tal:condition="python: field_type == \'MatrixBox\'">\n + <tal:block tal:define="matrixbox python:field;">\n + <div metal:use-macro="here/matrixbox_odt_macro/macros/matrixbox" />\n + </tal:block>\n + </tal:block>\n + <tal:block tal:condition="python: field_type == \'ListBox\'">\n + <tal:block tal:define="listbox python:field;" >\n + <div metal:use-macro="here/listbox_odt_macro/macros/listbox" />\n + </tal:block>\n + </tal:block>\n + <tal:block tal:condition="python: field_type == \'ImageField\'">\n + <text:p text:style-name=\'field-content\'\n + tal:define="size python: modules[\'Products.ERP5.Document.Image\'].getSizeFromImageDisplay(field.get_value(\'image_display\'))">\n + <text:p text:style-name=\'field-content-center\'>\n + <office:include_img style="inline-graphic"\n + tal:attributes="width python: (size and size[0] or 100) / 20.;\n + path python: \'/\'.join(request.physicalPathFromURL(field.get_value(\'default\')));"/>\n + </text:p>\n + </text:p>\n + </tal:block>\n + <tal:block tal:condition="python: field_type == \'OOoChart\'">\n + <text:p text:style-name=\'field-label-center\' i18n:domain="ui" i18n:translate=""\n + tal:content="python: field.get_value(\'title\')"/>\n + <text:p text:style-name=\'standard\'/>\n + <tal:block tal:define="display python: field.get_value(\'image_display\') "\n + tal:condition="display">\n + <tal:block tal:define="preferred_method_height_id python: \'getPreferred%sImageHeight\' % (display.capitalize());\n + preferred_method_width_id python: \'getPreferred%sImageWidth\'\n + % (display.capitalize());\n + " >\n + <tal:block tal:define="global height python:\'%scm\' % (int((getattr(here.portal_preferences, preferred_method_height_id)())) * 0.020) ;\n + global width python: \'%scm\' % (int((getattr(here.portal_preferences, preferred_method_width_id)())) * 0.020 );"/>\n + </tal:block>\n + </tal:block>\n + <text:p text:style-name=\'field-content-center\'>\n + <draw:frame draw:style-name=\'inline-graphic\'\n + draw:layer=\'layout\'\n + text:anchor-type="paragraph"\n + svg:height="10cm"\n + svg:width="10cm"\n + tal:attributes="svg:height python:height;\n + svg:width python:width">\n + <tal:block tal:replace="python: field.render_odf()"/>\n + </draw:frame>\n + </text:p>\n + </tal:block>\n + </tal:block>\n + </tal:block>\n + </tal:block>\n </tal:block>\n - <tal:block tal:condition="python: field_type == \'ListBox\'">\n - <tal:block tal:define="listbox python:field;" >\n - <div metal:use-macro="here/listbox_odt_macro/macros/listbox" />\n - </tal:block>\n - </tal:block>\n - <tal:block tal:condition="python: field_type == \'ImageField\'">\n - <text:p text:style-name=\'field-content\'\n - tal:define="size python: modules[\'Products.ERP5.Document.Image\'].getSizeFromImageDisplay(field.get_value(\'image_display\'))">\n - <office:include_img style="inline-graphic"\n - tal:attributes="width python: (size and size[0] or 100) / 20.;\n - path python: \'/\'.join(request.physicalPathFromURL(field.get_value(\'default\')));"/>\n - </text:p>\n - </tal:block>\n - </tal:block>\n - </tal:block>\n - </tal:block> \n - </tal:block>\n - </office:text>\n -</office:body>\n -</office:document-content>\n - + </office:text>\n + </office:body>\n +</office:document-content> ]]></string> </value> </item> diff --git a/bt5/erp5_odt_style/bt/change_log b/bt5/erp5_odt_style/bt/change_log index aabc85ccd5d0c89e338e35f4a2a977d157e1785e..b59dfd170be15e16e11c22bc160b288590052760 100644 --- a/bt5/erp5_odt_style/bt/change_log +++ b/bt5/erp5_odt_style/bt/change_log @@ -1,3 +1,7 @@ +2008-04-04 Thibaut +add rendering OOoChart +Image support improvement + 2007-10-30 Jerome Add macros for deferred rendering in report_view diff --git a/bt5/erp5_odt_style/bt/revision b/bt5/erp5_odt_style/bt/revision index dce6588ca1420a69eea5699f2ec5d666daf16a6a..c24b6ae77df02a87472b208f251fad88382a2e55 100644 --- a/bt5/erp5_odt_style/bt/revision +++ b/bt5/erp5_odt_style/bt/revision @@ -1 +1 @@ -36 \ No newline at end of file +38 \ No newline at end of file