[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Forms/Views/Browser - FormView.py:1.7 IForm.py:1.5 configure.zcml:1.4

Stephan Richter srichter@cbu.edu
Wed, 17 Jul 2002 14:43:42 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/App/Forms/Views/Browser
In directory cvs.zope.org:/tmp/cvs-serv1727/lib/python/Zope/App/Forms/Views/Browser

Modified Files:
	FormView.py IForm.py configure.zcml 
Log Message:
Okay, I finally finished that Schema Demo code. See that 
SchemaTestObject.py file for more info.

You can also see the test page in every folder:
http://localhost:8080/testSchemaFormAction.html


=== Zope3/lib/python/Zope/App/Forms/Views/Browser/FormView.py 1.6 => 1.7 ===
 
     form = None
     custom_widgets = None
+    fields_order = None
 
     def getFields(self):
         'See Zope.App.Forms.Views.Browser.IForm.IReadForm'
@@ -41,13 +42,20 @@
         else:
             interfaces = (interfaces,)
         request = self.request
-        fields = []
+        fields = {}
         for interface in interfaces:
             for name in interface.names(1):
                 attr = interface.getDescriptionFor(name)
                 if IField.isImplementedBy(attr):
-                    fields.append(attr)
-        return fields
+                    fields[name] = attr
+
+        if self.fields_order is None:
+            return fields.values()
+
+        result = []
+        for id in self.fields_order:
+            result.append(fields[id])
+        return result
 
 
     def getWidgetForFieldId(self, id):
@@ -98,7 +106,7 @@
             try:
                 data[field] = widget.convert(mapping[field])
             except ConversionError, error:
-                errors.append((field.id, error))
+                errors.append((field, error))
 
         if errors:
             raise ConversionErrorsAll, errors
@@ -113,7 +121,7 @@
             try:
                 field.validate(mapping[field])
             except ValidationError, error:
-                errors.append((field.id, error))
+                errors.append((field, error))
 
         if errors:
             raise ValidationErrorsAll, errors
@@ -139,8 +147,8 @@
         'See Zope.App.Forms.Views.Browser.IForm.IWriteForm'
         try:
             self.saveValuesInContext()
-        except Error, e:
-            errors = e
+        except (ValidationErrorsAll, ConversionErrorsAll), e:
+            return self.form(self, errors=e)
         else:
-            return self.request.response.redirect(self.request.URL[-1])
+            return self.form(self)
         


=== Zope3/lib/python/Zope/App/Forms/Views/Browser/IForm.py 1.4 => 1.5 ===
     """This interface defines methods and attributes that are required to
     display a form."""
 
-    form = Attribute("""The form template. Usually a Page Template.""")
-    custom_widgets = Attribute("""A dictionary that holds custom widgets
-                                  for various fields.""")
+    form = Attribute(
+        """The form template. Usually a Page Template.""")
+
+    custom_widgets = Attribute(
+        """A dictionary that holds custom widgets for various fields.""")
+
+    fields_order = Attribute(
+        """A list that contains the field ids in the order they should
+        be displayed. If the value of this attribute is None, then the
+        fields are just grapped randomly out of the various schemas.
+
+        Furthermore, if fields are specified then only these fields are
+        used for the form, not all that could be possibly found.
+        """)
 
     def getFields():
         """Get all the fields that need input from the content object."""


=== Zope3/lib/python/Zope/App/Forms/Views/Browser/configure.zcml 1.3 => 1.4 ===
   <browser:view
       permission="Zope.View"
       for="Schema.IField.IStr"
-      name="normal"
-      factory=".TextWidget." />
+      name="widget"
+      factory=".Widget.TextWidget." />
+
+  <browser:view
+      permission="Zope.View"
+      for="Schema.IField.IInt"
+      name="widget"
+      factory=".Widget.TextWidget." />
+
+  <browser:view
+      permission="Zope.View"
+      for="Schema.IField.IFloat"
+      name="widget"
+      factory=".Widget.TextWidget." />
 
   <browser:view
       permission="Zope.View"
       for="Schema.IField.IBool"
-      name="normal"
-      factory=".CheckboxWidget." />
+      name="widget"
+      factory=".Widget.CheckBoxWidget." />
 
-  <!-- Test view for folders -->
+  <browser:view
+      permission="Zope.View"
+      for="Schema.IField.ITuple"
+      name="widget"
+      factory=".Widget.TextAreaWidget." />
+
+  <browser:view
+      permission="Zope.View"
+      for="Schema.IField.IList"
+      name="widget"
+      factory=".Widget.TextAreaWidget." />
 
-   <browser:view
-       permission="Zope.View" 
-       for="Zope.App.OFS.Content.Folder.Folder.IFolder."  
-       factory=".FormView.">
-       <browser:page name="testFormView.html"
-        template="testFormView.pt" />
-   </browser:view>
+  <!-- Insert a simple test/demo -->
 
+  <include package=".tests" file="testConfigure.zcml" />
   
 </zopeConfigure>