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

Legend:
Removed from v.572  
changed lines
  Added in v.882

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26