Author: jmorliaguet
Date: Sun Oct  9 19:05:32 2005
New Revision: 28087

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
   z3lab/cpsskins/branches/jmo-perspectives/elements/slot.py
   z3lab/cpsskins/branches/jmo-perspectives/thememanager.py
Log:

- saving work:

  - added an element mover adapter INodeMoving
    (working for theme elements, not yet working with 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      
Sun Oct  9 19:05:32 2005
@@ -19,8 +19,7 @@
 
 from zope.app import zapi
 from zope.app.container.browser.contents import Contents
-from zope.app.copypastemove.interfaces import IObjectMover, IObjectCopier
-from zope.app.event.objectevent import ObjectCreatedEvent
+from zope.app.copypastemove.interfaces import IObjectCopier
 from zope.app.location.traversing import LocationPhysicallyLocatable
 from zope.app.publisher.browser import BrowserView
 from zope.app.session.interfaces import ISession
@@ -28,7 +27,6 @@
 from zope.app.zapi import queryMultiAdapter, getMultiAdapter
 from zope.component import adapts
 from zope.component.interfaces import IFactory
-from zope.event import notify
 from zope.interface import implements
 from zope.security.proxy import removeSecurityProxy
 
@@ -38,7 +36,7 @@
 from cpsskins.elements.interfaces import IElement
 from cpsskins.elements.interfaces import IViewable, IDisplayable, IFormattable
 from cpsskins.browser.elements.interfaces import INodeAdding, INodeRemoving
-from cpsskins.browser.elements.interfaces import INodeOrdering
+from cpsskins.browser.elements.interfaces import INodeMoving, INodeOrdering
 from cpsskins.browser.renderers.interfaces import IRenderer
 from cpsskins.thememanager import getThemeManager
 
@@ -234,7 +232,6 @@
         factory = zapi.getUtility(IFactory, type_name)
         content = factory()
 
-        notify(ObjectCreatedEvent(content))
         adding = getMultiAdapter((container, request), INodeAdding)
 
         added = adding.add(content)
@@ -246,16 +243,13 @@
         """Move an element to another destination element.
         return the id of the moved element.
         """
+        request = self.request
         element = self._getElementById(src_id)
         dest_container = self._getElementById(dest_id)
         # move the element to the destination container
-        if dest_container == getParent(element):
-            moved = element
-            moved_name = src_id
-        else:
-            mover = IObjectMover(element)
-            moved_name = mover.moveTo(dest_container)
-            moved = dest_container[moved_name]
+        moving = getMultiAdapter((dest_container, request), INodeMoving)
+        moved = moving.move(element)
+
         # move the element to the specified order
         moved_id = moved.getIdentifier()
         self.reorderElement(moved_id, int(order))

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       
Sun Oct  9 19:05:32 2005
@@ -19,15 +19,30 @@
 
 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.traversing.api import getParent
 from zope.interface import implements
 
-from interfaces import INodeAdding, INodeRemoving, INodeOrdering
+from interfaces import INodeAdding, INodeRemoving, INodeOrdering, INodeMoving
 
 class NodeAdding(Adding):
     """A view for adding element into nodes
     """
     implements(INodeAdding)
 
+class NodeMoving(BrowserView):
+    """A view for moving elements between nodes
+    """
+    implements(INodeMoving)
+
+    def move(self, content):
+        container = self.context
+        if container == getParent(content):
+            return content
+        mover = IObjectMover(content)
+        moved_name = mover.moveTo(container)
+        return container[moved_name]
+
 class NodeRemoving(BrowserView):
     """A view for removing elements from nodes
     """

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    
Sun Oct  9 19:05:32 2005
@@ -27,6 +27,13 @@
       provides=".interfaces.INodeOrdering"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.ITheme
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeMoving"
+      provides=".interfaces.INodeMoving"
+  />
+
   <!-- Page -->
 
   <adapter
@@ -50,6 +57,13 @@
       provides=".interfaces.INodeOrdering"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.IThemePage
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeMoving"
+      provides=".interfaces.INodeMoving"
+  />
+
   <!-- Page block -->
 
   <adapter
@@ -73,6 +87,13 @@
       provides=".interfaces.INodeOrdering"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.IPageBlock
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeMoving"
+      provides=".interfaces.INodeMoving"
+  />
+
   <!-- Cell -->
 
   <adapter
@@ -96,6 +117,13 @@
       provides=".interfaces.INodeOrdering"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.ICell
+           zope.publisher.interfaces.IRequest"
+      factory=".NodeMoving"
+      provides=".interfaces.INodeMoving"
+  />
+
   <!-- Slot -->
 
   <adapter
@@ -119,4 +147,11 @@
       provides=".interfaces.INodeOrdering"
   />
 
+  <adapter
+      for="cpsskins.elements.interfaces.ISlot
+           zope.publisher.interfaces.IRequest"
+      factory=".slot.SlotMoving"
+      provides=".interfaces.INodeMoving"
+  />
+
 </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     
Sun Oct  9 19:05:32 2005
@@ -26,6 +26,13 @@
     def add(element):
         """Add an element to the node."""
 
+# Moving elements between nodes
+class INodeMoving(IView):
+    """Removing elements between nodes."""
+
+    def move(element):
+        """Mmove element to a destination node."""
+
 # Removing elements from nodes
 class INodeRemoving(IView):
     """Removing elements from nodes."""

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   Sun Oct 
 9 19:05:32 2005
@@ -19,6 +19,7 @@
 
 from zope.app.container.browser.adding import Adding
 from zope.app.publisher.browser import BrowserView
+from zope.app.traversing.api import getParent
 from zope.app.zapi import getMultiAdapter
 from zope.interface import implements
 
@@ -26,7 +27,7 @@
 from cpsskins.elements.interfaces import IDisplayable
 from cpsskins.elements.interfaces import IPortlet
 from cpsskins.thememanager import getThemeManager
-from interfaces import INodeAdding, INodeRemoving, INodeOrdering
+from interfaces import INodeAdding, INodeRemoving, INodeOrdering, INodeMoving
 
 class SlotAdding(Adding):
     """A view for adding elements into slots
@@ -66,6 +67,27 @@
 
         return portlet
 
+class SlotMoving(BrowserView):
+    """A view for moving elements between slots
+    """
+    implements(INodeMoving)
+
+    def move(self, content):
+        src_container = getParent(content)
+        dest_container = self.context
+        request = self.request
+        if dest_container == src_container:
+            return content
+
+        tmutil = getThemeManager()
+
+        tmutil.movePortlet(
+            src_slot=src_container,
+            dest_slot=dest_container,
+            portlet=content,
+            )
+        return content
+
 class SlotRemoving(BrowserView):
     """A view for removing elements from slots
     """

Modified: z3lab/cpsskins/branches/jmo-perspectives/elements/slot.py
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/elements/slot.py   (original)
+++ z3lab/cpsskins/branches/jmo-perspectives/elements/slot.py   Sun Oct  9 
19:05:32 2005
@@ -63,21 +63,22 @@
             return []
         if iface and not iface is IPortlet:
             return []
+
         reltool = RelationTool(self)
         display = info.display
-
         perspective = info.perspective
-        if perspective is not None:
+
+        if perspective is None:
             portlets = reltool.getSeconds(
-                predicate=hasPortletFromPerspective,
+                predicate=hasPortlet,
                 first=self,
-                third=perspective,
-            )
+                )
         else:
             portlets = reltool.getSeconds(
-                predicate=hasPortlet,
+                predicate=hasPortletFromPerspective,
                 first=self,
-            )
+                third=perspective,
+                )
 
         # the portlet order is obtained from the display, if the display is
         # iterable otherwise the portlets are sorted by their identifier.

Modified: z3lab/cpsskins/branches/jmo-perspectives/thememanager.py
==============================================================================
--- z3lab/cpsskins/branches/jmo-perspectives/thememanager.py    (original)
+++ z3lab/cpsskins/branches/jmo-perspectives/thememanager.py    Sun Oct  9 
19:05:32 2005
@@ -176,6 +176,58 @@
         portlets = theme.getStorage(IPortletStorage)
         return portlets[name]
 
+    def movePortlet(self, src_slot, dest_slot, portlet):
+        """Move a portlet between slots.
+        """
+
+        reltool = RelationTool(portlet)
+
+        relations = reltool.search(
+            predicate=hasPortlet,
+            first=src_slot,
+            second=portlet,
+            ) + reltool.search(
+            predicate=hasPortletFromPerspective,
+            first=src_slot,
+            second=portlet,
+            )
+
+        rel = relations[0]
+        perspective = len(rel) == 3 and rel.third or None
+
+        if perspective is not None:
+            relation = TriadicRelation(
+                predicate=hasPortletFromPerspective,
+                first=dest_slot,
+                second=portlet,
+                third=perspective,
+                )
+            ids = reltool.search(
+                predicate=hasPortletFromPerspective,
+                first=src_slot,
+                second=portlet,
+                third=perspective,
+                )
+        else:
+            relation = DyadicRelation(
+                predicate=hasPortlet,
+                first=dest_slot,
+                second=portlet,
+                )
+            ids = reltool.search(
+                predicate=hasPortlet,
+                first=src_slot,
+                second=portlet,
+                )
+
+        theme = self.getThemeInContext(src_slot)
+        relations = theme.getStorage(IRelationStorage)
+        relations.add(relation)
+
+        reltool.remove(ids)
+
+        portlet.__parent__ = dest_slot
+
     def setPortlet(self, slot, portlet, perspective):
         """Set a portlet in a slot
         """
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to