/[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 665 by jonathan, Mon Apr 14 16:35:19 2003 UTC revision 936 by jonathan, Tue May 20 15:24:32 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 13  import resource Line 14  import resource
14    
15  from wxPython.wx import *  from wxPython.wx import *
16    
17  from Thuban.Model.layer import Layer  from Thuban.Model.layer import BaseLayer
18  from Thuban.Model.map import Map  from Thuban.Model.map import Map
 from Thuban.Model.messages import *  
19  from Thuban.Model.classification import ClassGroup  from Thuban.Model.classification import ClassGroup
20    
21  from Thuban.UI.messages import *  from Thuban.Model.messages import \
22        MAP_STACKING_CHANGED, MAP_LAYERS_ADDED, MAP_LAYERS_REMOVED, LAYER_CHANGED,\
23        LAYER_VISIBILITY_CHANGED, TITLE_CHANGED
24    
25    from Thuban.UI.messages import SCALE_CHANGED
26    
27  from Thuban.UI.classifier import ClassDataPreviewer  from Thuban.UI.classifier import ClassDataPreviewer
28  from Thuban.UI.dock import DockPanel  from Thuban.UI.dock import DockPanel
29    from Thuban.UI.scalebar import ScaleBar
30    
31  from Thuban.Lib.connector import ConnectorError  from Thuban.Lib.connector import ConnectorError
32    
# Line 77  class LegendPanel(DockPanel): Line 83  class LegendPanel(DockPanel):
83              shortHelpString=_("Edit Layer Properties"))              shortHelpString=_("Edit Layer Properties"))
84    
85          self.toolBar.Realize()          self.toolBar.Realize()
86          panelBox.Add(self.toolBar, 0, wxALL, 0)          panelBox.Add(self.toolBar, 0, wxGROW, 0)
87    
88          EVT_TOOL(self, ID_LEGEND_RAISE, self._OnMoveUp)          EVT_TOOL(self, ID_LEGEND_RAISE, self._OnMoveUp)
89          EVT_TOOL(self, ID_LEGEND_LOWER, self._OnMoveDown)          EVT_TOOL(self, ID_LEGEND_LOWER, self._OnMoveDown)
# Line 89  class LegendPanel(DockPanel): Line 95  class LegendPanel(DockPanel):
95    
96          panelBox.Add(self.tree, 1, wxGROW, 0)          panelBox.Add(self.tree, 1, wxGROW, 0)
97    
98          #panelBox.Fit(self)          self.scalebarbitmap = ScaleBarBitmap(self, map, mainWindow)
99            panelBox.Add(self.scalebarbitmap, 0, wxGROW, 0)
100    
101          self.SetAutoLayout(True)          self.SetAutoLayout(True)
102          self.SetSizer(panelBox)          self.SetSizer(panelBox)
# Line 110  class LegendPanel(DockPanel): Line 117  class LegendPanel(DockPanel):
117    
118      def SetMap(self, map):      def SetMap(self, map):
119          self.tree.SetMap(map)          self.tree.SetMap(map)
120            self.scalebarbitmap.SetCanvas(self.mainWindow.canvas)
121    
122      def DoOnSelChanged(self, layer, group):      def DoOnSelChanged(self, layer, group):
123    
124          ok = isinstance(layer, Layer)          ok = isinstance(layer, BaseLayer)
125          self.__EnableButtons(ok)          self.__EnableButtons(ok)
126    
127          self.mainWindow.SelectLayer(layer)          self.mainWindow.SelectLayer(layer)
# Line 121  class LegendPanel(DockPanel): Line 129  class LegendPanel(DockPanel):
129      def DoOnProperties(self):      def DoOnProperties(self):
130          list = self.tree.GetSelectedHierarchy()          list = self.tree.GetSelectedHierarchy()
131    
132          ok = isinstance(list[0], Layer)          ok = isinstance(list[0], BaseLayer)
133          if ok:          if ok:
134              self.mainWindow.OpenLayerProperties(list[0], list[1])              self.mainWindow.OpenLayerProperties(list[0], list[1])
135    
# Line 218  class LegendTree(wxTreeCtrl): Line 226  class LegendTree(wxTreeCtrl):
226                  #self._OnMsgMapsChanged)                  #self._OnMsgMapsChanged)
227              self.__FillTree(self.map)              self.__FillTree(self.map)
228    
               
229      def MoveCurrentItemUp(self):      def MoveCurrentItemUp(self):
230          cur_id = self.GetSelection()          layer, group = self.GetSelectedHierarchy()
         assert cur_id.IsOk()  
   
         cur_data = self.GetPyData(cur_id)  
   
         #prev_id = self.GetPrevSibling(cur_id)  
   
         #  
         # Get out if there's nowhere to go  
         #  
         #if prev_id == INVALID_TREE_ID: return  
231    
232          if isinstance(cur_data, Layer):          if layer is not None:
233              self.map.RaiseLayer(cur_data)              self.map.RaiseLayer(layer)
         elif isinstance(cur_data, ClassGroup):  
             pass  
234          else:          else:
235              assert False, "Shouldn't be here."              assert False, "Shouldn't be allowed."
236              pass              pass
237    
238      def MoveCurrentItemDown(self):      def MoveCurrentItemDown(self):
239          cur_id = self.GetSelection()          layer, group = self.GetSelectedHierarchy()
         assert cur_id.IsOk()  
   
         cur_data = self.GetPyData(cur_id)  
240    
241          if isinstance(cur_data, Layer):          if layer is not None:
242              self.map.LowerLayer(cur_data)              self.map.LowerLayer(layer)
         elif isinstance(cur_data, ClassGroup):  
             pass  
243          else:          else:
244              assert False, "Shouldn't be here."              assert False, "Shouldn't be allowed."
245              pass              pass
246    
   
247      def OnCompareItems(self, item1, item2):      def OnCompareItems(self, item1, item2):
248    
249          data1 = self.GetPyData(item1)          data1 = self.GetPyData(item1)
250          data2 = self.GetPyData(item2)          data2 = self.GetPyData(item2)
251    
252          if isinstance(data1, Layer):          if isinstance(data1, BaseLayer):
253              layers = self.map.Layers()              layers = self.map.Layers()
254              return layers.index(data2) - layers.index(data1)              return layers.index(data2) - layers.index(data1)
255          else:          else:
256              return wxTreeCtrl.OnCompareItems(self, item1, item2)              return wxTreeCtrl.OnCompareItems(self, item1, item2)
257    
   
258      def DoOnShowLayer(self):      def DoOnShowLayer(self):
259          #self.__ShowHideLayer(True)          #self.__ShowHideLayer(True)
260          layer, group = self.GetSelectedHierarchy()          layer, group = self.GetSelectedHierarchy()
# Line 308  class LegendTree(wxTreeCtrl): Line 296  class LegendTree(wxTreeCtrl):
296          self.parent.DoOnProperties()          self.parent.DoOnProperties()
297    
298      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
299          assert isinstance(layer, Layer)          assert isinstance(layer, BaseLayer)
300    
301          id = self.layer2id[layer]          id = self.layer2id[layer]
302          assert id.IsOk()          assert id.IsOk()
# Line 336  class LegendTree(wxTreeCtrl): Line 324  class LegendTree(wxTreeCtrl):
324          self.__UpdateSelection()          self.__UpdateSelection()
325    
326      def _OnMsgLayerVisibilityChanged(self, layer):      def _OnMsgLayerVisibilityChanged(self, layer):
327          assert isinstance(layer, Layer)          assert isinstance(layer, BaseLayer)
328    
329          self.__ShowHideLayer(layer)          self.__ShowHideLayer(layer)
330          self.__UpdateSelection()          self.__UpdateSelection()
# Line 354  class LegendTree(wxTreeCtrl): Line 342  class LegendTree(wxTreeCtrl):
342                    
343      def __FillTree(self, map):      def __FillTree(self, map):
344    
         assert isinstance(map, Map)  
   
345          self.Freeze()          self.Freeze()
346    
347          self.__DeleteAllItems()          self.__DeleteAllItems()
# Line 401  class LegendTree(wxTreeCtrl): Line 387  class LegendTree(wxTreeCtrl):
387    
388          self.DeleteChildren(pid)          self.DeleteChildren(pid)
389    
390          clazz = layer.GetClassification()          if layer.HasClassification():
391    
392          shapeType = layer.ShapeType()              clazz = layer.GetClassification()
393    
394          show = layer.Visible()              shapeType = layer.ShapeType()
395          for g in clazz:  
396              if g.IsVisible():              show = layer.Visible()
397                  id = self.AppendItem(pid, g.GetDisplayText())              for g in clazz:
398                  self.SetPyData(id, g)                  if g.IsVisible():
399                  self.__SetVisibilityStyle(show, id)                      id = self.AppendItem(pid, g.GetDisplayText())
400                        self.SetPyData(id, g)
401                  bmp = self.__BuildGroupImage(g, shapeType)                      self.__SetVisibilityStyle(show, id)
402    
403                  if bmp is None:                      bmp = self.__BuildGroupImage(g, shapeType)
404                      self.SetItemImage(id, self.emptyImageIndex)  
405                  else:                      if bmp is None:
406                      i = self.image_list.Add(bmp)                          self.SetItemImage(id, self.emptyImageIndex)
407                      self.SetItemImage(id, i)                      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 474  class LegendTree(wxTreeCtrl): Line 461  class LegendTree(wxTreeCtrl):
461              self.__SetVisibilityStyle(visible, id)              self.__SetVisibilityStyle(visible, id)
462              id, cookie = self.GetNextChild(parent, cookie)              id, cookie = self.GetNextChild(parent, cookie)
463                            
464    class ScaleBarBitmap(wxBoxSizer):
465    
466        def __init__(self, parent, map, mainWindow):
467            # While the width is fixed, get the height _now_.
468            dc = wxMemoryDC()
469            textwidth, textheight = dc.GetTextExtent("%d"%0)
470            self.width = 200
471            self.height = textheight + 3*2 + 8
472    
473            wxBoxSizer.__init__(self, wxVERTICAL)
474            bmp=wxEmptyBitmap(self.width, self.height)
475            self.scalebarBitmap = wxStaticBitmap(parent, -1, bmp)
476            self.Add(self.scalebarBitmap, 0, wxALIGN_CENTER|wxLEFT|wxTOP|wxRIGHT, 1)
477    
478            self.mainWindow = mainWindow
479            self.parent = parent
480            self.canvas = None
481            self.SetCanvas(self.mainWindow.canvas)
482    
483        def SetCanvas(self, canvas):
484            sub_list = [(SCALE_CHANGED, self._OnMsgScaleChanged)]
485    
486            if self.canvas is not None:
487                for msg, func in sub_list: self.canvas.Unsubscribe(msg, func)
488            
489            self.canvas = canvas
490            self.scalebar = ScaleBar(canvas.map)
491    
492            if self.canvas is not None:
493                for msg, func in sub_list: self.canvas.Subscribe(msg, func)
494                self.__SetScale(self.canvas.scale)
495    
496        def _OnMsgScaleChanged(self, scale):
497            self.__SetScale(scale)
498    
499        def __SetScale(self, scale):
500            bmp = wxEmptyBitmap(self.width, self.height)
501            dc = wxMemoryDC()
502            dc.SelectObject(bmp)
503            dc.Clear()
504    
505            self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())
506    
507            self.scalebarBitmap.SetBitmap(bmp)
508    

Legend:
Removed from v.665  
changed lines
  Added in v.936

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26