/[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 571 by jonathan, Wed Mar 26 11:51:28 2003 UTC revision 572 by jonathan, Fri Mar 28 17:06:50 2003 UTC
# Line 16  from Thuban.Model.map import Map Line 16  from Thuban.Model.map import Map
16  from Thuban.Model.messages import *  from Thuban.Model.messages import *
17  from Thuban.Model.classification import ClassGroup  from Thuban.Model.classification import ClassGroup
18    
19    from Thuban.UI.messages import *
20  from Thuban.UI.classifier import ClassDataPreviewer  from Thuban.UI.classifier import ClassDataPreviewer
21  from Thuban.UI.dock import DockPanel  from Thuban.UI.dock import DockPanel
22    
23    from Thuban.Lib.connector import ConnectorError
24    
25  ID_LEGEND_MOVEUP = 4001  ID_LEGEND_MOVEUP = 4001
26  ID_LEGEND_MOVEDOWN = 4002  ID_LEGEND_MOVEDOWN = 4002
27  ID_LEGEND_TREE = 4003  ID_LEGEND_TREE = 4003
# Line 75  class LegendPanel(DockPanel): Line 78  class LegendPanel(DockPanel):
78    
79          panelBox.Add(self.tree, 1, wxGROW, 4)          panelBox.Add(self.tree, 1, wxGROW, 4)
80    
81            panelBox.Fit(self)
82    
83          self.SetAutoLayout(True)          self.SetAutoLayout(True)
84          self.SetSizer(panelBox)          self.SetSizer(panelBox)
85          panelBox.SetSizeHints(self)          panelBox.SetSizeHints(self)
# Line 83  class LegendPanel(DockPanel): Line 88  class LegendPanel(DockPanel):
88    
89          self.panelBox = panelBox          self.panelBox = panelBox
90    
91            EVT_CLOSE(self, self._OnClose)
92    
93    
94      def GetMap(self):      def GetMap(self):
95          return self.tree.GetMap()          return self.tree.GetMap()
96    
97      def SetMap(self, map):      def SetMap(self, map):
98          self.tree.SetMap(map)          self.tree.SetMap(map)
99    
100      def DoOnSelChanged(self, layer, group = None):      def DoOnSelChanged(self, layer, group):
         sel = self.tree.GetSelection()  
         self.__EnableButtons(sel.IsOk())  
101    
102          if sel.IsOk():          ok = isinstance(layer, Layer)
103            self.__EnableButtons(ok)
104    
105            if ok:
106              self.mainWindow.SelectLayer(layer)              self.mainWindow.SelectLayer(layer)
107    
108        def DoOnClassify(self):
109            list = self.tree.GetSelectedHierarchy()
110    
111            ok = isinstance(list[0], Layer)
112            if ok:
113                self.mainWindow.OpenClassifier(list[0], list[1])
114    
115      def _OnClassify(self, event):      def _OnClassify(self, event):
116          self.tree.DoOnClassify()          self.DoOnClassify()
117    
118      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
119          self.tree.MoveCurrentItemUp()          self.tree.MoveCurrentItemUp()
# Line 109  class LegendPanel(DockPanel): Line 125  class LegendPanel(DockPanel):
125          self.tree.DoOnShowLayer()          self.tree.DoOnShowLayer()
126          pass          pass
127    
128        def _OnClose(self, event):
129            self.tree.Close()
130    
131      def _OnHideLayer(self, event):      def _OnHideLayer(self, event):
132          self.tree.DoOnHideLayer()          self.tree.DoOnHideLayer()
133          pass          pass
# Line 124  class LegendTree(wxTreeCtrl): Line 143  class LegendTree(wxTreeCtrl):
143                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,
144                              size = (200, 200))                              size = (200, 200))
145    
146            self.mainWindow = mainWindow
147          self.map = None          self.map = None
148          self.parent = parent          self.parent = parent
149          self.layer2id = None          self.layer2id = {}
   
150    
151          self.image_list = None          self.image_list = None
152          self.emptyImageIndex = 0          self.emptyImageIndex = 0
# Line 137  class LegendTree(wxTreeCtrl): Line 156  class LegendTree(wxTreeCtrl):
156          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)
157          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)
158    
159            EVT_CLOSE(self, self._OnClose)
160    
161          self.SetMap(map)          self.SetMap(map)
162    
163        def _OnClose(self, event):
164            print "LegendTree destroyed"
165            self.SetMap(None)
166    
167      def GetMap(self):      def GetMap(self):
168          return self.map          return self.map
169    
# Line 150  class LegendTree(wxTreeCtrl): Line 175  class LegendTree(wxTreeCtrl):
175    
176          if self.map is not None:          if self.map is not None:
177              for msg, func in sub_list: self.map.Unsubscribe(msg, func)              for msg, func in sub_list: self.map.Unsubscribe(msg, func)
178                #self.mainWindow.application.Unsubscribe(SESSION_REPLACED,
179                    #self._OnMsgMapsChanged)
180                #try:
181                    #self.mainWindow.application.session.Unsubscribe(MAPS_CHANGED,
182                        #self._OnMsgMapsChanged)
183                #except ConnectorError:
184                    #pass
185              self.__DeleteAllItems()              self.__DeleteAllItems()
186                    
187          self.map = map          self.map = map
188    
189          if self.map is not None:          if self.map is not None:
190              for msg, func in sub_list: self.map.Subscribe(msg, func)              for msg, func in sub_list: self.map.Subscribe(msg, func)
191                #self.mainWindow.application.session.Subscribe(MAPS_CHANGED,
192                    #self._OnMsgMapsChanged)
193                #self.mainWindow.application.Subscribe(SESSION_REPLACED,
194                    #self._OnMsgMapsChanged)
195              self.__FillTree(self.map)              self.__FillTree(self.map)
196    
197                            
# Line 208  class LegendTree(wxTreeCtrl): Line 244  class LegendTree(wxTreeCtrl):
244    
245    
246      def DoOnShowLayer(self):      def DoOnShowLayer(self):
247          self.__ShowHideLayer(True)          #self.__ShowHideLayer(True)
248            layer, group = self.GetSelectedHierarchy()
249            layer.SetVisible(True)
250    
251      def DoOnHideLayer(self):      def DoOnHideLayer(self):
252          self.__ShowHideLayer(False)          #self.__ShowHideLayer(False)
253            layer, group = self.GetSelectedHierarchy()
254      def DoOnClassify(self):          layer.SetVisible(False)
255          id = self.GetSelection()  
256          assert(id.IsOk())  #   def DoOnClassify(self):
257    #       id = self.GetSelection()
258          item = self.GetPyData(id)  #       assert(id.IsOk())
259          if isinstance(item, ClassGroup):  
260              id = self.GetItemParent(id)  #       item = self.GetPyData(id)
261              assert(id.IsOk())  #       if isinstance(item, ClassGroup):
262              item = self.GetPyData(id)  #           id = self.GetItemParent(id)
263    #           assert(id.IsOk())
264          # XXX: THIS IS SUCH AWFUL STYLE! YUCK!  #           item = self.GetPyData(id)
265          self.parent.mainWindow.OpenClassifier(item)  
266          #assert(False, "XXX: FIXME HERE")  #       # XXX: THIS IS SUCH AWFUL STYLE! YUCK!
267    #       self.parent.mainWindow.OpenClassifier(item)
268    #       #assert(False, "XXX: FIXME HERE")
269    
270      def Sort(self):      def Sort(self):
271          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
272    
273        def _OnMsgMapsChanged(self):
274            print "ADfsadfsadfsadfsa"
275            print self.map is self.mainWindow.Map()
276            self.SetMap(self.mainWindow.Map())
277            
278      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
         id = self.GetSelection()  
         assert(id.IsOk())  
   
         group = None  
         layer = self.GetPyData(id)  
         if isinstance(layer, ClassGroup):  
             id = self.GetItemParent(id)  
             assert(id.IsOk())  
             group = layer  
             layer = self.GetPyData(id)  
279    
280            layer, group = self.GetSelectedHierarchy()
281          self.parent.DoOnSelChanged(layer, group)          self.parent.DoOnSelChanged(layer, group)
282    
283      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
284          self.DoOnClassify()          self.parent.DoOnClassify()
285    
286      def _OnMsgLayerChanged(self, layer):      def _OnMsgLayerChanged(self, layer):
287          assert(isinstance(layer, Layer))          assert(isinstance(layer, Layer))
# Line 262  class LegendTree(wxTreeCtrl): Line 298  class LegendTree(wxTreeCtrl):
298              self.EnsureVisible(id)              self.EnsureVisible(id)
299    
300      def _OnMsgMapLayersAddedRemoved(self, map):      def _OnMsgMapLayersAddedRemoved(self, map):
301          assert(id(map) == id(self.map))          assert(map is self.map)
302    
303          self.__FillTree(self.map)          self.__FillTree(self.map)
304    
305        def _OnMsgLayerVisibilityChanged(self, layer):
306            assert(isinstance(layer, Layer))
307    
308            self.__ShowHideLayer(layer)
309    
310        def GetSelectedHierarchy(self):
311            id = self.GetSelection()
312            assert(id.IsOk())
313    
314            layer = self.GetPyData(id)
315            group = None
316    
317            if isinstance(layer, ClassGroup):
318                id = self.GetItemParent(id)
319                assert(id.IsOk())
320                group = layer
321                layer = self.GetPyData(id)
322    
323            return (layer, group)
324    
325      def __FillTree(self, map):      def __FillTree(self, map):
326    
327          assert(isinstance(map, Map))          assert(isinstance(map, Map))
# Line 295  class LegendTree(wxTreeCtrl): Line 351  class LegendTree(wxTreeCtrl):
351              for l in map.Layers():              for l in map.Layers():
352                  id = self.PrependItem(root, l.Title())                  id = self.PrependItem(root, l.Title())
353                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)                  l.Subscribe(LAYER_CHANGED, self._OnMsgLayerChanged)
354                    l.Subscribe(LAYER_VISIBILITY_CHANGED,
355                                self._OnMsgLayerVisibilityChanged)
356                  self.SetPyData(id, l)                  self.SetPyData(id, l)
357                  font = self.GetItemFont(id)                  font = self.GetItemFont(id)
358                  if not l.Visible():                  if not l.Visible():
# Line 350  class LegendTree(wxTreeCtrl): Line 408  class LegendTree(wxTreeCtrl):
408    
409      def __DeleteAllItems(self):      def __DeleteAllItems(self):
410          self.DeleteAllItems()          self.DeleteAllItems()
         self.layer2id = {}  
411    
412            while len(self.layer2id) > 0:
413                layer, id = self.layer2id.popitem()
414                layer.Unsubscribe(LAYER_CHANGED,
415                                  self._OnMsgLayerChanged)
416                layer.Unsubscribe(LAYER_VISIBILITY_CHANGED,
417                                  self._OnMsgLayerVisibilityChanged)
418    
419    
420        def __ShowHideHelper(self, show, id):
421            font = self.GetItemFont(id)
422    
423            if show:
424                font.SetStyle(wxNORMAL)
425                color = wxBLACK
426            else:
427                font.SetStyle(wxITALIC)
428                color = wxLIGHT_GREY
429    
430      def __ShowHideLayer(self, show):          self.SetItemTextColour(id, color)
431          id = self.GetSelection()          self.SetItemFont(id, font)
         assert(id.IsOk())  
432                    
433          item = self.GetPyData(id)      def __ShowHideLayer(self, layer):
434          if isinstance(item, ClassGroup):          parent = self.layer2id[layer]
435              id = self.GetItemParent(id)          assert(parent.IsOk())
             assert(id.IsOk())  
             item = self.GetPyData(id)  
436    
437            show = layer.Visible()
438    
         if show != item.Visible():  
   
             item.SetVisible(show)  
   
             font = self.GetItemFont(id)  
             if show:  
                 font.SetStyle(wxNORMAL)  
                 self.SetItemFont(id, font)  
             else:  
                 font.SetStyle(wxITALIC)  
                 self.SetItemFont(id, font)  
439    
440            self.__ShowHideHelper(show, parent)
441    
442            id, cookie = self.GetFirstChild(parent, 123)
443    
444            while id.IsOk():
445                self.__ShowHideHelper(show, id)
446                id, cookie = self.GetNextChild(parent, cookie)
447                

Legend:
Removed from v.571  
changed lines
  Added in v.572

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26