commit-gnue
[Top][All Lists]
Advanced

[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: 



reply via email to

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