/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/tree.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/tree.py

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

revision 218 by bh, Thu Jul 18 12:54:48 2002 UTC revision 383 by jonathan, Tue Jan 28 18:38:03 2003 UTC
# Line 9  Line 9 
9    
10  __version__ = "$Revision$"  __version__ = "$Revision$"
11    
12  from types import StringType  from types import StringType, UnicodeType
13    
14  from wxPython.wx import *  from wxPython.wx import *
15    
16  from Thuban.Model.messages import MAPS_CHANGED, MAP_PROJECTION_CHANGED, \  from Thuban import _
17       LAYERS_CHANGED, LAYER_LEGEND_CHANGED, LAYER_VISIBILITY_CHANGED, \  
18       EXTENSIONS_CHANGED, EXTENSION_OBJECTS_CHANGED  from Thuban.Model.color import Color
19  from Thuban.Model.layer import Layer, shapetype_names  
20    from Thuban.Model.messages import CHANGED
21    from Thuban.Model.layer import Layer
22  from Thuban.Model.map import Map  from Thuban.Model.map import Map
23    
24  from dialogs import NonModalDialog  from dialogs import NonModalDialog
25  from messages import SESSION_CHANGED, SELECTED_LAYER  from messages import SESSION_CHANGED, SELECTED_LAYER
26    
27    BMP_SIZE = 15
28    
29  class SessionTreeCtrl(wxTreeCtrl):  class SessionTreeCtrl(wxTreeCtrl):
30    
# Line 45  class SessionTreeCtrl(wxTreeCtrl): Line 48  class SessionTreeCtrl(wxTreeCtrl):
48            value of TreeInfo.            value of TreeInfo.
49      """      """
50    
     # the session channels to subscribe to update the tree  
     session_channels = (MAPS_CHANGED, MAP_PROJECTION_CHANGED,  
                         LAYERS_CHANGED, LAYER_LEGEND_CHANGED,  
                         LAYER_VISIBILITY_CHANGED, EXTENSIONS_CHANGED,  
                         EXTENSION_OBJECTS_CHANGED)  
   
51      def __init__(self, parent, ID, app):      def __init__(self, parent, ID, app):
52    
53          # Use the WANTS_CHARS style so the panel doesn't eat the Return key.          # Use the WANTS_CHARS style so the panel doesn't eat the Return key.
54          wxTreeCtrl.__init__(self, parent, ID)          wxTreeCtrl.__init__(self, parent, ID)
55    
# Line 69  class SessionTreeCtrl(wxTreeCtrl): Line 67  class SessionTreeCtrl(wxTreeCtrl):
67          # the session currently displayed in the tree          # the session currently displayed in the tree
68          self.session = None          self.session = None
69    
70            self.image_list = wxImageList(BMP_SIZE, BMP_SIZE)
71            self.AssignImageList(self.image_list)
72    
73          # pretend the session has changed to build the initial tree          # pretend the session has changed to build the initial tree
74          self.session_changed()          self.session_changed()
75    
# Line 76  class SessionTreeCtrl(wxTreeCtrl): Line 77  class SessionTreeCtrl(wxTreeCtrl):
77    
78      def unsubscribe_all(self):      def unsubscribe_all(self):
79          if self.session is not None:          if self.session is not None:
80              for channel in self.session_channels:              self.session.Unsubscribe(CHANGED, self.update_tree)
                 self.session.Unsubscribe(channel, self.update_tree)  
81              self.session = None              self.session = None
82          self.app.Unsubscribe(SESSION_CHANGED, self.session_changed)          self.app.Unsubscribe(SESSION_CHANGED, self.session_changed)
83          self.app.interactor.Unsubscribe(SELECTED_LAYER, self.layer_selected)          self.app.interactor.Unsubscribe(SELECTED_LAYER, self.layer_selected)
# Line 106  class SessionTreeCtrl(wxTreeCtrl): Line 106  class SessionTreeCtrl(wxTreeCtrl):
106                  self.SelectItem(item)                  self.SelectItem(item)
107    
108      def add_items(self, parent, items):      def add_items(self, parent, items):
109            # print "\n---\n", items
110    
111            if items is None: return
112    
113          for item in items:          for item in items:
114              if hasattr(item, "TreeInfo"):              if hasattr(item, "TreeInfo"):
115                  # Supports the TreeInfo protocol                  # Supports the TreeInfo protocol
# Line 116  class SessionTreeCtrl(wxTreeCtrl): Line 120  class SessionTreeCtrl(wxTreeCtrl):
120                  self.Expand(treeitem)                  self.Expand(treeitem)
121                  if isinstance(item, Layer):                  if isinstance(item, Layer):
122                      self.layer_to_item[id(item)] = treeitem                      self.layer_to_item[id(item)] = treeitem
123              elif isinstance(item, StringType):              elif isinstance(item, StringType) or \
124                     isinstance(item, UnicodeType):
125                  # it's a string                  # it's a string
                 # FIXME: What to do about UNICODE  
126                  self.AppendItem(parent, item)                  self.AppendItem(parent, item)
127              else:              else:
128                  # assume its a sequence (title, items)                  # assume its a sequence (title, items)
129                  treeitem = self.AppendItem(parent, item[0])                  if isinstance(item[1], Color):
130                  self.add_items(treeitem, item[1])                      treeitem = self.AppendItem(parent, _("(%s)") % item[0])
131    
132                        bmp = wxEmptyBitmap(BMP_SIZE, BMP_SIZE)
133                        brush = wxBrush(wxColour(item[1].red * 255,
134                                                 item[1].green * 255,
135                                                 item[1].blue * 255),
136                                        wxSOLID)
137                        dc = wxMemoryDC()
138                        dc.SelectObject(bmp)
139                        dc.SetBrush(brush)
140                        dc.Clear()
141                        dc.DrawRoundedRectangle(0, 0,
142                                                bmp.GetWidth(), bmp.GetHeight(),
143                                                4)
144                        dc.SelectObject(wxNullBitmap)
145    
146                        i = self.image_list.Add(bmp)
147                        self.SetItemImage(treeitem, i)
148                    else:
149                        treeitem = self.AppendItem(parent, item[0])
150                        self.add_items(treeitem, item[1])
151                  self.Expand(treeitem)                  self.Expand(treeitem)
152    
153      def session_changed(self, *args):      def session_changed(self, *args):
# Line 131  class SessionTreeCtrl(wxTreeCtrl): Line 155  class SessionTreeCtrl(wxTreeCtrl):
155          # if the session has changed subscribe/unsubscribe          # if the session has changed subscribe/unsubscribe
156          if self.session is not new_session:          if self.session is not new_session:
157              if self.session is not None:              if self.session is not None:
158                  for channel in self.session_channels:                  self.session.Unsubscribe(CHANGED, self.update_tree)
                     self.session.Unsubscribe(channel, self.update_tree)  
159              if new_session is not None:              if new_session is not None:
160                  for channel in self.session_channels:                  new_session.Subscribe(CHANGED, self.update_tree)
                     new_session.Subscribe(channel, self.update_tree)  
161              self.session = new_session              self.session = new_session
162          self.update_tree()          self.update_tree()
163    
# Line 147  class SessionTreeCtrl(wxTreeCtrl): Line 169  class SessionTreeCtrl(wxTreeCtrl):
169              if isinstance(object, Layer) or isinstance(object, Map):              if isinstance(object, Layer) or isinstance(object, Map):
170                  break                  break
171              item = self.GetItemParent(item)              item = self.GetItemParent(item)
172            else:
173                # No layer or map was found in the chain of parents, so
174                # there's nothing we can do.
175                return
176    
177          self.changing_selection = 1          self.changing_selection = 1
178          try:          try:
# Line 184  class SessionTreeView(NonModalDialog): Line 210  class SessionTreeView(NonModalDialog):
210      """Non modal dialog showing the session as a tree"""      """Non modal dialog showing the session as a tree"""
211    
212      def __init__(self, parent, app, name):      def __init__(self, parent, app, name):
213          NonModalDialog.__init__(self, parent, app.interactor, name, "Session")          NonModalDialog.__init__(self, parent, app.interactor, name,
214                                    _("Session"))
215          self.tree = SessionTreeCtrl(self, -1, app)          self.tree = SessionTreeCtrl(self, -1, app)
216    
217      def OnClose(self, event):      def OnClose(self, event):

Legend:
Removed from v.218  
changed lines
  Added in v.383

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26