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

Stefan Martin s.martin at iwm-kmrc.de
Mon Apr 10 18:21:01 EDT 2006


Log message for revision 66822:
  

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

-=-
Modified: zope3org/trunk/src/zorg/multiform/actions.txt
===================================================================
--- zope3org/trunk/src/zorg/multiform/actions.txt	2006-04-10 22:19:23 UTC (rev 66821)
+++ zope3org/trunk/src/zorg/multiform/actions.txt	2006-04-10 22:20:59 UTC (rev 66822)
@@ -41,7 +41,7 @@
     ...     def handle_save_action(self, action, data):
     ...         form.applyChanges(self.context, self.form_fields,
     ...         data, self.adapters)
-    ...         self.parentForm.subFormNewInputMode[self.context.__name__]=False
+    ...         self.newInputMode = False
     ...         
     ...     @form.action(u"Upper", condition=multiform.isParentFormDisplayMode)
     ...     def handle_uppercase_action(self, action, data):
@@ -63,15 +63,13 @@
     ...     
     ...     @form.action('Edit',condition=multiform.isFormDisplayMode)
     ...     def handle_edit_action(self, action, data):
-    ...         names = sorted(self.subForms.keys())
-    ...         for name in names:
-    ...             self.subFormNewInputMode[name]=True
+    ...         for form in self.subForms.values():
+    ...             form.newInputMode = True
     ...         
     ...     @form.action('Cancel',condition=multiform.isFormInputMode)
     ...     def handle_cancel_action(self, action, data):
-    ...         names = sorted(self.subForms.keys())
-    ...         for name in names:
-    ...             self.subFormNewInputMode[name]=False
+    ...         for form in self.subForms.values():
+    ...             form.newInputMode = False
 
 
 So in our new form all widgets are display widgets per default

Modified: zope3org/trunk/src/zorg/multiform/gridform.txt
===================================================================
--- zope3org/trunk/src/zorg/multiform/gridform.txt	2006-04-10 22:19:23 UTC (rev 66821)
+++ zope3org/trunk/src/zorg/multiform/gridform.txt	2006-04-10 22:20:59 UTC (rev 66822)
@@ -33,6 +33,9 @@
 selectable items in our order grid.
 
 
+    >>> def isSelected(form,action):
+    ...     return ISelection(form.context).selected
+    
     >>> def isSelectedInput(form,action):
     ...     if not isSubFormInputMode(form,action):
     ...         return False
@@ -66,13 +69,24 @@
     ...     def handle_save_action(self, action, data):
     ...         form.applyChanges(self.context, self.form_fields,
     ...         data, self.adapters)
-    ...         self.parentForm.subFormNewInputMode[self.context.__name__]=False
+    ...         self.newInputMode = False
     ...         
     ...     @multiform.parentAction('Edit',
-    ...         condition=isSelectedDisplay)
+    ...         condition=isSelected)
     ...     def handle_edit_action(self, action, data):
-    ...         print "Edit"
-    ...         self.parentForm.subFormNewInputMode[self.context.__name__]=True
+    ...         self.newInputMode = True
+    ...
+    ...     @multiform.itemAction(u"SingleSave",
+    ...         condition=isSubFormInputMode,inputMode=True)
+    ...     def handle_save_action(self, action, data):
+    ...         form.applyChanges(self.context, self.form_fields,
+    ...         data, self.adapters)
+    ...         self.newInputMode = False
+    ...         
+    ...     @multiform.itemAction('SingleEdit',
+    ...         condition=isSubFormDisplayMode)
+    ...     def handle_edit_action(self, action, data):
+    ...         self.newInputMode = True
 
 
     >>> class OrdersForm(gridform.GridFormBase):
@@ -86,9 +100,8 @@
     ...         
     ...     @form.action('Cancel',condition=multiform.isFormInputMode)
     ...     def handle_cancel_action(self, action, data):
-    ...         names = sorted(self.subForms.keys())
-    ...         for name in names:
-    ...             self.subFormNewInputMode[name]=False
+    ...         for form in self.subForms.values():
+    ...             form.newInputMode = False
 
 Due to the reason that the ``inputMode`` attribute is ``False`` we now
 get DisplayWidgets for all fields, except the ``selected`` field
@@ -146,5 +159,24 @@
     </div>
     <div>
     <div><input... checked="checked" ... name="form.n1.selected" ... /></div>
+    <div>1</div>
     <div><input... name="form.n1.name" ...</div>
-    </div>    
\ No newline at end of file
+    </div>
+    
+Now we test the actions which are displayed in each row.
+
+    >>> request = TestRequest()
+    >>> #request.form['form.n1.actions.singleedit']=u''
+    >>> gf = OrdersForm(orderMapping,request)
+    >>> res = gf()
+    >>> [action.__name__ for action in gf.subForms['n1'].availableActions()]
+    [u'form.n1.actions.singleedit']
+
+We call the singleedit to edit a single row.
+    
+    >>> request = TestRequest()
+    >>> request.form['form.n0.selected.used']=u''
+    >>> request.form['form.n1.selected.used']=u''
+    >>> request.form['form.n1.actions.singleedit']=u''
+    >>> gf = OrdersForm(orderMapping,request)
+    >>> res = gf()  
\ No newline at end of file

Modified: zope3org/trunk/src/zorg/multiform/multiform.py
===================================================================
--- zope3org/trunk/src/zorg/multiform/multiform.py	2006-04-10 22:19:23 UTC (rev 66821)
+++ zope3org/trunk/src/zorg/multiform/multiform.py	2006-04-10 22:20:59 UTC (rev 66822)
@@ -99,10 +99,10 @@
     def __init__(self,context,request,parentForm):
         # we have to copy the default fields, so that we can mutate
         # them in our instance
-        self.form_fields=copy.deepcopy(self.__class__.form_fields)
-        self.request=request
+        self.form_fields = copy.deepcopy(self.__class__.form_fields)
+        self.request = request
         self.context = getMultiAdapter([context,self],IFormLocation)
-        self.parentForm=parentForm
+        self.parentForm = parentForm
 
     def update(self):
         super(ItemFormBase,self).update()
@@ -128,28 +128,27 @@
     inputMode = None
     newInputMode = None
     subFormInputMode = {}
-    subFormNewInputMode = {}
     selection = []
     actions = []
     
     def update(self):
-        self.initInputMode()
         self.checkInputMode()
         self.updateSelection()
         super(MultiFormBase,self).update()
-        subFormReset = False
         hasErrors = False
         for form in self.subForms.values():
             form.update()
-            if form.errors is not None:
-                hasErrors = hasErrors or form.errors
-        if hasErrors:
-            self.subFormNewInputMode = {}
-        if len(self.subFormNewInputMode) > 0:
-            for name in self.subFormNewInputMode:
-                self.setUpForm(name, self.context[name], self.subFormNewInputMode[name])
-                self.subFormInputMode[name] = self.subFormNewInputMode[name]
-            self.refreshSubActionNames()
+        for form in self.subForms.values():
+            refresh = False
+            if form.newInputMode is not None:
+                newInputMode = form.newInputMode
+                context = self.context[form.context.__name__]
+                name = context.__name__
+                self.setUpForm(name, context, newInputMode)
+                self.subFormInputMode[name] = newInputMode
+                refresh = True
+            if refresh:
+                self.refreshSubActionNames()
 
     def setUpWidgets(self, *args, **kw):
         super(MultiFormBase,self).setUpWidgets(*args,**kw)
@@ -157,21 +156,21 @@
         self.setUpForms(*args, **kw)
 
     def setUpForm(self, name, item, inputMode, *args, **kw):
-            prefix = (self.prefix and self.prefix+'.' or '') + name
-            subForm = self.newSubForm(item)
-            if inputMode is not None and not inputMode:
-                forceInput = self.itemFormFactory.forceInput
-                for field in subForm.form_fields:
-                    if field.__name__ not in forceInput:
-                        field.for_display=True
-            subForm.setPrefix(prefix)
-            subForm.setUpWidgets(*args, **kw)
-            self.subForms[name] = subForm
+        prefix = (self.prefix and self.prefix+'.' or '') + name
+        subForm = self.newSubForm(item)
+        if inputMode is not None and not inputMode:
+            forceInput = self.itemFormFactory.forceInput
+            for field in subForm.form_fields:
+                if field.__name__ not in forceInput:
+                    field.for_display=True
+        subForm.inputMode = inputMode
+        subForm.setPrefix(prefix)
+        subForm.setUpWidgets(*args, **kw)
+        self.subForms[name] = subForm
 
     def setUpForms(self, *args, **kw):
-
         for name,item in self.context.items():
-            inputMode = self.subFormInputMode.get(name, self.inputMode)
+            inputMode = self.subFormInputMode.get(name,self.itemFormFactory.inputMode)
             self.setUpForm(name, item, inputMode)
         self.refreshSubActionNames()
 
@@ -188,22 +187,6 @@
                     self.subActionNames.append(name)
                     
             
-    def setInputMode(self,v=True):
-        if self.inputMode != v:
-            self.inputMode = v
-            for form in self.subForms.values():
-                form.form_reset=True
-
-
-    def initInputMode(self):
-        self.inputMode = self.itemFormFactory.inputMode
-        if self.inputMode is None:
-            self.inputMode = False
-            for field in self.itemFormFactory.form_fields:
-                if not field.for_display:
-                    self.inputMode=True
-                    break
-
     def checkInputMode(self):
         self.subFormInputMode = {}
         inputMode = None
@@ -248,7 +231,7 @@
 
     def newSubForm(self,item):
 
-        """creates a new instance from teh itemFormFactory for
+        """creates a new instance from the itemFormFactory for
         temporary usage"""
         
         return self.itemFormFactory(item,self.request,self)



More information about the Checkins mailing list