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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 77 - (hide annotations)
Mon Feb 4 19:27:13 2002 UTC (23 years, 1 month ago) by bh
Original Path: trunk/thuban/Thuban/UI/tableview.py
File MIME type: text/x-python
File size: 5033 byte(s)
	* Thuban/UI/tableview.py (TableGrid.__init__): Fix typo

1 bh 77 # Copyright (c) 2001, 2002 by Intevation GmbH
2 bh 6 # Authors:
3     # Bernhard Herzog <[email protected]>
4     #
5     # This program is free software under the GPL (>=v2)
6     # Read the file COPYING coming with Thuban for details.
7    
8     __version__ = "$Revision$"
9    
10     from wxPython.wx import *
11     from wxPython.grid import *
12    
13 bh 34 from Thuban.Lib.connector import Publisher
14 bh 6 from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, \
15     FIELDTYPE_STRING
16     import view
17 bh 30 from dialogs import NonModalDialog
18 bh 6 from messages import SELECTED_SHAPE
19    
20     wx_value_type_map = {FIELDTYPE_INT: wxGRID_VALUE_NUMBER,
21     FIELDTYPE_DOUBLE: wxGRID_VALUE_FLOAT,
22     FIELDTYPE_STRING: wxGRID_VALUE_STRING}
23    
24 bh 34 ROW_SELECTED = "ROW_SELECTED"
25    
26    
27 bh 6 class DataTable(wxPyGridTableBase):
28    
29 bh 34 """Wrapper around a Thuban table object suitable for a wxGrid"""
30    
31 bh 6 def __init__(self, table = None):
32     wxPyGridTableBase.__init__(self)
33     self.num_cols = 0
34     self.num_rows = 0
35     self.columns = []
36     self.table = None
37     self.SetTable(table)
38    
39     def SetTable(self, table):
40     self.table = table
41     self.num_cols = table.field_count()
42     self.num_rows = table.record_count()
43    
44     self.columns = []
45     for i in range(self.num_cols):
46     type, name, len, decc = table.field_info(i)
47     self.columns.append((name, wx_value_type_map[type], len, decc))
48    
49     #
50     # required methods for the wxPyGridTableBase interface
51     #
52    
53     def GetNumberRows(self):
54     return self.num_rows
55    
56     def GetNumberCols(self):
57     return self.num_cols
58    
59     def IsEmptyCell(self, row, col):
60     return 0
61    
62     # Get/Set values in the table. The Python version of these
63     # methods can handle any data-type, (as long as the Editor and
64     # Renderer understands the type too,) not just strings as in the
65     # C++ version.
66     def GetValue(self, row, col):
67     record = self.table.read_record(row)
68     return record[self.columns[col][0]]
69    
70     def SetValue(self, row, col, value):
71     pass
72    
73     #
74     # Some optional methods
75     #
76    
77     # Called when the grid needs to display labels
78     def GetColLabelValue(self, col):
79     return self.columns[col][0]
80    
81     # Called to determine the kind of editor/renderer to use by
82     # default, doesn't necessarily have to be the same type used
83     # nativly by the editor/renderer if they know how to convert.
84     def GetTypeName(self, row, col):
85     return self.columns[col][1]
86    
87     # Called to determine how the data can be fetched and stored by the
88     # editor and renderer. This allows you to enforce some type-safety
89     # in the grid.
90     def CanGetValueAs(self, row, col, typeName):
91     # perhaps we should allow conversion int->double?
92     return self.GetTypeName(row, col) == typeName
93    
94     def CanSetValueAs(self, row, col, typeName):
95     return self.CanGetValueAs(row, col, typeName)
96    
97    
98 bh 34 class TableGrid(wxGrid, Publisher):
99 bh 6
100 bh 34 """A grid view for a Thuban table"""
101 bh 6
102     def __init__(self, parent, table = None):
103     wxGrid.__init__(self, parent, -1)
104    
105     self.table = DataTable(table)
106    
107     # The second parameter means that the grid is to take ownership
108     # of the table and will destroy it when done. Otherwise you
109 bh 77 # would need to keep a reference to it and call its Destroy
110 bh 6 # method later.
111     self.SetTable(self.table, true)
112    
113     #self.SetMargins(0,0)
114     self.AutoSizeColumns(false)
115    
116     self.SetSelectionMode(wxGrid.wxGridSelectRows)
117    
118     EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)
119     EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
120    
121     def SetTableObject(self, table):
122     self.table.SetTable(table)
123    
124     def OnRangeSelect(self, event):
125     if event.Selecting():
126 bh 34 self.issue(ROW_SELECTED, event.GetTopLeftCoords().GetRow())
127 bh 6
128     def OnSelectCell(self, event):
129 bh 34 self.issue(ROW_SELECTED, event.GetRow())
130 bh 6
131     def select_shape(self, layer, shape):
132 bh 30 if layer is not None and layer.table is self.table.table \
133     and shape is not None:
134 bh 6 self.SelectRow(shape)
135     self.SetGridCursor(shape, 0)
136     self.MakeCellVisible(shape, 0)
137    
138    
139 bh 30 class TableFrame(NonModalDialog):
140 bh 6
141 bh 34 """Frame that displays a Thuban table in a grid view"""
142    
143     def __init__(self, parent, interactor, name, title, layer = None,
144     table = None):
145 bh 30 NonModalDialog.__init__(self, parent, interactor, name, title)
146 bh 34 self.layer = layer
147     self.table = table
148 bh 30 self.grid = TableGrid(self, table)
149 bh 34 self.grid.Subscribe(ROW_SELECTED, self.row_selected)
150 bh 30 self.interactor.Subscribe(SELECTED_SHAPE, self.select_shape)
151    
152     def OnClose(self, event):
153     self.interactor.Unsubscribe(SELECTED_SHAPE, self.select_shape)
154     NonModalDialog.OnClose(self, event)
155    
156     def select_shape(self, layer, shape):
157     self.grid.select_shape(layer, shape)
158 bh 34
159     def row_selected(self, row):
160     if self.layer is not None:
161     self.interactor.SelectLayerAndShape(self.layer, row)

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26