daboide Commit
Revision 585
Date: 2006-05-31 12:27:14 -0700 (Wed, 31 May 2006)
Author: ed

Changed:
U   trunk/ClassDesigner.py
U   trunk/ClassDesignerComponents.py
U   trunk/ClassDesignerTreeSheet.py

Log:
Added context menu options for moving an object to an adjacent sizer slot: 
either up, down, left or right, depending on the type of sizer it is in and 
whether it is at a boundary.

Fixed a problem that was leaving the row,col information out of the Object Tree 
for objects in grid sizers.


Diff:
Modified: trunk/ClassDesigner.py
===================================================================
--- trunk/ClassDesigner.py      2006-05-29 22:31:22 UTC (rev 584)
+++ trunk/ClassDesigner.py      2006-05-31 19:27:14 UTC (rev 585)
@@ -1918,17 +1918,38 @@
                depending on its position in the design surface.
                """
                self._contextObj = obj
-               if isinstance(obj.ControllingSizer, (dabo.ui.dSizer, 
dabo.ui.dBorderSizer)):
+               sz = obj.ControllingSizer
+               items = []              
+               if isinstance(sz, (dui.dSizer, dui.dBorderSizer)):
+                       if sz.Orientation == "Vertical":
+                               items.append((_("Add Slot Above"), 
self.onAddSlotBefore))
+                               items.append((_("Add Slot Below"), 
self.onAddSlotAfter))
+                       else:
+                               items.append((_("Add Slot Left"), 
self.onAddSlotBefore))
+                               items.append((_("Add Slot Right"), 
self.onAddSlotAfter))
+                       pos = obj.getPositionInSizer()
+                       if pos > 0:
+                               items.append((_("Move Up One Slot"), 
self.onMoveSlotUp))
+                       if pos < len(sz.Children)-1:
+                               items.append((_("Move Down One Slot"), 
self.onMoveSlotDown))
+               elif isinstance(sz, dui.dGridSizer):
+                       pos = sz.getGridPos(obj)
+                       if pos != (0, 0):
+                               items.append((_("Move Up One Slot"), 
self.onMoveSlotUp))
+                       if not ((sz.MaxDimension == "r") and (pos[0] >= 
sz.MaxRows)):
+                               items.append((_("Move Down One Slot"), 
self.onMoveSlotDown))
+                       if pos[1] > 0:
+                               items.append((_("Move Left One Slot"), 
self.onMoveSlotLeft))
+                       if not ((sz.MaxDimension == "c") and (pos[1] >= 
sz.MaxCols)):
+                               items.append((_("Move Right One Slot"), 
self.onMoveSlotRight))
+               if items:
                        if sepBefore:
                                pop.appendSeparator()
-                       if obj.ControllingSizer.Orientation == "Vertical":
-                               pop.append(_("Add Slot Above"), 
bindfunc=self.onAddSlotBefore)
-                               pop.append(_("Add Slot Below"), 
bindfunc=self.onAddSlotAfter)
-                       else:
-                               pop.append(_("Add Slot Left"), 
bindfunc=self.onAddSlotBefore)
-                               pop.append(_("Add Slot Right"), 
bindfunc=self.onAddSlotAfter)
+                       for cap, func in items:
+                               pop.append(cap, bindfunc=func)
                        if sepAfter:
                                pop.appendSeparator()
+                       
 
        
        def onAddSlotBefore(self, evt):
@@ -1937,8 +1958,8 @@
 
        def onAddSlotAfter(self, evt):
                self._addEmptySlot(1)
-               
-               
+       
+       
        def _addEmptySlot(self, offset):
                obj = self._contextObj
                self._contextObj = None
@@ -1949,6 +1970,59 @@
                self.updateLayout()
 
 
+       def onMoveSlotUp(self, evt):
+               obj = self._contextObj
+               sz = obj.ControllingSizer
+               if isinstance(sz, (dui.dSizer, dui.dBorderSizer)):
+                       self._moveVertically(obj, sz, -1)
+               elif isinstance(sz, dui.dGridSizer):
+                       sz.switchObjects(obj, sz.getNeighbor(obj, "up"))
+               self.updateLayout()
+       
+       
+       def onMoveSlotDown(self, evt):
+               obj = self._contextObj
+               sz = obj.ControllingSizer
+               if isinstance(sz, (dui.dSizer, dui.dBorderSizer)):
+                       self._moveVertically(obj, sz, 1)
+               elif isinstance(sz, dui.dGridSizer):
+                       target = sz.getNeighbor(obj, "down")
+                       if target is None:
+                               # We're at the bottom row of the design, so add 
a row
+                               sz.Rows += 1
+                               target = sz.getNeighbor(obj, "down")
+                       sz.switchObjects(obj, target)
+               self.updateLayout()
+       
+       
+       def _moveVertically(self, obj, sz, drct):
+               pos = obj.getPositionInSizer()
+               props = sz.getItemProps(obj)
+               sz.remove(obj)
+               sz.insert(pos+drct, obj)
+               sz.setItemProps(obj, props)
+               sz.layout()                     
+
+
+       def onMoveSlotLeft(self, evt):
+               obj = self._contextObj
+               sz = obj.ControllingSizer
+               sz.switchObjects(obj, sz.getNeighbor(obj, "left"))
+               self.updateLayout()
+       
+       
+       def onMoveSlotRight(self, evt):
+               obj = self._contextObj
+               sz = obj.ControllingSizer
+               target = sz.getNeighbor(obj, "right")
+               if target is None:
+                       # We're at the rightmost column of the design, so add a 
col.
+                       sz.Columns += 1
+                       target = sz.getNeighbor(obj, "right")
+               sz.switchObjects(obj, target)
+               self.updateLayout()
+
+
        def getControlMenu(self, srcObj, justSizers=False):
                """Creates the popup menu for selecting child objects"""
                # Store the source object

Modified: trunk/ClassDesignerComponents.py
===================================================================
--- trunk/ClassDesignerComponents.py    2006-05-29 22:31:22 UTC (rev 584)
+++ trunk/ClassDesignerComponents.py    2006-05-31 19:27:14 UTC (rev 585)
@@ -1219,6 +1219,21 @@
                return ret
 
                
+       def switchObjects(self, obj1, obj2):
+               """Swaps the location of the two objects."""
+               if not obj1 or not obj2:
+                       dabo.errorLog.write(_("Cannot swap with non-existent 
object."))
+                       return
+               row1, col1 = self.getGridPos(obj1)
+               row2, col2 = self.getGridPos(obj2)
+               props = self.getItemProps(obj1)
+               self.remove(obj1)
+               self.moveObject(obj2, row1, col1)
+               self.append(obj1, row=row2, col=col2)
+               self.setItemProps(obj1, props)
+               self.layout()
+               
+               
        def createContextMenu(self):
                pop = dabo.ui.dMenu()
                isMain = (self.ControllingSizer is None 

Modified: trunk/ClassDesignerTreeSheet.py
===================================================================
--- trunk/ClassDesignerTreeSheet.py     2006-05-29 22:31:22 UTC (rev 584)
+++ trunk/ClassDesignerTreeSheet.py     2006-05-31 19:27:14 UTC (rev 585)
@@ -164,6 +164,11 @@
                                dsp = (obj.Name, 
self._getClassName(obj._baseClass))
                        else:
                                dsp = ("", self._getClassName(obj.__class__))
+                       try:
+                               if isinstance(obj.ControllingSizer, 
LayoutGridSizer):
+                                       r, c = 
obj.ControllingSizer.getGridPos(obj)
+                                       dsp = ("%s r:%s, c:%s" % (dsp[0], r, 
c), dsp[1])
+                       except: pass
                        ret = "%s (%s)" % dsp
                return ret
                




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev

Reply via email to