/[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 542 by jonathan, Thu Mar 20 09:43:16 2003 UTC revision 568 by jonathan, Wed Mar 26 11:51:28 2003 UTC
# Line 10  __version__ = "$Revision$" Line 10  __version__ = "$Revision$"
10  from Thuban import _  from Thuban import _
11    
12  from wxPython.wx import *  from wxPython.wx import *
 from dialogs import NonModalDialog  
13    
14  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
15  from Thuban.Model.map import Map  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.classifier import ClassDataPreviewer  from Thuban.UI.classifier import ClassDataPreviewer
20    from Thuban.UI.dock import DockPanel
21    
22  ID_LEGEND_MOVEUP = 4001  ID_LEGEND_MOVEUP = 4001
23  ID_LEGEND_MOVEDOWN = 4002  ID_LEGEND_MOVEDOWN = 4002
# Line 31  ID_LEGEND_HIDELAYER = 4006 Line 29  ID_LEGEND_HIDELAYER = 4006
29  BMP_SIZE_W = 30  BMP_SIZE_W = 30
30  BMP_SIZE_H = 15  BMP_SIZE_H = 15
31    
32  class Legend(NonModalDialog):  class LegendPanel(DockPanel):
33    
34      def __init__(self, parent, name, map):      def __init__(self, parent, map, mainWindow):
35          NonModalDialog.__init__(self, parent, name,          DockPanel.__init__(self, parent, -1)
                                 _("Legend: %s") % map.Title())  
36    
37            self.mainWindow = mainWindow
38          self.parent = parent          self.parent = parent
39    
   
         panel = wxPanel(self, -1)  
   
         topBox = wxBoxSizer(wxVERTICAL)  
40          panelBox = wxBoxSizer(wxVERTICAL)          panelBox = wxBoxSizer(wxVERTICAL)
41    
42          buttonBox = wxGridSizer(2, 3, 0, 0)          buttonBox = wxGridSizer(2, 3, 0, 0)
# Line 69  class Legend(NonModalDialog): Line 63  class Legend(NonModalDialog):
63          buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)          buttonBox.Add(button, 0, wxGROW | wxLEFT | wxRIGHT, 0)
64          self.buttons.append(button)          self.buttons.append(button)
65    
   
66          EVT_BUTTON(self, ID_LEGEND_MOVEUP, self._OnMoveUp)          EVT_BUTTON(self, ID_LEGEND_MOVEUP, self._OnMoveUp)
67          EVT_BUTTON(self, ID_LEGEND_MOVEDOWN, self._OnMoveDown)          EVT_BUTTON(self, ID_LEGEND_MOVEDOWN, self._OnMoveDown)
68          EVT_BUTTON(self, ID_LEGEND_CLASSIFY, self._OnClassify)          EVT_BUTTON(self, ID_LEGEND_CLASSIFY, self._OnClassify)
# Line 78  class Legend(NonModalDialog): Line 71  class Legend(NonModalDialog):
71    
72          panelBox.Add(buttonBox, 0, 0, 4)          panelBox.Add(buttonBox, 0, 0, 4)
73    
74          self.tree = LegendTree(self, ID_LEGEND_TREE, map)          self.tree = LegendTree(self, ID_LEGEND_TREE, map, mainWindow)
75    
76          panelBox.Add(self.tree, 1, wxGROW, 4)          panelBox.Add(self.tree, 1, wxGROW, 4)
77    
78          panel.SetAutoLayout(True)          self.SetAutoLayout(True)
79          panel.SetSizer(panelBox)          self.SetSizer(panelBox)
         panelBox.SetSizeHints(panel)  
   
         topBox.Add(panel, 1, wxGROW, 0)  
80          panelBox.SetSizeHints(self)          panelBox.SetSizeHints(self)
81    
82          self.SetAutoLayout(True)          #panelBox.SetSizeHints(self.parent)
83          self.SetSizer(topBox)  
84            self.panelBox = panelBox
85    
86        def GetMap(self):
87            return self.tree.GetMap()
88    
89        def SetMap(self, map):
90            self.tree.SetMap(map)
91    
92        def DoOnSelChanged(self, layer, group = None):
93            sel = self.tree.GetSelection()
94            self.__EnableButtons(sel.IsOk())
95    
96      def DoOnSelChanged(self):          if sel.IsOk():
97          self.__EnableButtons(self.tree.GetSelection().IsOk())              self.mainWindow.SelectLayer(layer)
98    
99      def _OnClassify(self, event):      def _OnClassify(self, event):
100          self.tree.DoOnClassify()          self.tree.DoOnClassify()
# Line 113  class Legend(NonModalDialog): Line 113  class Legend(NonModalDialog):
113          self.tree.DoOnHideLayer()          self.tree.DoOnHideLayer()
114          pass          pass
115    
   
116      def __EnableButtons(self, on):      def __EnableButtons(self, on):
117          for b in self.buttons:          for b in self.buttons:
118              b.Enable(on)              b.Enable(on)
119    
120  class LegendTree(wxTreeCtrl):  class LegendTree(wxTreeCtrl):
121    
122      def __init__(self, parent, id, map):      def __init__(self, parent, id, map, mainWindow):
123          wxTreeCtrl.__init__(self, parent, id,          wxTreeCtrl.__init__(self, parent, id,
124                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,                              style = wxTR_DEFAULT_STYLE | wxTR_HIDE_ROOT,
125                              size = (200, 200))                              size = (200, 200))
126    
127            self.map = None
128          self.parent = parent          self.parent = parent
         self.map = map  
129          self.layer2id = None          self.layer2id = None
130    
131    
# Line 135  class LegendTree(wxTreeCtrl): Line 134  class LegendTree(wxTreeCtrl):
134    
135          self.previewer = ClassDataPreviewer()          self.previewer = ClassDataPreviewer()
136    
   
137          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)          EVT_TREE_ITEM_ACTIVATED(self, ID_LEGEND_TREE, self._OnItemActivated)
138          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)          EVT_TREE_SEL_CHANGED(self, ID_LEGEND_TREE, self._OnSelChanged)
139    
140          map.Subscribe(MAP_STACKING_CHANGED, self._OnMsgMapStackingChanged)          self.SetMap(map)
         map.Subscribe(MAP_LAYERS_CHANGED, self._OnMsgMapLayersChanged)  
141    
142          self.__FillTree(map)      def GetMap(self):
143            return self.map
144    
145        def SetMap(self, map):
146    
147            sub_list = [(MAP_STACKING_CHANGED, self._OnMsgMapStackingChanged),
148                        (MAP_LAYERS_ADDED, self._OnMsgMapLayersAddedRemoved),
149                        (MAP_LAYERS_REMOVED, self._OnMsgMapLayersAddedRemoved)]
150    
151            if self.map is not None:
152                for msg, func in sub_list: self.map.Unsubscribe(msg, func)
153                self.__DeleteAllItems()
154            
155            self.map = map
156    
157            if self.map is not None:
158                for msg, func in sub_list: self.map.Subscribe(msg, func)
159                self.__FillTree(self.map)
160    
161                
162      def MoveCurrentItemUp(self):      def MoveCurrentItemUp(self):
163          cur_id = self.GetSelection()          cur_id = self.GetSelection()
164          assert(cur_id.IsOk())          assert(cur_id.IsOk())
# Line 208  class LegendTree(wxTreeCtrl): Line 223  class LegendTree(wxTreeCtrl):
223              assert(id.IsOk())              assert(id.IsOk())
224              item = self.GetPyData(id)              item = self.GetPyData(id)
225    
226          self.parent.parent.OpenClassifier(item)          # XXX: THIS IS SUCH AWFUL STYLE! YUCK!
227            self.parent.mainWindow.OpenClassifier(item)
228            #assert(False, "XXX: FIXME HERE")
229    
230      def Sort(self):      def Sort(self):
231          self.SortChildren(self.GetRootItem())          self.SortChildren(self.GetRootItem())
232    
233      def _OnSelChanged(self, event):      def _OnSelChanged(self, event):
234          self.parent.DoOnSelChanged()          id = self.GetSelection()
235            assert(id.IsOk())
236    
237            group = None
238            layer = self.GetPyData(id)
239            if isinstance(layer, ClassGroup):
240                id = self.GetItemParent(id)
241                assert(id.IsOk())
242                group = layer
243                layer = self.GetPyData(id)
244    
245            self.parent.DoOnSelChanged(layer, group)
246    
247      def _OnItemActivated(self, event):      def _OnItemActivated(self, event):
248          self.DoOnClassify()          self.DoOnClassify()
# Line 228  class LegendTree(wxTreeCtrl): Line 256  class LegendTree(wxTreeCtrl):
256    
257      def _OnMsgMapStackingChanged(self, *args):      def _OnMsgMapStackingChanged(self, *args):
258          self.Sort()          self.Sort()
259            id = self.GetSelection()
260    
261            if id.IsOk():
262                self.EnsureVisible(id)
263    
264      def _OnMsgMapLayersChanged(self, map):      def _OnMsgMapLayersAddedRemoved(self, map):
265          assert(id(map) == id(self.map))          assert(id(map) == id(self.map))
266    
267          self.__FillTree(self.map)          self.__FillTree(self.map)

Legend:
Removed from v.542  
changed lines
  Added in v.568

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26