/[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 1102 by jonathan, Fri May 30 06:29:05 2003 UTC revision 1180 by jonathan, Thu Jun 12 16:28:54 2003 UTC
# Line 201  class LegendTree(wxTreeCtrl): Line 201  class LegendTree(wxTreeCtrl):
201          self.mainWindow = mainWindow          self.mainWindow = mainWindow
202          self.map = None          self.map = None
203          self.parent = parent          self.parent = parent
204          self.layer2id = {}          self.changing_selection = 0
205    
206          #          #
207          # The image list used by the wxTreeCtrl causes problems when          # The image list used by the wxTreeCtrl causes problems when
# Line 227  class LegendTree(wxTreeCtrl): Line 227  class LegendTree(wxTreeCtrl):
227    
228          self.SetMap(map)          self.SetMap(map)
229    
230        def find_layer(self, layer):
231            """Return the tree item for the layer"""
232            root = self.GetRootItem()
233            id, cookie = self.GetFirstChild(root, 0)
234            while id.IsOk():
235                if self.GetPyData(id) is layer:
236                    return id
237                id, cookie = self.GetNextChild(root, cookie)
238            return None
239    
240      def _OnClose(self, event):      def _OnClose(self, event):
241          self.SetMap(None)          self.SetMap(None)
242    
# Line 340  class LegendTree(wxTreeCtrl): Line 350  class LegendTree(wxTreeCtrl):
350          self.SetMap(self.mainWindow.Map())          self.SetMap(self.mainWindow.Map())
351                    
352      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
353            # If we change the selection from normalize_selection do nothing.
354            if self.changing_selection:
355                return
356    
357            self.normalize_selection()
358          self.__UpdateSelection()          self.__UpdateSelection()
359    
360        def normalize_selection(self):
361            """Select the layer containing currently selected item"""
362            # This is really a workaround for a bug in wx where deleting a
363            # subtree with DeleteChildren does not update the selection
364            # properly and can lead to segfaults later because the return
365            # value of GetSelection points to invalid data.
366            item = self.GetSelection()
367            while item.IsOk():
368                object = self.GetPyData(item)
369                if isinstance(object, BaseLayer):
370                    break
371                item = self.GetItemParent(item)
372            else:
373                # No layer was found in the chain of parents, so there's
374                # nothing we can do.
375                return
376    
377            self.changing_selection = 1
378            try:
379                self.SelectItem(item)
380            finally:
381                self.changing_selection = 0
382    
383    
384      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
385          self.parent.DoOnProperties()          self.parent.DoOnProperties()
386    
387      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
388          assert isinstance(layer, BaseLayer)          assert isinstance(layer, BaseLayer)
389    
390          id = self.layer2id[layer]          id = self.find_layer(layer)
391          assert id.IsOk()          assert id is not None
392    
393          self.__FillTreeLayer(id)          self.__FillTreeLayer(id)
394          self.__UpdateSelection()          self.__UpdateSelection()
# Line 365  class LegendTree(wxTreeCtrl): Line 404  class LegendTree(wxTreeCtrl):
404      def _OnMsgMapLayersAdded(self, map):      def _OnMsgMapLayersAdded(self, map):
405          assert map is self.map          assert map is self.map
406    
407            # Build a dict with all layers known by the the tree as keys
408            layers = {}
409          root = self.GetRootItem()          root = self.GetRootItem()
410            id, cookie = self.GetFirstChild(root, 0)
411            while id.IsOk():
412                layers[self.GetPyData(id)] = 1
413                id, cookie = self.GetNextChild(root, cookie)
414    
415            # Add layers in the map but not in the dict
416          i = 0          i = 0
417          for l in map.Layers():          for l in map.Layers():
418              if not self.layer2id.has_key(l):              if not l in layers:
419                  self.__AddLayer(i, l)                  self.__AddLayer(i, l)
420    
421          self.__UpdateSelection()          self.__UpdateSelection()
# Line 377  class LegendTree(wxTreeCtrl): Line 423  class LegendTree(wxTreeCtrl):
423      def _OnMsgMapLayersRemoved(self, map):      def _OnMsgMapLayersRemoved(self, map):
424          assert map is self.map          assert map is self.map
425    
         layer, group = self.GetSelectedHierarchy()  
   
         if layer is None:  
             assert False, "Shouldn't be allowed."  
             return  
   
426          layers = map.Layers()          layers = map.Layers()
427    
428          for layer, id in self.layer2id.items():          root = self.GetRootItem()
429              if layer not in layers:          id, cookie = self.GetFirstChild(root, 0)
430                  if id.IsOk():          while id.IsOk():
431                      self.__RemoveLayer(id)              if self.GetPyData(id) not in layers:
432                    self.__RemoveLayer(id)
433                id, cookie = self.GetNextChild(root, cookie)
434    
435    
436          self.__UpdateSelection()          self.__UpdateSelection()
437    
# Line 400  class LegendTree(wxTreeCtrl): Line 443  class LegendTree(wxTreeCtrl):
443    
444      def _OnMsgLayerTitleChanged(self, layer):      def _OnMsgLayerTitleChanged(self, layer):
445    
446          id = self.layer2id[layer]          id = self.find_layer(layer)
447          if id.IsOk():          if id.IsOk():
448              self.SetItemText(id, layer.Title())              self.SetItemText(id, layer.Title())
449          self.__UpdateSelection()          self.__UpdateSelection()
# Line 492  class LegendTree(wxTreeCtrl): Line 535  class LegendTree(wxTreeCtrl):
535          self.SetPyData(id, l)          self.SetPyData(id, l)
536          self.__SetVisibilityStyle(l.Visible(), id)          self.__SetVisibilityStyle(l.Visible(), id)
537    
         self.layer2id[l] = id  
   
538          self.__FillTreeLayer(id)          self.__FillTreeLayer(id)
539          self.Expand(id)          self.Expand(id)
540    
# Line 513  class LegendTree(wxTreeCtrl): Line 554  class LegendTree(wxTreeCtrl):
554          layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)          layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
555    
556          self.Delete(id)          self.Delete(id)
         del self.layer2id[layer]  
557    
558      def DeleteChildren(self, pid):      def DeleteChildren(self, pid):
559          id, cookie = self.GetFirstChild(pid, 123)          id, cookie = self.GetFirstChild(pid, 123)
# Line 527  class LegendTree(wxTreeCtrl): Line 567  class LegendTree(wxTreeCtrl):
567    
568          if not root.IsOk():          if not root.IsOk():
569              self.image_list = wxImageList(BMP_SIZE_W, BMP_SIZE_H, False, 0)              self.image_list = wxImageList(BMP_SIZE_W, BMP_SIZE_H, False, 0)
570                                                                                    
571              bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)              bmp = wxEmptyBitmap(BMP_SIZE_W, BMP_SIZE_H)
572              dc = wxMemoryDC()              dc = wxMemoryDC()
573              dc.SelectObject(bmp)              dc.SelectObject(bmp)
574              dc.SetBrush(wxBLACK_BRUSH)              dc.SetBrush(wxBLACK_BRUSH)
575              dc.Clear()              dc.Clear()
576              dc.SelectObject(wxNullBitmap)              dc.SelectObject(wxNullBitmap)
577                                                                                    
578              self.emptyImageIndex = \              self.emptyImageIndex = \
579                  self.image_list.AddWithColourMask(bmp, wxColour(0, 0, 0))                  self.image_list.AddWithColourMask(bmp, wxColour(0, 0, 0))
580                                                                                    
581              bmp = resource.GetBitmapResource("legend_icon_layer",              bmp = resource.GetBitmapResource("legend_icon_layer",
582                                                wxBITMAP_TYPE_XPM)                                                wxBITMAP_TYPE_XPM)
583              self.mapImageIndex = \              self.mapImageIndex = \
584                  self.image_list.Add(bmp)                  self.image_list.Add(bmp)
585    
586              self.AssignImageList(self.image_list)              self.AssignImageList(self.image_list)
587                self.availImgListIndices = []
588    
589              root = self.AddRoot("")              root = self.AddRoot("")
590    
# Line 564  class LegendTree(wxTreeCtrl): Line 605  class LegendTree(wxTreeCtrl):
605          self.SetItemFont(id, font)          self.SetItemFont(id, font)
606                    
607      def __ShowHideLayer(self, layer):      def __ShowHideLayer(self, layer):
608          parent = self.layer2id[layer]          parent = self.find_layer(layer)
609          assert parent.IsOk()          assert parent.IsOk()
610    
611          visible = layer.Visible()          visible = layer.Visible()
# Line 618  class ScaleBarBitmap(wxBoxSizer): Line 659  class ScaleBarBitmap(wxBoxSizer):
659          dc.SelectObject(bmp)          dc.SelectObject(bmp)
660          dc.Clear()          dc.Clear()
661    
662          self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())          if self.canvas.map.projection is not None:
663                self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())
664    
665          self.scalebarBitmap.SetBitmap(bmp)          self.scalebarBitmap.SetBitmap(bmp)
666    

Legend:
Removed from v.1102  
changed lines
  Added in v.1180

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26