/[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 578 by jonathan, Mon Mar 31 18:31:46 2003 UTC revision 990 by frank, Thu May 22 16:51:24 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]>
4    # Frank Koormann <[email protected]>
5  #  #
6  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
7  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
# Line 9  __version__ = "$Revision$" Line 10  __version__ = "$Revision$"
10    
11  from Thuban import _  from Thuban import _
12    
13    import resource
14    
15  from wxPython.wx import *  from wxPython.wx import *
16    
17  from Thuban.Model.layer import Layer  from Thuban.Model.layer import BaseLayer
18  from Thuban.Model.map import Map  from Thuban.Model.map import Map
 from Thuban.Model.messages import *  
19  from Thuban.Model.classification import ClassGroup  from Thuban.Model.classification import ClassGroup
20    
21  from Thuban.UI.messages import *  from Thuban.Model.messages import \
22        MAP_STACKING_CHANGED, MAP_LAYERS_ADDED, MAP_LAYERS_REMOVED, LAYER_CHANGED,\
23        LAYER_VISIBILITY_CHANGED, TITLE_CHANGED
24    
25    from Thuban.UI.messages import SCALE_CHANGED
26    
27  from Thuban.UI.classifier import ClassDataPreviewer  from Thuban.UI.classifier import ClassDataPreviewer
28  from Thuban.UI.dock import DockPanel  from Thuban.UI.dock import DockPanel
29    from Thuban.UI.scalebar import ScaleBar
30    
31  from Thuban.Lib.connector import ConnectorError  from Thuban.Lib.connector import ConnectorError
32    
33  ID_LEGEND_MOVEUP = 4001  ID_LEGEND_TOP = 4001
34  ID_LEGEND_MOVEDOWN = 4002  ID_LEGEND_RAISE = 4002
35  ID_LEGEND_TREE = 4003  ID_LEGEND_LOWER = 4003
36  ID_LEGEND_CLASSIFY = 4004  ID_LEGEND_BOTTOM = 4004
37  ID_LEGEND_SHOWLAYER = 4005  ID_LEGEND_TREE = 4005
38  ID_LEGEND_HIDELAYER = 4006  ID_LEGEND_PROPS = 4006
39    ID_LEGEND_SHOWLAYER = 4007
40    ID_LEGEND_HIDELAYER = 4008
41    
42  BMP_SIZE_W = 30  BMP_SIZE_W = 30
43  BMP_SIZE_H = 15  BMP_SIZE_H = 15
44    
45    TOP_BMP = "top_layer"
46    RAISE_BMP = "raise_layer"
47    LOWER_BMP = "lower_layer"
48    BOTTOM_BMP = "bottom_layer"
49    SHOW_BMP  = "show_layer"
50    HIDE_BMP  = "hide_layer"
51    PROPS_BMP = "layer_properties"
52    
53    
54  class LegendPanel(DockPanel):  class LegendPanel(DockPanel):
55    
56      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
# Line 40  class LegendPanel(DockPanel): Line 59  class LegendPanel(DockPanel):
59          self.mainWindow = mainWindow          self.mainWindow = mainWindow
60          self.parent = parent          self.parent = parent
61    
         panelBox = wxBoxSizer(wxVERTICAL)  
   
         buttonBox = wxGridSizer(2, 3, 0, 0)  
   
62          self.buttons = []          self.buttons = []
63    
64          button = wxButton(self, ID_LEGEND_MOVEUP, _("Move Up"))          panelBox = wxBoxSizer(wxVERTICAL)
         buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
         self.buttons.append(button)  
   
         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)  
65    
66          panelBox.Add(buttonBox, 0, 0, 4)          self.toolBar = wxToolBar(self, -1)
67            self.toolBar.SetToolBitmapSize(wxSize(24, 24))
68    
69            bmp = resource.GetBitmapResource(TOP_BMP, wxBITMAP_TYPE_XPM)
70            self.toolBar.AddTool(ID_LEGEND_TOP, bmp,
71                shortHelpString=_("Top Layer"))
72    
73            bmp = resource.GetBitmapResource(RAISE_BMP, wxBITMAP_TYPE_XPM)
74            self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,
75                shortHelpString=_("Raise Layer"))
76    
77            bmp = resource.GetBitmapResource(LOWER_BMP, wxBITMAP_TYPE_XPM)
78            self.toolBar.AddTool(ID_LEGEND_LOWER, bmp,
79                shortHelpString=_("Lower Layer"))
80    
81            bmp = resource.GetBitmapResource(BOTTOM_BMP, wxBITMAP_TYPE_XPM)
82            self.toolBar.AddTool(ID_LEGEND_BOTTOM, bmp,
83                shortHelpString=_("Bottom Layer"))
84    
85            bmp = resource.GetBitmapResource(SHOW_BMP, wxBITMAP_TYPE_XPM)
86            self.toolBar.AddTool(ID_LEGEND_SHOWLAYER, bmp,
87                shortHelpString=_("Show Layer"))
88    
89            bmp = resource.GetBitmapResource(HIDE_BMP, wxBITMAP_TYPE_XPM)
90            self.toolBar.AddTool(ID_LEGEND_HIDELAYER, bmp,
91                shortHelpString=_("Hide Layer"))
92    
93            bmp = resource.GetBitmapResource(PROPS_BMP, wxBITMAP_TYPE_XPM)
94            self.toolBar.AddTool(ID_LEGEND_PROPS, bmp,
95                shortHelpString=_("Edit Layer Properties"))
96    
97            self.toolBar.Realize()
98            panelBox.Add(self.toolBar, 0, wxGROW, 0)
99    
100            EVT_TOOL(self, ID_LEGEND_TOP, self._OnMoveTop)
101            EVT_TOOL(self, ID_LEGEND_RAISE, self._OnMoveUp)
102            EVT_TOOL(self, ID_LEGEND_LOWER, self._OnMoveDown)
103            EVT_TOOL(self, ID_LEGEND_BOTTOM, self._OnMoveBottom)
104            EVT_TOOL(self, ID_LEGEND_PROPS, self._OnProperties)
105            EVT_TOOL(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)
106            EVT_TOOL(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)
107    
108          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)
109    
110          panelBox.Add(self.tree, 1, wxGROW, 4)          panelBox.Add(self.tree, 1, wxGROW, 0)
111    
112          panelBox.Fit(self)          self.scalebarbitmap = ScaleBarBitmap(self, map, mainWindow)
113            panelBox.Add(self.scalebarbitmap, 0, wxGROW, 0)
114    
115          self.SetAutoLayout(True)          self.SetAutoLayout(True)
116          self.SetSizer(panelBox)          self.SetSizer(panelBox)
117          panelBox.SetSizeHints(self)          panelBox.SetSizeHints(self)
118    
         #panelBox.SetSizeHints(self.parent)  
119    
120          self.panelBox = panelBox          self.panelBox = panelBox
121    
122            self.__EnableButtons(False)
123    
124            self.Create()
125    
126          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self._OnClose)
127    
128    
# Line 96  class LegendPanel(DockPanel): Line 131  class LegendPanel(DockPanel):
131    
132      def SetMap(self, map):      def SetMap(self, map):
133          self.tree.SetMap(map)          self.tree.SetMap(map)
134            self.scalebarbitmap.SetCanvas(self.mainWindow.canvas)
135    
136      def DoOnSelChanged(self, layer, group):      def DoOnSelChanged(self, layer, group):
137    
138          ok = isinstance(layer, Layer)          ok = isinstance(layer, BaseLayer)
139          self.__EnableButtons(ok)          self.__EnableButtons(ok)
140    
141          if ok:          self.mainWindow.SelectLayer(layer)
             self.mainWindow.SelectLayer(layer)  
142    
143      def DoOnClassify(self):      def DoOnProperties(self):
144          list = self.tree.GetSelectedHierarchy()          list = self.tree.GetSelectedHierarchy()
145    
146          ok = isinstance(list[0], Layer)          ok = isinstance(list[0], BaseLayer)
147          if ok:          if ok:
148              self.mainWindow.OpenClassifier(list[0], list[1])              self.mainWindow.OpenLayerProperties(list[0], list[1])
149    
150      def Destroy(self):      def Destroy(self):
151          self.__Close()          self.__Close()
152    
153      def _OnClassify(self, event):      def _OnProperties(self, event):
154          self.DoOnClassify()          self.DoOnProperties()
155    
156        def _OnMoveTop(self, event):
157            self.tree.MoveCurrentItemTop()
158            
159      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
160          self.tree.MoveCurrentItemUp()          self.tree.MoveCurrentItemUp()
161    
162      def _OnMoveDown(self, event):      def _OnMoveDown(self, event):
163          self.tree.MoveCurrentItemDown()          self.tree.MoveCurrentItemDown()
164    
165        def _OnMoveBottom(self, event):
166            self.tree.MoveCurrentItemBottom()
167    
168      def _OnShowLayer(self, event):      def _OnShowLayer(self, event):
169          self.tree.DoOnShowLayer()          self.tree.DoOnShowLayer()
170          pass          pass
# Line 139  class LegendPanel(DockPanel): Line 180  class LegendPanel(DockPanel):
180          pass          pass
181    
182      def __EnableButtons(self, on):      def __EnableButtons(self, on):
183          for b in self.buttons:          self.toolBar.EnableTool(ID_LEGEND_TOP, on)
184              b.Enable(on)          self.toolBar.EnableTool(ID_LEGEND_RAISE, on)
185            self.toolBar.EnableTool(ID_LEGEND_LOWER, on)
186            self.toolBar.EnableTool(ID_LEGEND_BOTTOM, on)
187            self.toolBar.EnableTool(ID_LEGEND_SHOWLAYER,  on)
188            self.toolBar.EnableTool(ID_LEGEND_HIDELAYER,  on)
189            self.toolBar.EnableTool(ID_LEGEND_PROPS, on)
190    
191      def __Close(self):      def __Close(self):
192          self.tree.Close()          self.tree.Close()
# Line 202  class LegendTree(wxTreeCtrl): Line 248  class LegendTree(wxTreeCtrl):
248                  #self._OnMsgMapsChanged)                  #self._OnMsgMapsChanged)
249              self.__FillTree(self.map)              self.__FillTree(self.map)
250    
251                    def MoveCurrentItemTop(self):
252      def MoveCurrentItemUp(self):          layer, group = self.GetSelectedHierarchy()
         cur_id = self.GetSelection()  
         assert(cur_id.IsOk())  
   
         cur_data = self.GetPyData(cur_id)  
253    
254          #prev_id = self.GetPrevSibling(cur_id)          if layer is not None:
255                self.map.TopLayer(layer)
256            else:
257                assert False, "Shouldn't be allowed."
258                pass
259    
260          #      def MoveCurrentItemUp(self):
261          # Get out if there's nowhere to go          layer, group = self.GetSelectedHierarchy()
         #  
         #if prev_id == INVALID_TREE_ID: return  
262    
263          if isinstance(cur_data, Layer):          if layer is not None:
264              self.map.RaiseLayer(cur_data)              self.map.RaiseLayer(layer)
         elif isinstance(cur_data, ClassGroup):  
             pass  
265          else:          else:
266              assert(False, "Shouldn't be here.")              assert False, "Shouldn't be allowed."
267              pass              pass
268    
269      def MoveCurrentItemDown(self):      def MoveCurrentItemDown(self):
270          cur_id = self.GetSelection()          layer, group = self.GetSelectedHierarchy()
         assert(cur_id.IsOk())  
   
         cur_data = self.GetPyData(cur_id)  
271    
272          if isinstance(cur_data, Layer):          if layer is not None:
273              self.map.LowerLayer(cur_data)              self.map.LowerLayer(layer)
         elif isinstance(cur_data, ClassGroup):  
             pass  
274          else:          else:
275              assert(False, "Shouldn't be here.")              assert False, "Shouldn't be allowed."
276              pass              pass
277    
278        def MoveCurrentItemBottom(self):
279            layer, group = self.GetSelectedHierarchy()
280    
281            if layer is not None:
282                self.map.BottomLayer(layer)
283            else:
284                assert False, "Shouldn't be allowed."
285                pass
286    
287      def OnCompareItems(self, item1, item2):      def OnCompareItems(self, item1, item2):
288    
289          data1 = self.GetPyData(item1)          data1 = self.GetPyData(item1)
290          data2 = self.GetPyData(item2)          data2 = self.GetPyData(item2)
291    
292          if isinstance(data1, Layer):          if isinstance(data1, BaseLayer):
293              layers = self.map.Layers()              layers = self.map.Layers()
294              return layers.index(data2) - layers.index(data1)              return layers.index(data2) - layers.index(data1)
295          else:          else:
296              return wxTreeCtrl.OnCompareItems(self, item1, item2)              return wxTreeCtrl.OnCompareItems(self, item1, item2)
297    
   
298      def DoOnShowLayer(self):      def DoOnShowLayer(self):
299          #self.__ShowHideLayer(True)          #self.__ShowHideLayer(True)
300          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
# Line 261  class LegendTree(wxTreeCtrl): Line 305  class LegendTree(wxTreeCtrl):
305          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
306          layer.SetVisible(False)          layer.SetVisible(False)
307    
 #   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")  
   
308      def Sort(self):      def Sort(self):
309          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
310    
311        def GetSelectedHierarchy(self):
312            id = self.GetSelection()
313    
314            if not id.IsOk():
315                return (None, None)
316    
317            layer = self.GetPyData(id)
318            group = None
319    
320            if isinstance(layer, ClassGroup):
321                id = self.GetItemParent(id)
322                assert id.IsOk()
323                group = layer
324                layer = self.GetPyData(id)
325    
326            return (layer, group)
327    
328      def _OnMsgMapsChanged(self):      def _OnMsgMapsChanged(self):
329          print "ADfsadfsadfsadfsa"          #print self.map is self.mainWindow.Map()
         print self.map is self.mainWindow.Map()  
330          self.SetMap(self.mainWindow.Map())          self.SetMap(self.mainWindow.Map())
331                    
332      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
333            self.__UpdateSelection()
         layer, group = self.GetSelectedHierarchy()  
         self.parent.DoOnSelChanged(layer, group)  
334    
335      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
336          self.parent.DoOnClassify()          self.parent.DoOnProperties()
337    
338      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
339          assert(isinstance(layer, Layer))          assert isinstance(layer, BaseLayer)
340    
341          id = self.layer2id[layer]          id = self.layer2id[layer]
342          assert(id.IsOk())          assert id.IsOk()
343    
344          # XXX: yikes! this is so bad, we should be doing what is          # XXX: yikes! this is so bad, we should be doing what is
345          #      commented out, but there is a problem with keeping          #      commented out, but there is a problem with keeping
346          #      track of the images in the image list when we replace          #      track of the images in the image list when we replace
347          #      a layer. it ends up causing a seg fault.          #      a layer. it ends up causing a seg fault.
348          self.__FillTree(self.map)          self.__FillTree(self.map)
349            self.__UpdateSelection()
350          #self.__FillTreeLayer(id)          #self.__FillTreeLayer(id)
351    
352      def _OnMsgMapStackingChanged(self, *args):      def _OnMsgMapStackingChanged(self, *args):
# Line 310  class LegendTree(wxTreeCtrl): Line 355  class LegendTree(wxTreeCtrl):
355    
356          if id.IsOk():          if id.IsOk():
357              self.EnsureVisible(id)              self.EnsureVisible(id)
358            self.__UpdateSelection()
359    
360      def _OnMsgMapLayersAddedRemoved(self, map):      def _OnMsgMapLayersAddedRemoved(self, map):
361          assert(map is self.map)          assert map is self.map
362    
363          self.__FillTree(self.map)          self.__FillTree(self.map)
364            self.__UpdateSelection()
365    
366      def _OnMsgLayerVisibilityChanged(self, layer):      def _OnMsgLayerVisibilityChanged(self, layer):
367          assert(isinstance(layer, Layer))          assert isinstance(layer, BaseLayer)
368    
369          self.__ShowHideLayer(layer)          self.__ShowHideLayer(layer)
370            self.__UpdateSelection()
371    
372      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)  
373    
374          return (layer, group)          id = self.layer2id[layer]
375            if id.IsOk():
376                self.SetItemText(id, layer.Title())
377            self.__UpdateSelection()
378    
379        def __UpdateSelection(self):
380            layer, group = self.GetSelectedHierarchy()
381            self.parent.DoOnSelChanged(layer, group)
382            
383      def __FillTree(self, map):      def __FillTree(self, map):
384    
         assert(isinstance(map, Map))  
   
385          self.Freeze()          self.Freeze()
386    
387          self.__DeleteAllItems()          self.__DeleteAllItems()
# Line 367  class LegendTree(wxTreeCtrl): Line 409  class LegendTree(wxTreeCtrl):
409                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)
410                  l.Subscribe(LAYER_VISIBILITY_CHANGED,                  l.Subscribe(LAYER_VISIBILITY_CHANGED,
411                              self._OnMsgLayerVisibilityChanged)                              self._OnMsgLayerVisibilityChanged)
412                    l.Subscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
413                  self.SetPyData(id, l)                  self.SetPyData(id, l)
414                  font = self.GetItemFont(id)                  self.__SetVisibilityStyle(l.Visible(), id)
                 if not l.Visible():  
                     font.SetStyle(wxITALIC)  
                     self.SetItemFont(id, font)  
415    
416                  self.layer2id[l] = id                  self.layer2id[l] = id
417    
# Line 387  class LegendTree(wxTreeCtrl): Line 427  class LegendTree(wxTreeCtrl):
427    
428          self.DeleteChildren(pid)          self.DeleteChildren(pid)
429    
430          clazz = layer.GetClassification()          if layer.HasClassification():
   
         shapeType = layer.ShapeType()  
431    
432          for g in clazz:              clazz = layer.GetClassification()
             id = self.AppendItem(pid, g.GetDisplayText())  
             self.SetPyData(id, g)  
433    
434              bmp = self.__BuildGroupImage(g, shapeType)              shapeType = layer.ShapeType()
435    
436              if bmp is None:              show = layer.Visible()
437                  self.SetItemImage(id, self.emptyImageIndex)              for g in clazz:
438              else:                  if g.IsVisible():
439                  i = self.image_list.Add(bmp)                      id = self.AppendItem(pid, g.GetDisplayText())
440                  self.SetItemImage(id, i)                      self.SetPyData(id, g)
441                        self.__SetVisibilityStyle(show, id)
442    
443                        bmp = self.__BuildGroupImage(g, shapeType)
444    
445                        if bmp is None:
446                            self.SetItemImage(id, self.emptyImageIndex)
447                        else:
448                            i = self.image_list.Add(bmp)
449                            self.SetItemImage(id, i)
450    
451          self.Thaw()          self.Thaw()
452    
453      def __BuildGroupImage(self, group, shapeType):      def __BuildGroupImage(self, group, shapeType):
         assert(isinstance(group, ClassGroup))  
454    
455          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)
456          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)
# Line 426  class LegendTree(wxTreeCtrl): Line 470  class LegendTree(wxTreeCtrl):
470                                self._OnMsgLayerChanged)                                self._OnMsgLayerChanged)
471              layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,              layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,
472                                self._OnMsgLayerVisibilityChanged)                                self._OnMsgLayerVisibilityChanged)
473                layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
474    
475          self.DeleteAllItems()          self.DeleteAllItems()
476    
477      def __ShowHideHelper(self, show, id):      def __SetVisibilityStyle(self, visible, id):
478          font = self.GetItemFont(id)          font = self.GetItemFont(id)
479    
480          if show:          if visible:
481              font.SetStyle(wxNORMAL)              font.SetStyle(wxNORMAL)
482              color = wxBLACK              color = wxBLACK
483          else:          else:
484              font.SetStyle(wxITALIC)              #font.SetStyle(wxITALIC)
485                font.SetStyle(wxNORMAL)
486              color = wxLIGHT_GREY              color = wxLIGHT_GREY
487    
488          self.SetItemTextColour(id, color)          self.SetItemTextColour(id, color)
# Line 444  class LegendTree(wxTreeCtrl): Line 490  class LegendTree(wxTreeCtrl):
490                    
491      def __ShowHideLayer(self, layer):      def __ShowHideLayer(self, layer):
492          parent = self.layer2id[layer]          parent = self.layer2id[layer]
493          assert(parent.IsOk())          assert parent.IsOk()
494    
495          show = layer.Visible()          visible = layer.Visible()
496    
497            self.__SetVisibilityStyle(visible, parent)
         self.__ShowHideHelper(show, parent)  
498    
499          id, cookie = self.GetFirstChild(parent, 123)          id, cookie = self.GetFirstChild(parent, 123)
500    
501          while id.IsOk():          while id.IsOk():
502              self.__ShowHideHelper(show, id)              self.__SetVisibilityStyle(visible, id)
503              id, cookie = self.GetNextChild(parent, cookie)              id, cookie = self.GetNextChild(parent, cookie)
504                            
505    class ScaleBarBitmap(wxBoxSizer):
506    
507        def __init__(self, parent, map, mainWindow):
508            # While the width is fixed, get the height _now_.
509            dc = wxMemoryDC()
510            textwidth, textheight = dc.GetTextExtent("%d"%0)
511            self.width = 210
512            self.height = textheight + 3*2 + 8
513    
514            wxBoxSizer.__init__(self, wxVERTICAL)
515            bmp=wxEmptyBitmap(self.width, self.height)
516            self.scalebarBitmap = wxStaticBitmap(parent, -1, bmp)
517            self.Add(self.scalebarBitmap, 0, wxALIGN_CENTER|wxLEFT|wxTOP|wxRIGHT, 1)
518    
519            self.mainWindow = mainWindow
520            self.parent = parent
521            self.canvas = None
522            self.SetCanvas(self.mainWindow.canvas)
523    
524        def SetCanvas(self, canvas):
525            sub_list = [(SCALE_CHANGED, self._OnMsgScaleChanged)]
526    
527            if self.canvas is not None:
528                for msg, func in sub_list: self.canvas.Unsubscribe(msg, func)
529            
530            self.canvas = canvas
531            self.scalebar = ScaleBar(canvas.map)
532    
533            if self.canvas is not None:
534                for msg, func in sub_list: self.canvas.Subscribe(msg, func)
535                self.__SetScale(self.canvas.scale)
536    
537        def _OnMsgScaleChanged(self, scale):
538            self.__SetScale(scale)
539    
540        def __SetScale(self, scale):
541            bmp = wxEmptyBitmap(self.width, self.height)
542            dc = wxMemoryDC()
543            dc.SelectObject(bmp)
544            dc.Clear()
545    
546            self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())
547    
548            self.scalebarBitmap.SetBitmap(bmp)
549    

Legend:
Removed from v.578  
changed lines
  Added in v.990

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26