/[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 1119 by bh, Mon Jun 2 10:37:59 2003 UTC revision 1241 by frank, Thu Jun 19 09:25:53 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
         self.layer2id = {}  
204          self.changing_selection = 0          self.changing_selection = 0
205    
206          #          #
# Line 221  class LegendTree(wxTreeCtrl): Line 220  class LegendTree(wxTreeCtrl):
220    
221          self.previewer = ClassDataPreviewer()          self.previewer = ClassDataPreviewer()
222    
223            self.preventExpandCollapse = False
224            self.raiseProperties = False
225    
226          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)
227          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)
228            EVT_TREE_ITEM_EXPANDING(self, ID_LEGEND_TREE, self.OnItemExpandCollapse)
229            EVT_TREE_ITEM_COLLAPSING(self, ID_LEGEND_TREE, self.OnItemExpandCollapse)
230    
231          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self._OnClose)
232    
233          self.SetMap(map)          self.SetMap(map)
234    
235        def find_layer(self, layer):
236            """Return the tree item for the layer"""
237            root = self.GetRootItem()
238            id, cookie = self.GetFirstChild(root, 0)
239            while id.IsOk():
240                if self.GetPyData(id) is layer:
241                    return id
242                id, cookie = self.GetNextChild(root, cookie)
243            return None
244    
245      def _OnClose(self, event):      def _OnClose(self, event):
246          self.SetMap(None)          self.SetMap(None)
247    
# Line 372  class LegendTree(wxTreeCtrl): Line 386  class LegendTree(wxTreeCtrl):
386              self.changing_selection = 0              self.changing_selection = 0
387    
388    
389        def OnItemExpandCollapse(self, event):
390            if self.preventExpandCollapse:
391                event.Veto()
392                self.preventExpandCollapse = False
393    
394      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
395          self.parent.DoOnProperties()          # The following looks strange but is need under Windows to
396            # raise the Properties on double-click: The tree control
397            # always gets an Expanded / Collapsed event after the ItemActivated
398            # on double click, which raises the main window again. We add a second
399            # ItemActivated event to the queue, which simply raises the already
400            # displayed window.
401            if self.raiseProperties:
402                self.parent.DoOnProperties()
403                self.raiseProperties = False
404            else:
405                self.raiseProperties = True
406                self.preventExpandCollapse = True
407                self.parent.DoOnProperties()
408                self.AddPendingEvent(event)
409    
410      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
411          assert isinstance(layer, BaseLayer)          assert isinstance(layer, BaseLayer)
412    
413          id = self.layer2id[layer]          id = self.find_layer(layer)
414          assert id.IsOk()          assert id is not None
415    
416          self.__FillTreeLayer(id)          self.__FillTreeLayer(id)
417          self.__UpdateSelection()          self.__UpdateSelection()
# Line 395  class LegendTree(wxTreeCtrl): Line 427  class LegendTree(wxTreeCtrl):
427      def _OnMsgMapLayersAdded(self, map):      def _OnMsgMapLayersAdded(self, map):
428          assert map is self.map          assert map is self.map
429    
430            # Build a dict with all layers known by the the tree as keys
431            layers = {}
432          root = self.GetRootItem()          root = self.GetRootItem()
433            id, cookie = self.GetFirstChild(root, 0)
434            while id.IsOk():
435                layers[self.GetPyData(id)] = 1
436                id, cookie = self.GetNextChild(root, cookie)
437    
438            # Add layers in the map but not in the dict
439          i = 0          i = 0
440          for l in map.Layers():          for l in map.Layers():
441              if not self.layer2id.has_key(l):              if not l in layers:
442                  self.__AddLayer(i, l)                  self.__AddLayer(i, l)
443    
444          self.__UpdateSelection()          self.__UpdateSelection()
# Line 409  class LegendTree(wxTreeCtrl): Line 448  class LegendTree(wxTreeCtrl):
448    
449          layers = map.Layers()          layers = map.Layers()
450    
451          for layer, id in self.layer2id.items():          root = self.GetRootItem()
452              if layer not in layers:          id, cookie = self.GetFirstChild(root, 0)
453                  if id.IsOk():          while id.IsOk():
454                      self.__RemoveLayer(id)              if self.GetPyData(id) not in layers:
455                    self.__RemoveLayer(id)
456                id, cookie = self.GetNextChild(root, cookie)
457    
458    
459          self.__UpdateSelection()          self.__UpdateSelection()
460    
# Line 424  class LegendTree(wxTreeCtrl): Line 466  class LegendTree(wxTreeCtrl):
466    
467      def _OnMsgLayerTitleChanged(self, layer):      def _OnMsgLayerTitleChanged(self, layer):
468    
469          id = self.layer2id[layer]          id = self.find_layer(layer)
470          if id.IsOk():          if id.IsOk():
471              self.SetItemText(id, layer.Title())              self.SetItemText(id, layer.Title())
472          self.__UpdateSelection()          self.__UpdateSelection()
# Line 516  class LegendTree(wxTreeCtrl): Line 558  class LegendTree(wxTreeCtrl):
558          self.SetPyData(id, l)          self.SetPyData(id, l)
559          self.__SetVisibilityStyle(l.Visible(), id)          self.__SetVisibilityStyle(l.Visible(), id)
560    
         self.layer2id[l] = id  
   
561          self.__FillTreeLayer(id)          self.__FillTreeLayer(id)
562          self.Expand(id)          self.Expand(id)
563    
# Line 537  class LegendTree(wxTreeCtrl): Line 577  class LegendTree(wxTreeCtrl):
577          layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)          layer.Unsubscribe(TITLE_CHANGED, self._OnMsgLayerTitleChanged)
578    
579          self.Delete(id)          self.Delete(id)
         del self.layer2id[layer]  
580    
581      def DeleteChildren(self, pid):      def DeleteChildren(self, pid):
582          id, cookie = self.GetFirstChild(pid, 123)          id, cookie = self.GetFirstChild(pid, 123)
# Line 589  class LegendTree(wxTreeCtrl): Line 628  class LegendTree(wxTreeCtrl):
628          self.SetItemFont(id, font)          self.SetItemFont(id, font)
629                    
630      def __ShowHideLayer(self, layer):      def __ShowHideLayer(self, layer):
631          parent = self.layer2id[layer]          parent = self.find_layer(layer)
632          assert parent.IsOk()          assert parent.IsOk()
633    
634          visible = layer.Visible()          visible = layer.Visible()
# Line 643  class ScaleBarBitmap(wxBoxSizer): Line 682  class ScaleBarBitmap(wxBoxSizer):
682          dc.SelectObject(bmp)          dc.SelectObject(bmp)
683          dc.Clear()          dc.Clear()
684    
685          self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())          if self.canvas.map is not None \
686                and self.canvas.map.projection is not None:
687                self.scalebar.DrawScaleBar(scale, dc, (0,0), dc.GetSizeTuple())
688    
689          self.scalebarBitmap.SetBitmap(bmp)          self.scalebarBitmap.SetBitmap(bmp)
690    

Legend:
Removed from v.1119  
changed lines
  Added in v.1241

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26