/[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 838 by bh, Tue May 6 15:53:32 2003 UTC revision 881 by jonathan, Fri May 9 16:34:15 2003 UTC
# Line 7  Line 7 
7    
8  __version__ = "$Revision$"  __version__ = "$Revision$"
9    
10    from Thuban import _
11    
12  from wxPython.wx import *  from wxPython.wx import *
13  from wxPython.grid import *  from wxPython.grid import *
14    
# Line 137  class TableGrid(wxGrid, Publisher): Line 139  class TableGrid(wxGrid, Publisher):
139          self.table.SetTable(table)          self.table.SetTable(table)
140    
141      def OnRangeSelect(self, event):      def OnRangeSelect(self, event):
142            rows = dict([(i, 0) for i in self.GetSelectedRows()])
143    
144            # if we're selecting we need to include the selected range and
145            # make sure that the current row is also included, which may
146            # not be the case if you just click on a single row!
147          if event.Selecting():          if event.Selecting():
148              self.issue(ROW_SELECTED, event.GetTopLeftCoords().GetRow())              for i in range(event.GetTopRow(), event.GetBottomRow() + 1):
149                    rows[i] = 0
150                rows[event.GetTopLeftCoords().GetRow()] = 0
151    
152            self.issue(ROW_SELECTED, rows.keys())
153            event.Skip()
154    
155      def OnSelectCell(self, event):      def OnSelectCell(self, event):
156          self.issue(ROW_SELECTED, event.GetRow())          self.issue(ROW_SELECTED, self.GetSelectedRows())
157            event.Skip()
158    
159      def disallow_messages(self):      def disallow_messages(self):
160          """Disallow messages to be send.          """Disallow messages to be send.
# Line 178  class LayerTableGrid(TableGrid): Line 191  class LayerTableGrid(TableGrid):
191      selection is usually coupled to the selected object in the map.      selection is usually coupled to the selected object in the map.
192      """      """
193    
194      def select_shape(self, layer, shape):      def select_shapes(self, layer, shapes):
195          """Select the row corresponding to the specified shape and layer          """Select the row corresponding to the specified shape and layer
196    
197          If layer is not the layer the table is associated with do          If layer is not the layer the table is associated with do
198          nothing. If shape or layer is None also do nothing.          nothing. If shape or layer is None also do nothing.
199          """          """
200          if layer is not None and layer.table is self.table.table \          if layer is not None \
201             and shape is not None:              and layer.table is self.table.table:
202    
203              self.disallow_messages()              self.disallow_messages()
204              try:              try:
205                  self.SelectRow(shape)                  self.ClearSelection()
206                  self.SetGridCursor(shape, 0)                  if len(shapes) > 0:
207                  self.MakeCellVisible(shape, 0)                      #
208                        # keep track of the lowest id so we can make it
209                        # the first visible item
210                        #
211                        first = shapes[0]
212    
213                        for shape in shapes:
214                            self.SelectRow(shape, True)
215                            if shape < first:
216                                first = shape
217    
218                        self.SetGridCursor(first, 0)
219                        self.MakeCellVisible(first, 0)
220              finally:              finally:
221                  self.allow_messages()                  self.allow_messages()
222    
# Line 213  class TableFrame(NonModalDialog): Line 239  class TableFrame(NonModalDialog):
239          return TableGrid(self, table)          return TableGrid(self, table)
240    
241    
242    ID_QUERY = 4001
243    ID_SAVEAS = 4002
244    
245  class LayerTableFrame(TableFrame):  class LayerTableFrame(TableFrame):
246    
247      """Frame that displays a layer table in a grid view      """Frame that displays a layer table in a grid view
# Line 224  class LayerTableFrame(TableFrame): Line 253  class LayerTableFrame(TableFrame):
253      def __init__(self, parent, name, title, layer, table):      def __init__(self, parent, name, title, layer, table):
254          TableFrame.__init__(self, parent, name, title, table)          TableFrame.__init__(self, parent, name, title, table)
255          self.layer = layer          self.layer = layer
256          self.grid.Subscribe(ROW_SELECTED, self.row_selected)          self.grid.Subscribe(ROW_SELECTED, self.rows_selected)
257          self.parent.Subscribe(SHAPES_SELECTED, self.select_shape)          self.parent.Subscribe(SHAPES_SELECTED, self.select_shapes)
258    
259            self.combo_fields = wxComboBox(self, -1, style=wxCB_READONLY)
260            self.choice_comp = wxChoice(self, -1,
261                                  choices=["<", "<=", "=", "<>", ">=", ">"])
262            self.combo_value = wxComboBox(self, -1)
263            self.choice_action = wxChoice(self, -1,
264                                    choices=[_("Replace Selection"),
265                                            _("Refine Selection"),
266                                            _("Add to Selection")])
267    
268            button_query = wxButton(self, ID_QUERY, _("Query"))
269            button_saveas = wxButton(self, ID_SAVEAS, _("Save As..."))
270    
271            self.grid.SetSize((400, 200))
272    
273            self.combo_value.Append("")
274            for i in range(table.field_count()):
275                type, name, len, decc = layer.table.field_info(i)
276                self.combo_fields.Append(name)
277                self.combo_value.Append(name)
278                                                                                    
279            # assume at least one field?
280            self.combo_fields.SetSelection(0)
281            self.combo_value.SetSelection(0)
282    
283            topBox = wxBoxSizer(wxVERTICAL)
284    
285            sizer = wxStaticBoxSizer(wxStaticBox(self, -1, _("Selections")),
286                                      wxHORIZONTAL)
287            sizer.Add(self.combo_fields, 1, wxEXPAND|wxALL, 4)
288            sizer.Add(self.choice_comp, 0, wxALL, 4)
289            sizer.Add(self.combo_value, 1, wxEXPAND|wxALL, 4)
290            sizer.Add(self.choice_action, 0, wxALL, 4)
291            sizer.Add(button_query, 0, wxALL, 4)
292            sizer.Add(40, 20, 0, wxALL, 4)
293            sizer.Add(button_saveas, 0, wxALL, 4)
294    
295            topBox.Add(sizer, 0, wxEXPAND|wxALL, 4)
296            topBox.Add(self.grid, 1, wxEXPAND|wxALL, 0)
297    
298            self.SetAutoLayout(True)
299            self.SetSizer(topBox)
300            topBox.Fit(self)
301            topBox.SetSizeHints(self)
302    
303            EVT_BUTTON(self, ID_QUERY, self.OnQuery)
304            EVT_BUTTON(self, ID_SAVEAS, self.OnSaveAs)
305    
306        def OnQuery(self, event):
307            wxBeginBusyCursor()
308    
309            if self.combo_value.GetSelection() < 1:
310                value = self.combo_value.GetValue()
311                print value
312            else:
313                value = self.table.Column(self.combo_value.GetValue())
314    
315            #ids = self.table.Query(
316                    #self.table.Column(self.combo_fields.GetStringSelection()),
317                    #self.choice_comp.GetStringSelection(),
318                    #value)
319    
320            choice = self.choice_action.GetSelection()
321                
322            if choice == 0:
323                ids = [1, 2, 3, 4, 5]
324                # Replace Selection
325                self.grid.ClearSelection()
326                for id in ids:
327                    self.grid.SelectRow(id, True)
328            elif choice == 1:
329                ids = [1, 3, 5]
330                # Refine Selection
331                sel = dict([(i, 0) for i in self.parent.SelectedShapes()])
332                self.grid.ClearSelection()
333                for id in filter(sel.has_key, ids):
334                    self.grid.SelectRow(id, True)
335            elif choice == 2:
336                ids = [2, 4]
337                # Add to Selection
338                for id in ids:
339                    self.grid.SelectRow(id, True)
340    
341            wxEndBusyCursor()
342            
343        def OnSaveAs(self, event):
344            dlg = wxFileDialog(self, _("Save Table As"), ".", "",
345                               "DBF Files (*.dbf)|*.dbf|" +
346                               "CSV Files (*.csv)|*.csv|" +
347                               "All Files (*.*)|*.*",
348                               wxSAVE|wxOVERWRITE_PROMPT)
349            if dlg.ShowModal() == wxID_OK:
350                pass
351                                                                                    
352            dlg.Destroy()
353    
354      def make_grid(self, table):      def make_grid(self, table):
355          """Override the derived method to return a LayerTableGrid.          """Override the derived method to return a LayerTableGrid.
# Line 233  class LayerTableFrame(TableFrame): Line 357  class LayerTableFrame(TableFrame):
357          return LayerTableGrid(self, table)          return LayerTableGrid(self, table)
358    
359      def OnClose(self, event):      def OnClose(self, event):
360          self.parent.Unsubscribe(SHAPES_SELECTED, self.select_shape)          self.parent.Unsubscribe(SHAPES_SELECTED, self.select_shapes)
361          TableFrame.OnClose(self, event)          TableFrame.OnClose(self, event)
362    
363      def select_shape(self, layer, shapes):      def select_shapes(self, layer, shapes):
364          """Subscribed to the SHAPES_SELECTED message.          """Subscribed to the SHAPES_SELECTED message.
365    
366          If shapes contains exactly one shape id, select that shape in          If shapes contains exactly one shape id, select that shape in
367          the grid. Otherwise deselect all.          the grid. Otherwise deselect all.
368          """          """
369          if len(shapes):          self.grid.select_shapes(layer, shapes)
             shape = shapes[0]  
         else:  
             shape = None  
         self.grid.select_shape(layer, shape)  
370    
371      def row_selected(self, row):      def rows_selected(self, rows):
372          if self.layer is not None:          if self.layer is not None:
373              self.parent.SelectShapes(self.layer, [row])              self.parent.SelectShapes(self.layer, rows)

Legend:
Removed from v.838  
changed lines
  Added in v.881

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26