1
2
3
4 import wx
5
6
7
8 testParams = {'COG': 34.5,
9 'MessageID': 1,
10 'NavigationStatus': 3,
11 'PositionAccuracy': 1,
12 'Position_latitude': 37.424458333333334,
13 'Position_longitude': -122.16328055555556,
14 'RAIM': False,
15 'ROT': -2,
16 'RegionalReserved': 0,
17 'RepeatIndicator': 1,
18 'SOG': 101.9,
19 'Spare': 0,
20 'TimeStamp': 35,
21 'TrueHeading': 41,
22 'UserID': 1193046,
23 'slotoffset': 1221,
24 'syncstate': 2}
25
27 '''
28 # FIX: write doc string here for the frame
29 '''
30
31 RepeatIndicatorList = [
32 '0 - default',
33 '1',
34 '2',
35 '3 - do not repeat any more',
36 ]
37 NavigationStatusList = [
38 '0 - under way using engine',
39 '1 - at anchor',
40 '2 - not under command',
41 '3 - restricted maneuverability',
42 '4 - constrained by her draught',
43 '5 - moored',
44 '6 - aground',
45 '7 - engaged in fishing',
46 '8 - under way sailing',
47 '9 - reserved for future use (hazmat)',
48 '10 - reserved for future use',
49 '11 - reserved for future use',
50 '12 - reserved for future use',
51 '13 - reserved for future use',
52 '14 - reserved for future use',
53 '15 - not defined = default',
54 ]
55 PositionAccuracyList = [
56 '0 - low (greater than 10 m)',
57 '1 - high (less than 10 m)',
58 ]
59 syncstateList = [
60 '0 - UTC direct',
61 '1 - UTC indirect',
62 '2 - synchronized to a base station',
63 '3 - synchronized to another station',
64 ]
65 BoolList=['False','True']
66
67 - def __init__(self,parent,title,msgDict):
68 '''
69 @param msgDict: Default values to use.
70 Overwritten with the return values.
71 Values that are required will be ignored.
72 @type msgDict: dict
73 '''
74 wx.Frame.__init__(self,parent,-1,title,size=(640,480))
75 self.msgDict = msgDict
76
77 defaults = testParams
78
79 sizer=wx.FlexGridSizer(rows=1,cols=2, vgap=13, hgap=13)
80 sizer.AddGrowableCol(1)
81 self.SetSizer(sizer)
82
83
84
85 txt = wx.StaticText(self,label='MessageID')
86 self.MessageIDWidget=wx.StaticText(self,label='1')
87
88 sizer.Add(item=txt); del txt
89 sizer.Add(self.MessageIDWidget,flag=wx.EXPAND)
90
91
92 txt = wx.StaticText(self,label='RepeatIndicator')
93 value=str(defaults['RepeatIndicator'])
94 if 'RepeatIndicator' in msgDict: value = str(msgDict['RepeatIndicator'])
95 self.RepeatIndicatorWidget=wx.Choice(self,-1, choices = self.RepeatIndicatorList)
96 self.RepeatIndicatorWidget.SetSelection(int(value))
97 del value
98
99 sizer.Add(item=txt); del txt
100 sizer.Add(self.RepeatIndicatorWidget,flag=wx.EXPAND)
101
102
103 txt = wx.StaticText(self,label='UserID')
104 value=str(defaults['UserID'])
105 if 'UserID' in msgDict: value = str(msgDict['UserID'])
106 self.UserIDWidget=wx.SpinCtrl(self,value=value,min=0,max=1073741823)
107 del value
108
109 sizer.Add(item=txt); del txt
110 sizer.Add(self.UserIDWidget,flag=wx.EXPAND)
111
112
113 txt = wx.StaticText(self,label='NavigationStatus')
114 value=str(defaults['NavigationStatus'])
115 if 'NavigationStatus' in msgDict: value = str(msgDict['NavigationStatus'])
116 self.NavigationStatusWidget=wx.Choice(self,-1, choices = self.NavigationStatusList)
117 self.NavigationStatusWidget.SetSelection(int(value))
118 del value
119
120 sizer.Add(item=txt); del txt
121 sizer.Add(self.NavigationStatusWidget,flag=wx.EXPAND)
122
123
124 txt = wx.StaticText(self,label='ROT')
125 value=str(defaults['ROT'])
126 if 'ROT' in msgDict: value = str(msgDict['ROT'])
127 self.ROTWidget=wx.SpinCtrl(self,value=value,min=128,max=127)
128 del value
129
130 sizer.Add(item=txt); del txt
131 sizer.Add(self.ROTWidget,flag=wx.EXPAND)
132
133
134 txt = wx.StaticText(self,label='SOG')
135 value=str(defaults['SOG'])
136 if 'SOG' in msgDict: value = str(msgDict['SOG'])
137 self.SOGWidget=wx.Slider(self,-1,float(value),0,102.3,style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS | wx.SL_LABELS)
138 del value
139
140 sizer.Add(item=txt); del txt
141 sizer.Add(self.SOGWidget,flag=wx.EXPAND)
142
143
144 txt = wx.StaticText(self,label='PositionAccuracy')
145 value=str(defaults['PositionAccuracy'])
146 if 'PositionAccuracy' in msgDict: value = str(msgDict['PositionAccuracy'])
147 self.PositionAccuracyWidget=wx.Choice(self,-1, choices = self.PositionAccuracyList)
148 self.PositionAccuracyWidget.SetSelection(int(value))
149 del value
150
151 sizer.Add(item=txt); del txt
152 sizer.Add(self.PositionAccuracyWidget,flag=wx.EXPAND)
153
154
155 txt = wx.StaticText(self,label='Position_longitude')
156 value=str(defaults['Position_longitude'])
157 if 'Position_longitude' in msgDict: value = str(msgDict['Position_longitude'])
158 self.Position_longitudeWidget=wx.Slider(self,-1,float(value),-180.0,181.0,style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS | wx.SL_LABELS)
159 del value
160
161 sizer.Add(item=txt); del txt
162 sizer.Add(self.Position_longitudeWidget,flag=wx.EXPAND)
163
164
165 txt = wx.StaticText(self,label='Position_latitude')
166 value=str(defaults['Position_latitude'])
167 if 'Position_latitude' in msgDict: value = str(msgDict['Position_latitude'])
168 self.Position_latitudeWidget=wx.Slider(self,-1,float(value),-90.0,91.0,style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS | wx.SL_LABELS)
169 del value
170
171 sizer.Add(item=txt); del txt
172 sizer.Add(self.Position_latitudeWidget,flag=wx.EXPAND)
173
174
175 txt = wx.StaticText(self,label='COG')
176 value=str(defaults['COG'])
177 if 'COG' in msgDict: value = str(msgDict['COG'])
178 self.COGWidget=wx.Slider(self,-1,float(value),0,409.5,style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS | wx.SL_LABELS)
179 del value
180
181 sizer.Add(item=txt); del txt
182 sizer.Add(self.COGWidget,flag=wx.EXPAND)
183
184
185 txt = wx.StaticText(self,label='TrueHeading')
186 value=str(defaults['TrueHeading'])
187 if 'TrueHeading' in msgDict: value = str(msgDict['TrueHeading'])
188 self.TrueHeadingWidget=wx.SpinCtrl(self,value=value,min=0,max=511)
189 del value
190
191 sizer.Add(item=txt); del txt
192 sizer.Add(self.TrueHeadingWidget,flag=wx.EXPAND)
193
194
195 txt = wx.StaticText(self,label='TimeStamp')
196 value=str(defaults['TimeStamp'])
197 if 'TimeStamp' in msgDict: value = str(msgDict['TimeStamp'])
198 self.TimeStampWidget=wx.SpinCtrl(self,value=value,min=0,max=63)
199 del value
200
201 sizer.Add(item=txt); del txt
202 sizer.Add(self.TimeStampWidget,flag=wx.EXPAND)
203
204
205 txt = wx.StaticText(self,label='RegionalReserved')
206 self.RegionalReservedWidget=wx.StaticText(self,label='0')
207
208 sizer.Add(item=txt); del txt
209 sizer.Add(self.RegionalReservedWidget,flag=wx.EXPAND)
210
211
212 txt = wx.StaticText(self,label='Spare')
213 self.SpareWidget=wx.StaticText(self,label='0')
214
215 sizer.Add(item=txt); del txt
216 sizer.Add(self.SpareWidget,flag=wx.EXPAND)
217
218
219 txt = wx.StaticText(self,label='RAIM')
220 value=str(defaults['RAIM'])
221 if 'RAIM' in msgDict: value = str(msgDict['RAIM'])
222 self.RAIMWidget=wx.Choice(self,-1, choices = self.BoolList)
223 if defaults['RAIM']: self.RAIMWidget.SetSelection(1)
224 else: self.RAIMWidget.SetSelection(0)
225 del value
226
227 sizer.Add(item=txt); del txt
228 sizer.Add(self.RAIMWidget,flag=wx.EXPAND)
229
230
231 txt = wx.StaticText(self,label='syncstate')
232 value=str(defaults['syncstate'])
233 if 'syncstate' in msgDict: value = str(msgDict['syncstate'])
234 self.syncstateWidget=wx.Choice(self,-1, choices = self.syncstateList)
235 self.syncstateWidget.SetSelection(int(value))
236 del value
237
238 sizer.Add(item=txt); del txt
239 sizer.Add(self.syncstateWidget,flag=wx.EXPAND)
240
241
242 txt = wx.StaticText(self,label='slotoffset')
243 value=str(defaults['slotoffset'])
244 if 'slotoffset' in msgDict: value = str(msgDict['slotoffset'])
245 self.slotoffsetWidget=wx.SpinCtrl(self,value=value,min=0,max=16383)
246 del value
247
248 sizer.Add(item=txt); del txt
249 sizer.Add(self.slotoffsetWidget,flag=wx.EXPAND)
250
251
252
253
254 btnDone = wx.Button(self,label='Done')
255
256 sizer.Add((1,35),0,wx.ADJUST_MINSIZE,0)
257 sizer.Add(item=btnDone)
258 btnDone.Bind(wx.EVT_BUTTON,self.OnDone)
259
260 self.Layout()
261 self.Show()
262
264 '''
265 Put all values into msgDict so that they get returned to the caller
266 '''
267 self.msgDict['MessageID']=1
268 self.msgDict['RepeatIndicator']=self.RepeatIndicatorWidget.GetSelection()
269 self.msgDict['UserID']=self.UserIDWidget.GetValue()
270 self.msgDict['NavigationStatus']=self.NavigationStatusWidget.GetSelection()
271 self.msgDict['ROT']=self.ROTWidget.GetValue()
272 self.msgDict['SOG']=self.SOGWidget.GetValue()
273 self.msgDict['PositionAccuracy']=self.PositionAccuracyWidget.GetSelection()
274 self.msgDict['Position_longitude']=self.Position_longitudeWidget.GetValue()
275 self.msgDict['Position_latitude']=self.Position_latitudeWidget.GetValue()
276 self.msgDict['COG']=self.COGWidget.GetValue()
277 self.msgDict['TrueHeading']=self.TrueHeadingWidget.GetValue()
278 self.msgDict['TimeStamp']=self.TimeStampWidget.GetValue()
279 self.msgDict['RegionalReserved']=0
280 self.msgDict['Spare']=0
281 self.msgDict['RAIM']=self.RAIMWidget.GetSelection()
282 self.msgDict['syncstate']=self.syncstateWidget.GetSelection()
283 self.msgDict['slotoffset']=self.slotoffsetWidget.GetValue()
284 self.Close(True)
285
286 if __name__=='__main__':
287 app = wx.PySimpleApp()
288 theData={}
289 frame = MsgFrame(None,'Position Message Editor',theData)
290 app.MainLoop()
291
292 print 'finishing up', theData
293