main logo
Subject: [dabo-dev] daboide Commit 585
Author: Ed Leafe
Posted: 2006/05/31 14:27:23
 
View Entire Thread
New Search


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






 
©2006 Ed Leafe
<-- Prior Message New Search Next Message -->