/[thuban]/trunk/thuban/Thuban/UI/proj4dialog.py
ViewVC logotype

Contents of /trunk/thuban/Thuban/UI/proj4dialog.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 65 - (show annotations)
Fri Sep 14 14:55:34 2001 UTC (23 years, 5 months ago) by bh
File MIME type: text/x-python
File size: 7367 byte(s)
	* Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
	Set the initial selection of the combo boxes to reflect the
	projection we're starting with in a way that works on windows,
	too.

1 # Copyright (c) 2001 by Intevation GmbH
2 # Authors:
3 # Frank Koormann <[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 """
9 Dialogs to the geographic projection library PROJ4
10 """
11
12 __version__ = "$Revision$"
13
14 from wxPython.wx import *
15 from string import split
16
17 ID_PROJECTION_EDIT = 4010
18 ID_PROJECTION_SELECT = 4011
19 ID_PROJECTION_OK = 4001
20 ID_PROJECTION_CANCEL = 4002
21
22 ID_UTM_DIALOG_OK = 4101
23 ID_UTM_DIALOG_CANCEL = 4102
24
25 projectionDict = {'None' : 'None', 'UTM' : 'utm'}
26 projectionMapping = {'None' : 'None', 'utm' : 'UTM'}
27
28 class Proj4Dialog(wxDialog):
29
30 """Let the user select a projection and specify related parameters"""
31
32 def __init__(self, parent, projectionParamsList):
33 wxDialog.__init__(self, parent, -1, "Projection",
34 style = wxRESIZE_BORDER)
35
36 self.dialogLayout()
37 self.projectionParams={}
38 combo = self.projection
39 if projectionParamsList is not None:
40 for element in projectionParamsList:
41 key, val = split(element,'=')
42 self.projectionParams[key] = val
43 if self.projectionParams.has_key('proj'):
44 proj = projectionMapping[self.projectionParams['proj']]
45 combo.SetSelection(combo.FindString(proj))
46 else:
47 combo.SetSelection(combo.FindString('None'))
48 self.UpdateProjectionInfo()
49 else:
50 self.projection.SetValue('None')
51 self.UpdateProjectionInfo()
52
53
54 def dialogLayout(self):
55 topBox = wxBoxSizer(wxVERTICAL)
56
57 # Projection selection:
58 projectionBox = wxBoxSizer(wxHORIZONTAL)
59 projectionBox.Add(wxStaticText(self, -1, "Projection"),
60 0, wxALIGN_CENTER|wxALL, 4)
61
62 self.projection = wxComboBox(self, ID_PROJECTION_SELECT, "",
63 style = wxCB_READONLY)
64 for projection in projectionDict.keys():
65 self.projection.Append(projection)
66 projectionBox.Add(self.projection, 0, wxALL, 4)
67 projectionBox.Add(wxButton(self, ID_PROJECTION_EDIT, "Edit"),
68 0, wxALL, 4)
69 EVT_COMBOBOX(self, ID_PROJECTION_SELECT, self.OnProj4Select)
70 EVT_BUTTON(self, ID_PROJECTION_EDIT, self.OnEdit)
71
72 topBox.Add(projectionBox, 0, 0)
73
74 # Info about current projection:
75 self.projectionInfo = wxTextCtrl(self, -1, "",
76 style = wxTE_MULTILINE|wxTE_READONLY,
77 size = (-1, 60))
78 topBox.Add(self.projectionInfo,1,wxEXPAND|wxALL, 4)
79
80 # Control buttons:
81 buttonBox = wxBoxSizer( wxHORIZONTAL )
82 buttonBox.Add(wxButton(self, ID_PROJECTION_OK, "OK"),
83 0, wxALL, 4)
84 buttonBox.Add(wxButton(self, ID_PROJECTION_CANCEL, "Cancel"),
85 0, wxALL, 4)
86 topBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10)
87
88 EVT_BUTTON(self, ID_PROJECTION_OK, self.OnProj4OK)
89 EVT_BUTTON(self, ID_PROJECTION_CANCEL, self.OnProj4Cancel)
90
91 self.SetAutoLayout(true)
92 self.SetSizer(topBox)
93 topBox.Fit(self)
94 topBox.SetSizeHints(self)
95
96 def OnProj4Select(self, event):
97 projection = self.projection.GetStringSelection()
98 if projection == 'None':
99 self.projectionParams = {}
100 self.UpdateProjectionInfo()
101
102 def OnEdit(self, event):
103 projection = self.projection.GetStringSelection()
104 if projection is not 'None':
105 dialogname = getattr(self, 'launch' + projection + 'Dialog', None)
106 if dialogname is not None:
107 if dialogname(self):
108 self.UpdateProjectionInfo()
109 else:
110 pass
111 else:
112 self.projectionParams = {}
113
114 def UpdateProjectionInfo(self):
115 self.projectionInfo.Clear()
116 for key in self.projectionParams.keys():
117 self.projectionInfo.AppendText(key+": "
118 +str(self.projectionParams[key])+"\n")
119
120
121 def OnProj4OK(self, event):
122 self.EndModal(wxID_OK)
123
124 def OnProj4Cancel(self, event):
125 self.EndModal(wxID_CANCEL)
126
127 def launchUTMDialog(self, parent):
128 dlg = UTMDialog(parent, parent.projectionInfo )
129 if dlg.ShowModal():
130 return true
131 else:
132 return false
133
134 def GetParams(self):
135 if len(self.projectionParams.keys()) > 0:
136 projection = []
137 for key in self.projectionParams.keys():
138 projection.append(key+"="+str(self.projectionParams[key]))
139 else:
140 projection=None
141
142 return projection
143
144
145
146 class UTMDialog(wxDialog):
147
148 """Let the user specify parameters for UTM projection (Zone, Spheroid)"""
149
150 def __init__(self, parent, projection):
151 wxDialog.__init__(self, parent, -1, "Projection: UTM Parameters",
152 wxDefaultPosition, wxSize(200, 100))
153 self.parent = parent
154 self.dialogLayout()
155 if self.parent.projectionParams.has_key('zone'):
156 text = str(self.parent.projectionParams['zone'])
157 self.zone.SetSelection(self.zone.FindString(text))
158 if self.parent.projectionParams.has_key('ellps'):
159 text = str(self.parent.projectionParams['ellps'])
160 self.ellps.SetSelection(self.ellps.FindString(text))
161
162 def dialogLayout(self):
163 topBox = wxBoxSizer(wxVERTICAL)
164
165 zoneBox = wxBoxSizer(wxHORIZONTAL)
166 zoneBox.Add(wxStaticText(self, -1, "UTM Zone"),
167 0, wxALIGN_CENTER|wxALL, 4)
168 self.zone = wxComboBox(self, -1, "", style = wxCB_READONLY)
169 for zone in range(1,61):
170 self.zone.Append(str(zone))
171 zoneBox.Add(self.zone, 0, wxALIGN_CENTER|wxALL, 4)
172
173 topBox.Add(zoneBox, 1, wxEXPAND|wxALL, 4)
174
175 ellipsoidBox = wxBoxSizer(wxHORIZONTAL)
176 ellipsoidBox.Add(wxStaticText(self, -1, "Ellipsoid"),
177 0, wxALIGN_CENTER|wxALL, 4)
178 self.ellps = wxComboBox(self, -1, "", style = wxCB_READONLY)
179 for ellps in ["clrk66", "GRS80"]:
180 self.ellps.Append(ellps)
181 ellipsoidBox.Add(self.ellps, 0, wxALIGN_CENTER|wxALL, 4)
182
183 topBox.Add(ellipsoidBox, 1, wxEXPAND|wxALL, 4)
184
185 buttonBox = wxBoxSizer(wxHORIZONTAL)
186 buttonBox.Add(wxButton(self, ID_UTM_DIALOG_OK, "OK"),
187 0, wxALL, 4)
188 buttonBox.Add(wxButton(self, ID_UTM_DIALOG_CANCEL, "Cancel"),
189 0, wxALL, 4)
190 topBox.Add(buttonBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10)
191 EVT_BUTTON(self, ID_UTM_DIALOG_OK, self.OnOK)
192 EVT_BUTTON(self, ID_UTM_DIALOG_CANCEL, self.OnCancel)
193
194 self.SetAutoLayout(true)
195 self.SetSizer(topBox)
196 topBox.Fit(self)
197 topBox.SetSizeHints(self)
198
199 def OnOK(self, event):
200 self.parent.projectionParams = {}
201 self.parent.projectionParams['zone'] = self.zone.GetStringSelection()
202 self.parent.projectionParams['ellps'] = self.ellps.GetStringSelection()
203 self.parent.projectionParams['proj'] = "utm"
204 self.Close(true)
205
206 def OnCancel(self, event):
207 self.Close(false)
208

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26