/[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 6 by bh, Tue Aug 28 15:41:52 2001 UTC revision 173 by bh, Wed May 15 13:29:34 2002 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001 by Intevation GmbH  # Copyright (c) 2001, 2002 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 10  __version__ = "$Revision$" Line 10  __version__ = "$Revision$"
10  from wxPython.wx import *  from wxPython.wx import *
11  from wxPython.grid import *  from wxPython.grid import *
12    
13    from Thuban.Lib.connector import Publisher
14  from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \  from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \
15       FIELDTYPE_STRING       FIELDTYPE_STRING
16  import view  import view
17    from dialogs import NonModalDialog
18  from messages import SELECTED_SHAPE  from messages import SELECTED_SHAPE
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,
22                       FIELDTYPE_STRING: wxGRID_VALUE_STRING}                       FIELDTYPE_STRING: wxGRID_VALUE_STRING}
23    
24    ROW_SELECTED = "ROW_SELECTED"
25    
26    
27  class DataTable(wxPyGridTableBase):  class DataTable(wxPyGridTableBase):
28    
29        """Wrapper around a Thuban table object suitable for a wxGrid"""
30    
31      def __init__(self, table = None):      def __init__(self, table = None):
32          wxPyGridTableBase.__init__(self)          wxPyGridTableBase.__init__(self)
33          self.num_cols = 0          self.num_cols = 0
# Line 88  class DataTable(wxPyGridTableBase): Line 95  class DataTable(wxPyGridTableBase):
95          return self.CanGetValueAs(row, col, typeName)          return self.CanGetValueAs(row, col, typeName)
96    
97    
98      # Thuban stuff  class TableGrid(wxGrid, Publisher):
     def SelectRow(self, row):  
         import main  
         interactor = main.app.interactor  
         return interactor.SelectShape(self.table, row)  
   
   
   
   
99    
100  class TableGrid(wxGrid):      """A grid view for a Thuban table"""
101    
102      def __init__(self, parent, table = None):      def __init__(self, parent, table = None):
103          wxGrid.__init__(self, parent, -1)          wxGrid.__init__(self, parent, -1)
# Line 107  class TableGrid(wxGrid): Line 106  class TableGrid(wxGrid):
106    
107          # The second parameter means that the grid is to take ownership          # The second parameter means that the grid is to take ownership
108          # of the table and will destroy it when done. Otherwise you          # of the table and will destroy it when done. Otherwise you
109          # would need to keep a reference to it and call it's Destroy          # would need to keep a reference to it and call its Destroy
110          # method later.          # method later.
111          self.SetTable(self.table, true)          self.SetTable(self.table, true)
112    
113          #self.SetMargins(0,0)          #self.SetMargins(0,0)
114          self.AutoSizeColumns(false)  
115            # AutoSizeColumns would allow us to make the grid have optimal
116            # column widths automatically but it would cause a traversal of
117            # the entire table which for large .dbf files can take a very
118            # long time.
119            #self.AutoSizeColumns(false)
120    
121          self.SetSelectionMode(wxGrid.wxGridSelectRows)          self.SetSelectionMode(wxGrid.wxGridSelectRows)
122                    
123          EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)          EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)
124          EVT_GRID_SELECT_CELL(self, self.OnSelectCell)          EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
         import main  
         main.app.interactor.Subscribe(SELECTED_SHAPE, self.select_shape)  
125    
126      def SetTableObject(self, table):      def SetTableObject(self, table):
127          self.table.SetTable(table)          self.table.SetTable(table)
128    
129      def OnRangeSelect(self, event):      def OnRangeSelect(self, event):
130          if event.Selecting():          if event.Selecting():
131              if not self.table.SelectRow(event.GetTopLeftCoords().GetRow()):              self.issue(ROW_SELECTED, event.GetTopLeftCoords().GetRow())
                 event.Skip()  
132    
133      def OnSelectCell(self, event):      def OnSelectCell(self, event):
134          if not self.table.SelectRow(event.GetRow()):          self.issue(ROW_SELECTED, event.GetRow())
             event.Skip()  
135    
136      def select_shape(self, layer, shape):      def select_shape(self, layer, shape):
137          if layer is not None and layer.table is self.table.table:          if layer is not None and layer.table is self.table.table \
138               and shape is not None:
139              self.SelectRow(shape)              self.SelectRow(shape)
140              self.SetGridCursor(shape, 0)              self.SetGridCursor(shape, 0)
141              self.MakeCellVisible(shape, 0)              self.MakeCellVisible(shape, 0)
142    
143    
144  class TableFrame(wxFrame):  class TableFrame(NonModalDialog):
145    
146      def __init__(self, parent, table = None):      """Frame that displays a Thuban table in a grid view"""
147          wxFrame.__init__(self, parent, -1, "Thuban Table")  
148          grid = TableGrid(self, table)      def __init__(self, parent, interactor, name, title, layer = None,
149                     table = None):
150            NonModalDialog.__init__(self, parent, interactor, name, title)
151            self.layer = layer
152            self.table = table
153            self.grid = TableGrid(self, table)
154            self.grid.Subscribe(ROW_SELECTED, self.row_selected)
155            self.interactor.Subscribe(SELECTED_SHAPE, self.select_shape)
156    
157        def OnClose(self, event):
158            self.interactor.Unsubscribe(SELECTED_SHAPE, self.select_shape)
159            NonModalDialog.OnClose(self, event)
160    
161        def select_shape(self, layer, shape):
162            self.grid.select_shape(layer, shape)
163    
164        def row_selected(self, row):
165            if self.layer is not None:
166                self.interactor.SelectLayerAndShape(self.layer, row)

Legend:
Removed from v.6  
changed lines
  Added in v.173

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26