/[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

trunk/thuban/Thuban/UI/legend.py revision 1837 by frank, Tue Oct 21 09:29:52 2003 UTC branches/WIP-pyshapelib-bramz/Thuban/UI/legend.py revision 2734 by bramz, Thu Mar 1 12:42:59 2007 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003, 2005 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]>
4  # Frank Koormann <[email protected]>  # Frank Koormann <[email protected]>
# Line 14  from Thuban import _ Line 14  from Thuban import _
14    
15  import resource  import resource
16    
17  from wxPython.wx import *  import wx
18    
19  from Thuban.Model.layer import BaseLayer  from Thuban.Model.layer import BaseLayer
20  from Thuban.Model.map import Map  from Thuban.Model.map import Map
# Line 31  from Thuban.UI.classifier import ClassDa Line 31  from Thuban.UI.classifier import ClassDa
31  from Thuban.UI.dock import DockPanel  from Thuban.UI.dock import DockPanel
32  from Thuban.UI.scalebar import ScaleBar  from Thuban.UI.scalebar import ScaleBar
33    
34    from Thuban.UI.menu import Menu
35    
36  from Thuban.Lib.connector import ConnectorError  from Thuban.Lib.connector import ConnectorError
37    
38  ID_LEGEND_TOP = 4001  ID_LEGEND_TOP = 4001
# Line 42  ID_LEGEND_PROPS = 4006 Line 44  ID_LEGEND_PROPS = 4006
44  ID_LEGEND_SHOWLAYER = 4007  ID_LEGEND_SHOWLAYER = 4007
45  ID_LEGEND_HIDELAYER = 4008  ID_LEGEND_HIDELAYER = 4008
46    
47  ID_POPUP_TOP = 4501  BMP_SIZE_W = 16
48  ID_POPUP_UP  = 4502  BMP_SIZE_H = 16
 ID_POPUP_DOWN = 4503  
 ID_POPUP_BOTTOM = 4504  
 ID_POPUP_PROPS  = 4506  
 ID_POPUP_VISIBLE = 4507  
 ID_POPUP_PROJ = 4509  
   
 BMP_SIZE_W = 15  
 BMP_SIZE_H = 15  
49    
50  TOP_BMP = "top_layer"  TOP_BMP = "top_layer"
51  RAISE_BMP = "raise_layer"  RAISE_BMP = "raise_layer"
# Line 61  SHOW_BMP  = "show_layer" Line 55  SHOW_BMP  = "show_layer"
55  HIDE_BMP  = "hide_layer"  HIDE_BMP  = "hide_layer"
56  PROPS_BMP = "layer_properties"  PROPS_BMP = "layer_properties"
57    
   
58  class LegendPanel(DockPanel):  class LegendPanel(DockPanel):
59    
60      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
61          DockPanel.__init__(self, parent, -1)          DockPanel.__init__(self, parent, -1)
62    
63          self.mainWindow = mainWindow          self.mainWindow = mainWindow
# Line 72  class LegendPanel(DockPanel): Line 65  class LegendPanel(DockPanel):
65    
66          self.buttons = []          self.buttons = []
67    
68          panelBox = wxBoxSizer(wxVERTICAL)          panelBox = wx.BoxSizer(wx.VERTICAL)
69    
70          self.toolBar = wxToolBar(self, -1)          self.toolBar = wx.ToolBar(self, -1)
71          self.toolBar.SetToolBitmapSize(wxSize(24, 24))          self.toolBar.SetToolBitmapSize(wx.Size(24, 24))
72    
73          bmp = resource.GetBitmapResource(TOP_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(TOP_BMP, wx.BITMAP_TYPE_XPM)
74          self.toolBar.AddTool(ID_LEGEND_TOP, bmp,          self.toolBar.AddTool(ID_LEGEND_TOP, bmp,
75              shortHelpString=_("Top Layer"))              shortHelpString=_("Top Layer"))
76    
77          bmp = resource.GetBitmapResource(RAISE_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(RAISE_BMP, wx.BITMAP_TYPE_XPM)
78          self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,          self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,
79              shortHelpString=_("Raise Layer"))              shortHelpString=_("Raise Layer"))
80    
81          bmp = resource.GetBitmapResource(LOWER_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(LOWER_BMP, wx.BITMAP_TYPE_XPM)
82          self.toolBar.AddTool(ID_LEGEND_LOWER, bmp,          self.toolBar.AddTool(ID_LEGEND_LOWER, bmp,
83              shortHelpString=_("Lower Layer"))              shortHelpString=_("Lower Layer"))
84    
85          bmp = resource.GetBitmapResource(BOTTOM_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(BOTTOM_BMP, wx.BITMAP_TYPE_XPM)
86          self.toolBar.AddTool(ID_LEGEND_BOTTOM, bmp,          self.toolBar.AddTool(ID_LEGEND_BOTTOM, bmp,
87              shortHelpString=_("Bottom Layer"))              shortHelpString=_("Bottom Layer"))
88    
89          bmp = resource.GetBitmapResource(SHOW_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(SHOW_BMP, wx.BITMAP_TYPE_XPM)
90          self.toolBar.AddTool(ID_LEGEND_SHOWLAYER, bmp,          self.toolBar.AddTool(ID_LEGEND_SHOWLAYER, bmp,
91              shortHelpString=_("Show Layer"))              shortHelpString=_("Show Layer"))
92    
93          bmp = resource.GetBitmapResource(HIDE_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(HIDE_BMP, wx.BITMAP_TYPE_XPM)
94          self.toolBar.AddTool(ID_LEGEND_HIDELAYER, bmp,          self.toolBar.AddTool(ID_LEGEND_HIDELAYER, bmp,
95              shortHelpString=_("Hide Layer"))              shortHelpString=_("Hide Layer"))
96    
97          bmp = resource.GetBitmapResource(PROPS_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(PROPS_BMP, wx.BITMAP_TYPE_XPM)
98          self.toolBar.AddTool(ID_LEGEND_PROPS, bmp,          self.toolBar.AddTool(ID_LEGEND_PROPS, bmp,
99              shortHelpString=_("Edit Layer Properties"))              shortHelpString=_("Edit Layer Properties"))
100    
101          self.toolBar.Realize()          self.toolBar.Realize()
102          panelBox.Add(self.toolBar, 0, wxGROW, 0)          panelBox.Add(self.toolBar, 0, wx.GROW, 0)
103    
104            self.Bind(wx.EVT_TOOL, self._OnMoveTop, id=ID_LEGEND_TOP)
105            self.Bind(wx.EVT_TOOL, self._OnMoveUp, id=ID_LEGEND_RAISE)
106            self.Bind(wx.EVT_TOOL, self._OnMoveDown, id=ID_LEGEND_LOWER)
107            self.Bind(wx.EVT_TOOL, self._OnMoveBottom, id=ID_LEGEND_BOTTOM)
108            self.Bind(wx.EVT_TOOL, self._OnProperties, id=ID_LEGEND_PROPS)
109            self.Bind(wx.EVT_TOOL, self._OnShowLayer, id=ID_LEGEND_SHOWLAYER)
110            self.Bind(wx.EVT_TOOL, self._OnHideLayer, id=ID_LEGEND_HIDELAYER)
111    
         EVT_TOOL(self, ID_LEGEND_TOP, self._OnMoveTop)  
         EVT_TOOL(self, ID_LEGEND_RAISE, self._OnMoveUp)  
         EVT_TOOL(self, ID_LEGEND_LOWER, self._OnMoveDown)  
         EVT_TOOL(self, ID_LEGEND_BOTTOM, self._OnMoveBottom)  
         EVT_TOOL(self, ID_LEGEND_PROPS, self._OnProperties)  
         EVT_TOOL(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)  
         EVT_TOOL(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)  
   
         EVT_MENU(self, ID_POPUP_PROPS, self._OnProperties)  
         EVT_MENU(self, ID_POPUP_TOP, self._OnMoveTop)  
         EVT_MENU(self, ID_POPUP_UP, self._OnMoveUp)  
         EVT_MENU(self, ID_POPUP_DOWN, self._OnMoveDown)  
         EVT_MENU(self, ID_POPUP_BOTTOM, self._OnMoveBottom)  
         EVT_MENU(self, ID_POPUP_VISIBLE, self._OnToggleVisibility)  
         EVT_MENU(self, ID_POPUP_PROJ, self._OnProjection)  
           
112          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)
113    
114          panelBox.Add(self.tree, 1, wxGROW, 0)          panelBox.Add(self.tree, 1, wx.GROW, 0)
115    
116          self.scalebarbitmap = ScaleBarBitmap(self, map, mainWindow)          self.scalebarbitmap = ScaleBarBitmap(self, map, mainWindow)
117          panelBox.Add(self.scalebarbitmap, 0, wxGROW, 0)          panelBox.Add(self.scalebarbitmap, 0, wx.GROW, 0)
118    
119          self.SetAutoLayout(True)          self.SetAutoLayout(True)
120          self.SetSizer(panelBox)          self.SetSizer(panelBox)
# Line 142  class LegendPanel(DockPanel): Line 127  class LegendPanel(DockPanel):
127    
128          self.Create()          self.Create()
129    
130          EVT_CLOSE(self, self._OnClose)          self.Bind(wx.EVT_CLOSE, self._OnClose)
131    
132    
133      def GetMap(self):      def GetMap(self):
# Line 174  class LegendPanel(DockPanel): Line 159  class LegendPanel(DockPanel):
159    
160      def _OnMoveTop(self, event):      def _OnMoveTop(self, event):
161          self.tree.MoveCurrentItemTop()          self.tree.MoveCurrentItemTop()
162            
163      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
164          self.tree.MoveCurrentItemUp()          self.tree.MoveCurrentItemUp()
165    
166      def _OnMoveDown(self, event):      def _OnMoveDown(self, event):
# Line 190  class LegendPanel(DockPanel): Line 175  class LegendPanel(DockPanel):
175    
176      #def Close(self, force = False):      #def Close(self, force = False):
177          #DockPanel.Close(self, force)          #DockPanel.Close(self, force)
178            
179      def _OnClose(self, event):      def _OnClose(self, event):
180          self.__Close()          self.__Close()
181    
# Line 204  class LegendPanel(DockPanel): Line 189  class LegendPanel(DockPanel):
189      def _OnProjection(self, event):      def _OnProjection(self, event):
190          self.tree.LayerProjection()          self.tree.LayerProjection()
191    
192        def _OnRemoveLayer(self, event):
193            self.mainWindow.RemoveLayer()
194    
195        def _OnShowTable(self, event):
196            self.mainWindow.LayerShowTable()
197    
198      def __EnableButtons(self, on):      def __EnableButtons(self, on):
199          self.toolBar.EnableTool(ID_LEGEND_TOP, on)          self.toolBar.EnableTool(ID_LEGEND_TOP, on)
200          self.toolBar.EnableTool(ID_LEGEND_RAISE, on)          self.toolBar.EnableTool(ID_LEGEND_RAISE, on)
# Line 216  class LegendPanel(DockPanel): Line 207  class LegendPanel(DockPanel):
207      def __Close(self):      def __Close(self):
208          self.tree.Close()          self.tree.Close()
209    
210  class LegendTree(wxTreeCtrl):  class LegendTree(wx.TreeCtrl):
211    
212      def __init__(self, parent, id, map, mainWindow):      def __init__(self, parent, id, map, mainWindow):
213          wxTreeCtrl.__init__(self, parent, id,          wx.TreeCtrl.__init__(self, parent, id,
214                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,                              style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT,
215                              size = (200, 200))                              size = (200, 200))
216    
217          self.mainWindow = mainWindow          self.mainWindow = mainWindow
# Line 248  class LegendTree(wxTreeCtrl): Line 239  class LegendTree(wxTreeCtrl):
239          self.preventExpandCollapse = False          self.preventExpandCollapse = False
240          self.raiseProperties = False          self.raiseProperties = False
241    
242          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)          self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self._OnItemActivated, id=ID_LEGEND_TREE)
243          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)          self.Bind(wx.EVT_TREE_SEL_CHANGED, self._OnSelChanged, id=ID_LEGEND_TREE)
244          EVT_TREE_ITEM_EXPANDING(self, ID_LEGEND_TREE, self.OnItemExpandCollapse)          self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnItemExpandCollapse, id=ID_LEGEND_TREE)
245          EVT_TREE_ITEM_COLLAPSING(self, ID_LEGEND_TREE, self.OnItemExpandCollapse)          self.Bind(wx.EVT_TREE_ITEM_COLLAPSING, self.OnItemExpandCollapse, id=ID_LEGEND_TREE)
246          EVT_TREE_ITEM_RIGHT_CLICK(self, ID_LEGEND_TREE, self._OnRightClick)          self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self._OnRightClick, id=ID_LEGEND_TREE)
247    
248          EVT_CLOSE(self, self._OnClose)          self.Bind(wx.EVT_CLOSE, self._OnClose)
249    
250          self.SetMap(map)          self.SetMap(map)
251    
252        def _OnRightClick(self, event):
253            """Select item and pop up a context menu"""
254    
255            # The pop up menu is related to the legend tree, so we have direct
256            # access on the tree items. The events issued by the menu are handled
257            # by the legend panel, since most of the handlers are already
258            # implemented there.
259    
260            # Update item selection to the right click
261            item = event.GetItem()
262            self.SelectItem(item)
263    
264            # Define the menu
265            popup_menu = Menu("PopUp", "",
266                              [ "layer_visibility",
267                                None,
268                                "layer_properties",
269                                "layer_projection",
270                                "layer_remove",
271                                "layer_show_table",
272                                None,
273                                "layer_to_top",
274                                "layer_raise",
275                                "layer_lower",
276                                "layer_to_bottom"
277                                ])
278    
279            # Display the menu
280            pos = event.GetPoint()
281            shift = self.ClientToScreen((0,0))
282            self.PopupMenu(self.mainWindow.build_menu(popup_menu), pos)
283    
284      def find_layer(self, layer):      def find_layer(self, layer):
285          """Return the tree item for the layer"""          """Return the tree item for the layer"""
286          root = self.GetRootItem()          root = self.GetRootItem()
287          id, cookie = self.GetFirstChild(root, 0)          id, cookie = self.GetFirstChild(root)
288          while id.IsOk():          while id.IsOk():
289              if self.GetPyData(id) is layer:              if self.GetPyData(id) is layer:
290                  return id                  return id
# Line 290  class LegendTree(wxTreeCtrl): Line 313  class LegendTree(wxTreeCtrl):
313              #except ConnectorError:              #except ConnectorError:
314                  #pass                  #pass
315              self.DeleteAllItems()              self.DeleteAllItems()
316            
317          self.map = map          self.map = map
318    
319          if self.map is not None:          if self.map is not None:
# Line 346  class LegendTree(wxTreeCtrl): Line 369  class LegendTree(wxTreeCtrl):
369              layers = self.map.Layers()              layers = self.map.Layers()
370              return layers.index(data2) - layers.index(data1)              return layers.index(data2) - layers.index(data1)
371          else:          else:
372              return wxTreeCtrl.OnCompareItems(self, item1, item2)              return wx.TreeCtrl.OnCompareItems(self, item1, item2)
373    
374      def DoOnShowLayer(self):      def DoOnShowLayer(self):
375          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
# Line 387  class LegendTree(wxTreeCtrl): Line 410  class LegendTree(wxTreeCtrl):
410      def _OnMsgMapsChanged(self):      def _OnMsgMapsChanged(self):
411          #print self.map is self.mainWindow.Map()          #print self.map is self.mainWindow.Map()
412          self.SetMap(self.mainWindow.Map())          self.SetMap(self.mainWindow.Map())
413            
414      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
415          # If we change the selection from normalize_selection do nothing.          # If we change the selection from normalize_selection do nothing.
416          if self.changing_selection:          if self.changing_selection:
# Line 425  class LegendTree(wxTreeCtrl): Line 448  class LegendTree(wxTreeCtrl):
448              event.Veto()              event.Veto()
449              self.preventExpandCollapse = False              self.preventExpandCollapse = False
450    
     def _OnRightClick(self, event):  
         """Select item and pop up a context menu"""  
   
         # The pop up menu is related to the legend tree, so we have direct  
         # access on the tree items. The events issued by the menu are handled  
         # by the legend panel, since most of the handlers are already  
         # implemented there.  
   
         # Update item selection to the right click  
         item = event.GetItem()  
         self.SelectItem(item)  
   
         # Create the menu  
         menu = wxMenu("", 0)  
   
         # The "Visible" item is a special ...  
         menuitem = wxMenuItem(menu, ID_POPUP_VISIBLE, _("Visible"),  
                                 "", wxITEM_CHECK)  
         menu.AppendItem(menuitem)  
         layer, group = self.GetSelectedHierarchy()  
         menuitem.Check(layer.Visible())  
   
         menu.AppendSeparator()  
         menu.Append(ID_POPUP_PROPS, _("Properties"))  
         menu.Append(ID_POPUP_PROJ, _("Projection"))  
         menu.AppendSeparator()  
         menu.Append(ID_POPUP_TOP, _("Top"))  
         menu.Append(ID_POPUP_UP, _("Up"))  
         menu.Append(ID_POPUP_DOWN, _("Down"))  
         menu.Append(ID_POPUP_BOTTOM, _("Bottom"))  
   
         # Display the menu  
         pos = event.GetPoint()  
         shift = self.ClientToScreen((0,0))  
         self.PopupMenu(menu, pos)  
   
451      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
452          # The following looks strange but is need under Windows to          # The following looks strange but is need under Windows to
453          # raise the Properties on double-click: The tree control          # raise the Properties on double-click: The tree control
# Line 500  class LegendTree(wxTreeCtrl): Line 487  class LegendTree(wxTreeCtrl):
487          # Build a dict with all layers known by the the tree as keys          # Build a dict with all layers known by the the tree as keys
488          layers = {}          layers = {}
489          root = self.GetRootItem()          root = self.GetRootItem()
490          id, cookie = self.GetFirstChild(root, 0)          id, cookie = self.GetFirstChild(root)
491          while id.IsOk():          while id.IsOk():
492              layers[self.GetPyData(id)] = 1              layers[self.GetPyData(id)] = 1
493              id, cookie = self.GetNextChild(root, cookie)              id, cookie = self.GetNextChild(root, cookie)
# Line 519  class LegendTree(wxTreeCtrl): Line 506  class LegendTree(wxTreeCtrl):
506          layers = map.Layers()          layers = map.Layers()
507    
508          root = self.GetRootItem()          root = self.GetRootItem()
509          id, cookie = self.GetFirstChild(root, 0)          id, cookie = self.GetFirstChild(root)
510          while id.IsOk():          while id.IsOk():
511              if self.GetPyData(id) not in layers:              if self.GetPyData(id) not in layers:
512                  self.__RemoveLayer(id)                  self.__RemoveLayer(id)
# Line 544  class LegendTree(wxTreeCtrl): Line 531  class LegendTree(wxTreeCtrl):
531      def __UpdateSelection(self):      def __UpdateSelection(self):
532          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
533          self.parent.DoOnSelChanged(layer, group)          self.parent.DoOnSelChanged(layer, group)
534            
535      def __FillTree(self, map):      def __FillTree(self, map):
536    
537          self.Freeze()          self.Freeze()
# Line 559  class LegendTree(wxTreeCtrl): Line 546  class LegendTree(wxTreeCtrl):
546          self.Thaw()          self.Thaw()
547    
548      def __FillTreeLayer(self, pid):      def __FillTreeLayer(self, pid):
549    
550          layer = self.GetPyData(pid)          layer = self.GetPyData(pid)
551    
552          self.Freeze()          self.Freeze()
# Line 581  class LegendTree(wxTreeCtrl): Line 569  class LegendTree(wxTreeCtrl):
569                      bmp = self.__BuildGroupImage(g, shapeType)                      bmp = self.__BuildGroupImage(g, shapeType)
570    
571                      if bmp is None:                      if bmp is None:
572                          self.SetItemImage(id, -1)                          self.SetItemImage(id, -1, wx.TreeItemIcon_Normal)
573                          self.SetItemSelectedImage(id, -1)                          self.SetItemImage(id, -1, wx.TreeItemIcon_Selected)
574                            #self.SetItemSelectedImage(id, -1)
575                      else:                      else:
576                          if self.availImgListIndices:                          if self.availImgListIndices:
577                              i = self.availImgListIndices.pop(0)                              i = self.availImgListIndices.pop(0)
# Line 590  class LegendTree(wxTreeCtrl): Line 579  class LegendTree(wxTreeCtrl):
579                          else:                          else:
580                              i = self.image_list.Add(bmp)                              i = self.image_list.Add(bmp)
581    
582                          self.SetItemImage(id, i)                          self.SetItemImage(id, i, wx.TreeItemIcon_Normal)
583                          self.SetItemSelectedImage(id, i)                          self.SetItemImage(id, i, wx.TreeItemIcon_Selected)
584                            #self.SetItemlectedImage(id, i)
585    
586          self.Thaw()          self.Thaw()
587    
588      def __BuildGroupImage(self, group, shapeType):      def __BuildGroupImage(self, group, shapeType):
589    
590          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)          bmp = wx.EmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)
591          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)
592          dc = wxMemoryDC()          dc = wx.MemoryDC()
593          dc.SelectObject(bmp)          dc.SelectObject(bmp)
594          dc.Clear()          dc.Clear()
595    
# Line 611  class LegendTree(wxTreeCtrl): Line 601  class LegendTree(wxTreeCtrl):
601    
602          pid = self.GetRootItem()          pid = self.GetRootItem()
603    
604          id, cookie = self.GetFirstChild(pid, 123)          id, cookie = self.GetFirstChild(pid)
605          while id.IsOk():          while id.IsOk():
606              self.__RemoveLayer(id)              self.__RemoveLayer(id)
607              id, cookie = self.GetNextChild(pid, cookie)              id, cookie = self.GetNextChild(pid, cookie)
608    
609          wxTreeCtrl.DeleteAllItems(self)          wx.TreeCtrl.DeleteAllItems(self)
610    
611      def __AddLayer(self, before, l):      def __AddLayer(self, before, l):
612          root = self.GetRootItem()          root = self.GetRootItem()
613          id = self.InsertItemBefore(root, before,          id = self.InsertItemBefore(root, before,
614                              l.Title(),                              l.Title(),
615                              self.mapImageIndex,                              self.mapImageIndex,
616                              self.mapImageIndex)                              self.mapImageIndex)
617    
# Line 632  class LegendTree(wxTreeCtrl): Line 622  class LegendTree(wxTreeCtrl):
622          self.Expand(id)          self.Expand(id)
623    
624          l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)          l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)
625          l.Subscribe(LAYER_VISIBILITY_CHANGED,          l.Subscribe(LAYER_VISIBILITY_CHANGED,
626                      self._OnMsgLayerVisibilityChanged)                      self._OnMsgLayerVisibilityChanged)
627          l.Subscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)          l.Subscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
628    
# Line 640  class LegendTree(wxTreeCtrl): Line 630  class LegendTree(wxTreeCtrl):
630          self.DeleteChildren(id)          self.DeleteChildren(id)
631    
632          layer = self.GetPyData(id)          layer = self.GetPyData(id)
633          layer.Unsubscribe(LAYER_CHANGED,          layer.Unsubscribe(LAYER_CHANGED,
634                            self._OnMsgLayerChanged)                            self._OnMsgLayerChanged)
635          layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,          layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,
636                            self._OnMsgLayerVisibilityChanged)                            self._OnMsgLayerVisibilityChanged)
637          layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)          layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
638    
639          self.Delete(id)          self.Delete(id)
640    
641      def DeleteChildren(self, pid):      def DeleteChildren(self, pid):
642          id, cookie = self.GetFirstChild(pid, 123)          id, cookie = self.GetFirstChild(pid)
643          while id.IsOk():          while id.IsOk():
644              self.availImgListIndices.append(self.GetItemImage(id))              self.availImgListIndices.append(self.GetItemImage(id))
645              id, cookie = self.GetNextChild(pid, cookie)              id, cookie = self.GetNextChild(pid, cookie)
646          wxTreeCtrl.DeleteChildren(self, pid)          wx.TreeCtrl.DeleteChildren(self, pid)
647    
648      def GetRootItem(self):      def GetRootItem(self):
649          root = wxTreeCtrl.GetRootItem(self)          root = wx.TreeCtrl.GetRootItem(self)
650    
651          if not root.IsOk():          if not root.IsOk():
652              self.image_list = wxImageList(BMP_SIZE_W, BMP_SIZE_H, False, 0)              self.image_list = wx.ImageList(BMP_SIZE_W, BMP_SIZE_H, False, 0)
653    
654              bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)              bmp = wx.EmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)
655              dc = wxMemoryDC()              dc = wx.MemoryDC()
656              dc.SelectObject(bmp)              dc.SelectObject(bmp)
657              dc.SetBrush(wxBLACK_BRUSH)              dc.SetBrush(wx.BLACK_BRUSH)
658              dc.Clear()              dc.Clear()
659              dc.SelectObject(wxNullBitmap)              dc.SelectObject(wx.NullBitmap)
660    
661              self.emptyImageIndex = \              self.emptyImageIndex = \
662                  self.image_list.AddWithColourMask(bmp, wxColour(0, 0, 0))                  self.image_list.AddWithColourMask(bmp, wx.Colour(0, 0, 0))
663    
664              bmp = resource.GetBitmapResource("legend_icon_layer",              bmp = resource.GetBitmapResource("legend_icon_layer",
665                                                wxBITMAP_TYPE_XPM)                                                wx.BITMAP_TYPE_XPM)
666              self.mapImageIndex = \              self.mapImageIndex = \
667                  self.image_list.Add(bmp)                  self.image_list.Add(bmp)
668    
# Line 687  class LegendTree(wxTreeCtrl): Line 677  class LegendTree(wxTreeCtrl):
677          font = self.GetItemFont(id)          font = self.GetItemFont(id)
678    
679          if visible:          if visible:
680              font.SetStyle(wxNORMAL)              font.SetStyle(wx.NORMAL)
681              color = wxBLACK              color = wx.BLACK
682          else:          else:
683              #font.SetStyle(wxITALIC)              #font.SetStyle(wxITALIC)
684              font.SetStyle(wxNORMAL)              font.SetStyle(wx.NORMAL)
685              color = wxLIGHT_GREY              color = wx.LIGHT_GREY
686    
687          self.SetItemTextColour(id, color)          self.SetItemTextColour(id, color)
688          self.SetItemFont(id, font)          self.SetItemFont(id, font)
689            
690      def __ShowHideLayer(self, layer):      def __ShowHideLayer(self, layer):
691          parent = self.find_layer(layer)          parent = self.find_layer(layer)
692          assert parent.IsOk()          assert parent.IsOk()
# Line 705  class LegendTree(wxTreeCtrl): Line 695  class LegendTree(wxTreeCtrl):
695    
696          self.__SetVisibilityStyle(visible, parent)          self.__SetVisibilityStyle(visible, parent)
697    
698          id, cookie = self.GetFirstChild(parent, 123)          id, cookie = self.GetFirstChild(parent)
699    
700          while id.IsOk():          while id.IsOk():
701              self.__SetVisibilityStyle(visible, id)              self.__SetVisibilityStyle(visible, id)
702              id, cookie = self.GetNextChild(parent, cookie)              id, cookie = self.GetNextChild(parent, cookie)
703                
704  class ScaleBarBitmap(wxBoxSizer):      # In wxPython 2.4 the GetFirstChild method has to be called with a
705        # second argument and in 2.5 it must not.  Reading the code of
706        # wxPython 2.4 it seems that the second parameter was intended to be
707        # optional there but due to a bug in the C++ code it doesn't work
708        # and omitting the second argument leads to a segfault.  To cope
709        # with this and to make the code usable with both 2.5 and 2.4 we
710        # overwrite the inherited method when running with 2.4 to provide a
711        # default value for the second argument.
712        if map(int, wx.__version__.split(".")[:2]) < [2, 5]:
713            def GetFirstChild(self, item):
714                return wx.TreeCtrl.GetFirstChild(self, item, 0)
715    
716    
717    class ScaleBarBitmap(wx.BoxSizer):
718    
719      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
720          # While the width is fixed, get the height _now_.          # While the width is fixed, get the height _now_.
721          dc = wxMemoryDC()          dc = wx.MemoryDC()
722          textwidth, textheight = dc.GetTextExtent("%d"%0)          textwidth, textheight = dc.GetTextExtent("%d"%0)
723          self.width = 210          self.width = 210
724          self.height = textheight + 3*2 + 8          self.height = textheight + 3*2 + 8
725    
726          wxBoxSizer.__init__(self, wxVERTICAL)          wx.BoxSizer.__init__(self, wx.VERTICAL)
727          bmp=wxEmptyBitmap(self.width, self.height)          bmp=wx.EmptyBitmap(self.width, self.height)
728          self.scalebarBitmap = wxStaticBitmap(parent, -1, bmp)          self.scalebarBitmap = wx.StaticBitmap(parent, -1, bmp)
729          self.Add(self.scalebarBitmap, 0, wxALIGN_CENTER|wxLEFT|wxTOP|wxRIGHT, 1)          self.Add(self.scalebarBitmap, 0, wx.ALIGN_CENTER|wx.LEFT|wx.TOP|wx.RIGHT, 1)
730    
731          self.mainWindow = mainWindow          self.mainWindow = mainWindow
732          self.parent = parent          self.parent = parent
# Line 735  class ScaleBarBitmap(wxBoxSizer): Line 738  class ScaleBarBitmap(wxBoxSizer):
738    
739          if self.canvas is not None:          if self.canvas is not None:
740              for msg, func in sub_list: self.canvas.Unsubscribe(msg, func)              for msg, func in sub_list: self.canvas.Unsubscribe(msg, func)
741            
742          self.canvas = canvas          self.canvas = canvas
743          self.scalebar = ScaleBar(canvas.map)          self.scalebar = ScaleBar(canvas.map)
744    
# Line 747  class ScaleBarBitmap(wxBoxSizer): Line 750  class ScaleBarBitmap(wxBoxSizer):
750          self.__SetScale(scale)          self.__SetScale(scale)
751    
752      def __SetScale(self, scale):      def __SetScale(self, scale):
753          bmp = wxEmptyBitmap(self.width, self.height)          bmp = wx.EmptyBitmap(self.width, self.height)
754          dc = wxMemoryDC()          dc = wx.MemoryDC()
755          dc.SelectObject(bmp)          dc.SelectObject(bmp)
756          dc.Clear()          dc.Clear()
757    

Legend:
Removed from v.1837  
changed lines
  Added in v.2734

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26