/[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 652 by jonathan, Fri Apr 11 14:28:08 2003 UTC revision 914 by frank, Fri May 16 16:25:41 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 15  from wxPython.wx import * Line 16  from wxPython.wx import *
16    
17  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
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 54  class LegendPanel(DockPanel): Line 60  class LegendPanel(DockPanel):
60          panelBox = wxBoxSizer(wxVERTICAL)          panelBox = wxBoxSizer(wxVERTICAL)
61    
62          self.toolBar = wxToolBar(self, -1)          self.toolBar = wxToolBar(self, -1)
63            self.toolBar.SetToolBitmapSize(wxSize(24, 24))
64    
65          bmp = resource.GetBitmapResource(RAISE_BMP, wxBITMAP_TYPE_XPM)          bmp = resource.GetBitmapResource(RAISE_BMP, wxBITMAP_TYPE_XPM)
66          self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,          self.toolBar.AddTool(ID_LEGEND_RAISE, bmp,
# Line 76  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 86  class LegendPanel(DockPanel): Line 93  class LegendPanel(DockPanel):
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          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)
103          panelBox.SetSizeHints(self)          panelBox.SetSizeHints(self)
104    
105    
106          self.panelBox = panelBox          self.panelBox = panelBox
107    
108          self.__EnableButtons(False)          self.__EnableButtons(False)
109    
110            self.Create()
111    
112          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self._OnClose)
113    
114    
# Line 106  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, Layer)
125          self.__EnableButtons(ok)          self.__EnableButtons(ok)
126    
127          if ok:          self.mainWindow.SelectLayer(layer)
             self.mainWindow.SelectLayer(layer)  
128    
129      def DoOnProperties(self):      def DoOnProperties(self):
130          list = self.tree.GetSelectedHierarchy()          list = self.tree.GetSelectedHierarchy()
# Line 215  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)
# Line 263  class LegendTree(wxTreeCtrl): Line 255  class LegendTree(wxTreeCtrl):
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 277  class LegendTree(wxTreeCtrl): Line 268  class LegendTree(wxTreeCtrl):
268      def Sort(self):      def Sort(self):
269          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
270    
271        def GetSelectedHierarchy(self):
272            id = self.GetSelection()
273    
274            if not id.IsOk():
275                return (None, None)
276    
277            layer = self.GetPyData(id)
278            group = None
279    
280            if isinstance(layer, ClassGroup):
281                id = self.GetItemParent(id)
282                assert id.IsOk()
283                group = layer
284                layer = self.GetPyData(id)
285    
286            return (layer, group)
287    
288      def _OnMsgMapsChanged(self):      def _OnMsgMapsChanged(self):
289          #print self.map is self.mainWindow.Map()          #print self.map is self.mainWindow.Map()
290          self.SetMap(self.mainWindow.Map())          self.SetMap(self.mainWindow.Map())
291                    
292      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
293            self.__UpdateSelection()
         layer, group = self.GetSelectedHierarchy()  
         self.parent.DoOnSelChanged(layer, group)  
294    
295      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
296          self.parent.DoOnProperties()          self.parent.DoOnProperties()
# Line 300  class LegendTree(wxTreeCtrl): Line 306  class LegendTree(wxTreeCtrl):
306          #      track of the images in the image list when we replace          #      track of the images in the image list when we replace
307          #      a layer. it ends up causing a seg fault.          #      a layer. it ends up causing a seg fault.
308          self.__FillTree(self.map)          self.__FillTree(self.map)
309            self.__UpdateSelection()
310          #self.__FillTreeLayer(id)          #self.__FillTreeLayer(id)
311    
312      def _OnMsgMapStackingChanged(self, *args):      def _OnMsgMapStackingChanged(self, *args):
# Line 308  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 map is self.map          assert map is self.map
322    
323          self.__FillTree(self.map)          self.__FillTree(self.map)
324            self.__UpdateSelection()
325    
326      def _OnMsgLayerVisibilityChanged(self, layer):      def _OnMsgLayerVisibilityChanged(self, layer):
327          assert isinstance(layer, Layer)          assert isinstance(layer, Layer)
328    
329          self.__ShowHideLayer(layer)          self.__ShowHideLayer(layer)
330            self.__UpdateSelection()
331    
332      def _OnMsgLayerTitleChanged(self, layer):      def _OnMsgLayerTitleChanged(self, layer):
333    
334          id = self.layer2id[layer]          id = self.layer2id[layer]
335          if id.IsOk():          if id.IsOk():
336              self.SetItemText(id, layer.Title())              self.SetItemText(id, layer.Title())
337            self.__UpdateSelection()
338    
339      def GetSelectedHierarchy(self):      def __UpdateSelection(self):
340          id = self.GetSelection()          layer, group = self.GetSelectedHierarchy()
341          assert id.IsOk()          self.parent.DoOnSelChanged(layer, group)
342            
         layer = self.GetPyData(id)  
         group = None  
   
         if isinstance(layer, ClassGroup):  
             id = self.GetItemParent(id)  
             assert id.IsOk()  
             group = layer  
             layer = self.GetPyData(id)  
   
         return (layer, group)  
   
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 411  class LegendTree(wxTreeCtrl): Line 409  class LegendTree(wxTreeCtrl):
409          self.Thaw()          self.Thaw()
410    
411      def __BuildGroupImage(self, group, shapeType):      def __BuildGroupImage(self, group, shapeType):
         assert isinstance(group, ClassGroup)  
412    
413          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)          bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)
414          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)          #brush = wxBrush(Color2wxColour(item[1]), wxSOLID)
# Line 462  class LegendTree(wxTreeCtrl): Line 459  class LegendTree(wxTreeCtrl):
459              self.__SetVisibilityStyle(visible, id)              self.__SetVisibilityStyle(visible, id)
460              id, cookie = self.GetNextChild(parent, cookie)              id, cookie = self.GetNextChild(parent, cookie)
461                            
462    class ScaleBarBitmap(wxBoxSizer):
463    
464        def __init__(self, parent, map, mainWindow):
465            # While the width is fixed, get the height _now_.
466            dc = wxMemoryDC()
467            textwidth, textheight = dc.GetTextExtent("%d"%0)
468            self.width = 200
469            self.height = textheight + 3*2 + 8
470    
471            wxBoxSizer.__init__(self, wxVERTICAL)
472            bmp=wxEmptyBitmap(self.width, self.height)
473            self.scalebarBitmap = wxStaticBitmap(parent, -1, bmp)
474            self.Add(self.scalebarBitmap, 0, wxALIGN_CENTER|wxLEFT|wxTOP|wxRIGHT, 1)
475    
476            self.mainWindow = mainWindow
477            self.parent = parent
478            self.canvas = None
479            self.SetCanvas(self.mainWindow.canvas)
480    
481        def SetCanvas(self, canvas):
482            sub_list = [(SCALE_CHANGED, self._OnMsgScaleChanged)]
483    
484            if self.canvas is not None:
485                for msg, func in sub_list: self.canvas.Unsubscribe(msg, func)
486            
487            self.canvas = canvas
488            self.scalebar = ScaleBar(canvas.map)
489    
490            if self.canvas is not None:
491                for msg, func in sub_list: self.canvas.Subscribe(msg, func)
492                self.__SetScale(self.canvas.scale)
493    
494        def _OnMsgScaleChanged(self, scale):
495            self.__SetScale(scale)
496    
497        def __SetScale(self, scale):
498            bmp = wxEmptyBitmap(self.width, self.height)
499            dc = wxMemoryDC()
500            dc.SelectObject(bmp)
501            dc.Clear()
502    
503            self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())
504    
505            self.scalebarBitmap.SetBitmap(bmp)
506    

Legend:
Removed from v.652  
changed lines
  Added in v.914

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26