Author: jmorliaguet
Date: Tue Oct 11 00:08:53 2005
New Revision: 28115

Modified:
   z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py
   z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py
   z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml
   z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py
   z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py
Log:

- saving work in progress

  - added a NodeDuplicating view for duplicating nodes.

    (working for everything except for portlets in slots)



Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py      
(original)
+++ z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py      
Tue Oct 11 00:08:53 2005
@@ -37,6 +37,7 @@
 from cpsskins.elements.interfaces import IViewable, IDisplayable, IFormattable
 from cpsskins.browser.elements.interfaces import INodeAdding, INodeRemoving
 from cpsskins.browser.elements.interfaces import INodeMoving, INodeOrdering
+from cpsskins.browser.elements.interfaces import INodeDuplicating
 from cpsskins.browser.renderers.interfaces import IRenderer
 from cpsskins.thememanager import getThemeManager
 
@@ -276,19 +277,11 @@
         """Duplicate an element specified by its id.
         Return the id of the duplicated element.
         """
+        request = self.request
         element = self._getElementById(id)
         container = getParent(element)
-        # save the element's order
-        order = list(container.keys())
-        element_order = order.index(element.name())
-        # duplicate the element
-        copier = IObjectCopier(element)
-        copied_name = copier.copyTo(container)
-        copied = container[copied_name]
-        # move the copied element just below the original element
-        copied_id = copied.getIdentifier()
-        self.reorderElement(copied_id, int(element_order)+1)
-        return copied_id
+        duplicating = getMultiAdapter((container, request), INodeDuplicating)
+        return duplicating.duplicate(element)
 
     def getCanvasMode(self):
         """Get the canvas view mode

Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py       
(original)
+++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py       
Tue Oct 11 00:08:53 2005
@@ -19,11 +19,13 @@
 
 from zope.app.publisher.browser import BrowserView
 from zope.app.container.browser.adding import Adding
-from zope.app.copypastemove.interfaces import IObjectMover
+from zope.app.copypastemove.interfaces import IObjectCopier, IObjectMover
 from zope.app.traversing.api import getParent
+from zope.app.zapi import queryMultiAdapter, getMultiAdapter
 from zope.interface import implements
 
 from interfaces import INodeAdding, INodeRemoving, INodeOrdering, INodeMoving
+from interfaces import INodeDuplicating
 
 class NodeAdding(Adding):
     """A view for adding element into nodes
@@ -65,3 +67,23 @@
         contents.insert(order, item)
         container.updateOrder(contents)
 
+class NodeDuplicating(BrowserView):
+    """A view for duplicating elements in nodes
+    """
+    implements(INodeDuplicating)
+
+    def duplicate(self, content):
+        request = self.request
+        container = self.context
+        # save the element's order
+        order = list(container.keys())
+        content_order = order.index(content.name())
+        # duplicate the element
+        copier = IObjectCopier(content)
+        copied_name = copier.copyTo(container)
+        copied = container[copied_name]
+        # move the copied element just below the original element
+        reordering = getMultiAdapter((container, request), INodeOrdering)
+        reordering.reorder(copied, int(content_order)+1)
+        return copied.getIdentifier()
+

Modified: 
z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml    
(original)
+++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml    
Tue Oct 11 00:08:53 2005
@@ -34,6 +34,13 @@
       provides=".interfaces.INodeMoving"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.ITheme
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeDuplicating"
+      provides=".interfaces.INodeDuplicating"
+  />
+
   <!-- Page -->
 
   <adapter
@@ -64,6 +71,13 @@
       provides=".interfaces.INodeMoving"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.IThemePage
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeDuplicating"
+      provides=".interfaces.INodeDuplicating"
+  />
+
   <!-- Page block -->
 
   <adapter
@@ -94,6 +108,13 @@
       provides=".interfaces.INodeMoving"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.IPageBlock
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeDuplicating"
+      provides=".interfaces.INodeDuplicating"
+  />
+
   <!-- Cell -->
 
   <adapter
@@ -124,6 +145,13 @@
       provides=".interfaces.INodeMoving"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.ICell
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeDuplicating"
+      provides=".interfaces.INodeDuplicating"
+  />
+
   <!-- Slot -->
 
   <adapter
@@ -154,4 +182,11 @@
       provides=".interfaces.INodeMoving"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.ISlot
+           zope.publisher.interfaces.IRequest"
+      factory=".slot.SlotDuplicating"
+      provides=".interfaces.INodeDuplicating"
+  />
+
 </configure>

Modified: 
z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py     
(original)
+++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py     
Tue Oct 11 00:08:53 2005
@@ -45,3 +45,9 @@
 
     def reorder(order):
         """Update the order of the element in the node"""
+
+# Duplicating elements in nodes
+class INodeDuplicating(IView):
+
+    def duplicate():
+        """Duplicate an element in a node"""

Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py   
(original)
+++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py   Tue Oct 
11 00:08:53 2005
@@ -31,6 +31,7 @@
 from cpsskins.relations.tool import RelationTool
 from cpsskins.thememanager import getThemeManager
 from interfaces import INodeAdding, INodeRemoving, INodeOrdering, INodeMoving
+from interfaces import INodeDuplicating
 from cpsskins.storage.interfaces import IPortletStorage, IRelationStorage
 
 class SlotAdding(Adding):
@@ -180,7 +181,7 @@
         del portlets[content.name()]
 
         # store the portlet's order in the slot's "BoxGroup" display
-        display = IDisplayable(container).getDisplay(perspective)
+        display = IDisplayable(container).getEffectiveDisplay(perspective)
         display.remove(content)
 
 class SlotOrdering(BrowserView):
@@ -210,3 +211,12 @@
         if content in display:
             display.remove(content)
         display.insert(order, content)
+
+
+class SlotDuplicating(BrowserView):
+    """A view for duplicating elements in nodes
+    """
+    implements(INodeDuplicating)
+
+    def duplicate(self, content):
+        pass
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to