source: main/waeup.sirp/trunk/src/waeup/sirp/widgets/objectwidget.py @ 7878

Last change on this file since 7878 was 7795, checked in by uli, 13 years ago

Merge changes from ulif-schoolgrades back into trunk.

  • Property svn:keywords set to Id
File size: 2.6 KB
Line 
1## $Id: objectwidget.py 7795 2012-03-08 03:30:30Z uli $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""A widget to display IObject instances in forms.
19"""
20from zope.browserpage import ViewPageTemplateFile
21from zope.formlib.interfaces import IDisplayWidget
22from zope.formlib.objectwidget import ObjectWidget, ObjectWidgetView
23from zope.formlib.utility import setUpWidgets
24from zope.interface import implements, implementsOnly
25from zope.schema import getFieldNamesInOrder
26
27class SIRPObjectWidgetView(ObjectWidgetView):
28    template = ViewPageTemplateFile('objectwidget.pt')
29
30class SIRPObjectWidget(ObjectWidget):
31
32    def __init__(self, context, request, factory, **kw):
33        #super(ResultsEntryWidget, self).__init__(context, request)
34        super(ObjectWidget, self).__init__(context, request)
35
36        # define view that renders the widget
37        self.view = self._getView(request)
38
39        # factory used to create content that this widget (field)
40        # represents
41        self.factory = factory
42
43        # handle foo_widget specs being passed in
44        self.names = getFieldNamesInOrder(self.context.schema)
45        for k, v in kw.items():
46            if k.endswith('_widget'):
47                setattr(self, k, v)
48
49        # set up my subwidgets
50        self._setUpWidgets()
51
52    def subwidgets(self):
53        result = [self.getSubWidget(name) for name in self.names]
54        return result
55
56    def _setUpWidgets(self):
57        return self._setUpEditWidgets()
58
59    def _getView(self, request):
60        return SIRPObjectWidgetView(self, request)
61
62
63class SIRPObjectDisplayWidget(SIRPObjectWidget):
64
65    implementsOnly(IDisplayWidget)
66
67    def _setUpDisplayWidgets(self):
68        # subwidgets need a new name
69        setUpWidgets(self, self.context.schema, IDisplayWidget,
70                         prefix=self.name, names=self.names,
71                         context=self.context)
72
73    def _setUpWidgets(self):
74        return self._setUpDisplayWidgets()
Note: See TracBrowser for help on using the repository browser.