Author: jmorliaguet Date: Fri Apr 14 19:14:29 2006 New Revision: 2846 Modified: cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py cpsskins/branches/jmo-perspectives/configuration/widgets/metadirectives.py cpsskins/branches/jmo-perspectives/configuration/widgets/widget.py cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.py cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.zcml cpsskins/branches/jmo-perspectives/standard/formats/widget.py Log:
- fixed the widget selector. It now uses an ordered multi-select input widget - we filter out basic widget views and widgets registered for specific engines Modified: cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py Fri Apr 14 19:14:29 2006 @@ -20,17 +20,19 @@ from zope.app.component.metaconfigure import adapter from zope.component import provideUtility from zope.configuration.exceptions import ConfigurationError +from zope.interface import classImplements from zope.i18nmessageid import MessageFactory from zope.publisher.interfaces.browser import IBrowserRequest from cpsskins import configuration from cpsskins.standard.filters.widget.interfaces import IWidgetView +from cpsskins.standard.filters.widget.interfaces import IBasicWidgetView from cpsskins.standard.formats.widget import IWidget _ = MessageFactory("cpsskins") def widget(_context=None, name=None, title=None, view=None, for_=None, - engine=u''): + engine=u'', basic=False): if not name: raise ConfigurationError("Must specify the widget's name.") @@ -45,9 +47,13 @@ if engine: widget_name = '%s-%s' % (engine, name) + if basic: + classImplements(view, IBasicWidgetView) + # register widgets provideUtility(configuration.Widget(name=name, title=title, view=view, - engine=engine), configuration.IWidget, widget_name) + engine=engine, basic=basic), configuration.IWidget, + widget_name) # zope:adapter adapter(_context=_context, factory=(view,), provides=IWidgetView, Modified: cpsskins/branches/jmo-perspectives/configuration/widgets/metadirectives.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/widgets/metadirectives.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/widgets/metadirectives.py Fri Apr 14 19:14:29 2006 @@ -20,7 +20,7 @@ from zope.configuration.fields import GlobalObject from zope.interface import Interface from zope.i18nmessageid import MessageFactory -from zope.schema import TextLine, DottedName +from zope.schema import TextLine, DottedName, Bool _ = MessageFactory("cpsskins") @@ -59,3 +59,8 @@ required=False, ) + basic = Bool( + title=_(u"Basic widget view"), + description=_(u"True if the widget provides a basic view."), + required=False, + ) Modified: cpsskins/branches/jmo-perspectives/configuration/widgets/widget.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/widgets/widget.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/widgets/widget.py Fri Apr 14 19:14:29 2006 @@ -42,14 +42,17 @@ engine = Attribute(u"The engine's name") + basic = Attribute(u"True if the widget provides a basic view") + class Widget(object): """A widget. """ implements(IWidget) - def __init__(self, name=u'', title=u'', view=None, engine=u''): + def __init__(self, name=u'', title=u'', view=None, engine=u'', basic=False): self.name = name self.title = title self.view = view self.engine = engine + self.basic = basic Modified: cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.py (original) +++ cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.py Fri Apr 14 19:14:29 2006 @@ -64,10 +64,9 @@ # Basic views to fall back to -class BasicHTMLView(WidgetView): +class PlainHTML(WidgetView): """Display the markup with minimal formatting """ - _preview = u'<div>' \ '<h1 label="H1">Header level 1</h1>' \ '<h2 label="H2">Header level 2</h2>' \ @@ -79,20 +78,20 @@ def __call__(self, markup, info, **kw): return '<div>%s</div>' % markup -class BasicImageView(WidgetView): +class PlainImage(WidgetView): """Display an image with minimal formatting """ def __call__(self, markup, info, **kw): return Image(self.context, self.request)(info.data) -class BasicItemView(WidgetView): +class PlainMenuItem(WidgetView): """Display an item with minimal formatting """ def __call__(self, markup, info, **kw): data = info.data return u'<a href="%s">%s</a>' % (data.url, data.title) -class BasicItemsView(WidgetView): +class PlainMenuItems(WidgetView): """Display a series of items with minimal formatting """ def __call__(self, markup, info, **kw): @@ -205,7 +204,7 @@ metadata = info.metadata title = metadata and metadata.title or '' return '<fieldset><legend>%s</legend>%s</fieldset>' % ( - title, BasicHTMLView(self.context, self.request)(markup, info)) + title, PlainHTML(self.context, self.request)(markup, info)) class HorizontalScrollBar(HTMLView): Modified: cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.zcml (original) +++ cpsskins/branches/jmo-perspectives/standard/filters/widget/widgets.zcml Fri Apr 14 19:14:29 2006 @@ -2,33 +2,37 @@ xmlns:zope="http://namespaces.zope.org/zope" xmlns="http://namespaces.zope.org/cpsskins"> - <!-- Plain widget views --> + <!-- Basic widget views --> <widget name="standard.plain_html" - view=".widgets.BasicHTMLView" - title="Basic HTML view" + view=".widgets.PlainHTML" + title="Plain HTML" + basic="True" /> <widget name="standard.plain_image" - view=".widgets.BasicImageView" + view=".widgets.PlainImage" for="cpsskins.standard.ds.image.IImage" - title="Basic image view" + title="Plain image" + basic="True" /> <widget - name="standard.plain_item" - view=".widgets.BasicItemView" + name="standard.plain_menuitem" + view=".widgets.PlainMenuItem" for="cpsskins.standard.ds.menuitem.IMenuItem" - title="Basic menu item view" + title="Plain menu item" + basic="True" /> <widget name="standard.plain_items" - view=".widgets.BasicItemsView" + view=".widgets.PlainMenuItems" for="cpsskins.standard.ds.menuitems.IMenuItems" - title="Basic menu items view" + title="Plain menu items" + basic="True" /> Modified: cpsskins/branches/jmo-perspectives/standard/formats/widget.py ============================================================================== --- cpsskins/branches/jmo-perspectives/standard/formats/widget.py (original) +++ cpsskins/branches/jmo-perspectives/standard/formats/widget.py Fri Apr 14 19:14:29 2006 @@ -19,12 +19,13 @@ from persistent import Persistent from zope.app.schema.interfaces import IVocabularyFactory + from zope.component import getUtilitiesFor from zope.component.factory import Factory from zope.interface import implements, implementedBy, alsoProvides from zope.i18nmessageid import MessageFactory from zope.schema.vocabulary import SimpleVocabulary -from zope.schema import List +from zope.schema import List, Choice from cpsskins import configuration from cpsskins.elements.format import Format @@ -41,6 +42,7 @@ types = List( title=_(u"Widget types"), description=_(u"The list of available widgets."), + value_type=Choice(vocabulary='Widgets'), ) IWidget.setTaggedValue('name', u'widget') @@ -64,11 +66,16 @@ "A Factory that creates Widgets") def WidgetsVocabulary(context): - """A vocabulary that contains the list of widgets in a given category. + """A vocabulary that contains the list of widgets. """ widgets = [] for id, widget in list(getUtilitiesFor(configuration.IWidget)): + # skip widgets registered for a specific engine and widgets providing + # basic views + if widget.engine or widget.basic: + continue widgets.append((_(widget.title), id)) + return SimpleVocabulary.fromItems(widgets) alsoProvides(WidgetsVocabulary, IVocabularyFactory) -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins