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 @@ + + +CanFestival: /home/epimerde/documents/tc11/CanFestival-3/objdictgen/commondialogs.py Source File + + + + +
+
+
+
+

/home/epimerde/documents/tc11/CanFestival-3/objdictgen/commondialogs.py

Go to the documentation of this file.
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
+

Generated on Mon Jun 4 16:29:06 2007 for CanFestival by  + +doxygen 1.5.1
+ +