commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue/gnuef/designer/src Instance.py LayoutEdito...


From: Jason Cater
Subject: gnue/gnuef/designer/src Instance.py LayoutEdito...
Date: Mon, 18 Jun 2001 12:50:12 -0700

CVSROOT:        /home/cvs
Module name:    gnue
Changes by:     Jason Cater <address@hidden>    01/06/18 12:50:12

Modified files:
        gnuef/designer/src: Instance.py LayoutEditor.py MenuBar.py 
                            TreeView.py 

Log message:
        Implemented popup (right-click) menus on tree and layout editor.  Only 
New->{Page,DataSource,Name Trigger} currently works

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/designer/src/Instance.py.diff?cvsroot=OldCVS&tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/designer/src/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/designer/src/MenuBar.py.diff?cvsroot=OldCVS&tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/designer/src/TreeView.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text

Patches:
Index: gnue/gnuef/designer/src/Instance.py
diff -u gnue/gnuef/designer/src/Instance.py:1.6 
gnue/gnuef/designer/src/Instance.py:1.7
--- gnue/gnuef/designer/src/Instance.py:1.6     Mon Jun 18 03:13:08 2001
+++ gnue/gnuef/designer/src/Instance.py Mon Jun 18 12:50:12 2001
@@ -148,12 +148,16 @@
         object._parent == self._form:
       self._pages.append(object)
 
+    object._popupMenu = ObjectMenu(object, self)
 
+
+
   def onSetCurrentObject (self, object, handler):
     for listener in self.objectListeners: 
       listener.onSetCurrentObject(object, handler)
 
   def onCreateObject (self, object, handler):
+    self.inventoryLoadedItems(object)
     for listener in self.objectListeners: 
       listener.onCreateObject(object, handler)
     self.makeDirty()
Index: gnue/gnuef/designer/src/LayoutEditor.py
diff -u gnue/gnuef/designer/src/LayoutEditor.py:1.2 
gnue/gnuef/designer/src/LayoutEditor.py:1.3
--- gnue/gnuef/designer/src/LayoutEditor.py:1.2 Sun Jun 17 22:41:25 2001
+++ gnue/gnuef/designer/src/LayoutEditor.py     Mon Jun 18 12:50:12 2001
@@ -43,7 +43,14 @@
     self.widgets = {}
     self.widgets.update(UIwxpython.WIDGETS)
     del self.widgets['GFPage']
+
     self.pageNameLabel = wxStaticText(self, -1, "Page: ", pos=wxPoint(10,20))
+    self.pageCombo = wxComboBox(self, -1, 
pos=wxPoint(self.pageNameLabel.GetSize().width + 11,18), style=wxCB_READONLY)
+    self.blockNameLabel = wxStaticText(self, -1, "Block:", 
pos=wxPoint(self.pageCombo.GetPosition().x + self.pageCombo.GetSize().width + 
20,20))
+    self.blockCombo = wxComboBox(self, -1, 
pos=wxPoint(self.blockNameLabel.GetPosition().x + 
self.blockNameLabel.GetSize().width + 11,18), style=wxCB_READONLY)
+    EVT_COMBOBOX(self, self.pageCombo.GetId(), self.OnPageSelected)
+    EVT_COMBOBOX(self, self.blockCombo.GetId(), self.OnBlockSelected)
+
     self._pageList = []  # Needed by UIwxpython
 
   def onSetCurrentObject (self, object, handler):
@@ -66,8 +73,7 @@
     if object == None: 
       return
     if handler != __name__:
-      for modification in modifications: 
-        attribute, value = modification
+      pass
 
   def onModifyObject (self, object, handler, modifications):
     if object == None: 
@@ -84,15 +90,27 @@
 
   def drawPage(self, page): 
     self._currentSelection = {}
-
+    self.page = page
     self.panel = GridPane(self, self, wxPoint(10,60))
     self.panelColor = self.panel.GetBackgroundColour()
     self.panelGridColor = wxColour(self.panelColor.Red()+16,
                  self.panelColor.Green()+16,    
                  self.panelColor.Blue()+16)
+
+
+    self.pageCombo.Clear()
+    i = 0
+    selected = 0
+    for p in self._instance._pages: 
+      if p == page: 
+        selected = i
+      self.pageCombo.Append(p.name)
+      i = i + 1
 
-    self.pageNameLabel.SetLabel("Page: %s" % page.name)
+    self.pageCombo.SetSelection(selected)
 
+#    self.pageNameLabel.SetLabel("Page: %s" % page.name)
+
     UIwxpython.initFont(self.panel)
 
     maxWidth, maxHeight, maxDescent, maxLeading = [0,0,0,0]
@@ -131,6 +149,8 @@
 
     page.walk(self.__drawItem)
 
+    self.getBlocks()
+
     EVT_CHAR(self.panel, self.keyTrap)
     EVT_LEFT_UP(self.panel, self.OnLeftUp)
     EVT_LEFT_DOWN(self.panel, self.OnLeftDown)
@@ -138,6 +158,17 @@
     EVT_MOTION(self.panel, self.OnMotion)
 
 
+  def getBlocks(self): 
+    self.blockCombo.Clear()
+    self.blockList = []
+    self.page.walk(self.__getBlocks)
+    self.blockCombo.SetSelection(0)
+
+  def __getBlocks(self, object): 
+    if object.getObjectType() == 'GFBlock': 
+      self.blockList.append(object)
+      self.blockCombo.Append(object.name)
+
   def __drawItem(self, object): 
     if self.widgets.has_key(object.getObjectType()): 
       object._widgetHandler = WidgetHandler(self, object)
@@ -151,6 +182,18 @@
         object._widgetHandler.setSelected(0)
 
 
+  def OnPageSelected(self, event): 
+    p = self._instance._pages[event.GetSelection()]
+    if p != self.page:
+      self._instance.onSetCurrentObject(p, None)
+
+
+  def OnBlockSelected(self, event): 
+    b = self.blockList[event.GetSelection()]
+#    if p != self.page:
+#      self._instance.onSetCurrentObject(p, None)
+
+
   def OnLeftDown(self, event): 
     x,y = event.GetPositionTuple()
     if wxPyTypeCast(event.GetEventObject(),'wxWindow').GetId() != 
self.panel.GetId(): 
@@ -232,7 +275,6 @@
     self.instance = instance
     self.object = object 
     self.hasFocus = 0
-    self.menu = None
     self.highlightBox = WidgetHighlighter(self.instance.panel)
 
   def initialize(self, widget): 
@@ -304,8 +346,10 @@
 
   def OnRightUp(self, event): 
     pt = event.GetPosition() 
-#    self.PopupMenu(self.menu, pt) 
-
+    if not self.highlightBox.selected: 
+      self.instance._instance.onSetCurrentObject(self.object, None)
+    wxPyTypeCast(event.GetEventObject(),'wxWindow') \
+       .PopupMenu(self.object._popupMenu, pt)
 
   def OnMotion(self, event): 
     if event.Dragging() and event.LeftIsDown(): 
Index: gnue/gnuef/designer/src/MenuBar.py
diff -u gnue/gnuef/designer/src/MenuBar.py:1.3 
gnue/gnuef/designer/src/MenuBar.py:1.4
--- gnue/gnuef/designer/src/MenuBar.py:1.3      Mon Jun 18 03:13:08 2001
+++ gnue/gnuef/designer/src/MenuBar.py  Mon Jun 18 12:50:12 2001
@@ -25,7 +25,7 @@
 #
 # NOTES:
 
-import sys, os, time
+import sys, os, time, string
 from wxPython.wx import *
 from gnue.common import GDebug, GConfig
 from gnue.forms import GFForm, GFInstance, GFParser, GFObjects, GFTrigger, 
GFLibrary, UIwxpython
@@ -95,4 +95,142 @@
   def lastToolAdded(self): 
    self._window.AppendSeparator()
 
+
+class ObjectMenu(wxMenu): 
+  def __init__(self, object, instance): 
+    wxMenu.__init__(self, "Object Tasks")
+
+    self.object = object
+    self.instance = instance
+
+    # New >
+
+    menu = wxMenu("New")
+
+    id = wxNewId()
+    menu.Append(id, "Data Source") 
+    EVT_MENU(menu, id, self.OnNewDataSource)
+    id = wxNewId()
+    menu.Append(id, "Named Trigger") 
+    EVT_MENU(menu, id, self.OnNewNamedTrigger)
+    id = wxNewId()
+    menu.Append(id, "Layout Page") 
+    EVT_MENU(menu, id, self.OnNewPage)
+
+    self._newMap = {}
+
+    menu.AppendSeparator()
+ 
+    tag = string.lower(object.getObjectType()[2:])
+    if elementMapping.has_key(tag): 
+      elementMapping[tag].sort()
+      for element in elementMapping[tag]: 
+        tid = wxNewId()
+        self._newMap[tid] = object.getObjectType()
+        menu.Append(tid, element) 
+        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)
+
+    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): 
+    pass
+
+  def OnEditEvent(self, event): 
+    pass
+
+  def OnDeleteObject(self, event):
+    pass
+
+  def OnReorderLayout(self, event):
+    pass
+
+  def OnCreateObject(self, event):
+    pass
+
+  def OnNewDataSource(self, event):
+    GDebug.printMesg(3, "Creating Data Source")
+    o = GFObjects.GFDataSource(self.instance._form)
+    o.name = self.instance.getNextGenericName('datasource')
+    self.instance.onCreateObject(o, __name__)
+    self.instance.onSetCurrentObject(o, __name__)
+
+  def OnNewNamedTrigger(self, event):
+    GDebug.printMesg(3, "Creating a trigger")
+    o = GFTrigger.GFTrigger(self.instance._form, type="NAMED",text="",
+                    name=self.instance.getNextGenericName('trigger'))
+    self.instance.onCreateObject(o, __name__)
+    self.instance.onSetCurrentObject(o, __name__)
+
+  def OnNewPage(self, event):
+    GDebug.printMesg(3, "Creating a page")
+    o = GFObjects.GFPage(self.instance._form)
+    o.name = self.instance.getNextGenericName('page')
+    self.instance.onCreateObject(o, __name__)
+    self.instance.onSetCurrentObject(o, __name__)
+
+
+
+#
+# Figure out GFParser's dependencies
+#
+elements = None
+elementMapping = {}
+def calcDependencies():
+
+  global elements
+  global elementMapping
+
+  elements = GFParser.getXMLelements()
+  for tag in elements.keys(): 
+    t = elements[tag]
+    if len(t) > 3: 
+      cascade, parents = t[3]
+    else: 
+      cascade, parents = (0,None)
+
+    if parents != None: 
+      for parent in parents:
+        if elementMapping.has_key(parent): 
+          elementMapping[parent].append(tag)
+        else: 
+          elementMapping[parent] = [tag]
+
+
+calcDependencies()
 
Index: gnue/gnuef/designer/src/TreeView.py
diff -u gnue/gnuef/designer/src/TreeView.py:1.2 
gnue/gnuef/designer/src/TreeView.py:1.3
--- gnue/gnuef/designer/src/TreeView.py:1.2     Sun Jun 17 22:41:25 2001
+++ gnue/gnuef/designer/src/TreeView.py Mon Jun 18 12:50:12 2001
@@ -61,6 +61,9 @@
 
     form.walk(self.inventoryLoadedItems)
 
+    EVT_RIGHT_UP(self, self.OnRightUp)
+
+
   def inventoryLoadedItems (self, object): 
     if object != self.form: 
       if isinstance(object, GFObjects.GFOptions) and \
@@ -86,7 +89,7 @@
     if isinstance (object, GFTrigger.GFTriggerAware): 
       object._treeItemTrigger = \
         self.AppendItem(object._treeItem, "Events")
-      self.SetPyData(object._treeItemTrigger, object)
+      ##self.SetPyData(object._treeItemTrigger, object)
 
 
   def AppendItem(self, parent, description): 
@@ -106,7 +109,8 @@
     if object == None: 
       return
     if handler != __name__:
-      pass
+      print "Adding %s (%s)" % (object.name, object.getObjectType())
+      self.inventoryLoadedItems(object)
 
   def onModifyObject (self, object, handler, modifications):
     if object == None: 
@@ -135,3 +139,11 @@
       else: 
         self.instance.onSetCurrentObject(None, __name__)
 
+  def OnRightUp(self, event):
+    id, flags = self.HitTest(event.GetPosition())
+    object = self.GetPyData(id)
+    self.EnsureVisible(id)
+    self.SelectItem(id)
+    if object != None: 
+      self.PopupMenu(object._popupMenu, event.GetPosition())
+      



reply via email to

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