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

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

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

revision 632 by jonathan, Wed Apr 9 10:10:53 2003 UTC revision 655 by jonathan, Fri Apr 11 15:50:13 2003 UTC
# Line 9  __version__ = "$Revision$" Line 9  __version__ = "$Revision$"
9    
10  from Thuban import _  from Thuban import _
11    
12    import resource
13    
14  from wxPython.wx import *  from wxPython.wx import *
15    
16  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
# Line 22  from Thuban.UI.dock import DockPanel Line 24  from Thuban.UI.dock import DockPanel
24    
25  from Thuban.Lib.connector import ConnectorError  from Thuban.Lib.connector import ConnectorError
26    
27  ID_LEGEND_MOVEUP = 4001  ID_LEGEND_RAISE = 4001
28  ID_LEGEND_MOVEDOWN = 4002  ID_LEGEND_LOWER = 4002
29  ID_LEGEND_TREE = 4003  ID_LEGEND_TREE = 4003
30  ID_LEGEND_CLASSIFY = 4004  ID_LEGEND_PROPS = 4004
31  ID_LEGEND_SHOWLAYER = 4005  ID_LEGEND_SHOWLAYER = 4005
32  ID_LEGEND_HIDELAYER = 4006  ID_LEGEND_HIDELAYER = 4006
33    
34  BMP_SIZE_W = 30  BMP_SIZE_W = 30
35  BMP_SIZE_H = 15  BMP_SIZE_H = 15
36    
37    RAISE_BMP = "raise_layer"
38    LOWER_BMP = "lower_layer"
39    SHOW_BMP  = "show_layer"
40    HIDE_BMP  = "hide_layer"
41    PROPS_BMP = "layer_properties"
42    
43    
44  class LegendPanel(DockPanel):  class LegendPanel(DockPanel):
45    
46      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
# Line 40  class LegendPanel(DockPanel): Line 49  class LegendPanel(DockPanel):
49          self.mainWindow = mainWindow          self.mainWindow = mainWindow
50          self.parent = parent          self.parent = parent
51    
         panelBox = wxBoxSizer(wxVERTICAL)  
   
         buttonBox = wxGridSizer(2, 3, 0, 0)  
   
52          self.buttons = []          self.buttons = []
53    
54          button = wxButton(self, ID_LEGEND_MOVEUP, _("Move Up"))          panelBox = wxBoxSizer(wxVERTICAL)
55          buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
56          self.buttons.append(button)          self.toolBar = wxToolBar(self, -1)
   
         button = wxButton(self, ID_LEGEND_SHOWLAYER, _("Show Layer"))  
         buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
         self.buttons.append(button)  
   
         button = wxButton(self, ID_LEGEND_CLASSIFY, _("Classify"))  
         buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
         self.buttons.append(button)  
   
         button = wxButton(self, ID_LEGEND_MOVEDOWN, _("Move Down"))  
         buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
         self.buttons.append(button)  
   
         button = wxButton(self, ID_LEGEND_HIDELAYER, _("Hide Layer"))  
         buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
         self.buttons.append(button)  
   
         EVT_BUTTON(self, ID_LEGEND_MOVEUP, self._OnMoveUp)  
         EVT_BUTTON(self, ID_LEGEND_MOVEDOWN, self._OnMoveDown)  
         EVT_BUTTON(self, ID_LEGEND_CLASSIFY, self._OnClassify)  
         EVT_BUTTON(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)  
         EVT_BUTTON(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)  
57    
58          panelBox.Add(buttonBox, 0, 0, 4)          bmp = resource.GetBitmapResource(RAISE_BMP, wxBITMAP_TYPE_XPM)
59            self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,
60                shortHelpString=_("Raise Layer"))
61    
62            bmp = resource.GetBitmapResource(LOWER_BMP, wxBITMAP_TYPE_XPM)
63            self.toolBar.AddTool(ID_LEGEND_LOWER, bmp,
64                shortHelpString=_("Lower Layer"))
65    
66            bmp = resource.GetBitmapResource(SHOW_BMP, wxBITMAP_TYPE_XPM)
67            self.toolBar.AddTool(ID_LEGEND_SHOWLAYER, bmp,
68                shortHelpString=_("Show Layer"))
69    
70            bmp = resource.GetBitmapResource(HIDE_BMP, wxBITMAP_TYPE_XPM)
71            self.toolBar.AddTool(ID_LEGEND_HIDELAYER, bmp,
72                shortHelpString=_("Hide Layer"))
73    
74            bmp = resource.GetBitmapResource(PROPS_BMP, wxBITMAP_TYPE_XPM)
75            self.toolBar.AddTool(ID_LEGEND_PROPS, bmp,
76                shortHelpString=_("Edit Layer Properties"))
77    
78            self.toolBar.Realize()
79            panelBox.Add(self.toolBar, 0, wxALL, 0)
80    
81            EVT_TOOL(self, ID_LEGEND_RAISE, self._OnMoveUp)
82            EVT_TOOL(self, ID_LEGEND_LOWER, self._OnMoveDown)
83            EVT_TOOL(self, ID_LEGEND_PROPS, self._OnProperties)
84            EVT_TOOL(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)
85            EVT_TOOL(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)
86    
87          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)
88    
# Line 84  class LegendPanel(DockPanel): Line 94  class LegendPanel(DockPanel):
94          self.SetSizer(panelBox)          self.SetSizer(panelBox)
95          panelBox.SetSizeHints(self)          panelBox.SetSizeHints(self)
96    
         #panelBox.SetSizeHints(self.parent)  
   
97          self.panelBox = panelBox          self.panelBox = panelBox
98    
99            self.__EnableButtons(False)
100    
101          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self._OnClose)
102    
103    
# Line 102  class LegendPanel(DockPanel): Line 112  class LegendPanel(DockPanel):
112          ok = isinstance(layer, Layer)          ok = isinstance(layer, Layer)
113          self.__EnableButtons(ok)          self.__EnableButtons(ok)
114    
115          if ok:          self.mainWindow.SelectLayer(layer)
             self.mainWindow.SelectLayer(layer)  
116    
117      def DoOnClassify(self):      def DoOnProperties(self):
118          list = self.tree.GetSelectedHierarchy()          list = self.tree.GetSelectedHierarchy()
119    
120          ok = isinstance(list[0], Layer)          ok = isinstance(list[0], Layer)
121          if ok:          if ok:
122              self.mainWindow.OpenClassifier(list[0], list[1])              self.mainWindow.OpenLayerProperties(list[0], list[1])
123    
124      def Destroy(self):      def Destroy(self):
125          self.__Close()          self.__Close()
126    
127      def _OnClassify(self, event):      def _OnProperties(self, event):
128          self.DoOnClassify()          self.DoOnProperties()
129    
130      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
131          self.tree.MoveCurrentItemUp()          self.tree.MoveCurrentItemUp()
# Line 139  class LegendPanel(DockPanel): Line 148  class LegendPanel(DockPanel):
148          pass          pass
149    
150      def __EnableButtons(self, on):      def __EnableButtons(self, on):
151          for b in self.buttons:          self.toolBar.EnableTool(ID_LEGEND_RAISE, on)
152              b.Enable(on)          self.toolBar.EnableTool(ID_LEGEND_LOWER, on)
153            self.toolBar.EnableTool(ID_LEGEND_SHOWLAYER,  on)
154            self.toolBar.EnableTool(ID_LEGEND_HIDELAYER,  on)
155            self.toolBar.EnableTool(ID_LEGEND_PROPS, on)
156    
157      def __Close(self):      def __Close(self):
158          self.tree.Close()          self.tree.Close()
# Line 261  class LegendTree(wxTreeCtrl): Line 273  class LegendTree(wxTreeCtrl):
273          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
274          layer.SetVisible(False)          layer.SetVisible(False)
275    
 #   def DoOnClassify(self):  
 #       id = self.GetSelection()  
 #       assert id.IsOk()  
   
 #       item = self.GetPyData(id)  
 #       if isinstance(item, ClassGroup):  
 #           id = self.GetItemParent(id)  
 #           assert id.IsOk()  
 #           item = self.GetPyData(id)  
   
 #       # XXX: THIS IS SUCH AWFUL STYLE! YUCK!  
 #       self.parent.mainWindow.OpenClassifier(item)  
 #       #assert False, "XXX: FIXME HERE"  
   
276      def Sort(self):      def Sort(self):
277          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
278    
279        def GetSelectedHierarchy(self):
280            id = self.GetSelection()
281    
282            if not id.IsOk():
283                return (None, None)
284    
285            layer = self.GetPyData(id)
286            group = None
287    
288            if isinstance(layer, ClassGroup):
289                id = self.GetItemParent(id)
290                assert id.IsOk()
291                group = layer
292                layer = self.GetPyData(id)
293    
294            return (layer, group)
295    
296      def _OnMsgMapsChanged(self):      def _OnMsgMapsChanged(self):
297          print "ADfsadfsadfsadfsa"          #print self.map is self.mainWindow.Map()
         print self.map is self.mainWindow.Map()  
298          self.SetMap(self.mainWindow.Map())          self.SetMap(self.mainWindow.Map())
299                    
300      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
301            self.__UpdateSelection()
         layer, group = self.GetSelectedHierarchy()  
         self.parent.DoOnSelChanged(layer, group)  
302    
303      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
304          self.parent.DoOnClassify()          self.parent.DoOnProperties()
305    
306      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
307          assert isinstance(layer, Layer)          assert isinstance(layer, Layer)
# Line 302  class LegendTree(wxTreeCtrl): Line 314  class LegendTree(wxTreeCtrl):
314          #      track of the images in the image list when we replace          #      track of the images in the image list when we replace
315          #      a layer. it ends up causing a seg fault.          #      a layer. it ends up causing a seg fault.
316          self.__FillTree(self.map)          self.__FillTree(self.map)
317            self.__UpdateSelection()
318          #self.__FillTreeLayer(id)          #self.__FillTreeLayer(id)
319    
320      def _OnMsgMapStackingChanged(self, *args):      def _OnMsgMapStackingChanged(self, *args):
# Line 310  class LegendTree(wxTreeCtrl): Line 323  class LegendTree(wxTreeCtrl):
323    
324          if id.IsOk():          if id.IsOk():
325              self.EnsureVisible(id)              self.EnsureVisible(id)
326            self.__UpdateSelection()
327    
328      def _OnMsgMapLayersAddedRemoved(self, map):      def _OnMsgMapLayersAddedRemoved(self, map):
329          assert map is self.map          assert map is self.map
330    
331          self.__FillTree(self.map)          self.__FillTree(self.map)
332            self.__UpdateSelection()
333    
334      def _OnMsgLayerVisibilityChanged(self, layer):      def _OnMsgLayerVisibilityChanged(self, layer):
335          assert isinstance(layer, Layer)          assert isinstance(layer, Layer)
336    
337          self.__ShowHideLayer(layer)          self.__ShowHideLayer(layer)
338            self.__UpdateSelection()
339    
340      def GetSelectedHierarchy(self):      def _OnMsgLayerTitleChanged(self, layer):
         id = self.GetSelection()  
         assert id.IsOk()  
   
         layer = self.GetPyData(id)  
         group = None  
   
         if isinstance(layer, ClassGroup):  
             id = self.GetItemParent(id)  
             assert id.IsOk()  
             group = layer  
             layer = self.GetPyData(id)  
341    
342          return (layer, group)          id = self.layer2id[layer]
343            if id.IsOk():
344                self.SetItemText(id, layer.Title())
345            self.__UpdateSelection()
346    
347        def __UpdateSelection(self):
348            layer, group = self.GetSelectedHierarchy()
349            self.parent.DoOnSelChanged(layer, group)
350            
351      def __FillTree(self, map):      def __FillTree(self, map):
352    
353          assert isinstance(map, Map)          assert isinstance(map, Map)
# Line 367  class LegendTree(wxTreeCtrl): Line 379  class LegendTree(wxTreeCtrl):
379                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)
380                  l.Subscribe(LAYER_VISIBILITY_CHANGED,                  l.Subscribe(LAYER_VISIBILITY_CHANGED,
381                              self._OnMsgLayerVisibilityChanged)                              self._OnMsgLayerVisibilityChanged)
382                    l.Subscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
383                  self.SetPyData(id, l)                  self.SetPyData(id, l)
384                  self.__SetVisibilityStyle(l.Visible(), id)                  self.__SetVisibilityStyle(l.Visible(), id)
385    
# Line 390  class LegendTree(wxTreeCtrl): Line 403  class LegendTree(wxTreeCtrl):
403    
404          show = layer.Visible()          show = layer.Visible()
405          for g in clazz:          for g in clazz:
406              id = self.AppendItem(pid, g.GetDisplayText())              if g.IsVisible():
407              self.SetPyData(id, g)                  id = self.AppendItem(pid, g.GetDisplayText())
408              self.__SetVisibilityStyle(show, id)                  self.SetPyData(id, g)
409                    self.__SetVisibilityStyle(show, id)
410              bmp = self.__BuildGroupImage(g, shapeType)  
411                    bmp = self.__BuildGroupImage(g, shapeType)
412              if bmp is None:  
413                  self.SetItemImage(id, self.emptyImageIndex)                  if bmp is None:
414              else:                      self.SetItemImage(id, self.emptyImageIndex)
415                  i = self.image_list.Add(bmp)                  else:
416                  self.SetItemImage(id, i)                      i = self.image_list.Add(bmp)
417                        self.SetItemImage(id, i)
418    
419          self.Thaw()          self.Thaw()
420    
# Line 425  class LegendTree(wxTreeCtrl): Line 439  class LegendTree(wxTreeCtrl):
439                                self._OnMsgLayerChanged)                                self._OnMsgLayerChanged)
440              layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,              layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,
441                                self._OnMsgLayerVisibilityChanged)                                self._OnMsgLayerVisibilityChanged)
442                layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
443    
444          self.DeleteAllItems()          self.DeleteAllItems()
445    

Legend:
Removed from v.632  
changed lines
  Added in v.655

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26