diff -r 6787754b251b -r b6572d0336c3 doc/doxygen/html/commondialogs_8py-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/doxygen/html/commondialogs_8py-source.html Mon Jun 04 17:59:50 2007 +0200 @@ -0,0 +1,1075 @@ + +
+00001 #!/usr/bin/env python +00002 # -*- coding: utf-8 -*- +00003 +00004 #This file is part of CanFestival, a library implementing CanOpen Stack. +00005 # +00006 #Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD +00007 # +00008 #See COPYING file for copyrights details. +00009 # +00010 #This library is free software; you can redistribute it and/or +00011 #modify it under the terms of the GNU Lesser General Public +00012 #License as published by the Free Software Foundation; either +00013 #version 2.1 of the License, or (at your option) any later version. +00014 # +00015 #This library is distributed in the hope that it will be useful, +00016 #but WITHOUT ANY WARRANTY; without even the implied warranty of +00017 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +00018 #Lesser General Public License for more details. +00019 # +00020 #You should have received a copy of the GNU Lesser General Public +00021 #License along with this library; if not, write to the Free Software +00022 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +00023 +00024 from wxPython.wx import * +00025 from wxPython.grid import * +00026 import wx +00027 +00028 import os +00029 +00030 #------------------------------------------------------------------------------- +00031 # Editing Communication Dialog +00032 #------------------------------------------------------------------------------- +00033 +00034 +00035 [wxID_COMMUNICATIONDIALOG, wxID_COMMUNICATIONDIALOGMAINPANEL, +00036 wxID_COMMUNICATIONDIALOGPOSSIBLEINDEXES, wxID_COMMUNICATIONDIALOGCURRENTINDEXES, +00037 wxID_COMMUNICATIONDIALOGSELECT, wxID_COMMUNICATIONDIALOGUNSELECT, +00038 wxID_COMMUNICATIONDIALOGSTATICTEXT1, wxID_COMMUNICATIONDIALOGSTATICTEXT2 +00039 ] = [wx.NewId() for _init_ctrls in range(8)] +00040 +00041 class CommunicationDialog(wx.Dialog): +00042 def _init_coll_flexGridSizer1_Items(self, parent): +00043 # generated method, don't edit +00044 +00045 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) +00046 +00047 def _init_sizers(self): +00048 # generated method, don't edit +00049 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) +00050 +00051 self._init_coll_flexGridSizer1_Items_init_coll_flexGridSizer1_Items(self.flexGridSizer1) +00052 +00053 self.SetSizer(self.flexGridSizer1) +00054 +00055 def _init_ctrls(self, prnt): +00056 # generated method, don't edit +00057 wx.Dialog.__init__(self, id=wxID_COMMUNICATIONDIALOG, +00058 name='CommunicationDialog', parent=prnt, pos=wx.Point(234, 216), +00059 size=wx.Size(726, 437), style=wx.DEFAULT_DIALOG_STYLE, +00060 title='Edit Communication Profile') +00061 self.SetClientSize(wx.Size(726, 437)) +00062 +00063 self.MainPanel = wx.Panel(id=wxID_COMMUNICATIONDIALOGMAINPANEL, +00064 name='MainPanel', parent=self, pos=wx.Point(0, 0), +00065 size=wx.Size(688, 382), style=wx.TAB_TRAVERSAL) +00066 self.MainPanel.SetAutoLayout(True) +00067 +00068 self.PossibleIndexes = wx.ListBox(choices=[], +00069 id=wxID_COMMUNICATIONDIALOGPOSSIBLEINDEXES, +00070 name='PossibleIndexes', parent=self.MainPanel, pos=wx.Point(40, +00071 48), size=wx.Size(280, 320), style=wxLB_EXTENDED) +00072 self.PossibleIndexes.Bind(wx.EVT_LEFT_DCLICK, self.OnPossibleIndexesDClickOnPossibleIndexesDClick, +00073 id=wxID_COMMUNICATIONDIALOGPOSSIBLEINDEXES) +00074 +00075 self.CurrentIndexes = wx.ListBox(choices=[], +00076 id=wxID_COMMUNICATIONDIALOGCURRENTINDEXES, name='CurrentIndexes', +00077 parent=self.MainPanel, pos=wx.Point(400, 48), size=wx.Size(280, +00078 320), style=wxLB_EXTENDED) +00079 self.CurrentIndexes.Bind(wx.EVT_LEFT_DCLICK, self.OnCurrentIndexesDClickOnCurrentIndexesDClick, +00080 id=wxID_COMMUNICATIONDIALOGCURRENTINDEXES) +00081 +00082 self.Select = wx.Button(id=wxID_COMMUNICATIONDIALOGSELECT, label='>>', +00083 name='Select', parent=self.MainPanel, pos=wx.Point(345, 136), +00084 size=wx.Size(32, 32), style=0) +00085 self.Select.Bind(wx.EVT_BUTTON, self.OnSelectButtonOnSelectButton, +00086 id=wxID_COMMUNICATIONDIALOGSELECT) +00087 +00088 self.Unselect = wx.Button(id=wxID_COMMUNICATIONDIALOGUNSELECT, +00089 label='<<', name='Unselect', parent=self.MainPanel, +00090 pos=wx.Point(345, 216), size=wx.Size(32, 30), style=0) +00091 self.Unselect.Bind(wx.EVT_BUTTON, self.OnUnselectButtonOnUnselectButton, +00092 id=wxID_COMMUNICATIONDIALOGUNSELECT) +00093 +00094 self.staticText1 = wx.StaticText(id=wxID_COMMUNICATIONDIALOGSTATICTEXT1, +00095 label='Possible Profile Indexes:', name='staticText1', +00096 parent=self.MainPanel, pos=wx.Point(40, 24), size=wx.Size(156, +00097 17), style=0) +00098 +00099 self.staticText2 = wx.StaticText(id=wxID_COMMUNICATIONDIALOGSTATICTEXT2, +00100 label='Current Profile Indexes:', name='staticText2', +00101 parent=self.MainPanel, pos=wx.Point(400, 24), size=wx.Size(152, +00102 17), style=0) +00103 +00104 self._init_sizers_init_sizers() +00105 +00106 def __init__(self, parent): +00107 self._init_ctrls_init_ctrls(parent) +00108 self.ButtonSizerButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL) +00109 self.flexGridSizer1.Add(self.ButtonSizerButtonSizer, 1, wxALIGN_CENTER) +00110 self.AllListAllList = [] +00111 self.CurrentListCurrentList = [] +00112 self.IndexDictionaryIndexDictionary = {} +00113 +00114 def SetIndexDictionary(self, dictionary): +00115 self.IndexDictionaryIndexDictionary = dictionary +00116 +00117 def SetCurrentList(self, list): +00118 self.CurrentListCurrentList = [] +00119 self.CurrentListCurrentList.extend(list) +00120 self.CurrentListCurrentList.sort() +00121 +00122 def GetCurrentList(self): +00123 return self.CurrentListCurrentList +00124 +00125 def RefreshLists(self): +00126 self.PossibleIndexes.Clear() +00127 self.CurrentIndexes.Clear() +00128 self.AllListAllList = [] +00129 for index in self.IndexDictionaryIndexDictionary.iterkeys(): +00130 if index not in self.CurrentListCurrentList: +00131 self.AllListAllList.append(index) +00132 self.AllListAllList.sort() +00133 for index in self.AllListAllList: +00134 self.PossibleIndexes.Append("0x%04X %s"%(index, self.IndexDictionaryIndexDictionary[index][0])) +00135 for index in self.CurrentListCurrentList: +00136 if index in self.IndexDictionaryIndexDictionary: +00137 self.CurrentIndexes.Append("0x%04X %s"%(index, self.IndexDictionaryIndexDictionary[index][0])) +00138 +00139 def OnPossibleIndexesDClick(self, event): +00140 self.SelectPossibleSelectPossible() +00141 event.Skip() +00142 +00143 def OnCurrentIndexesDClick(self, event): +00144 self.UnselectCurrentUnselectCurrent() +00145 event.Skip() +00146 +00147 def OnSelectButton(self, event): +00148 self.SelectPossibleSelectPossible() +00149 event.Skip() +00150 +00151 def OnUnselectButton(self, event): +00152 self.UnselectCurrentUnselectCurrent() +00153 event.Skip() +00154 +00155 def SelectPossible(self): +00156 selected = self.PossibleIndexes.GetSelections() +00157 for i in selected: +00158 self.CurrentListCurrentList.append(self.AllListAllList[i]) +00159 self.CurrentListCurrentList.sort() +00160 self.RefreshListsRefreshLists() +00161 +00162 def UnselectCurrent(self): +00163 selected = self.CurrentIndexes.GetSelections() +00164 for i in selected: +00165 if not self.IndexDictionaryIndexDictionary[self.CurrentListCurrentList[i]][1]: +00166 self.CurrentListCurrentList.pop(i) +00167 self.CurrentListCurrentList.sort() +00168 self.RefreshListsRefreshLists() +00169 +00170 +00171 +00172 #------------------------------------------------------------------------------- +00173 # Create Map Variable Dialog +00174 #------------------------------------------------------------------------------- +00175 +00176 +00177 [wxID_MAPVARIABLEDIALOG, wxID_MAPVARIABLEDIALOGINDEX, +00178 wxID_MAPVARIABLEDIALOGINDEXNAME, wxID_MAPVARIABLEDIALOGMAINPANEL, +00179 wxID_MAPVARIABLEDIALOGNUMBER, wxID_MAPVARIABLEDIALOGRADIOBUTTON1, +00180 wxID_MAPVARIABLEDIALOGRADIOBUTTON2, wxID_MAPVARIABLEDIALOGRADIOBUTTON3, +00181 wxID_MAPVARIABLEDIALOGSTATICTEXT1, wxID_MAPVARIABLEDIALOGSTATICTEXT2, +00182 wxID_MAPVARIABLEDIALOGSTATICTEXT3, wxID_MAPVARIABLEDIALOGSTATICTEXT4, +00183 ] = [wx.NewId() for _init_ctrls in range(12)] +00184 +00185 class MapVariableDialog(wx.Dialog): +00186 def _init_coll_flexGridSizer1_Items(self, parent): +00187 # generated method, don't edit +00188 +00189 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) +00190 +00191 def _init_sizers(self): +00192 # generated method, don't edit +00193 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) +00194 +00195 self._init_coll_flexGridSizer1_Items_init_coll_flexGridSizer1_Items(self.flexGridSizer1) +00196 +00197 self.SetSizer(self.flexGridSizer1) +00198 +00199 def _init_ctrls(self, prnt): +00200 # generated method, don't edit +00201 wx.Dialog.__init__(self, id=wxID_MAPVARIABLEDIALOG, +00202 name='CommunicationDialog', parent=prnt, pos=wx.Point(376, 223), +00203 size=wx.Size(444, 186), style=wx.DEFAULT_DIALOG_STYLE, +00204 title='Add Map Variable') +00205 self.SetClientSize(wx.Size(444, 186)) +00206 +00207 self.MainPanel = wx.Panel(id=wxID_MAPVARIABLEDIALOGMAINPANEL, +00208 name='MainPanel', parent=self, pos=wx.Point(0, 0), +00209 size=wx.Size(431, 142), style=wx.TAB_TRAVERSAL) +00210 self.MainPanel.SetAutoLayout(True) +00211 +00212 self.staticText1 = wx.StaticText(id=wxID_MAPVARIABLEDIALOGSTATICTEXT1, +00213 label='Index:', name='staticText1', parent=self.MainPanel, +00214 pos=wx.Point(24, 24), size=wx.Size(156, 17), style=0) +00215 +00216 self.Index = wx.TextCtrl(id=wxID_MAPVARIABLEDIALOGINDEX, name='Index', +00217 parent=self.MainPanel, pos=wx.Point(24, 48), size=wx.Size(152, +00218 25), style=0, value='0x2000') +00219 +00220 self.staticText3 = wx.StaticText(id=wxID_MAPVARIABLEDIALOGSTATICTEXT3, +00221 label='Name:', name='staticText3', parent=self.MainPanel, +00222 pos=wx.Point(24, 80), size=wx.Size(47, 17), style=0) +00223 +00224 self.IndexName = wx.TextCtrl(id=wxID_MAPVARIABLEDIALOGINDEXNAME, +00225 name='IndexName', parent=self.MainPanel, pos=wx.Point(24, 104), +00226 size=wx.Size(152, 24), style=0, value='Undefined') +00227 +00228 self.staticText2 = wx.StaticText(id=wxID_MAPVARIABLEDIALOGSTATICTEXT2, +00229 label='Type:', name='staticText2', parent=self.MainPanel, +00230 pos=wx.Point(208, 24), size=wx.Size(38, 17), style=0) +00231 +00232 self.radioButton1 = wx.RadioButton(id=wxID_MAPVARIABLEDIALOGRADIOBUTTON1, +00233 label='VAR', name='radioButton1', parent=self.MainPanel, +00234 pos=wx.Point(208, 48), size=wx.Size(72, 24), style=wxRB_GROUP) +00235 self.radioButton1.SetValue(True) +00236 self.radioButton1.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton1ClickOnRadioButton1Click, +00237 id=wxID_MAPVARIABLEDIALOGRADIOBUTTON1) +00238 +00239 self.radioButton2 = wx.RadioButton(id=wxID_MAPVARIABLEDIALOGRADIOBUTTON2, +00240 label='ARRAY', name='radioButton2', parent=self.MainPanel, +00241 pos=wx.Point(208, 72), size=wx.Size(80, 24), style=wxRB_SINGLE) +00242 self.radioButton2.SetValue(False) +00243 self.radioButton2.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton2ClickOnRadioButton2Click, +00244 id=wxID_MAPVARIABLEDIALOGRADIOBUTTON2) +00245 +00246 self.radioButton3 = wx.RadioButton(id=wxID_MAPVARIABLEDIALOGRADIOBUTTON3, +00247 label='REC', name='radioButton3', parent=self.MainPanel, +00248 pos=wx.Point(208, 96), size=wx.Size(96, 24), style=wxRB_SINGLE) +00249 self.radioButton3.SetValue(False) +00250 self.radioButton3.Bind(wx.EVT_RADIOBUTTON, self.OnRadioButton3ClickOnRadioButton3Click, +00251 id=wxID_MAPVARIABLEDIALOGRADIOBUTTON3) +00252 +00253 self.staticText4 = wx.StaticText(id=wxID_MAPVARIABLEDIALOGSTATICTEXT4, +00254 label='Number:', name='staticText4', parent=self.MainPanel, +00255 pos=wx.Point(312, 80), size=wx.Size(88, 16), style=0) +00256 +00257 self.Number = wx.TextCtrl(id=wxID_MAPVARIABLEDIALOGNUMBER, +00258 name='Number', parent=self.MainPanel, pos=wx.Point(312, 104), +00259 size=wx.Size(112, 24), style=wx.TE_RIGHT, value='0') +00260 +00261 self._init_sizers_init_sizers() +00262 +00263 def __init__(self, parent): +00264 self._init_ctrls_init_ctrls(parent) +00265 self.ButtonSizerButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL) +00266 self.flexGridSizer1.Add(self.ButtonSizerButtonSizer, 1, wxALIGN_CENTER) +00267 self.staticText4.Enable(False) +00268 self.Number.Enable(False) +00269 +00270 EVT_BUTTON(self, self.ButtonSizerButtonSizer.GetAffirmativeButton().GetId(), self.OnOKOnOK) +00271 +00272 def SetIndex(self, index): +00273 self.Index.SetValue("0x%04X"%index) +00274 +00275 def OnOK(self, event): +00276 error = [] +00277 try: +00278 int(self.Index.GetValue(), 16) +00279 except: +00280 error.append("Index") +00281 if self.radioButton2.GetValue() or self.radioButton3.GetValue(): +00282 try: +00283 int(self.Number.GetValue()) +00284 except: +00285 error.append("Number") +00286 if len(error) > 0: +00287 text = "" +00288 if len(error) > 1: +00289 suffix = "s" +00290 else: +00291 suffix = "" +00292 for i, item in enumerate(error): +00293 if i == 0: +00294 text += item +00295 elif i == len(error) - 1: +00296 text += " and %s"%item +00297 else: +00298 text += ", %s"%item +00299 message = wxMessageDialog(self, "Form isn't valid. %s must be integer%s!"%(text,suffix), "Error", wxOK|wxICON_ERROR) +00300 message.ShowModal() +00301 message.Destroy() +00302 else: +00303 self.EndModal(wxID_OK) +00304 +00305 def GetValues(self): +00306 name = self.IndexName.GetValue() +00307 index = int(self.Index.GetValue(), 16) +00308 if self.radioButton1.GetValue(): +00309 struct = 1 +00310 number = None +00311 elif self.radioButton2.GetValue(): +00312 struct = 3 +00313 number = int(self.Number.GetValue()) +00314 elif self.radioButton3.GetValue(): +00315 struct = 7 +00316 number = int(self.Number.GetValue()) +00317 return index, name, struct, number +00318 +00319 def OnRadioButton1Click(self, event): +00320 self.EnableNumberTypingEnableNumberTyping(False) +00321 event.Skip() +00322 +00323 def OnRadioButton2Click(self, event): +00324 self.EnableNumberTypingEnableNumberTyping(True) +00325 event.Skip() +00326 +00327 def OnRadioButton3Click(self, event): +00328 self.EnableNumberTypingEnableNumberTyping(True) +00329 event.Skip() +00330 +00331 def EnableNumberTyping(self, enable): +00332 self.staticText4.Enable(enable) +00333 self.Number.Enable(enable) +00334 +00335 +00336 #------------------------------------------------------------------------------- +00337 # Create User Type Dialog +00338 #------------------------------------------------------------------------------- +00339 +00340 +00341 [wxID_USERTYPEDIALOG, wxID_USERTYPEDIALOGLENGTH, wxID_USERTYPEDIALOGMAINPANEL, +00342 wxID_USERTYPEDIALOGMAX, wxID_USERTYPEDIALOGMIN, +00343 wxID_USERTYPEDIALOGSTATICBOX1, wxID_USERTYPEDIALOGSTATICTEXT1, +00344 wxID_USERTYPEDIALOGSTATICTEXT2, wxID_USERTYPEDIALOGSTATICTEXT3, +00345 wxID_USERTYPEDIALOGSTATICTEXT4, wxID_USERTYPEDIALOGTYPE, +00346 ] = [wx.NewId() for _init_ctrls in range(11)] +00347 +00348 class UserTypeDialog(wx.Dialog): +00349 def _init_coll_flexGridSizer1_Items(self, parent): +00350 # generated method, don't edit +00351 +00352 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) +00353 +00354 def _init_sizers(self): +00355 # generated method, don't edit +00356 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) +00357 +00358 self._init_coll_flexGridSizer1_Items_init_coll_flexGridSizer1_Items(self.flexGridSizer1) +00359 +00360 self.SetSizer(self.flexGridSizer1) +00361 +00362 def _init_ctrls(self, prnt): +00363 # generated method, don't edit +00364 wx.Dialog.__init__(self, id=wxID_USERTYPEDIALOG, name='UserTypeDialog', +00365 parent=prnt, pos=wx.Point(376, 223), size=wx.Size(444, 228), +00366 style=wx.DEFAULT_DIALOG_STYLE, title='Add User Type') +00367 self.SetClientSize(wx.Size(444, 228)) +00368 +00369 self.MainPanel = wx.Panel(id=wxID_USERTYPEDIALOGMAINPANEL, +00370 name='MainPanel', parent=self, pos=wx.Point(0, 0), +00371 size=wx.Size(431, 182), style=wx.TAB_TRAVERSAL) +00372 self.MainPanel.SetAutoLayout(True) +00373 +00374 self.staticText1 = wx.StaticText(id=wxID_USERTYPEDIALOGSTATICTEXT1, +00375 label='Type:', name='staticText1', parent=self.MainPanel, +00376 pos=wx.Point(24, 24), size=wx.Size(156, 17), style=0) +00377 +00378 self.Type = wx.Choice(choices=[], id=wxID_USERTYPEDIALOGTYPE, +00379 name='Type', parent=self.MainPanel, pos=wx.Point(24, 48), +00380 size=wx.Size(160, 24), style=0) +00381 self.Type.Bind(wx.EVT_CHOICE, self.OnTypeChoiceOnTypeChoice, +00382 id=wxID_USERTYPEDIALOGTYPE) +00383 +00384 self.staticBox1 = wx.StaticBox(id=wxID_USERTYPEDIALOGSTATICBOX1, +00385 label='Values', name='staticBox1', parent=self.MainPanel, +00386 pos=wx.Point(200, 24), size=wx.Size(224, 144), style=0) +00387 +00388 self.staticText2 = wx.StaticText(id=wxID_USERTYPEDIALOGSTATICTEXT2, +00389 label='Minimum:', name='staticText2', parent=self.MainPanel, +00390 pos=wx.Point(216, 48), size=wx.Size(67, 17), style=0) +00391 +00392 self.Min = wx.TextCtrl(id=wxID_USERTYPEDIALOGMIN, name='Min', +00393 parent=self.MainPanel, pos=wx.Point(296, 48), size=wx.Size(112, +00394 24), style=wx.TE_RIGHT, value='0') +00395 +00396 self.staticText3 = wx.StaticText(id=wxID_USERTYPEDIALOGSTATICTEXT3, +00397 label='Maximum:', name='staticText3', parent=self.MainPanel, +00398 pos=wx.Point(216, 88), size=wx.Size(71, 17), style=0) +00399 +00400 self.Max = wx.TextCtrl(id=wxID_USERTYPEDIALOGMAX, name='Max', +00401 parent=self.MainPanel, pos=wx.Point(296, 88), size=wx.Size(112, +00402 25), style=wx.TE_RIGHT, value='0') +00403 +00404 self.staticText4 = wx.StaticText(id=wxID_USERTYPEDIALOGSTATICTEXT4, +00405 label='Length:', name='staticText4', parent=self.MainPanel, +00406 pos=wx.Point(216, 128), size=wx.Size(52, 17), style=0) +00407 +00408 self.Length = wx.TextCtrl(id=wxID_USERTYPEDIALOGLENGTH, name='Length', +00409 parent=self.MainPanel, pos=wx.Point(296, 128), size=wx.Size(112, +00410 25), style=wx.TE_RIGHT, value='0') +00411 +00412 self._init_sizers_init_sizers() +00413 +00414 def __init__(self, parent): +00415 self._init_ctrls_init_ctrls(parent) +00416 self.ButtonSizerButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL) +00417 self.flexGridSizer1.Add(self.ButtonSizerButtonSizer, 1, wxALIGN_CENTER) +00418 self.TypeDictionaryTypeDictionary = {} +00419 +00420 EVT_BUTTON(self, self.ButtonSizerButtonSizer.GetAffirmativeButton().GetId(), self.OnOKOnOK) +00421 +00422 def OnOK(self, event): +00423 error = [] +00424 good = True +00425 firstmessage = "" +00426 secondmessage = "" +00427 name = self.Type.GetStringSelection() +00428 if name != "": +00429 valuetype = self.TypeDictionaryTypeDictionary[name][1] +00430 if valuetype == 0: +00431 try: +00432 int(self.Min.GetValue(), 16) +00433 except: +00434 error.append("Minimum") +00435 good = False +00436 try: +00437 int(self.Max.GetValue(), 16) +00438 except: +00439 error.append("Maximum") +00440 good = False +00441 elif valuetype == 1: +00442 try: +00443 int(self.Length.GetValue(), 16) +00444 except: +00445 error.append("Length") +00446 good = False +00447 if len(error) > 0: +00448 secondmessage = ". " +00449 for i, item in enumerate(error): +00450 if i == 0: +00451 secondmessage += item +00452 elif i == len(error) - 1: +00453 secondmessage += " and %s"%item +00454 else: +00455 secondmessage += ", %s"%item +00456 secondmessage += " must be integer" +00457 if len(error) > 1: +00458 secondmessage += "s" +00459 else: +00460 firstmessage = ". A type must be selected" +00461 good = False +00462 if not good: +00463 message = wxMessageDialog(self, "Form isn't valid%s%s%s!"%(firstmessage,secondmessage), "Error", wxOK|wxICON_ERROR) +00464 message.ShowModal() +00465 message.Destroy() +00466 self.Name.SetFocus() +00467 else: +00468 self.EndModal(wxID_OK) +00469 +00470 def SetValues(self, min = None, max = None, length = None): +00471 if min != None: +00472 self.Min.SetValue(str(min)) +00473 if max != None: +00474 self.Max.SetValue(str(max)) +00475 if length != None: +00476 self.Length.SetValue(str(length)) +00477 +00478 def SetTypeList(self, typedic, type = None): +00479 self.Type.Clear() +00480 list = [] +00481 for index, (name, valuetype) in typedic.iteritems(): +00482 self.TypeDictionaryTypeDictionary[name] = (index, valuetype) +00483 list.append((index, name)) +00484 list.sort() +00485 for index, name in list: +00486 self.Type.Append(name) +00487 if type != None: +00488 self.Type.SetStringSelection(typedic[type][0]) +00489 self.RefreshValuesRefreshValues() +00490 +00491 def OnTypeChoice(self, event): +00492 self.RefreshValuesRefreshValues() +00493 event.Skip() +00494 +00495 def RefreshValues(self): +00496 name = self.Type.GetStringSelection() +00497 if name != "": +00498 valuetype = self.TypeDictionaryTypeDictionary[name][1] +00499 if valuetype == 0: +00500 self.staticText2.Enable(True) +00501 self.staticText3.Enable(True) +00502 self.staticText4.Enable(False) +00503 self.Min.Enable(True) +00504 self.Max.Enable(True) +00505 self.Length.Enable(False) +00506 elif valuetype == 1: +00507 self.staticText2.Enable(False) +00508 self.staticText3.Enable(False) +00509 self.staticText4.Enable(True) +00510 self.Min.Enable(False) +00511 self.Max.Enable(False) +00512 self.Length.Enable(True) +00513 else: +00514 self.staticText2.Enable(False) +00515 self.staticText3.Enable(False) +00516 self.staticText4.Enable(False) +00517 self.Min.Enable(False) +00518 self.Max.Enable(False) +00519 self.Length.Enable(False) +00520 +00521 def GetValues(self): +00522 name = self.Type.GetStringSelection() +00523 type = self.TypeDictionaryTypeDictionary[name][0] +00524 min = int(self.Min.GetValue()) +00525 max = int(self.Max.GetValue()) +00526 length = int(self.Length.GetValue()) +00527 return type, min, max, length +00528 +00529 +00530 +00531 #------------------------------------------------------------------------------- +00532 # Editing Node Infos Dialog +00533 #------------------------------------------------------------------------------- +00534 +00535 +00536 [wxID_NODEINFOSDIALOG, wxID_NODEINFOSDIALOGMAINPANEL, +00537 wxID_NODEINFOSDIALOGNAME, wxID_NODEINFOSDIALOGNODEID, +00538 wxID_NODEINFOSDIALOGDESCRIPTION, wxID_NODEINFOSDIALOGSTATICTEXT1, +00539 wxID_NODEINFOSDIALOGSTATICTEXT2, wxID_NODEINFOSDIALOGSTATICTEXT3, +00540 wxID_NODEINFOSDIALOGSTATICTEXT4, wxID_NODEINFOSDIALOGTYPE, +00541 ] = [wx.NewId() for _init_ctrls in range(10)] +00542 +00543 class NodeInfosDialog(wx.Dialog): +00544 def _init_coll_flexGridSizer1_Items(self, parent): +00545 # generated method, don't edit +00546 +00547 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) +00548 +00549 def _init_sizers(self): +00550 # generated method, don't edit +00551 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) +00552 +00553 self._init_coll_flexGridSizer1_Items_init_coll_flexGridSizer1_Items(self.flexGridSizer1) +00554 +00555 self.SetSizer(self.flexGridSizer1) +00556 +00557 def _init_ctrls(self, prnt): +00558 # generated method, don't edit +00559 wx.Dialog.__init__(self, id=wxID_NODEINFOSDIALOG, +00560 name='NodeInfosDialog', parent=prnt, pos=wx.Point(376, 223), +00561 size=wx.Size(300, 300), style=wx.DEFAULT_DIALOG_STYLE, +00562 title='Node Infos') +00563 self.SetClientSize(wx.Size(300, 300)) +00564 +00565 self.MainPanel = wx.Panel(id=wxID_NODEINFOSDIALOGMAINPANEL, +00566 name='MainPanel', parent=self, pos=wx.Point(0, 0), +00567 size=wx.Size(280, 264), style=wx.TAB_TRAVERSAL) +00568 self.MainPanel.SetAutoLayout(True) +00569 +00570 self.staticText1 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT1, +00571 label='Name:', +00572 name='staticText1', parent=self.MainPanel, +00573 pos=wx.Point(24, 24), size=wx.Size(156, 17), style=0) +00574 +00575 self.Name = wx.TextCtrl(id=wxID_NODEINFOSDIALOGNAME, name='Name', +00576 parent=self.MainPanel, pos=wx.Point(24, 48), size=wx.Size(250, +00577 25), style=0, value='') +00578 +00579 self.staticText2 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT2, +00580 label='Node ID:', name='staticText2', parent=self.MainPanel, +00581 pos=wx.Point(24, 80), size=wx.Size(67, 17), style=0) +00582 +00583 self.NodeID = wx.TextCtrl(id=wxID_NODEINFOSDIALOGNODEID, name='NodeID', +00584 parent=self.MainPanel, pos=wx.Point(24, 104), size=wx.Size(250, +00585 25), style=wx.TE_RIGHT, value='') +00586 +00587 self.staticText3 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT3, +00588 label='Type:', name='staticText3', parent=self.MainPanel, +00589 pos=wx.Point(24, 136), size=wx.Size(71, 17), style=0) +00590 +00591 self.Type = wx.Choice(choices=[], id=wxID_NODEINFOSDIALOGTYPE, +00592 name='Type', parent=self.MainPanel, pos=wx.Point(24, 160), +00593 size=wx.Size(250, 25), style=0) +00594 +00595 self.staticText4 = wx.StaticText(id=wxID_NODEINFOSDIALOGSTATICTEXT4, +00596 label='Description:', name='staticText4', parent=self.MainPanel, +00597 pos=wx.Point(24, 192), size=wx.Size(71, 17), style=0) +00598 +00599 self.Description = wx.TextCtrl(id=wxID_NODEINFOSDIALOGDESCRIPTION, +00600 name='Description', parent=self.MainPanel, pos=wx.Point(24, 216), +00601 size=wx.Size(250, 25), style=0, value='') +00602 +00603 self._init_sizers_init_sizers() +00604 +00605 def __init__(self, parent): +00606 self._init_ctrls_init_ctrls(parent) +00607 self.ButtonSizerButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL) +00608 self.flexGridSizer1.Add(self.ButtonSizerButtonSizer, 1, wxALIGN_CENTER) +00609 self.Type.Append("master") +00610 self.Type.Append("slave") +00611 +00612 EVT_BUTTON(self, self.ButtonSizerButtonSizer.GetAffirmativeButton().GetId(), self.OnOKOnOK) +00613 +00614 def OnOK(self, event): +00615 name = self.Name.GetValue() +00616 message = "" +00617 if name != "": +00618 good = not name[0].isdigit() +00619 for item in name.split("_"): +00620 good &= item.isalnum() +00621 if not good: +00622 message = "Node name can't be undefined or start with a digit and must be composed of alphanumerical characters or underscore!" +00623 if message != "": +00624 try: +00625 nodeid = int(self.NodeID.GetValue(), 16) +00626 except: +00627 message = "Node ID must be integer!" +00628 if message != "": +00629 message = wxMessageDialog(self, message, "ERROR", wxOK|wxICON_ERROR) +00630 message.ShowModal() +00631 message.Destroy() +00632 self.Name.SetFocus() +00633 else: +00634 self.EndModal(wxID_OK) +00635 +00636 def SetValues(self, name, id, type, description): +00637 self.Name.SetValue(name) +00638 self.NodeID.SetValue("0x%02X"%id) +00639 self.Type.SetStringSelection(type) +00640 self.Description.SetValue(description) +00641 +00642 def GetValues(self): +00643 name = self.Name.GetValue() +00644 nodeid = int(self.NodeID.GetValue(), 16) +00645 type = self.Type.GetStringSelection() +00646 description = self.Description.GetValue() +00647 return name, nodeid, type, description +00648 +00649 +00650 +00651 #------------------------------------------------------------------------------- +00652 # Create New Node Dialog +00653 #------------------------------------------------------------------------------- +00654 +00655 +00656 [wxID_CREATENODEDIALOG, wxID_CREATENODEDIALOGEMERGENCY, +00657 wxID_CREATENODEDIALOGGENSYNC, wxID_CREATENODEDIALOGMAINPANEL, +00658 wxID_CREATENODEDIALOGNAME, wxID_CREATENODEDIALOGNMT_HEARTBEAT, +00659 wxID_CREATENODEDIALOGNMT_NODEGUARDING, wxID_CREATENODEDIALOGNMT_NONE, +00660 wxID_CREATENODEDIALOGNODEID, wxID_CREATENODEDIALOGPROFILE, +00661 wxID_CREATENODEDIALOGSAVECONFIG, wxID_CREATENODEDIALOGSTATICTEXT1, +00662 wxID_CREATENODEDIALOGSTATICTEXT2, wxID_CREATENODEDIALOGSTATICTEXT3, +00663 wxID_CREATENODEDIALOGSTATICTEXT4, wxID_CREATENODEDIALOGSTATICTEXT5, +00664 wxID_CREATENODEDIALOGSTATICTEXT6, wxID_CREATENODEDIALOGSTATICTEXT7, +00665 wxID_CREATENODEDIALOGSTOREEDS, wxID_CREATENODEDIALOGDESCRIPTION, +00666 wxID_CREATENODEDIALOGTYPE, +00667 ] = [wx.NewId() for _init_ctrls in range(21)] +00668 +00669 class CreateNodeDialog(wx.Dialog): +00670 def _init_coll_flexGridSizer1_Items(self, parent): +00671 # generated method, don't edit +00672 +00673 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) +00674 +00675 def _init_sizers(self): +00676 # generated method, don't edit +00677 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) +00678 +00679 self._init_coll_flexGridSizer1_Items_init_coll_flexGridSizer1_Items(self.flexGridSizer1) +00680 +00681 self.SetSizer(self.flexGridSizer1) +00682 +00683 def _init_ctrls(self, prnt): +00684 # generated method, don't edit +00685 wx.Dialog.__init__(self, id=wxID_CREATENODEDIALOG, +00686 name='CreateNodeDialog', parent=prnt, pos=wx.Point(376, 223), +00687 size=wx.Size(451, 376), style=wx.DEFAULT_DIALOG_STYLE, +00688 title='Create a new Node') +00689 self.SetClientSize(wx.Size(451, 376)) +00690 +00691 self.MainPanel = wx.Panel(id=wxID_CREATENODEDIALOGMAINPANEL, +00692 name='MainPanel', parent=self, pos=wx.Point(0, 0), +00693 size=wx.Size(440, 278), style=wx.TAB_TRAVERSAL) +00694 self.MainPanel.SetAutoLayout(True) +00695 +00696 self.staticText1 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT1, +00697 label='Name:', name='staticText1', parent=self.MainPanel, +00698 pos=wx.Point(24, 24), size=wx.Size(156, 17), style=0) +00699 +00700 self.staticText2 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT2, +00701 label='Node ID:', name='staticText2', parent=self.MainPanel, +00702 pos=wx.Point(24, 80), size=wx.Size(67, 17), style=0) +00703 +00704 self.staticText3 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT3, +00705 label='Type:', name='staticText3', parent=self.MainPanel, +00706 pos=wx.Point(24, 136), size=wx.Size(71, 17), style=0) +00707 +00708 self.Type = wx.Choice(choices=[], id=wxID_CREATENODEDIALOGTYPE, +00709 name='Type', parent=self.MainPanel, pos=wx.Point(24, 160), +00710 size=wx.Size(200, 24), style=0) +00711 +00712 self.Name = wx.TextCtrl(id=wxID_CREATENODEDIALOGNAME, name='Name', +00713 parent=self.MainPanel, pos=wx.Point(24, 48), size=wx.Size(200, +00714 25), style=0, value='') +00715 +00716 self.NodeID = wx.TextCtrl(id=wxID_CREATENODEDIALOGNODEID, name='NodeID', +00717 parent=self.MainPanel, pos=wx.Point(24, 104), size=wx.Size(200, +00718 25), style=wx.TE_RIGHT, value='') +00719 +00720 self.staticText4 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT4, +00721 label='Profile:', name='staticText4', parent=self.MainPanel, +00722 pos=wx.Point(24, 192), size=wx.Size(47, 17), style=0) +00723 +00724 self.Profile = wx.Choice(choices=[], id=wxID_CREATENODEDIALOGPROFILE, +00725 name='Profile', parent=self.MainPanel, pos=wx.Point(24, 216), +00726 size=wx.Size(200, 24), style=0) +00727 self.Profile.Bind(wx.EVT_CHOICE, self.OnProfileChoiceOnProfileChoice, +00728 id=wxID_CREATENODEDIALOGPROFILE) +00729 +00730 self.staticText5 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT5, +00731 label='Network Management:', name='staticText5', +00732 parent=self.MainPanel, pos=wx.Point(256, 24), size=wx.Size(152, +00733 16), style=0) +00734 +00735 self.NMT_None = wx.RadioButton(id=wxID_CREATENODEDIALOGNMT_NONE, +00736 label='None', name='NMT_None', parent=self.MainPanel, +00737 pos=wx.Point(256, 40), size=wx.Size(114, 24), style=0) +00738 self.NMT_None.SetValue(True) +00739 +00740 self.NMT_NodeGuarding = wx.RadioButton(id=wxID_CREATENODEDIALOGNMT_NODEGUARDING, +00741 label='Node Guarding', name='NMT_NodeGuarding', +00742 parent=self.MainPanel, pos=wx.Point(256, 64), size=wx.Size(128, +00743 24), style=0) +00744 self.NMT_NodeGuarding.SetValue(False) +00745 +00746 self.NMT_Heartbeat = wx.RadioButton(id=wxID_CREATENODEDIALOGNMT_HEARTBEAT, +00747 label='Heartbeat', name='NMT_Heartbeat', parent=self.MainPanel, +00748 pos=wx.Point(256, 88), size=wx.Size(114, 24), style=0) +00749 self.NMT_Heartbeat.SetValue(False) +00750 +00751 self.staticText6 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT6, +00752 label='Options:', name='staticText6', parent=self.MainPanel, +00753 pos=wx.Point(256, 128), size=wx.Size(72, 17), style=0) +00754 +00755 self.DS302 = wx.CheckBox(id=wxID_CREATENODEDIALOGGENSYNC, +00756 label='DS-302 Profile', name='DS302', parent=self.MainPanel, +00757 pos=wx.Point(256, 144), size=wx.Size(128, 24), style=0) +00758 self.DS302.SetValue(False) +00759 #self.DS302.Enable(False) +00760 +00761 self.GenSYNC = wx.CheckBox(id=wxID_CREATENODEDIALOGGENSYNC, +00762 label='Generate SYNC', name='GenSYNC', parent=self.MainPanel, +00763 pos=wx.Point(256, 168), size=wx.Size(128, 24), style=0) +00764 self.GenSYNC.SetValue(False) +00765 +00766 self.Emergency = wx.CheckBox(id=wxID_CREATENODEDIALOGEMERGENCY, +00767 label='Emergency support', name='Emergency', +00768 parent=self.MainPanel, pos=wx.Point(256, 192), size=wx.Size(152, +00769 24), style=0) +00770 self.Emergency.SetValue(False) +00771 self.Emergency.Enable(False) +00772 +00773 self.SaveConfig = wx.CheckBox(id=wxID_CREATENODEDIALOGSAVECONFIG, +00774 label='Save Configuration', name='SaveConfig', +00775 parent=self.MainPanel, pos=wx.Point(256, 216), size=wx.Size(152, +00776 24), style=0) +00777 self.SaveConfig.SetValue(False) +00778 self.SaveConfig.Enable(False) +00779 +00780 # self.StoreEDS = wx.CheckBox(id=wxID_CREATENODEDIALOGSTOREEDS, +00781 # label='Store EDS', name='StoreEDS', parent=self.MainPanel, +00782 # pos=wx.Point(256, 240), size=wx.Size(144, 24), style=0) +00783 # self.StoreEDS.SetValue(False) +00784 +00785 self.staticText7 = wx.StaticText(id=wxID_CREATENODEDIALOGSTATICTEXT7, +00786 label='Description:', name='staticText7', parent=self.MainPanel, +00787 pos=wx.Point(24, 248), size=wx.Size(71, 17), style=0) +00788 +00789 self.Description = wx.TextCtrl(id=wxID_CREATENODEDIALOGDESCRIPTION, +00790 name='Description', parent=self.MainPanel, pos=wx.Point(24, 272), +00791 size=wx.Size(400, 25), style=0, value='') +00792 +00793 self._init_sizers_init_sizers() +00794 +00795 def __init__(self, parent, cwd): +00796 self._init_ctrls_init_ctrls(parent) +00797 self.ButtonSizerButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL) +00798 self.flexGridSizer1.Add(self.ButtonSizerButtonSizer, 1, wxALIGN_CENTER) +00799 self.NodeID.SetValue("0x00") +00800 self.Type.Append("master") +00801 self.Type.Append("slave") +00802 self.Type.SetStringSelection("slave") +00803 self.Description.SetValue("") +00804 self.ListProfileListProfile = {"None" : ""} +00805 self.Profile.Append("None") +00806 self.DirectoryDirectory = os.path.join(cwd, "config") +00807 listfiles = os.listdir(self.DirectoryDirectory) +00808 listfiles.sort() +00809 for item in listfiles: +00810 name, extend = os.path.splitext(item) +00811 if os.path.isfile(os.path.join(self.DirectoryDirectory, item)) and extend == ".prf" and name != "DS-302": +00812 self.ListProfileListProfile[name] = os.path.join(self.DirectoryDirectory, item) +00813 self.Profile.Append(name) +00814 self.Profile.Append("Other") +00815 self.Profile.SetStringSelection("None") +00816 self.Name.SetFocus() +00817 +00818 EVT_BUTTON(self, self.ButtonSizerButtonSizer.GetAffirmativeButton().GetId(), self.OnOKOnOK) +00819 +00820 def OnOK(self, event): +00821 name = self.Name.GetValue() +00822 message = "" +00823 if name != "": +00824 good = not name[0].isdigit() +00825 for item in name.split("_"): +00826 good &= item.isalnum() +00827 if not good: +00828 message = "Node name can't be undefined or start with a digit and must be composed of alphanumerical characters or underscore!" +00829 if message != "": +00830 try: +00831 nodeid = int(self.NodeID.GetValue(), 16) +00832 except: +00833 message = "Node ID must be an integer!" +00834 if message != "": +00835 message = wxMessageDialog(self, message, "ERROR", wxOK|wxICON_ERROR) +00836 message.ShowModal() +00837 message.Destroy() +00838 self.Name.SetFocus() +00839 else: +00840 self.EndModal(wxID_OK) +00841 +00842 def GetValues(self): +00843 name = self.Name.GetValue() +00844 nodeid = 0 +00845 if self.NodeID.GetValue() != "": +00846 nodeid = int(self.NodeID.GetValue(), 16) +00847 type = self.Type.GetStringSelection() +00848 description = self.Description.GetValue() +00849 return name, nodeid, type, description +00850 +00851 def GetProfile(self): +00852 name = self.Profile.GetStringSelection() +00853 return name, self.ListProfileListProfile[name] +00854 +00855 def GetNMTManagement(self): +00856 if self.NMT_None.GetValue(): +00857 return "None" +00858 elif self.NMT_NodeGuarding.GetValue(): +00859 return "NodeGuarding" +00860 elif self.NMT_Heartbeat.GetValue(): +00861 return "Heartbeat" +00862 return None +00863 +00864 def GetOptions(self): +00865 options = [] +00866 if self.DS302.GetValue(): +00867 options.append("DS302") +00868 if self.GenSYNC.GetValue(): +00869 options.append("GenSYNC") +00870 if self.Emergency.GetValue(): +00871 options.append("Emergency") +00872 if self.SaveConfig.GetValue(): +00873 options.append("SaveConfig") +00874 # if self.StoreEDS.GetValue(): +00875 # options.append("StoreEDS") +00876 return options +00877 +00878 def OnProfileChoice(self, event): +00879 if self.Profile.GetStringSelection() == "Other": +00880 dialog = wxFileDialog(self, "Choose a file", self.DirectoryDirectory, "", "OD Profile files (*.prf)|*.prf|All files|*.*", wxOPEN|wxCHANGE_DIR) +00881 dialog.ShowModal() +00882 filepath = dialog.GetPath() +00883 dialog.Destroy() +00884 if os.path.isfile(filepath): +00885 name = os.path.splitext(os.path.basename(filepath))[0] +00886 self.ListProfileListProfile[name] = filepath +00887 length = self.Profile.GetCount() +00888 self.Profile.Insert(name, length - 2) +00889 self.Profile.SetStringSelection(name) +00890 else: +00891 self.Profile.SetStringSelection("None") +00892 event.Skip() +00893 +00894 +00895 #------------------------------------------------------------------------------- +00896 # ADD Slave to NodeList Dialog +00897 #------------------------------------------------------------------------------- +00898 +00899 [wxID_ADDSLAVEDIALOG, wxID_ADDSLAVEDIALOGMAINPANEL, wxID_ADDSLAVEDIALOGSLAVENAME, +00900 wxID_ADDSLAVEDIALOGSLAVENODEID, wxID_ADDSLAVEDIALOGEDSFILE, +00901 wxID_ADDSLAVEDIALOGIMPORTEDS, wxID_ADDSLAVEDIALOGSTATICTEXT1, +00902 wxID_ADDSLAVEDIALOGSTATICTEXT2, wxID_ADDSLAVEDIALOGSTATICTEXT3, +00903 ] = [wx.NewId() for _init_ctrls in range(9)] +00904 +00905 class AddSlaveDialog(wx.Dialog): +00906 def _init_coll_flexGridSizer1_Items(self, parent): +00907 # generated method, don't edit +00908 +00909 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) +00910 +00911 def _init_sizers(self): +00912 # generated method, don't edit +00913 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) +00914 +00915 self._init_coll_flexGridSizer1_Items_init_coll_flexGridSizer1_Items(self.flexGridSizer1) +00916 +00917 self.SetSizer(self.flexGridSizer1) +00918 +00919 def _init_ctrls(self, prnt): +00920 # generated method, don't edit +00921 wx.Dialog.__init__(self, id=wxID_ADDSLAVEDIALOG, +00922 name='AddSlaveDialog', parent=prnt, pos=wx.Point(376, 223), +00923 size=wx.Size(300, 250), style=wx.DEFAULT_DIALOG_STYLE, +00924 title='Add a slave to nodelist') +00925 self.SetClientSize(wx.Size(300, 250)) +00926 +00927 self.MainPanel = wx.Panel(id=wxID_ADDSLAVEDIALOGMAINPANEL, +00928 name='MainPanel', parent=self, pos=wx.Point(0, 0), +00929 size=wx.Size(350, 250), style=wx.TAB_TRAVERSAL) +00930 self.MainPanel.SetAutoLayout(True) +00931 +00932 self.staticText1 = wx.StaticText(id=wxID_ADDSLAVEDIALOGSTATICTEXT1, +00933 label='Slave Name:', name='staticText1', parent=self.MainPanel, +00934 pos=wx.Point(24, 24), size=wx.Size(150, 17), style=0) +00935 +00936 self.SlaveName = wx.TextCtrl(id=wxID_ADDSLAVEDIALOGSLAVENAME, +00937 name='SlaveName', parent=self.MainPanel, pos=wx.Point(24, 48), +00938 size=wx.Size(250, 24), style=0) +00939 +00940 self.staticText2 = wx.StaticText(id=wxID_ADDSLAVEDIALOGSTATICTEXT2, +00941 label='Slave Node ID:', name='staticText2', parent=self.MainPanel, +00942 pos=wx.Point(24, 80), size=wx.Size(150, 17), style=0) +00943 +00944 self.SlaveNodeID = wx.TextCtrl(id=wxID_ADDSLAVEDIALOGSLAVENODEID, +00945 name='SlaveName', parent=self.MainPanel, pos=wx.Point(24, 104), +00946 size=wx.Size(250, 24), style=wxALIGN_RIGHT) +00947 +00948 self.staticText3 = wx.StaticText(id=wxID_ADDSLAVEDIALOGSTATICTEXT3, +00949 label='EDS File:', name='staticText3', parent=self.MainPanel, +00950 pos=wx.Point(24, 136), size=wx.Size(155, 17), style=0) +00951 +00952 self.EDSFile = wx.Choice(id=wxID_ADDSLAVEDIALOGEDSFILE, +00953 name='EDSFile', parent=self.MainPanel, pos=wx.Point(24, 160), +00954 size=wx.Size(145, 24), style=0) +00955 +00956 self.ImportEDS = wxButton(id=wxID_ADDSLAVEDIALOGIMPORTEDS, label='Import EDS', +00957 name='ImportEDS', parent=self.MainPanel, pos=wx.Point(174, 160), +00958 size=wx.Size(100, 32), style=0) +00959 self.ImportEDS.Bind(wx.EVT_BUTTON, self.OnImportEDSButtonOnImportEDSButton, +00960 id=wxID_ADDSLAVEDIALOGIMPORTEDS) +00961 +00962 self._init_sizers_init_sizers() +00963 +00964 def __init__(self, parent): +00965 self._init_ctrls_init_ctrls(parent) +00966 self.ButtonSizerButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE) +00967 self.flexGridSizer1.Add(self.ButtonSizerButtonSizer, 1, wxALIGN_RIGHT) +00968 +00969 self.SlaveNodeID.SetValue("0x00") +00970 +00971 EVT_BUTTON(self, self.ButtonSizerButtonSizer.GetAffirmativeButton().GetId(), self.OnOKOnOK) +00972 +00973 def OnOK(self, event): +00974 error = [] +00975 if self.SlaveName.GetValue() == "": +00976 error.append("Slave Name") +00977 if self.SlaveNodeID.GetValue() == "": +00978 error.append("Slave Node ID") +00979 if self.EDSFile.GetStringSelection() == "": +00980 error.append("EDS File") +00981 if len(error) > 0: +00982 text = "" +00983 for i, item in enumerate(error): +00984 if i == 0: +00985 text += item +00986 elif i == len(error) - 1: +00987 text += " and %s"%item +00988 else: +00989 text += ", %s"%item +00990 message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR) +00991 message.ShowModal() +00992 message.Destroy() +00993 else: +00994 try: +00995 nodeid = self.SlaveNodeID.GetValue() +00996 if nodeid.find("x") != -1: +00997 nodeid = int(nodeid, 16) +00998 else: +00999 nodeid = int(nodeid) +01000 except: +01001 message = wxMessageDialog(self, "Slave Node ID must be a value in decimal or hexadecimal!", "Error", wxOK|wxICON_ERROR) +01002 message.ShowModal() +01003 message.Destroy() +01004 return +01005 if not 0 <= nodeid <= 127: +01006 message = wxMessageDialog(self, "Slave Node ID must be between 0 and 127!", "Error", wxOK|wxICON_ERROR) +01007 message.ShowModal() +01008 message.Destroy() +01009 elif nodeid == 0 or nodeid in self.NodeListNodeList.SlaveNodes.keys(): +01010 message = wxMessageDialog(self, "A Node with this ID already exist in the network!", "Error", wxOK|wxICON_ERROR) +01011 message.ShowModal() +01012 message.Destroy() +01013 else: +01014 self.EndModal(wxID_OK) +01015 +01016 def OnImportEDSButton(self, event): +01017 dialog = wxFileDialog(self, "Choose an EDS file", os.getcwd(), "", "EDS files (*.eds)|*.eds|All files|*.*", wxOPEN|wxCHANGE_DIR) +01018 if dialog.ShowModal() == wxID_OK: +01019 filepath = dialog.GetPath() +01020 if os.path.isfile(filepath): +01021 result = self.NodeListNodeList.ImportEDSFile(filepath) +01022 if result: +01023 message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) +01024 message.ShowModal() +01025 message.Destroy() +01026 dialog.Destroy() +01027 self.RefreshEDSFileRefreshEDSFile() +01028 event.Skip() +01029 +01030 def RefreshEDSFile(self): +01031 selection = self.EDSFile.GetStringSelection() +01032 self.EDSFile.Clear() +01033 for option in self.NodeListNodeList.EDSNodes.keys(): +01034 self.EDSFile.Append(option) +01035 if self.EDSFile.FindString(selection) != wxNOT_FOUND: +01036 self.EDSFile.SetStringSelection(selection) +01037 +01038 def SetNodeList(self, nodelist): +01039 self.NodeListNodeList = nodelist +01040 self.RefreshEDSFileRefreshEDSFile() +01041 +01042 def GetValues(self): +01043 values = {} +01044 values["slaveName"] = self.SlaveName.GetValue() +01045 nodeid = self.SlaveNodeID.GetValue() +01046 if nodeid.find("x") != -1: +01047 values["slaveNodeID"] = int(nodeid, 16) +01048 else: +01049 values["slaveNodeID"] = int(nodeid) +01050 values["edsFile"] = self.EDSFile.GetStringSelection() +01051 return values +