/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/tableview.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/tableview.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 278 by bh, Mon Aug 26 12:50:23 2002 UTC revision 808 by bh, Mon May 5 10:33:47 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 15  from Thuban.Model.table import FIELDTYPE Line 15  from Thuban.Model.table import FIELDTYPE
15       FIELDTYPE_STRING       FIELDTYPE_STRING
16  import view  import view
17  from dialogs import NonModalDialog  from dialogs import NonModalDialog
18  from messages import SELECTED_SHAPE  from messages import SHAPES_SELECTED
19    
20  wx_value_type_map = {FIELDTYPE_INT: wxGRID_VALUE_NUMBER,  wx_value_type_map = {FIELDTYPE_INT: wxGRID_VALUE_NUMBER,
21                       FIELDTYPE_DOUBLE: wxGRID_VALUE_FLOAT,                       FIELDTYPE_DOUBLE: wxGRID_VALUE_FLOAT,
# Line 97  class DataTable(wxPyGridTableBase): Line 97  class DataTable(wxPyGridTableBase):
97    
98  class TableGrid(wxGrid, Publisher):  class TableGrid(wxGrid, Publisher):
99    
100      """A grid view for a Thuban table"""      """A grid view for a Thuban table
101    
102        When rows are selected by the user the table issues ROW_SELECTED
103        messages. wx sends selection events even when the selection is
104        manipulated by code (instead of by the user) which usually lead to
105        ROW_SELECTED messages being sent in turn. Therefore sending messages
106        can be switched on and off with the allow_messages and
107        disallow_messages methods.
108        """
109    
110      def __init__(self, parent, table = None):      def __init__(self, parent, table = None):
111          wxGrid.__init__(self, parent, -1)          wxGrid.__init__(self, parent, -1)
112    
113            self.allow_messages_count = 0
114    
115          self.table = DataTable(table)          self.table = DataTable(table)
116    
117          # The second parameter means that the grid is to take ownership          # The second parameter means that the grid is to take ownership
# Line 133  class TableGrid(wxGrid, Publisher): Line 143  class TableGrid(wxGrid, Publisher):
143      def OnSelectCell(self, event):      def OnSelectCell(self, event):
144          self.issue(ROW_SELECTED, event.GetRow())          self.issue(ROW_SELECTED, event.GetRow())
145    
146        def disallow_messages(self):
147            """Disallow messages to be send.
148    
149            This method only increases a counter so that calls to
150            disallow_messages and allow_messages can be nested. Only the
151            outermost calls will actually switch message sending on and off.
152            """
153            self.allow_messages_count += 1
154    
155        def allow_messages(self):
156            """Allow messages to be send.
157    
158            This method only decreases a counter so that calls to
159            disallow_messages and allow_messages can be nested. Only the
160            outermost calls will actually switch message sending on and off.
161            """
162            self.allow_messages_count -= 1
163    
164        def issue(self, *args):
165            """Issue a message unless disallowed.
166    
167            See the allow_messages and disallow_messages methods.
168            """
169            if self.allow_messages_count == 0:
170                Publisher.issue(self, *args)
171    
172    
173  class LayerTableGrid(TableGrid):  class LayerTableGrid(TableGrid):
174    
# Line 148  class LayerTableGrid(TableGrid): Line 184  class LayerTableGrid(TableGrid):
184          If layer is not the layer the table is associated with do          If layer is not the layer the table is associated with do
185          nothing. If shape or layer is None also do nothing.          nothing. If shape or layer is None also do nothing.
186          """          """
         print "LayerTableGrid.select_shape", layer, shape  
187          if layer is not None and layer.table is self.table.table \          if layer is not None and layer.table is self.table.table \
188             and shape is not None:             and shape is not None:
189              self.SelectRow(shape)              self.disallow_messages()
190              self.SetGridCursor(shape, 0)              try:
191              self.MakeCellVisible(shape, 0)                  self.SelectRow(shape)
192                    self.SetGridCursor(shape, 0)
193                    self.MakeCellVisible(shape, 0)
194                finally:
195                    self.allow_messages()
196    
197    
198  class TableFrame(NonModalDialog):  class TableFrame(NonModalDialog):
199    
200      """Frame that displays a Thuban table in a grid view"""      """Frame that displays a Thuban table in a grid view"""
201    
202      def __init__(self, parent, interactor, name, title, table):      def __init__(self, parent, name, title, table):
203          NonModalDialog.__init__(self, parent, interactor, name, title)          NonModalDialog.__init__(self, parent, name, title)
204          self.table = table          self.table = table
205          self.grid = self.make_grid(self.table)          self.grid = self.make_grid(self.table)
206    
# Line 182  class LayerTableFrame(TableFrame): Line 221  class LayerTableFrame(TableFrame):
221      selected object in a map.      selected object in a map.
222      """      """
223    
224      def __init__(self, parent, interactor, name, title, layer, table):      def __init__(self, parent, name, title, layer, table):
225          TableFrame.__init__(self, parent, interactor, name, title, table)          TableFrame.__init__(self, parent, name, title, table)
226          self.layer = layer          self.layer = layer
227          self.grid.Subscribe(ROW_SELECTED, self.row_selected)          self.grid.Subscribe(ROW_SELECTED, self.row_selected)
228          self.interactor.Subscribe(SELECTED_SHAPE, self.select_shape)          self.parent.Subscribe(SHAPES_SELECTED, self.select_shape)
229    
230      def make_grid(self, table):      def make_grid(self, table):
231          """Override the derived method to return a LayerTableGrid.          """Override the derived method to return a LayerTableGrid.
# Line 194  class LayerTableFrame(TableFrame): Line 233  class LayerTableFrame(TableFrame):
233          return LayerTableGrid(self, table)          return LayerTableGrid(self, table)
234    
235      def OnClose(self, event):      def OnClose(self, event):
236          self.interactor.Unsubscribe(SELECTED_SHAPE, self.select_shape)          self.parent.Unsubscribe(SHAPES_SELECTED, self.select_shape)
237          TableFrame.OnClose(self, event)          TableFrame.OnClose(self, event)
238    
239      def select_shape(self, layer, shape):      def select_shape(self, layer, shapes):
240            """Subscribed to the SHAPES_SELECTED message.
241    
242            If shapes contains exactly one shape id, select that shape in
243            the grid. Otherwise deselect all.
244            """
245            if len(shapes):
246                shape = shapes[0]
247            else:
248                shape = None
249          self.grid.select_shape(layer, shape)          self.grid.select_shape(layer, shape)
250    
251      def row_selected(self, row):      def row_selected(self, row):
252          if self.layer is not None:          if self.layer is not None:
253              self.interactor.SelectLayerAndShape(self.layer, row)              self.parent.SelectShapes(self.layer, [row])

Legend:
Removed from v.278  
changed lines
  Added in v.808

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26