commit-gnue
[Top][All Lists]
Advanced

[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')
+
 
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]