/[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 1895 by frank, Fri Oct 31 10:13:32 2003 UTC revision 2560 by bh, Tue Feb 8 20:25:22 2005 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 15  from Thuban import _ Line 15  from Thuban import _
15  import resource  import resource
16    
17  from wxPython.wx import *  from wxPython.wx import *
18    import wxPython
19    
20  from Thuban.Model.layer import BaseLayer  from Thuban.Model.layer import BaseLayer
21  from Thuban.Model.map import Map  from Thuban.Model.map import Map
# Line 31  from Thuban.UI.classifier import ClassDa Line 32  from Thuban.UI.classifier import ClassDa
32  from Thuban.UI.dock import DockPanel  from Thuban.UI.dock import DockPanel
33  from Thuban.UI.scalebar import ScaleBar  from Thuban.UI.scalebar import ScaleBar
34    
35    from Thuban.UI.menu import Menu
36    
37  from Thuban.Lib.connector import ConnectorError  from Thuban.Lib.connector import ConnectorError
38    
39  ID_LEGEND_TOP = 4001  ID_LEGEND_TOP = 4001
# Line 42  ID_LEGEND_PROPS = 4006 Line 45  ID_LEGEND_PROPS = 4006
45  ID_LEGEND_SHOWLAYER = 4007  ID_LEGEND_SHOWLAYER = 4007
46  ID_LEGEND_HIDELAYER = 4008  ID_LEGEND_HIDELAYER = 4008
47    
 ID_POPUP_TOP = 4501  
 ID_POPUP_UP  = 4502  
 ID_POPUP_DOWN = 4503  
 ID_POPUP_BOTTOM = 4504  
 ID_POPUP_PROPS  = 4506  
 ID_POPUP_VISIBLE = 4507  
 ID_POPUP_PROJ = 4509  
 ID_POPUP_REMOVE = 4510  
 ID_POPUP_SHOWTABLE = 4511  
   
48  BMP_SIZE_W = 15  BMP_SIZE_W = 15
49  BMP_SIZE_H = 15  BMP_SIZE_H = 15
50    
# Line 63  SHOW_BMP  = "show_layer" Line 56  SHOW_BMP  = "show_layer"
56  HIDE_BMP  = "hide_layer"  HIDE_BMP  = "hide_layer"
57  PROPS_BMP = "layer_properties"  PROPS_BMP = "layer_properties"
58    
   
59  class LegendPanel(DockPanel):  class LegendPanel(DockPanel):
60    
61      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
# Line 118  class LegendPanel(DockPanel): Line 110  class LegendPanel(DockPanel):
110          EVT_TOOL(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)          EVT_TOOL(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)
111          EVT_TOOL(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)          EVT_TOOL(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)
112    
         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)  
         EVT_MENU(self, ID_POPUP_REMOVE, self._OnRemoveLayer)  
         EVT_MENU(self, ID_POPUP_SHOWTABLE, self._OnShowTable)  
           
113          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)
114    
115          panelBox.Add(self.tree, 1, wxGROW, 0)          panelBox.Add(self.tree, 1, wxGROW, 0)
# Line 280  class LegendTree(wxTreeCtrl): Line 262  class LegendTree(wxTreeCtrl):
262          item = event.GetItem()          item = event.GetItem()
263          self.SelectItem(item)          self.SelectItem(item)
264    
265          # Create the menu          # Define the menu
266          menu = wxMenu("", 0)          popup_menu = Menu("PopUp", "",
267                              [ "layer_visibility",
268          # The "Visible" item is a special ...                              None,
269          menuitem = wxMenuItem(menu, ID_POPUP_VISIBLE, _("Visible"),                              "layer_properties",
270                                  "", wxITEM_CHECK)                              "layer_projection",
271          menu.AppendItem(menuitem)                              "layer_remove",
272          layer, group = self.GetSelectedHierarchy()                              "layer_show_table",
273          menuitem.Check(layer.Visible())                              None,
274                                "layer_to_top",
275          menu.AppendSeparator()                              "layer_raise",
276          menu.Append(ID_POPUP_PROPS, _("&Properties..."))                              "layer_lower",
277          menu.Append(ID_POPUP_PROJ, _("Pro&jection..."))                              "layer_to_bottom"
278          menu.Append(ID_POPUP_REMOVE, _("&Remove Layer"))                              ])
         menu.Append(ID_POPUP_SHOWTABLE, _("Show Ta&ble"))  
         menu.AppendSeparator()  
         menu.Append(ID_POPUP_TOP, _("Top Layer"))  
         menu.Append(ID_POPUP_UP, _("Raise Layer"))  
         menu.Append(ID_POPUP_DOWN, _("Lower Layer"))  
         menu.Append(ID_POPUP_BOTTOM, _("Bottom Layer"))  
279    
280          # Display the menu          # Display the menu
281          pos = event.GetPoint()          pos = event.GetPoint()
282          shift = self.ClientToScreen((0,0))          shift = self.ClientToScreen((0,0))
283          self.PopupMenu(menu, pos)          self.PopupMenu(self.mainWindow.build_menu(popup_menu), pos)
284    
285      def find_layer(self, layer):      def find_layer(self, layer):
286          """Return the tree item for the layer"""          """Return the tree item for the layer"""
287          root = self.GetRootItem()          root = self.GetRootItem()
288          id, cookie = self.GetFirstChild(root, 0)          id, cookie = self.GetFirstChild(root)
289          while id.IsOk():          while id.IsOk():
290              if self.GetPyData(id) is layer:              if self.GetPyData(id) is layer:
291                  return id                  return id
# Line 512  class LegendTree(wxTreeCtrl): Line 488  class LegendTree(wxTreeCtrl):
488          # 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
489          layers = {}          layers = {}
490          root = self.GetRootItem()          root = self.GetRootItem()
491          id, cookie = self.GetFirstChild(root, 0)          id, cookie = self.GetFirstChild(root)
492          while id.IsOk():          while id.IsOk():
493              layers[self.GetPyData(id)] = 1              layers[self.GetPyData(id)] = 1
494              id, cookie = self.GetNextChild(root, cookie)              id, cookie = self.GetNextChild(root, cookie)
# Line 531  class LegendTree(wxTreeCtrl): Line 507  class LegendTree(wxTreeCtrl):
507          layers = map.Layers()          layers = map.Layers()
508    
509          root = self.GetRootItem()          root = self.GetRootItem()
510          id, cookie = self.GetFirstChild(root, 0)          id, cookie = self.GetFirstChild(root)
511          while id.IsOk():          while id.IsOk():
512              if self.GetPyData(id) not in layers:              if self.GetPyData(id) not in layers:
513                  self.__RemoveLayer(id)                  self.__RemoveLayer(id)
# Line 623  class LegendTree(wxTreeCtrl): Line 599  class LegendTree(wxTreeCtrl):
599    
600          pid = self.GetRootItem()          pid = self.GetRootItem()
601    
602          id, cookie = self.GetFirstChild(pid, 123)          id, cookie = self.GetFirstChild(pid)
603          while id.IsOk():          while id.IsOk():
604              self.__RemoveLayer(id)              self.__RemoveLayer(id)
605              id, cookie = self.GetNextChild(pid, cookie)              id, cookie = self.GetNextChild(pid, cookie)
# Line 661  class LegendTree(wxTreeCtrl): Line 637  class LegendTree(wxTreeCtrl):
637          self.Delete(id)          self.Delete(id)
638    
639      def DeleteChildren(self, pid):      def DeleteChildren(self, pid):
640          id, cookie = self.GetFirstChild(pid, 123)          id, cookie = self.GetFirstChild(pid)
641          while id.IsOk():          while id.IsOk():
642              self.availImgListIndices.append(self.GetItemImage(id))              self.availImgListIndices.append(self.GetItemImage(id))
643              id, cookie = self.GetNextChild(pid, cookie)              id, cookie = self.GetNextChild(pid, cookie)
# Line 717  class LegendTree(wxTreeCtrl): Line 693  class LegendTree(wxTreeCtrl):
693    
694          self.__SetVisibilityStyle(visible, parent)          self.__SetVisibilityStyle(visible, parent)
695    
696          id, cookie = self.GetFirstChild(parent, 123)          id, cookie = self.GetFirstChild(parent)
697    
698          while id.IsOk():          while id.IsOk():
699              self.__SetVisibilityStyle(visible, id)              self.__SetVisibilityStyle(visible, id)
700              id, cookie = self.GetNextChild(parent, cookie)              id, cookie = self.GetNextChild(parent, cookie)
701                
702        # In wxPython 2.4 the GetFirstChild method has to be called with a
703        # second argument and in 2.5 it must not.  Reading the code of
704        # wxPython 2.4 it seems that the second parameter was intended to be
705        # optional there but due to a bug in the C++ code it doesn't work
706        # and omitting the second argument leads to a segfault.  To cope
707        # with this and to make the code usable with both 2.5 and 2.4 we
708        # overwrite the inherited method when running with 2.4 to provide a
709        # default value for the second argument.
710        if map(int, wxPython.__version__.split(".")[:2]) < [2, 5]:
711            def GetFirstChild(self, item):
712                return wxTreeCtrl.GetFirstChild(self, item, 0)
713    
714    
715  class ScaleBarBitmap(wxBoxSizer):  class ScaleBarBitmap(wxBoxSizer):
716    
717      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):

Legend:
Removed from v.1895  
changed lines
  Added in v.2560

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26