From b927d41c8264b86ceccc87dbcfc6dd72dc199168 Mon Sep 17 00:00:00 2001
From: tux091 <renaud.legac@free.fr>
Date: Wed, 28 Sep 2011 22:06:34 +0200
Subject: [PATCH] Backport the 0.5.x Spacer class.

---
 models/db_widgets.py                |  6 +++---
 modules/plugin_dbui/__init__.py     |  1 +
 modules/plugin_dbui/cfgsvc.py       | 16 ++++++----------
 modules/plugin_dbui/formmodifier.py |  9 ---------
 modules/plugin_dbui/modifier.py     | 17 +++++++++++++++++
 5 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/models/db_widgets.py b/models/db_widgets.py
index 210d62fe..0b7ca837 100755
--- a/models/db_widgets.py
+++ b/models/db_widgets.py
@@ -73,7 +73,7 @@ formModifier.merge_fields('conference_title',
                           'conference_town',
                           'id_countries',
                           'conference_speaker',
-                          spacer=26*3,
+                          dbui.Spacer(height=26*3),
                           title=T('Conference'),
                           flex=1)
 
@@ -82,13 +82,13 @@ formModifier.merge_fields('authors_cppm',
                           'id_teams',
                           'id_projects',
                           'id_categories_aeres',
-                          spacer= 26*5,
+                          dbui.Spacer(height=26*5),
                           title='CPPM',
                           flex=1)
 
 formModifier.merge_fields('report_numbers', 
                           'id_reports',
-                          spacer=220,
+                          dbui.Spacer(height=220),
                           title=T('Report'),
                           flex=1)
 
diff --git a/modules/plugin_dbui/__init__.py b/modules/plugin_dbui/__init__.py
index 5ff870ca..4c6c5068 100755
--- a/modules/plugin_dbui/__init__.py
+++ b/modules/plugin_dbui/__init__.py
@@ -15,4 +15,5 @@ from helper import (get_js_files,
                     get_reference_paths, 
                     get_script_path)
 from mapper import map_default, map_tabpanel
+from modifier import Spacer, Widget
 from viewportmodifier import VIEWPORT_DP, ViewportModifier
\ No newline at end of file
diff --git a/modules/plugin_dbui/cfgsvc.py b/modules/plugin_dbui/cfgsvc.py
index d43727b5..5a6b47dc 100755
--- a/modules/plugin_dbui/cfgsvc.py
+++ b/modules/plugin_dbui/cfgsvc.py
@@ -10,6 +10,7 @@ from basesvc import BaseSvc
 from foreignfield import ForeignField
 from helper import encode_field
 from mapper import map_default
+from modifier import Widget
 from setfield import SetField
 
 FIELD_IN_DBFIELD = "Field %s already in the dbFields list."
@@ -64,6 +65,10 @@ class CfgSvc(BaseSvc):
         See the documentation of the Ext.form.Compositefield class for details.
         
         """
+        # handle spacer and simple text widget
+        if isinstance(fieldname, Widget):
+             li.append(fieldname.extjs)
+             return
         
         # handle composite field and fieldsets
         field_modifiers = self.environment['plugins'].dbui.field_modifiers
@@ -291,18 +296,9 @@ class CfgSvc(BaseSvc):
                     self._append_form_field(tablename, fieldname, cfg['items'])
                     if fieldname == 'id':
                         id_is_not_used = False
-
-                # protection when applying Ext JS configuration parameters
-                # NOTE: if the user submit a list of items they are append at the
-                # end of the current list. 
-                # It is a way to add spacer and to fine tune the layout
-                extjs = dict(fieldset.extjs)
-                if 'items' in extjs:
-                    cfg['items'].extend(extjs['items'])
-                    del extjs['items']
                 
                 # Apply the remaining Ext JS configuration options    
-                cfg.update(extjs)
+                cfg.update(fieldset.extjs)
                 fielditems.append(cfg)
 
             # append the field Id
diff --git a/modules/plugin_dbui/formmodifier.py b/modules/plugin_dbui/formmodifier.py
index b1a293d2..1c8366dc 100644
--- a/modules/plugin_dbui/formmodifier.py
+++ b/modules/plugin_dbui/formmodifier.py
@@ -59,15 +59,6 @@ class FormModifier(Modifier):
         extjs = {'defaults': {'anchor': '100%'}}
         extjs.update(kwargs)
 
-        if 'spacer' in extjs:
-            di = {'xtype': 'spacer', 'height': extjs['spacer']}
-            if 'items' in extjs:
-                items.append(di)
-            else:
-                extjs['items'] = [di]
-                
-            del extjs['spacer']
-
         di = Storage(fields=fields, extjs= extjs)
         self.data.field_sets.append(di)
 
diff --git a/modules/plugin_dbui/modifier.py b/modules/plugin_dbui/modifier.py
index d2b4c20d..e4bf7c8a 100644
--- a/modules/plugin_dbui/modifier.py
+++ b/modules/plugin_dbui/modifier.py
@@ -84,3 +84,20 @@ class Modifier(object):
         """
         self.data.extjs.update(extjs)
 
+
+class Widget(object):
+    """Base class defining a the configuration of an ExtJS widget.
+    
+    """
+    def __init__(self, xtype, **kwargs):
+        self.extjs = dict(xtype=xtype, **kwargs)
+
+
+class Spacer(Widget):
+    """Define a spacer which can be add when combining fields in fieldset
+    or in field container.
+    
+    """
+    def __init__(self, **kwargs):
+        Widget.__init__(self, 'spacer', **kwargs)
+
-- 
GitLab