Author: jmorliaguet
Date: Sat Dec 10 14:33:41 2005
New Revision: 2004

Removed:
   cpsskins/branches/jmo-perspectives/configuration/formats/format.py
   cpsskins/branches/jmo-perspectives/engines/default/formats/interfaces.py
Modified:
   cpsskins/branches/jmo-perspectives/browser/editing/views.py
   cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py
   cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py
   
cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py
   
cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py
   cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py
   cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py
   cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py
   cpsskins/branches/jmo-perspectives/elements/configure.zcml
   cpsskins/branches/jmo-perspectives/elements/format.py
   cpsskins/branches/jmo-perspectives/elements/interfaces.py
   cpsskins/branches/jmo-perspectives/elements/presentation.py
   cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml
   cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py
   
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js
   
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt
   cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py
   cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml
   cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py
   cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py
   cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py
   cpsskins/branches/jmo-perspectives/engines/default/formats/style.py
   cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py
   cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml
   cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml
   cpsskins/branches/jmo-perspectives/portlets/configure.zcml
   cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml
   cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml
   cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml
   cpsskins/branches/jmo-perspectives/portlets/image/portlet.py
   cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml
   cpsskins/branches/jmo-perspectives/relations/configure.zcml
   cpsskins/branches/jmo-perspectives/thememanager.py
Log:

- some simplifications:

  - we use persistent mapping instead of BTreeContainer when all
    we need is a mapping

  - the IFormat interface now has a 'type' attribute (this will
    be used for typing)

  - the format's 'id' was renamed to 'type'

  - fixes




Modified: cpsskins/branches/jmo-perspectives/browser/editing/views.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/browser/editing/views.py (original)
+++ cpsskins/branches/jmo-perspectives/browser/editing/views.py Sat Dec 10 
14:33:41 2005
@@ -178,7 +178,7 @@
     def createSetting(title):
         """Create a setting from an object considered as a resource."""
 
-    def useSettingAsFormat(setting_name, format_type):
+    def useSettingAsFormat(setting_name):
         """Replace an existing format with a setting."""
 
 class SettingsView(BrowserView):
@@ -198,30 +198,29 @@
         target = self.request.get('HTTP_REFERER', '.')
         self.request.response.redirect(target)
 
-    def useSettingAsFormat(self, setting_name=u'', format_type=u''):
-        """Use a setting specified by its name ('setting_name') as a format
-        of type 'format_type' (e.g. 'style', 'widget').
+    def useSettingAsFormat(self, name=u''):
+        """Use a setting specified by its name ('name') as a format
 
         The context is the display
 
         """
         context = self.context
-        if not setting_name:
+        if not name:
             raise KeyError("Must specify a setting's name.")
 
-        if not format_type:
-            raise KeyError("Must specify a format type.")
-
         if not IDisplay.providedBy(context):
             raise ValueError("The context must be a display.")
 
-        setting = queryUtility(ISetting, setting_name)
+        setting = queryUtility(ISetting, name)
         if setting is None:
-            raise KeyError("No such setting: '%s'." % setting_name)
+            raise KeyError("No such setting: '%s'." % name)
 
         # remove existing display -- format relation
         reltool = IRelationTool(context)
-        predicate = getUtility(configuration.IFormat, format_type).predicate
+
+        resource = IResource(setting).getResource()
+        format_type = queryType(resource, IContentType)
+        predicate = format_type.getTaggedValue('predicate')
 
         old_rel = reltool.search(first=context, predicate=predicate)
         reltool.remove(old_rel)

Modified: 
cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py   
(original)
+++ cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py   
Sat Dec 10 14:33:41 2005
@@ -24,6 +24,7 @@
 from zope.app.content.interfaces import IContentType
 from zope.configuration.exceptions import ConfigurationError
 from zope.component import queryUtility, provideUtility
+from zope.component.interfaces import IFactory
 from zope.interface import alsoProvides
 
 from cpsskins import configuration
@@ -33,7 +34,8 @@
 def getAbsolutePath(_context, file):
     return os.path.abspath(str(_context.path(file)))
 
-def format(_context, name='', schema=None, factory=None, predicate=None):
+def format(_context, name=u'', schema=None, class_=None, factory=None,
+           predicate=None):
 
     if not name:
         raise ConfigurationError("Must specify the format name.")
@@ -42,16 +44,15 @@
         raise ConfigurationError(
             "Format names can only contain alphabetic characters.")
 
-    if not (schema or factory):
-        raise ConfigurationError("Format information is missing.")
+    if queryUtility(IFactory, name) is not None:
+        raise ConfigurationError(
+            "A format with the name '%s' has already been registered." % name)
 
-    if queryUtility(configuration.IFormat, name) is not None:
-        raise ConfigurationError, \
-            "A format with the name '%s' has already been registered." % name
+    if not class_:
+        raise ConfigurationError("Must specify the format content class.")
 
     if not schema:
-        raise ConfigurationError, \
-            "Must specify the format schema."
+        raise ConfigurationError("Must specify the format schema.")
 
     if not factory:
         raise ConfigurationError("Must specify a format factory.")
@@ -60,7 +61,7 @@
         raise ConfigurationError("Must specify a format predicate.")
 
     # zope:content
-    c = ContentDirective(_context=_context, class_=factory)
+    c = ContentDirective(_context=_context, class_=class_)
     c.implements(_context=_context,interface=(IAttributeAnnotatable,))
     c.require(_context=_context,
         permission="zope.View",
@@ -70,8 +71,7 @@
         set_schema=(schema,))
 
     # register the format
-    provideUtility(configuration.Format(factory=factory, predicate=predicate),
-                   configuration.IFormat, name)
+    provideUtility(factory, IFactory, name)
 
     # register the predicate
     provideUtility(FormatPredicate(predicate), IFormatPredicate, name)
@@ -80,4 +80,6 @@
     alsoProvides(schema, IContentType)
     alsoProvides(IFormat, IElementType)
 
+    # set tagged values
     schema.setTaggedValue('name', name)
+    schema.setTaggedValue('predicate', predicate)

Modified: 
cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py  
(original)
+++ cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py  
Sat Dec 10 14:33:41 2005
@@ -39,6 +39,12 @@
         required=False,
         )
 
+    class_ = GlobalObject(
+        title=_("Class"),
+        description=_("The format's content class."),
+        required=False,
+        )
+
     factory = GlobalObject(
         title=_("Factory"),
         description=_("The format's factory."),

Modified: 
cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py
==============================================================================
--- 
cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py 
    (original)
+++ 
cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py 
    Sat Dec 10 14:33:41 2005
@@ -36,8 +36,8 @@
     def display(self, _context, type):
         self._display = type
 
-    def format(self, _context, name, id=''):
-        self._formats[name] = id
+    def format(self, _context, name, type=u''):
+        self._formats[name] = type
 
     def __call__(self):
 

Modified: 
cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py
==============================================================================
--- 
cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py
    (original)
+++ 
cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py
    Sat Dec 10 14:33:41 2005
@@ -45,13 +45,13 @@
 
     name = TextLine(
         title=_("Name"),
-        description=_("The format's name"),
+        description=_("The format's name (e.g. 'style', 'widget')"),
         required=False,
        )
 
-    id = TextLine(
-        title=_("Id"),
-        description=_("The format's id"),
+    type = TextLine(
+        title=_("Type"),
+        description=_("The format's type id."),
         required=False,
        )
 

Modified: 
cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py  
(original)
+++ cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py  
Sat Dec 10 14:33:41 2005
@@ -23,7 +23,7 @@
 
 from cpsskins.storage.interfaces import IStorage
 
-def storage(_context, id=None, title=None, description=None, factory=None,
+def storage(_context, id=None, title=None, description=None, class_=None,
            interface=None):
 
     if not id:
@@ -35,14 +35,14 @@
     if not description:
         raise ConfigurationError("Must specify a storage description.")
 
-    if not factory:
-        raise ConfigurationError("Must specify a storage factory.")
+    if not class_:
+        raise ConfigurationError("Must specify a storage content class.")
 
     if not interface:
         interface = IStorage
 
     # zope:content
-    c = ContentDirective(_context=_context, class_=factory)
+    c = ContentDirective(_context=_context, class_=class_)
     c.factory(_context=_context, title=title, description=description) 
     c.allow(_context=_context,
         interface=(IReadContainer, interface))

Modified: 
cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py 
(original)
+++ cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py 
Sat Dec 10 14:33:41 2005
@@ -46,9 +46,9 @@
         default=u'',
         )
 
-    factory = GlobalObject(
-        title=_("Factory"),
-        description=_("Factory for creating the storage."),
+    class_ = GlobalObject(
+        title=_("Class"),
+        description=_("Content class for the storage"),
         required=False,
         )
 

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   
Sat Dec 10 14:33:41 2005
@@ -25,7 +25,7 @@
 
 from cpsskins import configuration
 from cpsskins.engines.default.filters.widget.interfaces import IWidgetView
-from cpsskins.engines.default.formats.interfaces import IWidget
+from cpsskins.engines.default.formats.widget import IWidget
 
 _ = MessageFactory("cpsskins")
 

Modified: cpsskins/branches/jmo-perspectives/elements/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/configure.zcml  (original)
+++ cpsskins/branches/jmo-perspectives/elements/configure.zcml  Sat Dec 10 
14:33:41 2005
@@ -184,11 +184,6 @@
         interface=".interfaces.IPageBlockContainer"
         />
 
-    <factory
-        id="themepage.ThemePage"
-        title="Page"
-        description="A Page" />
-
     <require
         permission="zope.View"
         interface=".interfaces.IThemePage"
@@ -210,12 +205,12 @@
 
     <cpsskins:format
         name="layout"
-        id="page"
+        type="page"
     />
 
     <cpsskins:format
         name="widget"
-        id="page_body"
+        type="page_body"
     />
 
     <cpsskins:format
@@ -246,11 +241,6 @@
         interface=".interfaces.ICellContainer"
         />
 
-    <factory
-        id="pageblock.PageBlock"
-        title="Page Block"
-        description="A Page Block" />
-
     <require
         permission="zope.View"
         interface=".interfaces.IPageBlock"
@@ -272,12 +262,12 @@
 
     <cpsskins:format
         name="layout"
-        id="container"
+        type="container"
     />
 
     <cpsskins:format
         name="widget"
-        id="table_frame"
+        type="table_frame"
     />
 
     <cpsskins:format
@@ -309,11 +299,6 @@
         interface=".interfaces.IPortletOrSlotContainer"
         />
 
-    <factory
-        id="cell.Cell"
-        title="Cell"
-        description="A Cell" />
-
     <require
         permission="zope.View"
         interface=".interfaces.ICell"
@@ -335,12 +320,12 @@
 
     <cpsskins:format
         name="layout"
-        id="container"
+        type="container"
     />
 
     <cpsskins:format
         name="widget"
-        id="table_cell"
+        type="table_cell"
     />
 
     <cpsskins:format
@@ -378,11 +363,6 @@
         interface=".interfaces.IPortletContainer"
         />
 
-    <factory
-        id="slot.Slot"
-        title="Slot"
-        description="A Slot" />
-
     <require
         permission="zope.View"
         interface=".interfaces.ISlot"
@@ -404,12 +384,12 @@
 
     <cpsskins:format
         name="effect"
-        id="scale"
+        type="scale"
     />
 
     <cpsskins:format
         name="widget"
-        id="frame_box"
+        type="frame_box"
     />
 
     <cpsskins:format
@@ -442,7 +422,7 @@
 
     <cpsskins:format
         name="widget"
-        id="plain_html"
+        type="plain_html"
     />
 
     <cpsskins:format

Modified: cpsskins/branches/jmo-perspectives/elements/format.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/format.py       (original)
+++ cpsskins/branches/jmo-perspectives/elements/format.py       Sat Dec 10 
14:33:41 2005
@@ -17,17 +17,20 @@
 """
 __docformat__ = "reStructuredText"
 
+from zope.app.content.interfaces import IContentType
 from zope.app.location.pickling import locationCopy
+from zope.app.interface import queryType
 from zope.app.traversing.interfaces import IPathAdapter, ITraversable
 from zope.component import getUtility, queryUtility
+from zope.component.interfaces import IFactory
 from zope.interface import implements
 from zope.security.proxy import removeSecurityProxy
 
 from cpsskins import configuration
 from cpsskins.elements import Element
 from cpsskins.elements.interfaces import IType, IFormat, IFormattable
-from cpsskins.engines.default.formats.interfaces import IFormatStorage
-from cpsskins.ontology import hasFormat
+from cpsskins.engines.default.formats.storage import IFormatStorage
+from cpsskins.ontology import hasFormat, IFormatPredicate
 from cpsskins.relations import DyadicRelation
 from cpsskins.relations.interfaces import IRelationTool
 from cpsskins.setup.interfaces import IResource, ISetting
@@ -36,8 +39,10 @@
 
     implements(IFormat)
 
-    def __init__(self, id=u''):
-        self.id = id
+    type = u''
+
+    def __init__(self, type=u''):
+        self.type = type
 
     def _getFormatName(self):
         return IType(self).getContentType().getTaggedValue('name')
@@ -95,7 +100,7 @@
     def traverse(self, name, remaining):
         context = self.context
         # get a format by name
-        if queryUtility(configuration.IFormat, name) is not None:
+        if name in ('layout', 'style', 'widget', 'effect'):
             return self.getFormat(name)
         # return a method of the adapter
         return getattr(self, name)
@@ -109,18 +114,17 @@
         return formats.remove(format)
 
     def getFormats(self, name=u'', resolve=True):
+        formats = []
         context = self.context
         reltool = IRelationTool(context)
-        format = queryUtility(configuration.IFormat, name)
-        predicate = format and format.predicate or hasFormat
-        formats = []
+        predicate = self.getPredicate(name)
         for format in reltool.getSeconds(first=context, predicate=predicate):
             if resolve and ISetting.providedBy(format):
                 format = IResource(format).getResource()
             formats.append(format)
         return formats
 
-    def getFormat(self, name=''):
+    def getFormat(self, name=u''):
         res = self.getFormats(name)
         if res:
             return res[0]
@@ -133,8 +137,10 @@
         names.sort()
         return names
 
-    def addFormat(self, name='', id=''):
-        format = self.factory(name, id)
+    def addFormat(self, name=u'', type=u''):
+        factory = getUtility(IFactory, name)
+        format = factory()
+        format.type = type
         self.storeFormat(format)
         return self.setFormat(format)
 
@@ -147,8 +153,7 @@
         context = self.context
         reltool = IRelationTool(context)
 
-        predicate = getUtility(configuration.IFormat,
-                               format.formatname).predicate
+        predicate = self.getPredicate(format.formatname)
         relations = reltool.search(first=context, predicate=predicate)
         reltool.remove(relations)
 
@@ -162,10 +167,7 @@
         new_format = locationCopy(removeSecurityProxy(format))
         return self.storeFormat(new_format)
 
-    def factory(self, name='', id=''):
-        """Display factory. Return a display element.
-        """
-        context = self.context
-        factory = getUtility(configuration.IFormat, name).factory
-        return factory(id=id)
-
+    def getPredicate(self, name=u''):
+        if not name:
+            return hasFormat
+        return queryUtility(IFormatPredicate, name).predicate

Modified: cpsskins/branches/jmo-perspectives/elements/interfaces.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/interfaces.py   (original)
+++ cpsskins/branches/jmo-perspectives/elements/interfaces.py   Sat Dec 10 
14:33:41 2005
@@ -113,6 +113,8 @@
 
     formatname = Attribute(u"Format name")
 
+    type = Attribute("The type of format.")
+
     def findDisplays():
         """ """
 

Modified: cpsskins/branches/jmo-perspectives/elements/presentation.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/elements/presentation.py (original)
+++ cpsskins/branches/jmo-perspectives/elements/presentation.py Sat Dec 10 
14:33:41 2005
@@ -62,8 +62,8 @@
         if factory_info is None:
             factory_info = queryUtility(configuration.IPresentation,
                                     str(IType(context).getElementType()))
-        for type, id in factory_info.formats.items():
-            formattable.addFormat(type, id)
+        for name, type in factory_info.formats.items():
+            formattable.addFormat(name=name, type=type)
 
     def clonePresentation(self, perspective=None):
         """Clone the default presentation of an element.
@@ -96,7 +96,7 @@
         displayable = IDisplayable(context)
         display = displayable.removeDisplay(perspective)
 
-    def customizeFormat(self, name='', perspective=None):
+    def customizeFormat(self, name=u'', perspective=None):
         """Customize a format in a given perspective.
         """
         if perspective is None:
@@ -112,13 +112,13 @@
         current_format = formattable.getFormat(name)
         format = formattable.cloneFormat(current_format)
 
-        format = getUtility(configuration.IFormat, name)
-        relations = reltool.search(first=display, predicate=format.predicate)
+        predicate = getUtility(IFormatPredicate, name).predicate
+        relations = reltool.search(first=display, predicate=predicate)
         reltool.remove(relations)
 
         formattable.setFormat(format)
 
-    def uncustomizeFormat(self, name='', perspective=None):
+    def uncustomizeFormat(self, name=u'', perspective=None):
         """Uncustomize a format in a given perspective.
         """
         if perspective is None:

Modified: 
cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml  
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml  
Sat Dec 10 14:33:41 2005
@@ -10,7 +10,7 @@
       id="displays"
       title="Display storage"
       description="A display storage"
-      factory=".storage.DisplayStorage"
+      class=".storage.DisplayStorage"
   />
 
   <!-- Area display -->

Modified: 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py 
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py 
Sat Dec 10 14:33:41 2005
@@ -69,7 +69,7 @@
         if k in self.context:
             del self.context[k]
 
-    def getFieldRange(self, widget_id, sel):
+    def getFieldRange(self, widget_type, sel):
         # TODO: this is for testing
         return {
             'color': [],
@@ -81,9 +81,9 @@
             'border': ['1px solid #f0f0f0', 'none', '1px inset gray'],
             }
 
-    def renderPreview(self, widget_id):
+    def renderPreview(self, widget_type):
         """Render a style preview based on the specified widget"""
 
-        widget = getUtility(configuration.IWidget, widget_id)
+        widget = getUtility(configuration.IWidget, widget_type)
         return widget.factory(None, None).renderPreview()
 

Modified: 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js
==============================================================================
--- 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js
    (original)
+++ 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js
    Sat Dec 10 14:33:41 2005
@@ -13,7 +13,7 @@
 var clientWidgetStyle = null    // the widget style (client-side)
 var serverWidgetStyle = null    // the widget style (server-side)
 
-var widget_id = null            // current widget
+var widget_type = null            // current widget
 
 var selector = null             // the current selector (e.g. "ul li")
 var selector_schema = null      // the current selector's schema
@@ -47,12 +47,12 @@
   }
 }
 
-function get_widget_id() {
-  return widget_id;
+function get_widget_type() {
+  return widget_type;
 }
 
-function set_widget_id(id) {
-  widget_id = id;
+function set_widget_type(type) {
+  widget_type = type;
 }
 
 function get_widget_area() {
@@ -118,7 +118,7 @@
   var elems, selector_style;
 
   // Draw the preview area
-  style_preview = serverWidgetStyle.renderPreview(get_widget_id());
+  style_preview = serverWidgetStyle.renderPreview(get_widget_type());
   replaceHTML(widget_area, style_preview);
 
   // Set the widget area element
@@ -144,7 +144,7 @@
 
 function create_form() {
   var sel = get_selector();
-  var widget = get_widget_id();
+  var widget = get_widget_type();
   var props = clientWidgetStyle[sel];
 
   selector_schema = serverWidgetStyle.getFieldRange(widget, sel);
@@ -270,8 +270,8 @@
        widget_selector.onchange = select_widget;
 }
 
-function setupEditor(widget_id) {
-    set_widget_id(widget_id);
+function setupEditor(widget_type) {
+    set_widget_type(widget_type);
 
     // Open a JSON-RPC connection for this style
     serverWidgetStyle = jsonrpcConnect(addr=".",

Modified: 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt
==============================================================================
--- 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt
    (original)
+++ 
cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt
    Sat Dec 10 14:33:41 2005
@@ -23,7 +23,7 @@
    tal:define="displays context/findDisplays;
                display python: displays[0];
                widget display/formattable:widget;
-               widget_id widget/id">
+               widget_type widget/type">
 
     <div class="editArea">
       <h1>Style editor</h1>
@@ -58,7 +58,7 @@
 
     <!-- Set up the editor -->
     <script type="text/javascript"
-            tal:content="string:setupEditor('${widget_id}')" />
+            tal:content="string:setupEditor('${widget_type}')" />
 
   </body>
 </html>

Modified: 
cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py
==============================================================================
--- 
cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py   
    (original)
+++ 
cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py   
    Sat Dec 10 14:33:41 2005
@@ -26,7 +26,7 @@
 from zope.i18nmessageid import MessageFactory
 
 from cpsskins.browser.rendering.interfaces import IFilterView
-from cpsskins.engines.default.formats.interfaces import IWidget
+from cpsskins.engines.default.formats.widget import IWidget
 from cpsskins.engines.default.filters.widget.interfaces import (
                                                  IBasicWidgetView, IWidgetView)
 
@@ -51,11 +51,11 @@
         context = self.context
         request = info.globals.request
 
-        widget_id = context.id
-        if widget_id is None:
+        widget_type = context.type
+        if not widget_type:
             logger.log(INFO,
                 "'%s' cannot be displayed. Widget '%s' is unknown."
-                % (repr(info.element), widget_id)
+                % (repr(info.element), widget_type)
                 )
             return markup
 
@@ -64,7 +64,7 @@
         factory = queryMultiAdapter(
             objects=(context, request),
             interface=IWidgetView,
-            name=widget_id,
+            name=widget_type,
             )
 
         if factory is None:
@@ -72,7 +72,7 @@
                 "'%s' with data '%s' could not be displayed "
                 "with the specified widget ('%s'). "
                 "Falling back to the basic widget view."
-                % (repr(info.element), repr(data), widget_id))
+                % (repr(info.element), repr(data), widget_type))
             factory = queryMultiAdapter(objects=(data, request),
                                         interface=IBasicWidgetView)
 

Modified: 
cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml   
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml   
Sat Dec 10 14:33:41 2005
@@ -4,43 +4,42 @@
     xmlns:cpsskins="http://namespaces.zope.org/cpsskins";>
 
   <!-- Format storage -->
-
   <cpsskins:storage
       id="formats"
       title="Format storage"
       description="A format storage"
-      factory=".storage.FormatStorage"
+      class=".storage.FormatStorage"
   />
 
   <!-- Layout -->
-
   <cpsskins:format
       name="layout"
-      factory=".layout.Layout"
       schema=".layout.ILayout"
+      class=".layout.Layout"
+      factory=".layout.LayoutFactory"
       predicate=".layout.hasLayout"
   />
 
   <!-- Style -->
-
   <cpsskins:format
       name="style"
-      factory=".style.Style"
       schema=".style.IStyle"
+      class=".style.Style"
+      factory=".style.StyleFactory"
       predicate=".style.hasStyle"
   />
 
-  <!-- register the 'style' XML directive -->
+  <!-- Setting -->
   <cpsskins:setting
       name="style"
+      schema=".style.IStyle"
       factory=".style.StyleFactory"
-      schema=".interfaces.IStyle"
   />
 
   <!-- XML export -->
   <browser:page
       name="exporter"
-      for=".interfaces.IStyle"
+      for=".style.IStyle"
       class=".style.Exporter"
       permission="zope.ManageContent"
       template="style.xml"
@@ -52,11 +51,11 @@
   />
 
   <!-- Widget -->
-
   <cpsskins:format
       name="widget"
-      factory=".widget.Widget"
-      schema="cpsskins.engines.default.formats.interfaces.IWidget"
+      schema=".widget.IWidget"
+      class=".widget.Widget"
+      factory=".widget.WidgetFactory"
       predicate=".widget.hasWidget"
   />
 
@@ -66,11 +65,11 @@
   />
 
   <!-- Effect -->
-
   <cpsskins:format
       name="effect"
-      factory=".effect.Effect"
       schema=".effect.IEffect"
+      class=".effect.Effect"
+      factory=".effect.EffectFactory"
       predicate=".effect.hasEffect"
   />
 

Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py        
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py        
Sat Dec 10 14:33:41 2005
@@ -18,6 +18,7 @@
 __docformat__ = "reStructuredText"
 
 from persistent import Persistent
+from zope.component.interfaces import IFactory
 from zope.interface import implements
 from zope.i18nmessageid import MessageFactory
 from zope.schema import Choice, Int, Bool
@@ -33,9 +34,9 @@
 class IEffect(IFormat):
     """An effect"""
 
-    id = Choice(
+    type = Choice(
         title=_("Effect"),
-        description=_("The effect to apply."),
+        description=_("The type of effect to apply."),
         vocabulary="effects by type")
 
     format = Choice(
@@ -66,17 +67,28 @@
     """
     implements(IEffect)
 
-    def __init__(self, id='', format='PNG', width=0, height=0,
-                 keep_ratio=True):
-        Format.__init__(self, id=id)
+    def __init__(self, format=u'PNG', width=0, height=0, keep_ratio=True, 
**kw):
+        super(Effect, self).__init__(**kw)
         self.format = format
         self.width = width
         self.height = height
         self.keep_ratio = keep_ratio
 
     def __repr__(self):
-        return "Effect('%s')" % self.getEffectId()
+        return "<Effect of type: %s>" % self.type
 
-    def getEffectId(self):
-        return self.id
+class EffectFactory(object):
+
+    implements(IFactory)
+
+    title = "Effect Factory"
+    description = "A Factory that creates Effects"
+
+    def __call__(self):
+        return Effect()
+
+    def getInterfaces(self):
+        return implementedBy(Effect)
+
+EffectFactory = EffectFactory()
 

Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py        
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py        
Sat Dec 10 14:33:41 2005
@@ -17,10 +17,14 @@
 """
 __docformat__ = "reStructuredText"
 
+from persistent.mapping import PersistentMapping
+
 from zope.app.container.btree import BTreeContainer
 from zope.app.container.interfaces import IContainer
 from zope.app.traversing.interfaces import ITraversable
+from zope.component.interfaces import IFactory
 from zope.interface import implements
+from zope.interface.common.mapping import IMapping
 from zope.interface.interfaces import IInterface
 
 from cpsskins.elements.format import Format
@@ -29,33 +33,27 @@
 
 hasLayout = Predicate('_ has layout _')
 
-class ILayout(IFormat, IContainer):
+class ILayout(IFormat, IMapping):
     """A layout element"""
 
     def traverse(name, remaining):
        """Get a layout attribute by traversal."""
 
-class ILayoutType(IInterface):
-    """The layout type categorizes layout elements."""
-
-class Layout(BTreeContainer, Format):
+class Layout(Format, PersistentMapping):
     """A layout is used to format layout elements (cells, blocks, etc)
 
     >>> layout = Layout('container')
     >>> layout
     Layout('container')
 
-    >>> layout._getAllowedKeys()
-    ['width', 'text-align', 'height']
-
     >>> dict(layout.items())
     {}
 
-    >>> layout['width'] = '1em'
+    >>> layout[u'width'] = u'1em'
     >>> dict(layout.items())
     {u'width': '1em'}
 
-    >>> layout['unknown'] = ''
+    >>> layout[u'unknown'] = u''
     Traceback (most recent call last):
     ...
     KeyError: "The 'unknown' attribute is not allowed in this layout."
@@ -63,51 +61,40 @@
     """
     implements(ILayout, ITraversable)
 
-    __super_setitem = BTreeContainer.__setitem__
+    __super_setitem = PersistentMapping.__setitem__
 
-    def __init__(self, id=u''):
-        super(Layout, self).__init__()
-        self.id = id
+    def __init__(self, **kw):
+        super(Layout, self).__init__(**kw)
+        self.data = PersistentMapping()
 
     def __repr__(self):
-        return "Layout('%s')" % self.id
+        return "<Layout of type: %s>" % self.type
 
     def traverse(self, name, remaining):
-        if name in self._getAllowedKeys():
-            return str(self.get(name, ''))
+        if name in self:
+            return str(self[name])
         return getattr(self, name, None)
 
     def __setitem__(self, k, v):
         if not isinstance(v, basestring):
             raise TypeError, \
                 """Only strings can be stored in the layout objects."""
-        if k not in self._getAllowedKeys():
-            raise KeyError, \
-               "The '%s' attribute is not allowed in this layout." % k
         if k in self:
             del self[k]
         self.__super_setitem(k, v)
 
-    def _getAllowedKeys(self):
-        return layouts[self.id].keys()
+class LayoutFactory(object):
+
+    implements(IFactory)
+
+    title = "Layout Factory"
+    description = "A Factory that creates Layouts"
+
+    def __call__(self):
+        return Layout()
+
+    def getInterfaces(self):
+        return implementedBy(Layout)
 
-    def factory(self, type='', id=''):
-        """Display factory. Return a display element.
-        """
-        context = self.context
-        factory = format_factories[type]
-        return apply(factory, (), {'id': id})
-
-# TODO this should not be hardcoded
-layouts = {
-    'page': {
-        'margin': [],
-        },
-
-    'container': {
-        'width': [],
-        'height': [],
-        'text-align': ['left', 'center', 'right'],
-        }
-}
+LayoutFactory = LayoutFactory()
 

Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py       
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py       
Sat Dec 10 14:33:41 2005
@@ -17,10 +17,15 @@
 """
 __docformat__ = "reStructuredText"
 
+from zope.app.container.constraints import contains
 from zope.interface import implements
 
+from cpsskins.elements.interfaces import IFormat
 from cpsskins.storage import Storage
-from cpsskins.engines.default.formats.interfaces import IFormatStorage
+from cpsskins.storage.interfaces import IStorage
+
+class IFormatStorage(IStorage):
+    contains(IFormat)
 
 class FormatStorage(Storage):
     """A BTree-based display container"""

Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/style.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/formats/style.py 
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/style.py Sat Dec 
10 14:33:41 2005
@@ -26,10 +26,11 @@
 from zope.component import adapts
 from zope.component.interfaces import IFactory
 from zope.interface import implements
+from zope.interface.common.mapping import IMapping
 from zope.i18nmessageid import MessageFactory
 
+from cpsskins.elements.interfaces import IFormat
 from cpsskins.elements.format import Format
-from cpsskins.engines.default.formats.interfaces import IStyle
 from cpsskins.relations import Predicate
 from cpsskins.setup.interfaces import IResourceExporter, IResourceImporter
 
@@ -37,6 +38,9 @@
 
 hasStyle = Predicate('_ has style _')
 
+class IStyle(IFormat, IMapping):
+    """A style"""
+
 class Style(Format, PersistentMapping):
     """A style is a collection of properties
 
@@ -106,12 +110,12 @@
     __super_get = PersistentMapping.get
     __super_keys = PersistentMapping.keys
 
-    def __init__(self, id=''):
-        super(Style, self).__init__(id=id)
+    def __init__(self, **kw):
+        super(Style, self).__init__(**kw)
         self.data = PersistentMapping()
 
     def __repr__(self):
-        return "Style('%s')" % self.id
+        return "<Style of type: %s>" % self.type
 
     def _wrap(self, k):
         if k == u'':
@@ -138,6 +142,9 @@
     def __delitem__(self, k):
         return self.__super_delitem(self._wrap(k))
 
+    def __iter__(self):
+        return iter(self.data)
+
     def keys(self):
         return [self._unwrap(k) for k in self.__super_keys()]
 

Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py        
(original)
+++ cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py        
Sat Dec 10 14:33:41 2005
@@ -19,20 +19,31 @@
 
 from persistent import Persistent
 from zope.component import getUtilitiesFor
+from zope.component.interfaces import IFactory
 from zope.interface import implements
 from zope.i18nmessageid import MessageFactory
 from zope.schema.vocabulary import SimpleVocabulary
+from zope.schema import Choice
 
 from cpsskins import configuration
 from cpsskins.elements.format import Format
+from cpsskins.elements.interfaces import IFormat
 from cpsskins.relations import Predicate
-from cpsskins.engines.default.formats.interfaces import IWidget
 
 hasWidget = Predicate('_ has widget _')
 
 _ = MessageFactory("cpsskins")
 
-class Widget(Format, Persistent):
+class IWidget(IFormat):
+    """A presentation widget"""
+
+    type = Choice(
+        title=_("Widget"),
+        description=_("The type of widget."),
+        vocabulary="Widgets",
+        )
+
+class Widget(Persistent, Format):
     """A presentation element is used to present data with help of widgets.
 
     >>> widget = Widget('plain')
@@ -41,12 +52,26 @@
     """
     implements(IWidget)
 
-    def __init__(self, id=u'', title=u''):
-        self.id = id
-        self.title = title
+    def __init__(self, type=u''):
+        self.type = type
 
     def __repr__(self):
-        return "Widget('%s')" % self.id
+        return "Widget('%s')" % self.type
+
+class WidgetFactory(object):
+
+    implements(IFactory)
+
+    title = "Widget Factory"
+    description = "A Factory that creates Widgets"
+
+    def __call__(self):
+        return Widget()
+
+    def getInterfaces(self):
+        return implementedBy(Widget)
+
+WidgetFactory = WidgetFactory()
 
 def WidgetsVocabulary(context):
     """A vocabulary that contains the list of widgets in a given category.
@@ -55,3 +80,4 @@
     for id, widget in list(getUtilitiesFor(configuration.IWidget)):
         widgets.append((_(widget.title), id))
     return SimpleVocabulary.fromItems(widgets)
+

Modified: cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml  
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml  Sat Dec 
10 14:33:41 2005
@@ -25,7 +25,7 @@
 
     <format
         name="widget"
-        id="vertical_menu"
+        type="vertical_menu"
     />
 
     <format

Modified: cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml      
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml      
Sat Dec 10 14:33:41 2005
@@ -27,7 +27,7 @@
 
     <format
         name="widget"
-        id="horizontal_trail"
+        type="horizontal_trail"
     />
 
     <format

Modified: cpsskins/branches/jmo-perspectives/portlets/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/configure.zcml  (original)
+++ cpsskins/branches/jmo-perspectives/portlets/configure.zcml  Sat Dec 10 
14:33:41 2005
@@ -14,7 +14,7 @@
       id="portlets"
       title="Portlet storage"
       description="A portlet storage contains local portlets"
-      factory="cpsskins.portlets.storage.PortletStorage"
+      class="cpsskins.portlets.storage.PortletStorage"
   />
 
   <!-- macro slot portlet -->

Modified: cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml   
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml   Sat Dec 
10 14:33:41 2005
@@ -28,7 +28,7 @@
 
     <format
         name="widget"
-        id="plain_html"
+        type="plain_html"
     />
 
     <format

Modified: cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml    
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml    Sat Dec 
10 14:33:41 2005
@@ -27,7 +27,7 @@
 
     <format
         name="widget"
-        id="plain_html"
+        type="plain_html"
     />
 
     <format

Modified: cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml    
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml    Sat Dec 
10 14:33:41 2005
@@ -27,7 +27,7 @@
 
     <format
         name="widget"
-        id="image"
+        type="image"
     />
 
     <format
@@ -36,7 +36,7 @@
 
     <format
         name="effect"
-        id="scale"
+        type="scale"
     />
 
   </presentation>

Modified: cpsskins/branches/jmo-perspectives/portlets/image/portlet.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/image/portlet.py        
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/image/portlet.py        Sat Dec 
10 14:33:41 2005
@@ -26,7 +26,7 @@
 
 from cpsskins import Portlet
 from cpsskins.interfaces import IPortlet
-from cpsskins.model import Image
+from cpsskins.model import Image as ImageModel
 
 _ = MessageFactory("cpsskins")
 
@@ -58,16 +58,16 @@
     """
     implements(IImage)
 
-    def __init__(self, title='', link='', **kw):
+    def __init__(self, title=u'', link=u'', **kw):
         self.title = title
-        self.link = ''
+        self.link = link
         ImageFile.__init__(self, **kw)
 
     def __call__(self, info):
-        path = ''
+        path = u''
         if self.data:
             path = zapi.getPath(self)
 
-        info.data = Image(path=path)
+        info.data = ImageModel(path=path)
         info.metadata = {'title': self.title, 'link': self.link}
 

Modified: cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml        
(original)
+++ cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml        
Sat Dec 10 14:33:41 2005
@@ -28,7 +28,7 @@
 
     <format
         name="widget"
-        id="plain_html"
+        type="plain_html"
     />
 
     <format

Modified: cpsskins/branches/jmo-perspectives/relations/configure.zcml
==============================================================================
--- cpsskins/branches/jmo-perspectives/relations/configure.zcml (original)
+++ cpsskins/branches/jmo-perspectives/relations/configure.zcml Sat Dec 10 
14:33:41 2005
@@ -67,7 +67,7 @@
       id="relations"
       title="Relation storage"
       description="A relation storage contains relations between objects"
-      factory="cpsskins.relations.storage.RelationStorage"
+      class="cpsskins.relations.storage.RelationStorage"
       interface="cpsskins.relations.interfaces.IRelationStorage"
   />
 

Modified: cpsskins/branches/jmo-perspectives/thememanager.py
==============================================================================
--- cpsskins/branches/jmo-perspectives/thememanager.py  (original)
+++ cpsskins/branches/jmo-perspectives/thememanager.py  Sat Dec 10 14:33:41 2005
@@ -32,7 +32,7 @@
 from cpsskins.elements.interfaces import IFormattable
 from cpsskins.engines.default.displays.interfaces import IDisplayStorage
 from cpsskins.engines.default.displays.storage import DisplayStorage
-from cpsskins.engines.default.formats.interfaces import IFormatStorage
+from cpsskins.engines.default.formats.storage import IFormatStorage
 from cpsskins.engines.default.formats.storage import FormatStorage
 from cpsskins.interfaces import IThemeManagement, IImageCache
 from cpsskins.ontology import isDefault, hasFormat, hasDisplay
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to