/[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 979 by frank, Thu May 22 11:40:59 2003 UTC revision 1035 by jan, Mon May 26 17:03:08 2003 UTC
# Line 7  Line 7 
7    
8  __version__ = "$Revision$"  __version__ = "$Revision$"
9    
10    import os.path
11    
12  from Thuban import _  from Thuban import _
13    
14  from wxPython.wx import *  from wxPython.wx import *
# Line 14  from wxPython.grid import * Line 16  from wxPython.grid import *
16    
17  from Thuban.Lib.connector import Publisher  from Thuban.Lib.connector import Publisher
18  from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \  from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \
19       FIELDTYPE_STRING       FIELDTYPE_STRING, table_to_dbf, table_to_csv
20  import view  import view
21  from dialogs import NonModalDialog  from dialogs import NonModalDialog
22  from messages import SHAPES_SELECTED  from messages import SHAPES_SELECTED
# Line 121  class TableGrid(wxGrid, Publisher): Line 123  class TableGrid(wxGrid, Publisher):
123          # of the table and will destroy it when done. Otherwise you          # of the table and will destroy it when done. Otherwise you
124          # would need to keep a reference to it and call its Destroy          # would need to keep a reference to it and call its Destroy
125          # method later.          # method later.
126          self.SetTable(self.table, true)          self.SetTable(self.table, True)
127    
128          #self.SetMargins(0,0)          #self.SetMargins(0,0)
129    
# Line 129  class TableGrid(wxGrid, Publisher): Line 131  class TableGrid(wxGrid, Publisher):
131          # column widths automatically but it would cause a traversal of          # column widths automatically but it would cause a traversal of
132          # the entire table which for large .dbf files can take a very          # the entire table which for large .dbf files can take a very
133          # long time.          # long time.
134          #self.AutoSizeColumns(false)          #self.AutoSizeColumns(False)
135    
136          self.SetSelectionMode(wxGrid.wxGridSelectRows)          self.SetSelectionMode(wxGrid.wxGridSelectRows)
137    
# Line 253  class TableFrame(NonModalDialog): Line 255  class TableFrame(NonModalDialog):
255    
256    
257  ID_QUERY = 4001  ID_QUERY = 4001
258  ID_SAVEAS = 4002  ID_EXPORT = 4002
259    
260  class LayerTableFrame(TableFrame):  class QueryTableFrame(TableFrame):
261    
262      """Frame that displays a layer table in a grid view      """Frame that displays a table in a grid view and offers user actions
263        selection and export
264    
265      A LayerTableFrame is TableFrame whose selection is connected to the      A LayerTableFrame is TableFrame whose selection is connected to the
266      selected object in a map.      selected object in a map.
267      """      """
268    
269      def __init__(self, parent, name, title, layer, table):      def __init__(self, parent, name, title, table):
270          TableFrame.__init__(self, parent, name, title, table)          TableFrame.__init__(self, parent, name, title, table)
         self.layer = layer  
         self.grid.Subscribe(ROW_SELECTED, self.rows_selected)  
         self.parent.Subscribe(SHAPES_SELECTED, self.select_shapes)  
271    
272          self.combo_fields = wxComboBox(self, -1, style=wxCB_READONLY)          self.combo_fields = wxComboBox(self, -1, style=wxCB_READONLY)
273          self.choice_comp = wxChoice(self, -1,          self.choice_comp = wxChoice(self, -1,
# Line 279  class LayerTableFrame(TableFrame): Line 279  class LayerTableFrame(TableFrame):
279                                          _("Add to Selection")])                                          _("Add to Selection")])
280    
281          button_query = wxButton(self, ID_QUERY, _("Query"))          button_query = wxButton(self, ID_QUERY, _("Query"))
282          button_saveas = wxButton(self, ID_SAVEAS, _("Export"))          button_saveas = wxButton(self, ID_EXPORT, _("Export"))
283    
284          self.grid.SetSize((400, 200))          self.grid.SetSize((400, 200))
285    
# Line 295  class LayerTableFrame(TableFrame): Line 295  class LayerTableFrame(TableFrame):
295    
296          topBox = wxBoxSizer(wxVERTICAL)          topBox = wxBoxSizer(wxVERTICAL)
297    
298          sizer = wxStaticBoxSizer(wxStaticBox(self, -1, _("Selections")),          sizer = wxStaticBoxSizer(wxStaticBox(self, -1, _("Selection")),
299                                    wxHORIZONTAL)                                    wxHORIZONTAL)
300          sizer.Add(self.combo_fields, 1, wxEXPAND|wxALL, 4)          sizer.Add(self.combo_fields, 1, wxEXPAND|wxALL, 4)
301          sizer.Add(self.choice_comp, 0, wxALL, 4)          sizer.Add(self.choice_comp, 0, wxALL, 4)
# Line 315  class LayerTableFrame(TableFrame): Line 315  class LayerTableFrame(TableFrame):
315    
316          self.grid.SetFocus()          self.grid.SetFocus()
317          EVT_BUTTON(self, ID_QUERY, self.OnQuery)          EVT_BUTTON(self, ID_QUERY, self.OnQuery)
318          EVT_BUTTON(self, ID_SAVEAS, self.OnSaveAs)          EVT_BUTTON(self, ID_EXPORT, self.OnSaveAs)
319          EVT_KEY_DOWN(self.grid, self.OnKeyDown)          EVT_KEY_DOWN(self.grid, self.OnKeyDown)
320    
321      def OnKeyDown(self, event):      def OnKeyDown(self, event):
322          """Catch query key from grid"""          """Catch query key from grid"""
         print "In OnKeyDown"  
323          if event.AltDown() and event.GetKeyCode() == ord(QUERY_KEY):          if event.AltDown() and event.GetKeyCode() == ord(QUERY_KEY):
             print "Got the Key!"  
324              self.combo_fields.SetFocus()              self.combo_fields.SetFocus()
325              self.combo_fields.refocus = True              self.combo_fields.refocus = True
326          else:          else:
# Line 362  class LayerTableFrame(TableFrame): Line 360  class LayerTableFrame(TableFrame):
360              self.grid.ClearSelection()              self.grid.ClearSelection()
361          elif choice == 1:          elif choice == 1:
362              # Refine Selection              # Refine Selection
363              sel = dict([(i, 0) for i in self.parent.SelectedShapes()])              sel = self.get_selected()
364              self.grid.ClearSelection()              self.grid.ClearSelection()
365              ids = filter(sel.has_key, ids)              ids = filter(sel.has_key, ids)
366          elif choice == 2:          elif choice == 2:
# Line 390  class LayerTableFrame(TableFrame): Line 388  class LayerTableFrame(TableFrame):
388          wxEndBusyCursor()          wxEndBusyCursor()
389                    
390      def OnSaveAs(self, event):      def OnSaveAs(self, event):
391          dlg = wxFileDialog(self, _("Save Table As"), ".", "",          dlg = wxFileDialog(self, _("Export Table To"), ".", "",
392                             "DBF Files (*.dbf)|*.dbf|" +                             _("DBF Files (*.dbf)|*.dbf|") +
393                             "CSV Files (*.csv)|*.csv|" +                             _("CSV Files (*.csv)|*.csv|") +
394                             "All Files (*.*)|*.*",                             _("All Files (*.*)|*.*"),
395                             wxSAVE|wxOVERWRITE_PROMPT)                             wxSAVE|wxOVERWRITE_PROMPT)
396          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
397              pass              filename = dlg.GetPath()
398                                                                                                type = os.path.basename(filename).split('.')[-1:][0]
399          dlg.Destroy()              dlg.Destroy()
400                if type.upper() == "DBF":
401                    table_to_dbf(self.table, filename)
402                elif type.upper() == 'CSV':
403                    table_to_csv(self.table, filename)
404                else:
405                    dlg = wxMessageDialog(None, "Unsupported format: %s" % type,
406                                          "Table Export", wxOK|wxICON_WARNING)
407                    dlg.ShowModal()
408                    dlg.Destroy()
409            else:
410                dlg.Destroy()
411    
412        def OnClose(self, event):
413            TableFrame.OnClose(self, event)
414    
415        def get_selected(self):
416            """Return a dictionary of the selected rows.
417            
418            The dictionary has sthe indexes as keys."""
419            return dict([(i, 0) for i in self.grid.GetSelectedRows()])
420    
421    class LayerTableFrame(QueryTableFrame):
422    
423        """Frame that displays a layer table in a grid view
424    
425        A LayerTableFrame is a QueryTableFrame whose selection is connected to the
426        selected object in a map.
427        """
428    
429        def __init__(self, parent, name, title, layer, table):
430            QueryTableFrame.__init__(self, parent, name, title, table)
431            self.layer = layer
432            self.grid.Subscribe(ROW_SELECTED, self.rows_selected)
433            self.parent.Subscribe(SHAPES_SELECTED, self.select_shapes)
434    
435            # if there is already a selection present, update the grid
436            # accordingly
437            sel = self.get_selected().keys()
438            for i in sel:
439                self.grid.SelectRow(i, True)
440    
441      def make_grid(self, table):      def make_grid(self, table):
442          """Override the derived method to return a LayerTableGrid.          """Override the derived method to return a LayerTableGrid.
443          """          """
444          return LayerTableGrid(self, table)          return LayerTableGrid(self, table)
445    
446        def get_selected(self):
447            """Override the derived method to return a dictionary of the selected
448            rows.
449            """
450            return dict([(i, 0) for i in self.parent.SelectedShapes()])
451    
452      def OnClose(self, event):      def OnClose(self, event):
453            """Override the derived method to first unsubscribed."""
454          self.parent.Unsubscribe(SHAPES_SELECTED, self.select_shapes)          self.parent.Unsubscribe(SHAPES_SELECTED, self.select_shapes)
455          TableFrame.OnClose(self, event)          QueryTableFrame.OnClose(self, event)
456    
457      def select_shapes(self, layer, shapes):      def select_shapes(self, layer, shapes):
458          """Subscribed to the SHAPES_SELECTED message.          """Subscribed to the SHAPES_SELECTED message.
# Line 418  class LayerTableFrame(TableFrame): Line 463  class LayerTableFrame(TableFrame):
463          self.grid.select_shapes(layer, shapes)          self.grid.select_shapes(layer, shapes)
464    
465      def rows_selected(self, rows):      def rows_selected(self, rows):
466            """Return the selected rows of the layer as they are returned
467            by Layer.SelectShapes().
468            """
469          if self.layer is not None:          if self.layer is not None:
470              self.parent.SelectShapes(self.layer, rows)              self.parent.SelectShapes(self.layer, rows)

Legend:
Removed from v.979  
changed lines
  Added in v.1035

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26