[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/designer/src Incubator.py LayoutEditor.py ...
From: |
Jason Cater |
Subject: |
gnue/designer/src Incubator.py LayoutEditor.py ... |
Date: |
Mon, 19 Nov 2001 16:17:56 -0500 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: Jason Cater <address@hidden> 01/11/19 16:17:56
Modified files:
designer/src : Incubator.py LayoutEditor.py PopupMenu.py
PropertyEditor.py TreeView.py
Log message:
many win32 bugfixes; new popup menu system; cleaner layout system (much
more object reuse)
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/Incubator.py.diff?cvsroot=OldCVS&tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/LayoutEditor.py.diff?cvsroot=OldCVS&tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/PopupMenu.py.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/PropertyEditor.py.diff?cvsroot=OldCVS&tr1=1.15&tr2=1.16&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/designer/src/TreeView.py.diff?cvsroot=OldCVS&tr1=1.16&tr2=1.17&r1=text&r2=text
Patches:
Index: gnue/designer/src/Incubator.py
diff -u gnue/designer/src/Incubator.py:1.9 gnue/designer/src/Incubator.py:1.10
--- gnue/designer/src/Incubator.py:1.9 Thu Sep 13 18:39:22 2001
+++ gnue/designer/src/Incubator.py Mon Nov 19 16:17:55 2001
@@ -35,6 +35,7 @@
GDebug.printMesg(3,'Creating a "%s" object' % tag)
+ GDebug.printMesg(6,"Object's parent is %s" % parentHint)
name = instance.getNextGenericName(tag)
@@ -70,9 +71,15 @@
elif attr in ('x','y',):
attributes[attr] = 0
elif attr in ('height',):
- attributes[attr] = 1
+ if tag in ('box','scrollbar'):
+ attributes[attr] = 4
+ else:
+ attributes[attr] = 1
elif attr == 'width':
- attributes[attr] = 10
+ if tag in ('scrollbar',):
+ attributes[attr] = 1
+ else:
+ attributes[attr] = 10
elif attr in ('text','label'):
attributes[attr] = name
Index: gnue/designer/src/LayoutEditor.py
diff -u gnue/designer/src/LayoutEditor.py:1.27
gnue/designer/src/LayoutEditor.py:1.28
--- gnue/designer/src/LayoutEditor.py:1.27 Sun Nov 18 23:38:11 2001
+++ gnue/designer/src/LayoutEditor.py Mon Nov 19 16:17:55 2001
@@ -46,27 +46,19 @@
del self.widgets['GFPage']
self.notebook = wxNotebook(self, -1, pos=wxPoint(4, 4), size=wxSize(32,32))
-
-
- # TODO: There must be a better way of calculating a lighter shade
- # TODO: for the workspace. What happens if a color value > (255-32)?
- self.backcolor = wxColour(self.panelColor.Red()+32,
- self.panelColor.Green()+32,
- self.panelColor.Blue()+32)
-
- self.page = None
-
+ self.backcolor = wxWHITE
self.propBar = PropertyBar(self)
EVT_NOTEBOOK_PAGE_CHANGED(self,self.notebook.GetId(), self.OnPageSelected)
-
EVT_SIZE(self, self.OnSize)
-
+ self.page = None
self.panel = None
+ self._notebookMap = {}
self._pageList = [] # Needed by UIwxpython
+ self.positionMappings = {}
+ self.widgetList = []
- self._notebookMap = {}
instance._form.walk (self.inventoryObject)
@@ -76,12 +68,14 @@
self._notebookMap[object] = index
self._notebookMap[index] = object
- # TODO: self.workspace needs to have SetScrollbars called with
- # TODO: reasonable values based on size and position of self.panel
self.workspace = wxScrolledWindow(self.notebook, -1, pos=wxPoint(0,0),
style=wxCLIP_CHILDREN|wxHSCROLL|wxVSCROLL|wxSUNKEN_BORDER)
+
+ # TODO: self.workspace needs to have SetScrollbars called with
+ # TODO: reasonable values based on size and position of self.panel
self.workspace.SetScrollbars(20,20,50,50)
self.workspace.SetBackgroundColour(self.backcolor)
+
self.notebook.AddPage(self.workspace,object.name)
object.__workspace = self.workspace
self.drawPage(object)
@@ -106,6 +100,7 @@
if page != None and page != self.page:
self.page = page
+ self.panel = self.page.__panel
self.notebook.SetSelection(self._notebookMap[page])
try:
self.workspace = page.__workspacee
@@ -125,12 +120,16 @@
self._currentSelection = {}
if object == None:
return
- if handler != __name__:
- if object.findParentOfType('GFPage') == self.page:
-# self.__getBlocks(object)
- self.__drawItem(object)
+ if handler != __name__:
origpage = self.page
+
+ if object._type != 'GFPage':
+ page = object.findParentOfType('GFPage')
+ if page:
+ self._setCurrentPage(page)
+ self.__drawItem(object)
+
self.inventoryObject(object)
self._setCurrentPage(origpage)
@@ -143,6 +142,11 @@
if object._type == 'GFPage':
self.notebook.SetPageText(self._notebookMap[object],object.name)
self.notebook.SetSelection(self.notebook.GetSelection())
+ else:
+ page = object.findParentOfType('GFPage')
+ if page:
+ self._setCurrentPage(page)
+
if object in (self._form, self.page) or object in self.widgetList:
self.drawPage(self.page)
@@ -165,52 +169,55 @@
def drawPage(self, page):
self._currentSelection = {}
self.page = page
- self.panel = GridPane(self, self.workspace, wxPoint(10,12))
- self.panelColor = self.panel.GetBackgroundColour()
- self.panelGridColor = wxColour(self.panelColor.Red()+16,
+
+ try:
+ self.panel = self.page.__panel
+ except AttributeError:
+ self.panel = GridPane(self, self.workspace, wxPoint(10,12))
+ self.page.__panel = self.panel
+ self.panelColor = self.panel.GetBackgroundColour()
+ self.panelGridColor = wxColour(self.panelColor.Red()+16,
self.panelColor.Green()+16,
self.panelColor.Blue()+16)
- UIwxpython.initFont(self.panel)
+ UIwxpython.initFont(self.panel)
- maxWidth, maxHeight, maxDescent, maxLeading = [0,0,0,0]
+ maxWidth, maxHeight, maxDescent, maxLeading = [0,0,0,0]
- # need to add string.punctionation if we dump python 1.5.2
- checkchars = string.letters+string.digits+"-\|"
- for letter in checkchars:
- width,height,descent,leading = self.panel.GetFullTextExtent(letter)
- maxWidth = maxWidth > width and maxWidth or width
- maxHeight = maxHeight > height and maxHeight or height
- maxDescent = maxDescent > descent and maxDescent or descent
- maxLeading = maxLeading > leading and maxLeading or leading
+ # need to add string.punctionation if we dump python 1.5.2
+ checkchars = string.letters+string.digits+"-\|" + string.punctuation
+ for letter in checkchars:
+ width,height,descent,leading = self.panel.GetFullTextExtent(letter)
+ maxWidth = maxWidth > width and maxWidth or width
+ maxHeight = maxHeight > height and maxHeight or height
+ maxDescent = maxDescent > descent and maxDescent or descent
+ maxLeading = maxLeading > leading and maxLeading or leading
- self.charWidth = maxWidth+maxLeading
- self.charHeight = maxHeight+maxDescent
+ self.charWidth = maxWidth+maxLeading
+ self.charHeight = maxHeight+maxDescent
- self.borderPercentage = (int(GConfig.get('borderPercentage')) / 100.0)
- self.textPercentage = (int(GConfig.get('textPercentage')) / 100.0)
- self.positionMappings = {}
-
- width = self._form.width
- height = self._form.height
+ self.borderPercentage = (int(GConfig.get('borderPercentage')) / 100.0)
+ self.textPercentage = (int(GConfig.get('textPercentage')) / 100.0)
- self.widgetWidth = (self.charWidth * self.borderPercentage)
- self.widgetHeight = (self.charHeight * self.borderPercentage) + 3
- self.textWidth = self.charWidth * self.textPercentage
- self.textHeight = self.charHeight * self.textPercentage
+ width = self._form.width
+ height = self._form.height
- self.gridWidth = self.widgetWidth
- self.gridHeight = self.widgetHeight
+ self.widgetWidth = (self.charWidth * self.borderPercentage)
+ self.widgetHeight = (self.charHeight * self.borderPercentage) + 3
+ self.textWidth = self.charWidth * self.textPercentage
+ self.textHeight = self.charHeight * self.textPercentage
+
+ self.gridWidth = self.widgetWidth
+ self.gridHeight = self.widgetHeight
- self.menu_sb_space=2 # the extra spaces needed by the menu, toolbar and
statusbar
+ self.menu_sb_space=2 # the extra spaces needed by the menu, toolbar and
statusbar
- self.panel.SetClientSize(wxSize(int(width)*int(self.widgetWidth),
+ self.panel.SetClientSize(wxSize(int(width)*int(self.widgetWidth),
int(height)*int(self.widgetHeight)))
- self.panel.Refresh()
+ self.panel.Refresh()
- self.widgetList = []
+ page.walk(self.__drawItem)
- page.walk(self.__drawItem)
EVT_CHAR(self.panel, self.keyTrap)
Index: gnue/designer/src/PopupMenu.py
diff -u gnue/designer/src/PopupMenu.py:1.5 gnue/designer/src/PopupMenu.py:1.6
--- gnue/designer/src/PopupMenu.py:1.5 Sun Nov 18 23:38:11 2001
+++ gnue/designer/src/PopupMenu.py Mon Nov 19 16:17:55 2001
@@ -31,73 +31,43 @@
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...")
+
- self.object = object
- self.instance = instance
+class ActionMenu(wxMenu):
+ def __init__(self, instance, object, parent=None, text=None,
parentText=None):
+ wxMenu.__init__(self, text)
+ self.__instance = instance
+ self.__parent = parent
+ self._object = object
self._newMap = {}
+ if parent:
+ parent.AppendMenu(wxNewId(), parentText, self)
- 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 >
+ if object == None:
+
+ self.addCreateTag('datasource','New Data Source')
+ self.addCreateTag('trigger','New Data Source')
+ self.addCreateTag('page','New Page')
- menu = wxMenu("New...")
+ else:
- id = wxNewId()
- menu.Append(id, "Data Source")
- EVT_MENU(menu, id, self.OnCreateDataSource)
- id = wxNewId()
- menu.Append(id, "Shared Trigger")
- EVT_MENU(menu, id, self.OnCreateNamedTrigger)
- id = wxNewId()
- menu.Append(id, "Layout Page")
- EVT_MENU(menu, id, self.OnCreatePage)
-
- menu.AppendSeparator()
-
- 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)
-
+ # New >
+ CreateObjectMenu(instance, object, self)
+
# 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...")
@@ -110,230 +80,62 @@
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):
+ self.AppendSeparator()
# 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__)
-
+ def addChildObjectMenu(self):
+ object = self._object
+ if len(object._children):
+ self.AppendSeparator()
+ for child in object._children:
+ if isinstance (child, GObjects.GObj):
+ self.AppendMenu(wxNewId(), hasattr(child,'name') and child.name or \
+ string.upper(child.getObjectType()[2]) + \
+ string.lower(child.getObjectType()[3:]),
+ PageMenu(self.__instance, child, self.x, self.y))
+
+
+ def addCreateTag(self, tag, text):
+ tid = wxNewId()
+ self._newMap[tid] = tag
+ self.Append(tid, text)
+ EVT_MENU(self.__instance, tid, self.OnCreateObject)
- # 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__)
+ def OnEditProperties(self, event):
+ self.__instance.propertyEditorWindow.Show(1)
+ self.__instance.propertyEditorWindow.Raise()
+ self.__instance.propertyEditorWindow.SetFocus()
- # 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 OnEditEvent(self, event):
+ pass
-
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)
+ GDebug.printMesg(4,'Creating object %s with id %s'%(tag, event.GetId()))
+ Incubator.createObject(self.__instance, self.__instance._form, tag,
+ parentHint=self._object,
+ attributes=hasattr(self,'x') and {'x': self.x, 'y': self.y} or {} )
def OnCreateDataSource(self, event):
- Incubator.createObject(self.instance, self.instance._form, 'datasource')
+ Incubator.createObject(self.__instance, self.__instance._form,
'datasource')
def OnCreateNamedTrigger(self, event):
- Incubator.createObject(self.instance, self.instance._form, 'trigger')
+ Incubator.createObject(self.__instance, self.__instance._form, 'trigger')
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 >
+ Incubator.createObject(self.__instance, self.__instance._form, 'page')
- menu = wxMenu("New...")
- self._newMenu = menu
-
- self._holdingArea = []
-
- 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(self, 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:
- if isinstance (child, GObjects.GObj):
- self.AppendMenu(wxNewId(), hasattr(child,'name') and child.name or
\
- string.upper(child.getObjectType()[2]) + \
- string.lower(child.getObjectType()[3:]),
- 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)
+ Incubator.deleteObject(self.__instance, self.__instance._form,
self._object)
def OnReorderLayout(self, event):
unqId = 0
@@ -342,12 +144,12 @@
boxObjects = {}
navObjects = {}
blockObjects = {}
- self.object._upperX = 99999
- self.object._upperY = 99999
+ 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[:]:
+ for object in self._object._children[:]:
if hasattr(object, 'hidden') and object.hidden:
hiddenObjects.append(object)
elif object.getObjectType() == 'GFTrigger':
@@ -356,17 +158,17 @@
object._popupMenu.OnReorderLayout(event)
object.__savedChildren = object._children[:]
for o2 in object.__savedChildren:
- self.instance.onDeleteObject(o2, __name__)
+ 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
+ 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
@@ -376,62 +178,87 @@
navObjects[oid] = object
# Notify everyone that this object was deleted
- self.instance.onDeleteObject(object, __name__)
+ self.__instance.onDeleteObject(object, __name__)
- self.object._children = []
+ self._object._children = []
# First, add back triggers
for object in triggerObjects:
- self.object._children.append(object)
- self.instance.onCreateObject(object, __name__)
+ 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__)
+ 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__)
+ 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__)
+ 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__)
+ 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__)
+ 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')
+class CreateObjectMenu(ActionMenu):
+ def __init__(self, instance, object, parent):
+ ActionMenu.__init__(self, instance, None, parent, 'New...','&New')
- def OnCreateNamedTrigger(self, event):
- Incubator.createObject(self.instance, self.instance._form, 'trigger')
+ self._object = object
+
+ self.AppendSeparator()
+ tag = string.lower(object.getObjectType()[2:])
+ if Incubator.elementMapping.has_key(tag):
+ Incubator.elementMapping[tag].sort()
+ for element in Incubator.elementMapping[tag]:
+ 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:])
- def OnCreatePage(self, event):
- Incubator.createObject(self.instance, self.instance._form, 'page')
+ self.addCreateTag(element, descr)
+
+
+
+# This menu is the popup menu on the object tree
+class ObjectMenu(ActionMenu):
+ def __init__(self, instance, object):
+ ActionMenu.__init__(self, instance, object, None, "Object Tasks...")
+
+
+
+# This menu is the popup menu on the layout screen
+class PageMenu(ActionMenu):
+ def __init__(self, instance, object, x, y):
+ ActionMenu.__init__(self, instance, object, None, hasattr(object,'name')
and \
+ object.name or string.upper(object.getObjectType()[2]) + \
+ string.lower(object.getObjectType()[3:]) )
+
+ self.x = x
+ self.y = y
+ self.addChildObjectMenu()
Index: gnue/designer/src/PropertyEditor.py
diff -u gnue/designer/src/PropertyEditor.py:1.15
gnue/designer/src/PropertyEditor.py:1.16
--- gnue/designer/src/PropertyEditor.py:1.15 Sun Nov 18 23:38:11 2001
+++ gnue/designer/src/PropertyEditor.py Mon Nov 19 16:17:55 2001
@@ -73,11 +73,16 @@
self.elements = elements[string.lower(object.getObjectType()[2:])]
+ # Speed up the process by not refreshing the grid yet
self.grid.BeginBatch()
- self.grid.DeleteRows(0,self.grid.GetNumberRows())
+ # Delete any old rows from a previous object
+ nr = self.grid.GetNumberRows()
+ if nr:
+ self.grid.DeleteRows(0,nr)
+
self.rowList = self.attributes.keys()
self.rowList.sort()
@@ -95,12 +100,15 @@
else:
i = i + 1
+
+ # Create the number of rows we'll need
self.grid.InsertRows(0,len(self.rowList))
i = 0
for key in self.rowList:
+ # This little tidbit does mixed case w/'_' as separators
words = string.split(key,'_')
for j in range(len(words)):
try:
@@ -109,6 +117,9 @@
words[j] = string.upper(words[j])
self.grid.SetRowLabelValue(i,string.join(words,' '))
+
+ # Determine the type of Cell Editor we want
+ # (Integer, Boolean, Dropdown, Char)
if self.attributes[key].has_key('ValueSet'):
self.grid.SetCellEditor(i, 0,
RestrictedCellEditor(self.grid,self.attributes[key]))
elif self.attributes[key]['Typecast'] == GTypecast.boolean:
@@ -119,6 +130,8 @@
else:
self.grid.SetCellEditor(i, 0,
CharCellEditor(self.grid,self.attributes[key]))
+
+ # Set the initial value of the cells to the current property values
if hasattr(object, key):
if self.attributes[key]['Typecast'] == GTypecast.boolean:
if object.__dict__[key]:
@@ -131,12 +144,16 @@
pass
i = i + 1
+
+ # Redraw the grid
self.grid.EndBatch()
self.grid.ForceRefresh()
+
def onCreateObject (self, object, handler):
pass
+
def onModifyObject (self, object, handler, modifications):
if object == None:
return
@@ -145,12 +162,14 @@
# attribute, value = modification
self.onSetCurrentObject(object, handler)
+
def onDeleteObject (self, object, handler):
if object == None:
return
if handler != __name__:
pass
+
def onSize(self, event):
x,y = self.GetClientSizeTuple()
self.panel.SetSize((x-12,y-12))
@@ -463,9 +482,6 @@
EVT_SIZE(self, self.onSize)
def onSetCurrentObject (self, object, handler):
-
- # Until this works!
- return
if object == None:
return
Index: gnue/designer/src/TreeView.py
diff -u gnue/designer/src/TreeView.py:1.16 gnue/designer/src/TreeView.py:1.17
--- gnue/designer/src/TreeView.py:1.16 Sun Nov 18 23:38:11 2001
+++ gnue/designer/src/TreeView.py Mon Nov 19 16:17:55 2001
@@ -72,13 +72,13 @@
self.SetPyData(self.form._treeItemNamedTriggers,
ObjectMenu(self.instance,None))
self.SetPyData(self.form._treeItemPageLayout,
ObjectMenu(self.instance,None))
- form.walk(self.inventoryLoadedItems)
+ form.walk(self.inventoryObject)
EVT_RIGHT_DOWN(self, self.OnRightDown)
EVT_LEFT_DCLICK(self, self.OnEditProperties)
- def inventoryLoadedItems (self, object):
+ def inventoryObject (self, object):
if object != self.form:
icon = 'properties'
if isinstance(object, GFObjects.GFOptions) and \
@@ -146,7 +146,7 @@
return
if handler != __name__:
GDebug.printMesg(4,"Adding %s (%s)" % (object.name,
object.getObjectType()))
- self.inventoryLoadedItems(object)
+ self.inventoryObject(object)
def onModifyObject (self, object, handler, modifications):
if object == None:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/designer/src Incubator.py LayoutEditor.py ...,
Jason Cater <=