/[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 980 by frank, Thu May 22 11:41:14 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_RAISE = 4001
34  ID_LEGEND_MOVEDOWN = 4002  ID_LEGEND_LOWER = 4002
35  ID_LEGEND_TREE = 4003  ID_LEGEND_TREE = 4003
36  ID_LEGEND_CLASSIFY = 4004  ID_LEGEND_PROPS = 4004
37  ID_LEGEND_SHOWLAYER = 4005  ID_LEGEND_SHOWLAYER = 4005
38  ID_LEGEND_HIDELAYER = 4006  ID_LEGEND_HIDELAYER = 4006
39    
40  BMP_SIZE_W = 30  BMP_SIZE_W = 30
41  BMP_SIZE_H = 15  BMP_SIZE_H = 15
42    
43    RAISE_BMP = "raise_layer"
44    LOWER_BMP = "lower_layer"
45    SHOW_BMP  = "show_layer"
46    HIDE_BMP  = "hide_layer"
47    PROPS_BMP = "layer_properties"
48    
49    
50  class LegendPanel(DockPanel):  class LegendPanel(DockPanel):
51    
52      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
# Line 40  class LegendPanel(DockPanel): Line 55  class LegendPanel(DockPanel):
55          self.mainWindow = mainWindow          self.mainWindow = mainWindow
56          self.parent = parent          self.parent = parent
57    
         panelBox = wxBoxSizer(wxVERTICAL)  
   
         buttonBox = wxGridSizer(2, 3, 0, 0)  
   
58          self.buttons = []          self.buttons = []
59    
60          button = wxButton(self, ID_LEGEND_MOVEUP, _("Move Up"))          panelBox = wxBoxSizer(wxVERTICAL)
61          buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
62          self.buttons.append(button)          self.toolBar = wxToolBar(self, -1)
63            self.toolBar.SetToolBitmapSize(wxSize(24, 24))
         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)  
64    
65          panelBox.Add(buttonBox, 0, 0, 4)          bmp = resource.GetBitmapResource(RAISE_BMP, wxBITMAP_TYPE_XPM)
66            self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,
67                shortHelpString=_("Raise Layer"))
68    
69            bmp = resource.GetBitmapResource(LOWER_BMP, wxBITMAP_TYPE_XPM)
70            self.toolBar.AddTool(ID_LEGEND_LOWER, bmp,
71                shortHelpString=_("Lower Layer"))
72    
73            bmp = resource.GetBitmapResource(SHOW_BMP, wxBITMAP_TYPE_XPM)
74            self.toolBar.AddTool(ID_LEGEND_SHOWLAYER, bmp,
75                shortHelpString=_("Show Layer"))
76    
77            bmp = resource.GetBitmapResource(HIDE_BMP, wxBITMAP_TYPE_XPM)
78            self.toolBar.AddTool(ID_LEGEND_HIDELAYER, bmp,
79                shortHelpString=_("Hide Layer"))
80    
81            bmp = resource.GetBitmapResource(PROPS_BMP, wxBITMAP_TYPE_XPM)
82            self.toolBar.AddTool(ID_LEGEND_PROPS, bmp,
83                shortHelpString=_("Edit Layer Properties"))
84    
85            self.toolBar.Realize()
86            panelBox.Add(self.toolBar, 0, wxGROW, 0)
87    
88            EVT_TOOL(self, ID_LEGEND_RAISE, self._OnMoveUp)
89            EVT_TOOL(self, ID_LEGEND_LOWER, self._OnMoveDown)
90            EVT_TOOL(self, ID_LEGEND_PROPS, self._OnProperties)
91            EVT_TOOL(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)
92            EVT_TOOL(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)
93    
94          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)
95    
96          panelBox.Add(self.tree, 1, wxGROW, 4)          panelBox.Add(self.tree, 1, wxGROW, 0)
97    
98          panelBox.Fit(self)          self.scalebarbitmap = ScaleBarBitmap(self, map, mainWindow)
99            panelBox.Add(self.scalebarbitmap, 0, wxGROW, 0)
100    
101          self.SetAutoLayout(True)          self.SetAutoLayout(True)
102          self.SetSizer(panelBox)          self.SetSizer(panelBox)
103          panelBox.SetSizeHints(self)          panelBox.SetSizeHints(self)
104    
         #panelBox.SetSizeHints(self.parent)  
105    
106          self.panelBox = panelBox          self.panelBox = panelBox
107    
108            self.__EnableButtons(False)
109    
110            self.Create()
111    
112          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self._OnClose)
113    
114    
# Line 96  class LegendPanel(DockPanel): Line 117  class LegendPanel(DockPanel):
117    
118      def SetMap(self, map):      def SetMap(self, map):
119          self.tree.SetMap(map)          self.tree.SetMap(map)
120            self.scalebarbitmap.SetCanvas(self.mainWindow.canvas)
121    
122      def DoOnSelChanged(self, layer, group):      def DoOnSelChanged(self, layer, group):
123    
124          ok = isinstance(layer, Layer)          ok = isinstance(layer, BaseLayer)
125          self.__EnableButtons(ok)          self.__EnableButtons(ok)
126    
127          if ok:          self.mainWindow.SelectLayer(layer)
             self.mainWindow.SelectLayer(layer)  
128    
129      def DoOnClassify(self):      def DoOnProperties(self):
130          list = self.tree.GetSelectedHierarchy()          list = self.tree.GetSelectedHierarchy()
131    
132          ok = isinstance(list[0], Layer)          ok = isinstance(list[0], BaseLayer)
133          if ok:          if ok:
134              self.mainWindow.OpenClassifier(list[0], list[1])              self.mainWindow.OpenLayerProperties(list[0], list[1])
135    
136      def Destroy(self):      def Destroy(self):
137          self.__Close()          self.__Close()
138    
139      def _OnClassify(self, event):      def _OnProperties(self, event):
140          self.DoOnClassify()          self.DoOnProperties()
141    
142      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
143          self.tree.MoveCurrentItemUp()          self.tree.MoveCurrentItemUp()
# Line 139  class LegendPanel(DockPanel): Line 160  class LegendPanel(DockPanel):
160          pass          pass
161    
162      def __EnableButtons(self, on):      def __EnableButtons(self, on):
163          for b in self.buttons:          self.toolBar.EnableTool(ID_LEGEND_RAISE, on)
164              b.Enable(on)          self.toolBar.EnableTool(ID_LEGEND_LOWER, on)
165            self.toolBar.EnableTool(ID_LEGEND_SHOWLAYER,  on)
166            self.toolBar.EnableTool(ID_LEGEND_HIDELAYER,  on)
167            self.toolBar.EnableTool(ID_LEGEND_PROPS, on)
168    
169      def __Close(self):      def __Close(self):
170          self.tree.Close()          self.tree.Close()
# Line 202  class LegendTree(wxTreeCtrl): Line 226  class LegendTree(wxTreeCtrl):
226                  #self._OnMsgMapsChanged)                  #self._OnMsgMapsChanged)
227              self.__FillTree(self.map)              self.__FillTree(self.map)
228    
               
229      def MoveCurrentItemUp(self):      def MoveCurrentItemUp(self):
230          cur_id = self.GetSelection()          layer, group = self.GetSelectedHierarchy()
         assert(cur_id.IsOk())  
   
         cur_data = self.GetPyData(cur_id)  
   
         #prev_id = self.GetPrevSibling(cur_id)  
   
         #  
         # Get out if there's nowhere to go  
         #  
         #if prev_id == INVALID_TREE_ID: return  
231    
232          if isinstance(cur_data, Layer):          if layer is not None:
233              self.map.RaiseLayer(cur_data)              self.map.RaiseLayer(layer)
         elif isinstance(cur_data, ClassGroup):  
             pass  
234          else:          else:
235              assert(False, "Shouldn't be here.")              assert False, "Shouldn't be allowed."
236              pass              pass
237    
238      def MoveCurrentItemDown(self):      def MoveCurrentItemDown(self):
239          cur_id = self.GetSelection()          layer, group = self.GetSelectedHierarchy()
         assert(cur_id.IsOk())  
   
         cur_data = self.GetPyData(cur_id)  
240    
241          if isinstance(cur_data, Layer):          if layer is not None:
242              self.map.LowerLayer(cur_data)              self.map.LowerLayer(layer)
         elif isinstance(cur_data, ClassGroup):  
             pass  
243          else:          else:
244              assert(False, "Shouldn't be here.")              assert False, "Shouldn't be allowed."
245              pass              pass
246    
   
247      def OnCompareItems(self, item1, item2):      def OnCompareItems(self, item1, item2):
248    
249          data1 = self.GetPyData(item1)          data1 = self.GetPyData(item1)
250          data2 = self.GetPyData(item2)          data2 = self.GetPyData(item2)
251    
252          if isinstance(data1, Layer):          if isinstance(data1, BaseLayer):
253              layers = self.map.Layers()              layers = self.map.Layers()
254              return layers.index(data2) - layers.index(data1)              return layers.index(data2) - layers.index(data1)
255          else:          else:
256              return wxTreeCtrl.OnCompareItems(self, item1, item2)              return wxTreeCtrl.OnCompareItems(self, item1, item2)
257    
   
258      def DoOnShowLayer(self):      def DoOnShowLayer(self):
259          #self.__ShowHideLayer(True)          #self.__ShowHideLayer(True)
260          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
# Line 261  class LegendTree(wxTreeCtrl): Line 265  class LegendTree(wxTreeCtrl):
265          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
266          layer.SetVisible(False)          layer.SetVisible(False)
267    
 #   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")  
   
268      def Sort(self):      def Sort(self):
269          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
270    
271        def GetSelectedHierarchy(self):
272            id = self.GetSelection()
273    
274            if not id.IsOk():
275                return (None, None)
276    
277            layer = self.GetPyData(id)
278            group = None
279    
280            if isinstance(layer, ClassGroup):
281                id = self.GetItemParent(id)
282                assert id.IsOk()
283                group = layer
284                layer = self.GetPyData(id)
285    
286            return (layer, group)
287    
288      def _OnMsgMapsChanged(self):      def _OnMsgMapsChanged(self):
289          print "ADfsadfsadfsadfsa"          #print self.map is self.mainWindow.Map()
         print self.map is self.mainWindow.Map()  
290          self.SetMap(self.mainWindow.Map())          self.SetMap(self.mainWindow.Map())
291                    
292      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
293            self.__UpdateSelection()
         layer, group = self.GetSelectedHierarchy()  
         self.parent.DoOnSelChanged(layer, group)  
294    
295      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
296          self.parent.DoOnClassify()          self.parent.DoOnProperties()
297    
298      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
299          assert(isinstance(layer, Layer))          assert isinstance(layer, BaseLayer)
300    
301          id = self.layer2id[layer]          id = self.layer2id[layer]
302          assert(id.IsOk())          assert id.IsOk()
303    
304          # XXX: yikes! this is so bad, we should be doing what is          # XXX: yikes! this is so bad, we should be doing what is
305          #      commented out, but there is a problem with keeping          #      commented out, but there is a problem with keeping
306          #      track of the images in the image list when we replace          #      track of the images in the image list when we replace
307          #      a layer. it ends up causing a seg fault.          #      a layer. it ends up causing a seg fault.
308          self.__FillTree(self.map)          self.__FillTree(self.map)
309            self.__UpdateSelection()
310          #self.__FillTreeLayer(id)          #self.__FillTreeLayer(id)
311    
312      def _OnMsgMapStackingChanged(self, *args):      def _OnMsgMapStackingChanged(self, *args):
# Line 310  class LegendTree(wxTreeCtrl): Line 315  class LegendTree(wxTreeCtrl):
315    
316          if id.IsOk():          if id.IsOk():
317              self.EnsureVisible(id)              self.EnsureVisible(id)
318            self.__UpdateSelection()
319    
320      def _OnMsgMapLayersAddedRemoved(self, map):      def _OnMsgMapLayersAddedRemoved(self, map):
321          assert(map is self.map)          assert map is self.map
322    
323          self.__FillTree(self.map)          self.__FillTree(self.map)
324            self.__UpdateSelection()
325    
326      def _OnMsgLayerVisibilityChanged(self, layer):      def _OnMsgLayerVisibilityChanged(self, layer):
327          assert(isinstance(layer, Layer))          assert isinstance(layer, BaseLayer)
328    
329          self.__ShowHideLayer(layer)          self.__ShowHideLayer(layer)
330            self.__UpdateSelection()
331    
332      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)  
333    
334          return (layer, group)          id = self.layer2id[layer]
335            if id.IsOk():
336                self.SetItemText(id, layer.Title())
337            self.__UpdateSelection()
338    
339        def __UpdateSelection(self):
340            layer, group = self.GetSelectedHierarchy()
341            self.parent.DoOnSelChanged(layer, group)
342            
343      def __FillTree(self, map):      def __FillTree(self, map):
344    
         assert(isinstance(map, Map))  
   
345          self.Freeze()          self.Freeze()
346    
347          self.__DeleteAllItems()          self.__DeleteAllItems()
# Line 367  class LegendTree(wxTreeCtrl): Line 369  class LegendTree(wxTreeCtrl):
369                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)
370                  l.Subscribe(LAYER_VISIBILITY_CHANGED,                  l.Subscribe(LAYER_VISIBILITY_CHANGED,
371                              self._OnMsgLayerVisibilityChanged)                              self._OnMsgLayerVisibilityChanged)
372                    l.Subscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
373                  self.SetPyData(id, l)                  self.SetPyData(id, l)
374                  font = self.GetItemFont(id)                  self.__SetVisibilityStyle(l.Visible(), id)
                 if not l.Visible():  
                     font.SetStyle(wxITALIC)  
                     self.SetItemFont(id, font)  
375    
376                  self.layer2id[l] = id                  self.layer2id[l] = id
377    
# Line 387  class LegendTree(wxTreeCtrl): Line 387  class LegendTree(wxTreeCtrl):
387    
388          self.DeleteChildren(pid)          self.DeleteChildren(pid)
389    
390          clazz = layer.GetClassification()          if layer.HasClassification():
   
         shapeType = layer.ShapeType()  
391    
392          for g in clazz:              clazz = layer.GetClassification()
             id = self.AppendItem(pid, g.GetDisplayText())  
             self.SetPyData(id, g)  
393    
394              bmp = self.__BuildGroupImage(g, shapeType)              shapeType = layer.ShapeType()
395    
396              if bmp is None:              show = layer.Visible()
397                  self.SetItemImage(id, self.emptyImageIndex)              for g in clazz:
398              else:                  if g.IsVisible():
399                  i = self.image_list.Add(bmp)                      id = self.AppendItem(pid, g.GetDisplayText())
400                  self.SetItemImage(id, i)                      self.SetPyData(id, g)
401                        self.__SetVisibilityStyle(show, id)
402    
403                        bmp = self.__BuildGroupImage(g, shapeType)
404    
405                        if bmp is None:
406                            self.SetItemImage(id, self.emptyImageIndex)
407                        else:
408                            i = self.image_list.Add(bmp)
409                            self.SetItemImage(id, i)
410    
411          self.Thaw()          self.Thaw()
412    
413      def __BuildGroupImage(self, group, shapeType):      def __BuildGroupImage(self, group, shapeType):
         assert(isinstance(group, ClassGroup))  
414    
415          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)
416          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)
# Line 426  class LegendTree(wxTreeCtrl): Line 430  class LegendTree(wxTreeCtrl):
430                                self._OnMsgLayerChanged)                                self._OnMsgLayerChanged)
431              layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,              layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,
432                                self._OnMsgLayerVisibilityChanged)                                self._OnMsgLayerVisibilityChanged)
433                layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
434    
435          self.DeleteAllItems()          self.DeleteAllItems()
436    
437      def __ShowHideHelper(self, show, id):      def __SetVisibilityStyle(self, visible, id):
438          font = self.GetItemFont(id)          font = self.GetItemFont(id)
439    
440          if show:          if visible:
441              font.SetStyle(wxNORMAL)              font.SetStyle(wxNORMAL)
442              color = wxBLACK              color = wxBLACK
443          else:          else:
444              font.SetStyle(wxITALIC)              #font.SetStyle(wxITALIC)
445                font.SetStyle(wxNORMAL)
446              color = wxLIGHT_GREY              color = wxLIGHT_GREY
447    
448          self.SetItemTextColour(id, color)          self.SetItemTextColour(id, color)
# Line 444  class LegendTree(wxTreeCtrl): Line 450  class LegendTree(wxTreeCtrl):
450                    
451      def __ShowHideLayer(self, layer):      def __ShowHideLayer(self, layer):
452          parent = self.layer2id[layer]          parent = self.layer2id[layer]
453          assert(parent.IsOk())          assert parent.IsOk()
   
         show = layer.Visible()  
454    
455            visible = layer.Visible()
456    
457          self.__ShowHideHelper(show, parent)          self.__SetVisibilityStyle(visible, parent)
458    
459          id, cookie = self.GetFirstChild(parent, 123)          id, cookie = self.GetFirstChild(parent, 123)
460    
461          while id.IsOk():          while id.IsOk():
462              self.__ShowHideHelper(show, id)              self.__SetVisibilityStyle(visible, id)
463              id, cookie = self.GetNextChild(parent, cookie)              id, cookie = self.GetNextChild(parent, cookie)
464                            
465    class ScaleBarBitmap(wxBoxSizer):
466    
467        def __init__(self, parent, map, mainWindow):
468            # While the width is fixed, get the height _now_.
469            dc = wxMemoryDC()
470            textwidth, textheight = dc.GetTextExtent("%d"%0)
471            self.width = 200
472            self.height = textheight + 3*2 + 8
473    
474            wxBoxSizer.__init__(self, wxVERTICAL)
475            bmp=wxEmptyBitmap(self.width, self.height)
476            self.scalebarBitmap = wxStaticBitmap(parent, -1, bmp)
477            self.Add(self.scalebarBitmap, 0, wxALIGN_CENTER|wxLEFT|wxTOP|wxRIGHT, 1)
478    
479            self.mainWindow = mainWindow
480            self.parent = parent
481            self.canvas = None
482            self.SetCanvas(self.mainWindow.canvas)
483    
484        def SetCanvas(self, canvas):
485            sub_list = [(SCALE_CHANGED, self._OnMsgScaleChanged)]
486    
487            if self.canvas is not None:
488                for msg, func in sub_list: self.canvas.Unsubscribe(msg, func)
489            
490            self.canvas = canvas
491            self.scalebar = ScaleBar(canvas.map)
492    
493            if self.canvas is not None:
494                for msg, func in sub_list: self.canvas.Subscribe(msg, func)
495                self.__SetScale(self.canvas.scale)
496    
497        def _OnMsgScaleChanged(self, scale):
498            self.__SetScale(scale)
499    
500        def __SetScale(self, scale):
501            bmp = wxEmptyBitmap(self.width, self.height)
502            dc = wxMemoryDC()
503            dc.SelectObject(bmp)
504            dc.Clear()
505    
506            self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())
507    
508            self.scalebarBitmap.SetBitmap(bmp)
509    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26