From 4200c308fb50141269effc9fc1a8e3c2290726bf Mon Sep 17 00:00:00 2001
From: Renaud Le Gac <legac@cppm.in2p3.fr>
Date: Sat, 15 Dec 2012 09:50:11 +0100
Subject: [PATCH] Improve the method formModifier.linked_combobox by adding the
 possibility to modify the ExtJS configuration parameter of the underlying
 combobox.

---
 modules/plugin_dbui/formmodifier.py | 37 +++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 4 deletions(-)

diff --git a/modules/plugin_dbui/formmodifier.py b/modules/plugin_dbui/formmodifier.py
index 33cdd4ff..88c2041f 100644
--- a/modules/plugin_dbui/formmodifier.py
+++ b/modules/plugin_dbui/formmodifier.py
@@ -100,28 +100,57 @@ class FormModifier(Modifier):
                     Either a string or a list of string when several
                     slaves are linked to a master.
                     
+                masterExtJS
+                    configuration parameters dictionary for the master
+                    Ext.form.Combobox. Might be useful to set the master
+                    in readOnly mode for example
+                    
+                slavesExtJS
+                    configuration parameters dictionary for the slave
+                    Ext.form.Combobox. It can also be a list of dictionary
+                    when running with multi-slaves. Might be useful to set 
+                    the salve in readOnly mode for example.
+                    
         """
-        for el in ('slaveNames', 'displayFieldSlaves', 'valueFieldSlaves'):
-            kwargs[el] = as_list(kwargs[el])
+        # Multi-slaves case
+        t = ('slaveNames', 
+             'displayFieldSlaves', 
+             'valueFieldSlaves', 
+             'slavesExtJS')
+        
+        for el in t:
+            if el in kwargs:
+                kwargs[el] = as_list(kwargs[el])
 
         # master
+        extjs = {}
+        if 'masterExtJS' in kwargs:
+            extjs = kwargs['masterExtJS']
+            
         fieldsModifier = FieldsModifier(self.tablename)
         fieldsModifier.configure_field(kwargs['masterName'],
                                        displayField=kwargs['displayFieldMaster'],
                                        role='master',
                                        store=kwargs['storeName'],
                                        valueField=kwargs['valueFieldMaster'],
-                                       xtype='xlinkedcombobox')
+                                       xtype='xlinkedcombobox',
+                                       **extjs)
         
         # slaves
         for i in range(len(kwargs['slaveNames'])):
+
+            extjs = {}
+            if 'slavesExtJS' in kwargs:
+                extjs = kwargs['slavesExtJS'][i]
+
             fieldsModifier.configure_field(kwargs['slaveNames'][i],
                                            displayField=kwargs['displayFieldSlaves'][i],
                                            mode='local',
                                            role='slave',
                                            store=kwargs['storeName'],
                                            valueField=kwargs['valueFieldSlaves'][i], 
-                                           xtype='xlinkedcombobox')
+                                           xtype='xlinkedcombobox',
+                                           **extjs)
 
 
     def merge_fields(self, *fields, **kwargs):
-- 
GitLab