source: main/waeup.sirp/branches/ulif-schoolgrades/src/waeup/sirp/widgets/objectwidget.py @ 7781

Last change on this file since 7781 was 7778, checked in by uli, 13 years ago

Move ResultEntry? to more general location for use by several submodules.

  • Property svn:keywords set to Id
File size: 3.3 KB
RevLine 
[7196]1## $Id: objectwidget.py 7778 2012-03-07 17:57:12Z uli $
[5275]2##
[7196]3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
[5275]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.
[7196]8##
[5275]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.
[7196]13##
[5275]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##
[5299]18"""A widget to display IObject instances in forms.
[5275]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
[5310]24from zope.interface import implements, implementsOnly
[5275]25from zope.schema import getFieldNamesInOrder
26
[7321]27class SIRPObjectWidgetView(ObjectWidgetView):
[5299]28    template = ViewPageTemplateFile('objectwidget.pt')
[5275]29
[7321]30class SIRPObjectWidget(ObjectWidget):
[5275]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):
[7321]60        return SIRPObjectWidgetView(self, request)
[5275]61
[7769]62
[7321]63class SIRPObjectDisplayWidget(SIRPObjectWidget):
[5275]64
[5310]65    implementsOnly(IDisplayWidget)
66
[5275]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()
[7769]75
76import grok
77from zope.schema.interfaces import IObject
78from zope.formlib.interfaces import IInputWidget
79from zope.publisher.interfaces.browser import IBrowserRequest
[7778]80from waeup.sirp.schoolgrades import ResultEntry
[7769]81from waeup.sirp.schema.interfaces import IMultiValObject
82
83#@grok.adapter(IObject, IBrowserRequest)
84@grok.adapter(IMultiValObject, IBrowserRequest)
85@grok.implementer(IInputWidget)
86def obj_input_widget(obj, req):
87    return SIRPObjectWidget(obj, req, ResultEntry)
88
89#@grok.adapter(IObject, IBrowserRequest)
90@grok.adapter(IMultiValObject, IBrowserRequest)
91@grok.implementer(IDisplayWidget)
92def obj_display_widget(obj, req):
93    return SIRPObjectDisplayWidget(obj, req, ResultEntry)
94#grok.adapts(IObject, IBrowserRequest)
Note: See TracBrowser for help on using the repository browser.