[Top][All Lists]
[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())
+