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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6 - (show annotations)
Tue Aug 28 15:41:52 2001 UTC (23 years, 6 months ago) by bh
Original Path: trunk/thuban/Thuban/UI/tableview.py
File MIME type: text/x-python
File size: 4392 byte(s)
import all the source files

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26