/[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 14 by bh, Fri Aug 31 15:34:33 2001 UTC revision 36 by bh, Thu Sep 6 17:16:06 2001 UTC
# Line 15  from Thuban.Model.messages import MAPS_C Line 15  from Thuban.Model.messages import MAPS_C
15       LAYERS_CHANGED, LAYER_LEGEND_CHANGED, LAYER_VISIBILITY_CHANGED       LAYERS_CHANGED, LAYER_LEGEND_CHANGED, LAYER_VISIBILITY_CHANGED
16  from Thuban.Model.layer import Layer, shapetype_names  from Thuban.Model.layer import Layer, shapetype_names
17  from Thuban.Model.map import Map  from Thuban.Model.map import Map
 import view  
18    
19    from dialogs import NonModalDialog
20  from messages import SESSION_CHANGED, SELECTED_LAYER  from messages import SESSION_CHANGED, SELECTED_LAYER
21    
22  def color_string(color):  def color_string(color):
# Line 24  def color_string(color): Line 24  def color_string(color):
24          return "None"          return "None"
25      return "(%.3f, %.3f, %.3f)" % (color.red, color.green, color.blue)      return "(%.3f, %.3f, %.3f)" % (color.red, color.green, color.blue)
26    
 class myTreeCtrlPanel(wxPanel):  
27    
28      def __init__(self, parent, app):  class SessioinTreeCtrl(wxTreeCtrl):
29    
30        def __init__(self, parent, ID, app):
31          # 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.
32          wxPanel.__init__(self, parent, -1, style=wxWANTS_CHARS)          wxTreeCtrl.__init__(self, parent, ID)
         self.app = app  
33    
34            self.app = app
35          # boolean to indicate that we manipulate the selection ourselves          # boolean to indicate that we manipulate the selection ourselves
36          # so that we can ignore the selection events generated          # so that we can ignore the selection events generated
37          self.changing_selection = 0          self.changing_selection = 0
38    
         EVT_SIZE(self, self.OnSize)  
         self.tree = wxTreeCtrl(self, -1)  
   
39          self.app.Subscribe(SESSION_CHANGED, self.session_changed)          self.app.Subscribe(SESSION_CHANGED, self.session_changed)
40          self.app.interactor.Subscribe(SELECTED_LAYER, self.layer_selected)          self.app.interactor.Subscribe(SELECTED_LAYER, self.layer_selected)
41          # pretend the session has changed to build the initial tree          # pretend the session has changed to build the initial tree
42          self.session_changed()          self.session_changed()
43    
44          EVT_TREE_SEL_CHANGED(self, self.tree.GetId(), self.OnSelChanged)          EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
45    
46      def update_tree(self, *args):      def update_tree(self, *args):
47          """Clear and rebuild the tree"""          """Clear and rebuild the tree"""
48          self.tree.DeleteAllItems()          self.DeleteAllItems()
49          session = self.app.session          session = self.app.session
50          root = self.tree.AddRoot("Session: %s" % session.title)          root = self.AddRoot("Session: %s" % session.title)
51          for map in session.Maps():          for map in session.Maps():
52              mapitem = self.tree.AppendItem(root, "Map: %s" % map.title)              mapitem = self.AppendItem(root, "Map: %s" % map.title)
53              self.tree.SetPyData(mapitem, map)              self.SetPyData(mapitem, map)
54              if map.projection and len(map.projection.params) > 0:              if map.projection and len(map.projection.params) > 0:
55                  projectionitem = self.tree.AppendItem(mapitem, "Projection")                  projectionitem = self.AppendItem(mapitem, "Projection")
56                  for param in map.projection.params:                  for param in map.projection.params:
57                      parameteritem = self.tree.AppendItem(projectionitem,                      parameteritem = self.AppendItem(projectionitem, str(param))
58                                                           str(param))                  self.Expand(projectionitem)
                 self.tree.Expand(projectionitem)  
59    
60              layers = map.Layers()              layers = map.Layers()
61              for layer_index in range(len(layers) - 1, -1, -1):              for layer_index in range(len(layers) - 1, -1, -1):
62                  layer = layers[layer_index]                  layer = layers[layer_index]
63                  idata = wxTreeItemData()                  idata = wxTreeItemData()
64                  idata.SetData(layer)                  idata.SetData(layer)
65                  layeritem = self.tree.AppendItem(mapitem,                  layeritem = self.AppendItem(mapitem,
66                                                   "Layer '%s'" % layer.Title(),                                              "Layer '%s'" % layer.Title(),
67                                                   data = idata)                                              data = idata)
68                  if layer is self.app.interactor.selected_layer:                  if layer is self.app.interactor.selected_layer:
69                      self.tree.SelectItem(layeritem)                      self.SelectItem(layeritem)
70                  if isinstance(layer, Layer):                  if isinstance(layer, Layer):
71                      if layer.Visible():                      if layer.Visible():
72                          text = "Shown"                          text = "Shown"
73                      else:                      else:
74                          text = "Hidden"                          text = "Hidden"
75                      self.tree.AppendItem(layeritem, text)                      self.AppendItem(layeritem, text)
76                      self.tree.AppendItem(layeritem,                      self.AppendItem(layeritem, "Shapes: %d" %layer.NumShapes())
77                                           "Shapes: %d" % layer.NumShapes())                      self.AppendItem(layeritem, ("Extents: (%g, %g, %g, %g)"
78                      self.tree.AppendItem(layeritem,                                                  % layer.LatLongBoundingBox()))
79                                           ("Extents: (%g, %g, %g, %g)"                      self.AppendItem(layeritem,
80                                            % layer.LatLongBoundingBox()))                                      "Shapetype: %s"
81                      self.tree.AppendItem(layeritem,                                      % shapetype_names[layer.ShapeType()])
82                                           "Shapetype: %s" %                      self.AppendItem(layeritem,
83                                           shapetype_names[layer.ShapeType()])                                      "Fill: " + color_string(layer.fill))
84                      self.tree.AppendItem(layeritem,                      self.AppendItem(layeritem,
85                                           "Fill: " + color_string(layer.fill))                                      "Outline: " + color_string(layer.stroke))
86                      self.tree.AppendItem(layeritem,                  self.Expand(layeritem)
87                                        "Outline: " + color_string(layer.stroke))              self.Expand(mapitem)
88                  self.tree.Expand(layeritem)          self.Expand(root)
             self.tree.Expand(mapitem)  
         self.tree.Expand(root)  
89    
90      def session_changed(self, *args):      def session_changed(self, *args):
91          for channel in (MAPS_CHANGED,          for channel in (MAPS_CHANGED,
# Line 101  class myTreeCtrlPanel(wxPanel): Line 96  class myTreeCtrlPanel(wxPanel):
96              self.app.session.Subscribe(channel, self.update_tree)              self.app.session.Subscribe(channel, self.update_tree)
97          self.update_tree()          self.update_tree()
98    
     def OnSize(self, event):  
         w,h = self.GetClientSizeTuple()  
         self.tree.SetDimensions(0, 0, w, h)  
   
99      def normalize_selection(self):      def normalize_selection(self):
100          """Select the layer or map containing currently selected item"""          """Select the layer or map containing currently selected item"""
101          tree = self.tree          item = self.GetSelection()
         item = self.tree.GetSelection()  
102          while item.IsOk():          while item.IsOk():
103              object = tree.GetPyData(item)              object = self.GetPyData(item)
104              if isinstance(object, Layer) or isinstance(object, Map):              if isinstance(object, Layer) or isinstance(object, Map):
105                  break                  break
106              item = tree.GetItemParent(item)              item = self.GetItemParent(item)
107    
108          self.changing_selection = 1          self.changing_selection = 1
109          try:          try:
110              self.tree.SelectItem(item)              self.SelectItem(item)
111          finally:          finally:
112              self.changing_selection = 0              self.changing_selection = 0
113    
114      def SelectedLayer(self):      def SelectedLayer(self):
115          """Return the layer object currently selected in the tree.          """Return the layer object currently selected in the tree.
116          Return None if no layer is selected"""          Return None if no layer is selected"""
117          tree = self.tree          layer = self.GetPyData(self.GetSelection())
         layer = tree.GetPyData(tree.GetSelection())  
118          if isinstance(layer, Layer):          if isinstance(layer, Layer):
119              return layer              return layer
120          return None          return None
# Line 142  class myTreeCtrlPanel(wxPanel): Line 131  class myTreeCtrlPanel(wxPanel):
131    
132      def layer_selected(self, layer):      def layer_selected(self, layer):
133          pass          pass
134    
135    
136    class SessionTreeView(NonModalDialog):
137    
138        """Non modal dialog showing the session as a tree"""
139    
140        def __init__(self, parent, app, name):
141            NonModalDialog.__init__(self, parent, app.interactor, name, "Session")
142            self.tree = SessioinTreeCtrl(self, -1, app)
143    
144        def OnClose(self, event):
145            #self.interactor.Unsubscribe(SELECTED_SHAPE, self.select_shape)
146            NonModalDialog.OnClose(self, event)
147    

Legend:
Removed from v.14  
changed lines
  Added in v.36

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26