[Checkins] SVN: zope3org/trunk/src/zorg/multiform/

Stefan Martin s.martin at iwm-kmrc.de
Mon Apr 10 14:58:22 EDT 2006


Log message for revision 66808:
  

Changed:
  U   zope3org/trunk/src/zorg/multiform/gridform.txt
  U   zope3org/trunk/src/zorg/multiform/multiform.py

-=-
Modified: zope3org/trunk/src/zorg/multiform/gridform.txt
===================================================================
--- zope3org/trunk/src/zorg/multiform/gridform.txt	2006-04-10 18:53:54 UTC (rev 66807)
+++ zope3org/trunk/src/zorg/multiform/gridform.txt	2006-04-10 18:58:21 UTC (rev 66808)
@@ -53,11 +53,8 @@
 
     >>> class OrderForm(gridform.GridItemFormBase):
     ...     inputMode=False
-    ...     forceInput=['selected']
-    ...     
-    ...     def __init__(self,context,request,parentForm):
-    ...         super(OrderForm,self).__init__(context,request,parentForm)
-    ...         self.form_fields = form.Fields(ISelection,IOrder,
+    ...     forceInput=['selected'] 
+    ...     form_fields = form.Fields(ISelection,IOrder,
     ...         omit_readonly=False,render_context=True)
     ...         
     ...     def template(self):
@@ -99,8 +96,9 @@
 
     >>> request = TestRequest()
     >>> gf = OrdersForm(orderMapping,request)
-    >>> print gf()
-    <div>a
+    >>> gf.update()
+    >>> print gf.render()
+    <div>
     <div><input ... name="form.n0.selected" type="checkbox" ...  /></div>
     <div>0</div>
     <div>n0</div>
@@ -115,9 +113,11 @@
 
     >>> request = TestRequest()
     >>> request.form['form.n1.selected']=u'on'
+    >>> request.form['form.n1.selected.used']=u''
     >>> gf = OrdersForm(orderMapping,request)
-    >>> print gf()
-    <div>a
+    >>> gf.update()
+    >>> print gf.render()
+    <div>
     ...
     <div><input ... checked="checked" ... name="form.n1.selected" ...</div>
     <div>1</div>

Modified: zope3org/trunk/src/zorg/multiform/multiform.py
===================================================================
--- zope3org/trunk/src/zorg/multiform/multiform.py	2006-04-10 18:53:54 UTC (rev 66807)
+++ zope3org/trunk/src/zorg/multiform/multiform.py	2006-04-10 18:58:21 UTC (rev 66808)
@@ -6,7 +6,7 @@
 from zope.formlib import form
 from zope.formlib.interfaces import IBoundAction
 from zope.formlib.i18n import _
-from interfaces import IMultiForm, IParentAction, IItemAction
+from interfaces import IMultiForm, IParentAction, IItemAction, ISelection
 from interfaces import IFormLocation,IItemForm
 import copy
 
@@ -99,7 +99,7 @@
     def __init__(self,context,request,parentForm):
         # we have to copy the default fields, so that we can mutate
         # them in our instance
-        self.__dict__['form_fields']=copy.deepcopy(self.__class__.form_fields)
+        self.form_fields=copy.deepcopy(self.__class__.form_fields)
         self.request=request
         self.context = getMultiAdapter([context,self],IFormLocation)
         self.parentForm=parentForm
@@ -129,11 +129,13 @@
     newInputMode = None
     subFormInputMode = {}
     subFormNewInputMode = {}
+    selection = []
     actions = []
     
     def update(self):
         self.initInputMode()
         self.checkInputMode()
+        self.updateSelection()
         super(MultiFormBase,self).update()
         subFormReset = False
         hasErrors = False
@@ -225,6 +227,25 @@
             for name in self.context.keys():
                 prefix = self.prefix + '.' + name + '.' + field.__name__
                 self.subFormInputMode[name] = (prefix in self.request.form)
+                
+    def updateSelection(self):
+        for field in self.itemFormFactory.form_fields:
+            if issubclass(field.field.interface,ISelection):
+                import pdb;pdb.set_trace()
+                form_fields = form.Fields(field)
+                for name,item in self.context.items():
+                    sForm = form.FormBase(getMultiAdapter([item,self],IFormLocation), self.request)
+                    prefix = (self.prefix and self.prefix+'.' or '') + name
+                    sForm.setPrefix(prefix)
+                    sForm.form_fields = form_fields
+                    sForm.setUpWidgets()
+                    data = {}
+                    try:
+                        form.getWidgetsData(sForm.widgets, sForm.prefix, data)
+                    except:
+                       pass
+                    form.applyChanges(sForm.context, sForm.form_fields, data)
+                return
 
     def newSubForm(self,item):
 
@@ -232,3 +253,4 @@
         temporary usage"""
         
         return self.itemFormFactory(item,self.request,self)
+



More information about the Checkins mailing list