Script ais_msg_1_wx_py
[hide private]
[frames] | no frames]

Source Code for Script script-ais_msg_1_wx_py

  1  #!/usr/bin/env pythonw   # mac specific 
  2  # FIX: put some documentation here! 
  3   
  4  import wx 
  5  #import ais_msg_1       # FIX: turn this back on 
  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   
26 -class MsgFrame(wx.Frame):
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)) # FIX: what size? 75 self.msgDict = msgDict # Save this so we can edit and return valies in the incoming dict 76 77 defaults = testParams # FIX: turn off this hack and use the unavailable values 78 79 sizer=wx.FlexGridSizer(rows=1,cols=2, vgap=13, hgap=13) 80 sizer.AddGrowableCol(1) 81 self.SetSizer(sizer) 82 83 84 ############################ Field MessageID - uint 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 ############################ Field RepeatIndicator - uint 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 ############################ Field UserID - uint 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 ############################ Field NavigationStatus - uint 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 ############################ Field ROT - int 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 ############################ Field SOG - udecimal 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 ############################ Field PositionAccuracy - uint 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 ############################ Field Position_longitude - decimal 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 ############################ Field Position_latitude - decimal 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 ############################ Field COG - udecimal 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 ############################ Field TrueHeading - uint 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 ############################ Field TimeStamp - uint 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 ############################ Field RegionalReserved - uint 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 ############################ Field Spare - uint 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 ############################ Field RAIM - bool 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 ############################ Field syncstate - uint 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 ############################ Field slotoffset - uint 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 ####### FINISH UP __init__ 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() # Get yourself organized 261 self.Show()
262
263 - def OnDone(self,evt):
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