/[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 568 by jonathan, Wed Mar 26 11:51:28 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.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  ID_LEGEND_MOVEUP = 4001  from Thuban.Lib.connector import ConnectorError
32  ID_LEGEND_MOVEDOWN = 4002  
33    ID_LEGEND_RAISE = 4001
34    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 37  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            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)
113    
114    
115      def GetMap(self):      def GetMap(self):
116          return self.tree.GetMap()          return self.tree.GetMap()
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):
123    
124      def DoOnSelChanged(self, layer, group = None):          ok = isinstance(layer, BaseLayer)
125          sel = self.tree.GetSelection()          self.__EnableButtons(ok)
         self.__EnableButtons(sel.IsOk())  
126    
127          if sel.IsOk():          self.mainWindow.SelectLayer(layer)
             self.mainWindow.SelectLayer(layer)  
128    
129      def _OnClassify(self, event):      def DoOnProperties(self):
130          self.tree.DoOnClassify()          list = self.tree.GetSelectedHierarchy()
131    
132            ok = isinstance(list[0], BaseLayer)
133            if ok:
134                self.mainWindow.OpenLayerProperties(list[0], list[1])
135    
136        def Destroy(self):
137            self.__Close()
138    
139        def _OnProperties(self, event):
140            self.DoOnProperties()
141    
142      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
143          self.tree.MoveCurrentItemUp()          self.tree.MoveCurrentItemUp()
# Line 109  class LegendPanel(DockPanel): Line 149  class LegendPanel(DockPanel):
149          self.tree.DoOnShowLayer()          self.tree.DoOnShowLayer()
150          pass          pass
151    
152        #def Close(self, force = False):
153            #DockPanel.Close(self, force)
154            
155        def _OnClose(self, event):
156            self.__Close()
157    
158      def _OnHideLayer(self, event):      def _OnHideLayer(self, event):
159          self.tree.DoOnHideLayer()          self.tree.DoOnHideLayer()
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):
170            self.tree.Close()
171    
172  class LegendTree(wxTreeCtrl):  class LegendTree(wxTreeCtrl):
173    
# Line 124  class LegendTree(wxTreeCtrl): Line 176  class LegendTree(wxTreeCtrl):
176                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,
177                              size = (200, 200))                              size = (200, 200))
178    
179            self.mainWindow = mainWindow
180          self.map = None          self.map = None
181          self.parent = parent          self.parent = parent
182          self.layer2id = None          self.layer2id = {}
   
183    
184          self.image_list = None          self.image_list = None
185          self.emptyImageIndex = 0          self.emptyImageIndex = 0
# Line 137  class LegendTree(wxTreeCtrl): Line 189  class LegendTree(wxTreeCtrl):
189          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)
190          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)
191    
192            EVT_CLOSE(self, self._OnClose)
193    
194          self.SetMap(map)          self.SetMap(map)
195    
196        def _OnClose(self, event):
197            self.SetMap(None)
198    
199      def GetMap(self):      def GetMap(self):
200          return self.map          return self.map
201    
# Line 150  class LegendTree(wxTreeCtrl): Line 207  class LegendTree(wxTreeCtrl):
207    
208          if self.map is not None:          if self.map is not None:
209              for msg, func in sub_list: self.map.Unsubscribe(msg, func)              for msg, func in sub_list: self.map.Unsubscribe(msg, func)
210                #self.mainWindow.application.Unsubscribe(SESSION_REPLACED,
211                    #self._OnMsgMapsChanged)
212                #try:
213                    #self.mainWindow.application.session.Unsubscribe(MAPS_CHANGED,
214                        #self._OnMsgMapsChanged)
215                #except ConnectorError:
216                    #pass
217              self.__DeleteAllItems()              self.__DeleteAllItems()
218                    
219          self.map = map          self.map = map
220    
221          if self.map is not None:          if self.map is not None:
222              for msg, func in sub_list: self.map.Subscribe(msg, func)              for msg, func in sub_list: self.map.Subscribe(msg, func)
223                #self.mainWindow.application.session.Subscribe(MAPS_CHANGED,
224                    #self._OnMsgMapsChanged)
225                #self.mainWindow.application.Subscribe(SESSION_REPLACED,
226                    #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)  
231    
232          #          if layer is not None:
233          # Get out if there's nowhere to go              self.map.RaiseLayer(layer)
         #  
         #if prev_id == INVALID_TREE_ID: return  
   
         if isinstance(cur_data, Layer):  
             self.map.RaiseLayer(cur_data)  
         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())  
240    
241          cur_data = self.GetPyData(cur_id)          if layer is not None:
242                self.map.LowerLayer(layer)
         if isinstance(cur_data, Layer):  
             self.map.LowerLayer(cur_data)  
         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()
261            layer.SetVisible(True)
262    
263      def DoOnHideLayer(self):      def DoOnHideLayer(self):
264          self.__ShowHideLayer(False)          #self.__ShowHideLayer(False)
265            layer, group = self.GetSelectedHierarchy()
266      def DoOnClassify(self):          layer.SetVisible(False)
         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    
268      def Sort(self):      def Sort(self):
269          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
270    
271      def _OnSelChanged(self, event):      def GetSelectedHierarchy(self):
272          id = self.GetSelection()          id = self.GetSelection()
         assert(id.IsOk())  
273    
274          group = None          if not id.IsOk():
275                return (None, None)
276    
277          layer = self.GetPyData(id)          layer = self.GetPyData(id)
278            group = None
279    
280          if isinstance(layer, ClassGroup):          if isinstance(layer, ClassGroup):
281              id = self.GetItemParent(id)              id = self.GetItemParent(id)
282              assert(id.IsOk())              assert id.IsOk()
283              group = layer              group = layer
284              layer = self.GetPyData(id)              layer = self.GetPyData(id)
285    
286          self.parent.DoOnSelChanged(layer, group)          return (layer, group)
287    
288        def _OnMsgMapsChanged(self):
289            #print self.map is self.mainWindow.Map()
290            self.SetMap(self.mainWindow.Map())
291            
292        def _OnSelChanged(self, event):
293            self.__UpdateSelection()
294    
295      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
296          self.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()
303    
304          self.__FillTreeLayer(id)          # XXX: yikes! this is so bad, we should be doing what is
305            #      commented out, but there is a problem with keeping
306            #      track of the images in the image list when we replace
307            #      a layer. it ends up causing a seg fault.
308            self.__FillTree(self.map)
309            self.__UpdateSelection()
310            #self.__FillTreeLayer(id)
311    
312      def _OnMsgMapStackingChanged(self, *args):      def _OnMsgMapStackingChanged(self, *args):
313          self.Sort()          self.Sort()
# Line 260  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(id(map) == id(self.map))          assert map is self.map
322    
323          self.__FillTree(self.map)          self.__FillTree(self.map)
324            self.__UpdateSelection()
325    
326      def __FillTree(self, map):      def _OnMsgLayerVisibilityChanged(self, layer):
327            assert isinstance(layer, BaseLayer)
328    
329            self.__ShowHideLayer(layer)
330            self.__UpdateSelection()
331    
332          assert(isinstance(map, Map))      def _OnMsgLayerTitleChanged(self, layer):
333    
334            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):
344    
345          self.Freeze()          self.Freeze()
346    
# Line 295  class LegendTree(wxTreeCtrl): Line 367  class LegendTree(wxTreeCtrl):
367              for l in map.Layers():              for l in map.Layers():
368                  id = self.PrependItem(root, l.Title())                  id = self.PrependItem(root, l.Title())
369                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)
370                    l.Subscribe(LAYER_VISIBILITY_CHANGED,
371                                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 315  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              #self.layer2id[g] = id  
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 349  class LegendTree(wxTreeCtrl): Line 423  class LegendTree(wxTreeCtrl):
423          return bmp          return bmp
424    
425      def __DeleteAllItems(self):      def __DeleteAllItems(self):
426    
427            while len(self.layer2id) > 0:
428                layer, id = self.layer2id.popitem()
429                layer.Unsubscribe(LAYER_CHANGED,
430                                  self._OnMsgLayerChanged)
431                layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,
432                                  self._OnMsgLayerVisibilityChanged)
433                layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
434    
435          self.DeleteAllItems()          self.DeleteAllItems()
         self.layer2id = {}  
436    
437        def __SetVisibilityStyle(self, visible, id):
438            font = self.GetItemFont(id)
439    
440      def __ShowHideLayer(self, show):          if visible:
441          id = self.GetSelection()              font.SetStyle(wxNORMAL)
442          assert(id.IsOk())              color = wxBLACK
443            else:
444                #font.SetStyle(wxITALIC)
445                font.SetStyle(wxNORMAL)
446                color = wxLIGHT_GREY
447    
448            self.SetItemTextColour(id, color)
449            self.SetItemFont(id, font)
450                    
451          item = self.GetPyData(id)      def __ShowHideLayer(self, layer):
452          if isinstance(item, ClassGroup):          parent = self.layer2id[layer]
453              id = self.GetItemParent(id)          assert parent.IsOk()
             assert(id.IsOk())  
             item = self.GetPyData(id)  
454    
455            visible = layer.Visible()
456    
457          if show != item.Visible():          self.__SetVisibilityStyle(visible, parent)
458    
459              item.SetVisible(show)          id, cookie = self.GetFirstChild(parent, 123)
460    
461              font = self.GetItemFont(id)          while id.IsOk():
462              if show:              self.__SetVisibilityStyle(visible, id)
463                  font.SetStyle(wxNORMAL)              id, cookie = self.GetNextChild(parent, cookie)
464                  self.SetItemFont(id, font)              
465              else:  class ScaleBarBitmap(wxBoxSizer):
466                  font.SetStyle(wxITALIC)  
467                  self.SetItemFont(id, font)      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.568  
changed lines
  Added in v.980

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26