/[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 562 by jonathan, Wed Mar 26 11:06:22 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
28  ID_LEGEND_CLASSIFY = 4004  ID_LEGEND_CLASSIFY = 4004
29  ID_LEGEND_SHOWLAYER = 4005  ID_LEGEND_SHOWLAYER = 4005
30  ID_LEGEND_HIDELAYER = 4006  ID_LEGEND_HIDELAYER = 4006
 ID_LEGEND_DOCK = 4007  
 ID_LEGEND_UNDOCK = 4008  
31    
32  BMP_SIZE_W = 30  BMP_SIZE_W = 30
33  BMP_SIZE_H = 15  BMP_SIZE_H = 15
34    
 #class LegendDialog(NonModalDialog):  
   
     #def __init__(self, parent, name, panel):  
         #NonModalDialog.__init__(self, parent, name,  
                                 #_("Legend: %s") % map.Title())  
   
         ##topBox = wxBoxSizer(wxVERTICAL)  
   
         #panel = LegendPanel(self, map)  
   
         #self.panel = panel  
   
         #topBox.Add(panel, 1, wxGROW, 4)  
   
         ##self.SetAutoLayout(True)  
         ##self.SetSizer(topBox)  
   
     #def GetLegendPanel(self):  
         #return self.panel  
   
     #def OnClose(self, event):  
         #NonModalDialog.OnClose(self, event)  
   
         #self.panel.SetMap(None)  
       
35  class LegendPanel(DockPanel):  class LegendPanel(DockPanel):
36    
37      def __init__(self, parent, map, mainWindow):      def __init__(self, parent, map, mainWindow):
# Line 90  class LegendPanel(DockPanel): Line 66  class LegendPanel(DockPanel):
66          buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)          buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)
67          self.buttons.append(button)          self.buttons.append(button)
68    
 #       button = wxButton(self, ID_LEGEND_DOCK, _("Dock"))  
 #       buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
 #       self.buttons.append(button)  
   
 #       button = wxButton(self, ID_LEGEND_UNDOCK, _("Undock"))  
 #       buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)  
 #       self.buttons.append(button)  
   
   
69          EVT_BUTTON(self, ID_LEGEND_MOVEUP, self._OnMoveUp)          EVT_BUTTON(self, ID_LEGEND_MOVEUP, self._OnMoveUp)
70          EVT_BUTTON(self, ID_LEGEND_MOVEDOWN, self._OnMoveDown)          EVT_BUTTON(self, ID_LEGEND_MOVEDOWN, self._OnMoveDown)
71          EVT_BUTTON(self, ID_LEGEND_CLASSIFY, self._OnClassify)          EVT_BUTTON(self, ID_LEGEND_CLASSIFY, self._OnClassify)
72          EVT_BUTTON(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)          EVT_BUTTON(self, ID_LEGEND_SHOWLAYER, self._OnShowLayer)
73          EVT_BUTTON(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)          EVT_BUTTON(self, ID_LEGEND_HIDELAYER, self._OnHideLayer)
         #EVT_BUTTON(self, ID_LEGEND_DOCK, self._OnDock)  
         #EVT_BUTTON(self, ID_LEGEND_UNDOCK, self._OnUndock)  
74    
75          panelBox.Add(buttonBox, 0, 0, 4)          panelBox.Add(buttonBox, 0, 0, 4)
76    
# Line 113  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 121  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):      def DoOnSelChanged(self, layer, group):
101          self.__EnableButtons(self.tree.GetSelection().IsOk())  
102            ok = isinstance(layer, Layer)
103            self.__EnableButtons(ok)
104    
105            if ok:
106                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 143  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
134    
     def _OnDock(self, event):  
         self.Dock()  
   
     def _OnUndock(self, event):  
         self.UnDock()  
   
135      def __EnableButtons(self, on):      def __EnableButtons(self, on):
136          for b in self.buttons:          for b in self.buttons:
137              b.Enable(on)              b.Enable(on)
# Line 164  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 177  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 190  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 248  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          assert(id.IsOk())  #       id = self.GetSelection()
258    #       assert(id.IsOk())
259          item = self.GetPyData(id)  
260          if isinstance(item, ClassGroup):  #       item = self.GetPyData(id)
261              id = self.GetItemParent(id)  #       if isinstance(item, ClassGroup):
262              assert(id.IsOk())  #           id = self.GetItemParent(id)
263              item = self.GetPyData(id)  #           assert(id.IsOk())
264    #           item = self.GetPyData(id)
265          # XXX: THIS IS SUCH AWFUL STYLE! YUCK!  
266          self.parent.mainWindow.OpenClassifier(item)  #       # XXX: THIS IS SUCH AWFUL STYLE! YUCK!
267          #assert(False, "XXX: FIXME HERE")  #       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):
279          self.parent.DoOnSelChanged()  
280            layer, group = self.GetSelectedHierarchy()
281            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 292  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 325  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 380  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.562  
changed lines
  Added in v.572

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26