/[papo]/gnue/designer/src/TreeView.py
ViewVC logotype

Diff of /gnue/designer/src/TreeView.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by charlie, Tue Aug 27 18:15:52 2002 UTC revision 1.4 by styxman, Fri Nov 8 16:46:03 2002 UTC
# Line 1  Line 1 
1  #  #
 # Copyright 2001 Free Software Foundation  
 #  
2  # This file is part of GNU Enterprise.  # This file is part of GNU Enterprise.
3  #  #
4  # GNU Enterprise is free software; you can redistribute it  # GNU Enterprise is free software; you can redistribute it
# Line 18  Line 16 
16  # write to the Free Software Foundation, Inc., 59 Temple Place  # write to the Free Software Foundation, Inc., 59 Temple Place
17  # - Suite 330, Boston, MA 02111-1307, USA.  # - Suite 330, Boston, MA 02111-1307, USA.
18  #  #
19    # Copyright 2001-2002 Free Software Foundation
20    #
21  # FILE:  # FILE:
22  # TreeView.py  # TreeView.py
23  #  #
# Line 25  Line 25 
25  #  #
26  # NOTES:  # NOTES:
27  #  #
28  # TODO: all the SetItemImage lines in this file have been commented out as on win32 it was segfaulting  # TODO: * all the SetItemImage lines in this file have been commented
29    #         out as on win32 it was segfaulting
30    #       * make TreeView more stable, at the moment it fires OnTreeItemSelected
31    #         events while beeing destroyed, which is causing segfaults on wxPy<2.3
32    #         (wxPy 2.3 raises exceptions) when TreeView is not the first tool to
33    #         be removed
34    
35  import sys, os  import sys, os
36  from wxPython.wx import *  from wxPython.wx import *
37  from gnue.common import GDebug  from gnue.common import GDebug, GTrigger
38  from gnue.forms import GFForm, GFObjects, GFTrigger, GFLibrary  from gnue.forms import GFForm, GFObjects, GFLibrary
39  from PopupMenu import ObjectMenu  from PopupMenu import ObjectMenu
40  from Icons import treeIconMap, treeIconList  from Icons import treeIconMap, treeIconList
41    
# Line 39  class TreeView (wxTreeCtrl): Line 44  class TreeView (wxTreeCtrl):
44      wxTreeCtrl.__init__(self, parent, wxNewId(),      wxTreeCtrl.__init__(self, parent, wxNewId(),
45         style=wxTR_HAS_BUTTONS|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT)         style=wxTR_HAS_BUTTONS|wxTR_EDIT_LABELS|wxTR_HAS_VARIABLE_ROW_HEIGHT)
46      self.instance = instance      self.instance = instance
47      self.form = form      self.rootObject = form
48      self.__handler = None      self._handler = None
49    
50      self.SetImageList(treeIconList)      self.SetImageList(treeIconList)
51    
# Line 48  class TreeView (wxTreeCtrl): Line 53  class TreeView (wxTreeCtrl):
53      EVT_TREE_END_LABEL_EDIT(self, self.GetId(), self.OnTreeLabelEditEnd)      EVT_TREE_END_LABEL_EDIT(self, self.GetId(), self.OnTreeLabelEditEnd)
54      EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnTreeItemSelected)      EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnTreeItemSelected)
55    
56      self.form._treeItem = self.AddRoot("Form")      self.rootObject._treeItem = self.AddRoot(self.rootDescr)
     self.form._treeItemFormProperties = \  
         self.AppendItem(self.form._treeItem, "Properties")  
     self.SetItemImage(self.form._treeItemFormProperties, treeIconMap['properties'])  
     self.form._treeItemImportedLibraries = \  
         self.AppendItem(self.form._treeItem, "Imported Libraries")  
     self.SetItemImage(self.form._treeItemImportedLibraries, treeIconMap['import'])  
     self.form._treeItemDataSources = \  
         self.AppendItem(self.form._treeItem, "Data Sources")  
     self.SetItemImage(self.form._treeItemDataSources, treeIconMap['datasource'])  
     self.form._treeItemNamedTriggers = \  
         self.AppendItem(self.form._treeItem, "Shared Triggers")  
     self.SetItemImage(self.form._treeItemNamedTriggers, treeIconMap['trigger'])  
     self.form._treeItemPageLayout = \  
         self.AppendItem(self.form._treeItem, "Page Layout")  
     self.SetItemImage(self.form._treeItemPageLayout, treeIconMap['page'])  
   
     self.SetPyData(self.form._treeItem, self.form)  
     self.SetPyData(self.form._treeItemFormProperties, ObjectMenu(self.instance,None))  
     self.SetPyData(self.form._treeItemDataSources, ObjectMenu(self.instance,None))  
     self.SetPyData(self.form._treeItemNamedTriggers, ObjectMenu(self.instance,None))  
     self.SetPyData(self.form._treeItemPageLayout, ObjectMenu(self.instance,None))  
   
     form.walk(self.inventoryObject)  
57    
58      EVT_RIGHT_DOWN(self, self.OnRightDown)      EVT_RIGHT_DOWN(self, self.OnRightDown)
59      EVT_LEFT_DCLICK(self, self.OnEditProperties)      EVT_LEFT_DCLICK(self, self.OnEditProperties)
60    
61      def AppendItem(self, parent, description):
   def inventoryObject (self, object):  
     if object != self.form:  
       icon = 'properties'  
       if isinstance(object, GFObjects.GFOptions) and \  
          object._parent == self.form:  
         object._treeItem = self.form._treeItemFormProperties  
         icon = 'properties'  
       else:  
         parentTreeItem = object._parent._treeItem  
         if isinstance(object, GFTrigger.GFTrigger) and \  
            object.type == 'NAMED':  
           parentTreeItem = self.form._treeItemNamedTriggers  
           icon = 'trigger'  
         elif isinstance(object, GFTrigger.GFTrigger):  
   
           if not hasattr(object._parent,'_treeItemTrigger'):  
             object._parent._treeItemTrigger = \  
               self.AppendItem(object._parent._treeItem, "Events")  
             #self.SetItemImage(object._parent._treeItemTrigger, treeIconMap['trigger'])  
   
   
           parentTreeItem = object._parent._treeItemTrigger  
           icon = 'trigger'  
         elif isinstance(object, GFObjects.GFDataSource) or \  
            isinstance(object, GFObjects.GFDatabase):  
           parentTreeItem = self.form._treeItemDataSources  
           icon = 'datasource'  
         elif isinstance(object, GFObjects.GFPage) and \  
              object._parent == self.form:  
           parentTreeItem = self.form._treeItemPageLayout  
           icon = 'page'  
         elif object._type in ('GFBlock',):  
           icon = 'block'  
         elif object._type in ('GFOption',):  
           icon = 'properties'  
         elif object._type in ('GFEntry',):  
           icon = 'entry'  
         elif len(object._type) >= 8 and \  
              object._type[:8] == 'GFImport':  
           icon = 'import'  
         elif object.findParentOfType('GFPage') != None:  
           icon = 'pagewidget'  
   
           
         object._treeItem = self.AppendItem(parentTreeItem,  
             "%s" % object.getDescription())  
         self.SetPyData(object._treeItem, object)  
         #self.SetItemImage(object._treeItem, treeIconMap[icon])  
   
   
   def AppendItem(self, parent, description):  
62      rv = wxTreeCtrl.AppendItem(self, parent, description)      rv = wxTreeCtrl.AppendItem(self, parent, description)
63      return rv      return rv
64      
65    def onSetCurrentObject (self, object, handler):    def onSetCurrentObject (self, object, handler):
66      if object == None:      if object == None:
67        return        return
68      if handler != __name__:      if handler != __name__:
69        self.EnsureVisible(object._treeItem)        self.EnsureVisible(object._treeItem)
70        self.__handler = handler        self._handler = handler
71        self.SelectItem(object._treeItem)        self.SelectItem(object._treeItem)
72        self.__handler = None        self._handler = None
73    
74    def onCreateObject (self, object, handler):    def onCreateObject (self, object, handler):
75      if object == None:      if object == None:
76        return        return
77      if handler != __name__:      if handler != __name__:
78        GDebug.printMesg(4,"Adding %s (%s)" % (object.name, object._type))        try:
79            GDebug.printMesg(4,"Adding %s (%s)" % (object.name, object._type))
80          except:
81            pass
82        self.inventoryObject(object)        self.inventoryObject(object)
83    
84    def onModifyObject (self, object, handler, modifications):    def onModifyObject (self, object, handler, modifications):
85      if object == None:      if object == None:
86        return        return
87      if handler != __name__:      if handler != __name__:
88        for modification in modifications:        for modification in modifications:
89          attribute, value = modification          attribute, value = modification
90          if attribute == 'name' and object != self.form:          if attribute == 'name' and object != self.rootObject:
91            self.SetItemText(object._treeItem, object.getDescription())            self.SetItemText(object._treeItem, object.getDescription())
92    
93    def onDeleteObject (self, object, handler):    def onDeleteObject (self, object, handler):
94      if object == None:      if object == None:
95        return        return
96      if hasattr(object, '_treeItemTrigger'):      if hasattr(object, '_treeItemTrigger'):
97        self.Delete(object._treeItemTrigger)        self.Delete(object._treeItemTrigger)
98      if hasattr(object, '_treeItem'):      if hasattr(object, '_treeItem'):
99        if self.GetSelection() == object._treeItem:        if self.GetSelection() == object._treeItem:
100          self.SelectItem(self.GetItemParent(object._treeItem))          self.SelectItem(self.GetItemParent(object._treeItem))
101        self.Delete(object._treeItem)        self.Delete(object._treeItem)
102      self.Refresh()      self.Refresh()
103    
104    def OnTreeLabelEdit(self, event):    def OnTreeLabelEdit(self, event):
105      event.Veto()      event.Veto()
106    
107    def OnTreeLabelEditEnd(self, event):    def OnTreeLabelEditEnd(self, event):
108      pass      pass
109    
110    def OnTreeItemSelected(self, event):    def OnTreeItemSelected(self, event):
111      if self.__handler == None:      if self._handler == None:
112        object = self.GetPyData(event.GetItem())        object = self.GetPyData(event.GetItem())
113        if object != None and not isinstance(object, ObjectMenu):        if object != None and not isinstance(object, ObjectMenu):
114          self.instance.onSetCurrentObject(object, __name__)          self.instance.onSetCurrentObject(object, __name__)
115        else:        else:
116          self.instance.onSetCurrentObject(None, __name__)          self.instance.onSetCurrentObject(None, __name__)
117      
118    
119    def OnRightDown(self, event):    def OnRightDown(self, event):
120      id, flags = self.HitTest(event.GetPosition())      id, flags = self.HitTest(event.GetPosition())
121      object = self.GetPyData(id)      object = self.GetPyData(id)
122      self.EnsureVisible(id)      self.EnsureVisible(id)
123      self.SelectItem(id)      self.SelectItem(id)
124      if isinstance(object, ObjectMenu):      if isinstance(object, ObjectMenu):
125        self.PopupMenu(object, event.GetPosition())        self.PopupMenu(object, event.GetPosition())
126      elif object != None:      elif object != None:
127        self.PopupMenu(object._popupMenu, event.GetPosition())        self.PopupMenu(object._popupMenu, event.GetPosition())
128                
129    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26