Extending Formulator with a derived product
I need to extend formulator functionality with a new property group, akin to 'widget' and 'validator'. Layout is a new class to give fields some positional rendering capabilities. These properties are going to live on the form fields, so the rendering for the form instances can be generic. I've got the basic mechanism working on a copy of the Formulator CVS source. However, I want to switch to deriving my product from Formulator rather than maintaining a private fork of the code. I don't know how to derive from the sophisticated Formulator class heirarchy to accomplish the changes. Can anyone suggest how to set up a derived product to do it? Thanks for any advice. Layout.py is (for now) like Widget.py, except for these changes: [Layout.py (new)] ---------------------------------------------------------------- class Layout: ... property_names = ['vertical_position', 'horizontal_position'] vertical_position = fields.StringField('vertical_position', title='Vertical Position', description=( "vertical position of field in some rendering scheme"), default="", required=0) horizontal_position = fields.StringField('horizontal_positition', title='Horizontal Position', description=( "horizontal position of field in some rendering scheme"), default="", required=0) ... LayoutInstance = Layout() [FieldRegistry.py (added)] ---------------------------------------------------------------- for field in getPropertyFields(field_class.layout): form.add_field(field, "layout") tales_field = fields.TALESField(field.id, title=field.get_value('title'), description="", default="", display_width=40, required=0) tales_form.add_field(tales_field, "layout") method_field = fields.MethodField(field.id, title=field.get_value("title"), description="", default="", required=0) override_form.add_field(method_field, "layout") These modules need to import the new module: [ListAreaTextField.py, MethodField.py, StandardFields.py, TalesField.py (changed)] ---------------------------------------------------------------- import Widget, Validator, Layout [StandardFields.py (changed)] ---------------------------------------------------------------- class StringField(ZMIField): meta_type = "StringField" widget = Widget.TextWidgetInstance validator = Validator.StringValidatorInstance layout = Layout.LayoutInstance (repeated for each field class...) [ListTextAreaField.py (changed)] ---------------------------------------------------------------- class ListTextAreaField(ZMIField): ... widget = ListTextAreaWidgetInstance validator = ListLinesValidatorInstance layout = Layout.LayoutInstance [TalesField.py (changed)] ---------------------------------------------------------------- class TALESField(ZMIField): ... widget = TALESWidgetInstance validator = TALESValidatorInstance layout = Layout.LayoutInstance And a trivial change to allow the new type to coexist with the real one: [Form.py (changed)] ---------------------------------------------------------------- class ZMIForm(ObjectManager, PropertyManager, RoleManager, Item, Form): ... meta_type = "Formulator2 Form"
participants (1)
-
Jeff Kowalczyk