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.) &lt; 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  &lt; max_size and width*0.02  ) or max_size;\n
+                                       height_graph python:(height*0.02  &lt; 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;\', \'&amp;amp;\').replace(\'&gt;\', \'&amp;gt;\').replace(\'&lt;\', \'&amp;lt;\').replace(\'\\n\', \'&lt;text:line-break/&gt;\')"/>\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