[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/designer/src LayoutEditor.py PopupMenu.py
From: |
Jason Cater |
Subject: |
gnue/designer/src LayoutEditor.py PopupMenu.py |
Date: |
Sat, 28 Jul 2001 20:19:35 -0700 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: Jason Cater <address@hidden> 01/07/28 20:19:35
Modified files:
designer/src : LayoutEditor.py PopupMenu.py
Log message:
Improvements to pop-up menus; new popup menu when right-clicking on
empty space in Layout Editor area (really handy)
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.17&tr2=1.18&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/PopupMenu.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
Patches:
Index: gnue/designer/src/LayoutEditor.py
diff -u gnue/designer/src/LayoutEditor.py:1.17
gnue/designer/src/LayoutEditor.py:1.18
--- gnue/designer/src/LayoutEditor.py:1.17 Sat Jul 21 14:08:51 2001
+++ gnue/designer/src/LayoutEditor.py Sat Jul 28 20:19:35 2001
@@ -32,8 +32,8 @@
from gnue.common.GClientApp import GClientApp
from gnue.forms import GFForm, GFInstance, GFParser
from gnue.forms import GFObjects, GFTrigger, GFLibrary, UIwxpython
+from PopupMenu import PageMenu
-
class LayoutEditor (wxPanel):
def __init__(self, instance, parentWindow):
wxPanel.__init__(self,parentWindow,-1)
@@ -73,6 +73,7 @@
self._pageList = [] # Needed by UIwxpython
def onSetCurrentObject (self, object, handler):
+ self._currentObject = object
if object == None:
for o in self._currentSelection.keys():
o.setSelected(0)
@@ -129,7 +130,6 @@
self.panelColor.Green()+16,
self.panelColor.Blue()+16)
-
self.getPages()
UIwxpython.initFont(self.panel)
@@ -241,7 +241,28 @@
def OnRightUp(self, event):
- pt = event.GetPosition()
+ x, y = event.GetPositionTuple()
+
+ x = int(x / self.gridWidth)
+ y = int(y / self.gridHeight)
+
+ menu = wxMenu('Layout Editor')
+ form = self._currentObject.getObjectType() == 'GFForm' and
self._currentObject or \
+ self._currentObject.findParentOfType('GFForm')
+ page = self._currentObject.getObjectType() == 'GFPage' and
self._currentObject or \
+ self._currentObject.findParentOfType('GFPage')
+ block = self._currentObject.getObjectType() == 'GFBlock' and
self._currentObject or \
+ self._currentObject.findParentOfType('GFBlock')
+
+ print form, page, block
+
+ menu.AppendMenu(wxNewId(), 'Form', PageMenu(self._instance, form, x, y))
+ if page:
+ menu.AppendMenu(wxNewId(), page.name, PageMenu(self._instance, page, x,
y))
+ if block:
+ menu.AppendMenu(wxNewId(), block.name, PageMenu(self._instance, block,
x, y))
+
+ self.panel.PopupMenu(menu, event.GetPosition())
def OnMotion(self, event):
Index: gnue/designer/src/PopupMenu.py
diff -u gnue/designer/src/PopupMenu.py:1.2 gnue/designer/src/PopupMenu.py:1.3
--- gnue/designer/src/PopupMenu.py:1.2 Thu Jul 12 19:54:20 2001
+++ gnue/designer/src/PopupMenu.py Sat Jul 28 20:19:35 2001
@@ -31,6 +31,7 @@
from gnue.forms import GFForm, GFInstance, GFParser, GFObjects, GFTrigger,
GFLibrary, UIwxpython
import Incubator
+# This menu is the popup menu on the object tree
class ObjectMenu(wxMenu):
def __init__(self, instance, object):
wxMenu.__init__(self, "Object Tasks...")
@@ -73,7 +74,14 @@
for element in Incubator.elementMapping[tag]:
tid = wxNewId()
self._newMap[tid] = element
- menu.Append(tid, element)
+ descr = string.upper(element[0])+string.lower(element[1:])
+ if descr == 'Import':
+ descr = 'Import Library'
+ elif len(descr) > 7 and descr[:7] == 'Import-':
+ descr = 'Imported ' + string.upper(descr[7])+ \
+ string.lower(descr[8:])
+
+ menu.Append(tid, descr)
EVT_MENU(menu, tid, self.OnCreateObject)
self.AppendMenu(wxNewId(), "&New", menu)
@@ -219,6 +227,203 @@
def OnCreatePage(self, event):
Incubator.createObject(self.instance, self.instance._form, 'page')
+
+
+
+# This menu is the popup menu on the layout screen
+class PageMenu(wxMenu):
+ def __init__(self, instance, object, x, y):
+ wxMenu.__init__(self, hasattr(object,'name') and \
+ object.name or string.upper(object.getObjectType[2]) + \
+ string.lower(object.getObjectType[3:]) )
+
+ self.object = object
+ self.instance = instance
+ self._newMap = {}
+ self.x = x
+ self.y = y
+
+ if object == None:
+ id = wxNewId()
+ self.Append(id, "New Data Source")
+ EVT_MENU(self, id, self.OnCreateDataSource)
+ id = wxNewId()
+ self.Append(id, "New Shared Trigger")
+ EVT_MENU(self, id, self.OnCreateNamedTrigger)
+ id = wxNewId()
+ self.Append(id, "New Layout Page")
+ EVT_MENU(self, id, self.OnCreatePage)
+ else:
+
+ # New >
+
+ menu = wxMenu("New...")
+
+ tag = string.lower(object.getObjectType()[2:])
+ if Incubator.elementMapping.has_key(tag):
+ Incubator.elementMapping[tag].sort()
+ for element in Incubator.elementMapping[tag]:
+ tid = wxNewId()
+ self._newMap[tid] = element
+ descr = string.upper(element[0])+string.lower(element[1:])
+ if descr == 'Import':
+ descr = 'Import Library'
+ elif len(descr) > 7 and descr[:7] == 'Import-':
+ descr = 'Imported ' + string.upper(descr[7])+ \
+ string.lower(descr[8:])
+
+ menu.Append(tid, descr)
+ EVT_MENU(menu, tid, self.OnCreateObject)
+ self.AppendMenu(wxNewId(), "&New", menu)
+
+ # Properties
+ id = wxNewId()
+ self.Append(id, "&Properties...")
+ EVT_MENU(self, id, self.OnEditProperties)
+
+ if not isinstance (object, GFForm.GFForm):
+ # Delete
+ id = wxNewId()
+ self.Append(id, "&Delete %s" % object.getObjectType()[2:])
+ EVT_MENU(self, id, self.OnDeleteObject)
+
+ self.AppendSeparator()
+
+ # Events >
+ if isinstance (object, GFTrigger.GFTriggerAware):
+ menu = wxMenu("Events...")
+ self._triggerMap = {}
+ keys = GFTrigger.VALIDTRIGGERS.keys()
+ keys.sort()
+ for trigger in (keys):
+ tid = wxNewId()
+ self._triggerMap[tid] = trigger
+ menu.Append(tid, GFTrigger.VALIDTRIGGERS[trigger] + "...")
+ EVT_MENU(menu, tid, self.OnEditEvent)
+ self.AppendMenu(wxNewId(), "&Events", menu)
+
+ if len(object._children):
+ self.AppendSeparator()
+ for child in object._children:
+ self.AppendMenu(wxNewId(), child.name, PageMenu(instance, child, x,
y))
+
+ self.AppendSeparator()
+
+ if isinstance(object, GFObjects.GFPage) or \
+ isinstance(object, GFObjects.GFBlock):
+ # Reorder
+ id = wxNewId()
+ self.Append(id, "&Reorder by Location")
+ EVT_MENU(self, id, self.OnReorderLayout)
+
+ def OnEditProperties(self, event):
+ self.instance.propertyEditorWindow.Show(1)
+ self.instance.propertyEditorWindow.Raise()
+ self.instance.propertyEditorWindow.SetFocus()
+
+ def OnEditEvent(self, event):
+ pass
+
+ def OnDeleteObject(self, event):
+ Incubator.deleteObject(self.instance, self.instance._form, self.object)
+
+ def OnReorderLayout(self, event):
+ unqId = 0
+ triggerObjects = []
+ hiddenObjects = []
+ boxObjects = {}
+ navObjects = {}
+ blockObjects = {}
+ self.object._upperX = 99999
+ self.object._upperY = 99999
+
+ # Handle each child (note we are working from a copy
+ # because self.oject._children will be morphing
+ for object in self.object._children[:]:
+ if hasattr(object, 'hidden') and object.hidden:
+ hiddenObjects.append(object)
+ elif object.getObjectType() == 'GFTrigger':
+ triggerObjects.append(object)
+ elif object.getObjectType() == 'GFBlock':
+ object._popupMenu.OnReorderLayout(event)
+ object.__savedChildren = object._children[:]
+ for o2 in object.__savedChildren:
+ self.instance.onDeleteObject(o2, __name__)
+
+ oid = "%5d.%5d.%5d" % (object._upperY, object._upperX, unqId)
+ unqId = unqId + 1
+ blockObjects[oid] = object
+
+ else:
+ if hasattr(object,'y') and object.y < self.object._upperY:
+ self.object._upperY = object.y
+ if hasattr(object,'x') and object.x < self.object._upperX:
+ self.object._upperX = object.x
+
+ oid = "%5d.%5d.%5d" % (object.y, object.x, unqId)
+ unqId = unqId + 1
+ if object.getObjectType() == 'GFBox':
+ boxObjects[oid] = object
+ else:
+ navObjects[oid] = object
+
+ # Notify everyone that this object was deleted
+ self.instance.onDeleteObject(object, __name__)
+
+ self.object._children = []
+
+ # First, add back triggers
+ for object in triggerObjects:
+ self.object._children.append(object)
+ self.instance.onCreateObject(object, __name__)
+
+
+ # Next, add back hidden objects
+ for object in hiddenObjects:
+ self.object._children.append(object)
+ self.instance.onCreateObject(object, __name__)
+
+ # Now, add hidden objects
+ boxes = boxObjects.keys()
+ boxes.sort()
+ for box in boxes:
+ self.object._children.append(boxObjects[box])
+ self.instance.onCreateObject(boxObjects[box], __name__)
+
+ # The rest of the objects (other than blocks) go here
+ nav = navObjects.keys()
+ nav.sort()
+ for n in nav:
+ self.object._children.append(navObjects[n])
+ self.instance.onCreateObject(navObjects[n], __name__)
+
+ # And, finally, any child blocks
+ blocks = blockObjects.keys()
+ blocks.sort()
+ for block in blocks:
+ children = blockObjects[block].__savedChildren[:]
+ self.object._children.append(blockObjects[block])
+ self.instance.onCreateObject(blockObjects[block], __name__)
+ for child in children:
+ blockObjects[block]._children.append(child)
+ self.instance.onCreateObject(child,__name__)
+
+
+ def OnCreateObject(self, event):
+ GDebug.printMesg(3, "Creating Object")
+ tag = self._newMap[event.GetId()]
+ Incubator.createObject(self.instance, self.instance._form, tag,
+ parentHint=self.object, attributes={'x': self.x, 'y': self.y} )
+
+ def OnCreateDataSource(self, event):
+ Incubator.createObject(self.instance, self.instance._form, 'datasource')
+
+ def OnCreateNamedTrigger(self, event):
+ Incubator.createObject(self.instance, self.instance._form, 'trigger')
+
+ def OnCreatePage(self, event):
+ Incubator.createObject(self.instance, self.instance._form, 'page')
+
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/designer/src LayoutEditor.py PopupMenu.py,
Jason Cater <=