]> rtime.felk.cvut.cz Git - CanFestival-3.git/blobdiff - objdictgen/networkedit.py
Bug on DS302 Profile Dialog fixed
[CanFestival-3.git] / objdictgen / networkedit.py
index 4e9e46d02898e621055a1070c4142c0783680e52..ac28ef113a658109d6a357e1f5ff4e06e4d27c21 100644 (file)
 #License along with this library; if not, write to the Free Software
 #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-from wxPython.wx import *
-from wxPython.grid import *
 import wx
-from wx.lib.anchors import LayoutAnchors
 import wx.grid
 
 from types import *
 import os, re, platform, sys, time, traceback, getopt
 
-__version__ = "$Revision: 1.2 $"
+__version__ = "$Revision: 1.26 $"
 
 from nodelist import *
 from nodemanager import *
@@ -38,75 +35,51 @@ from subindextable import *
 from commondialogs import *
 from doc_index.DS301_index import *
 
-def create(parent):
-    return networkedit(parent)
-
-def usage():
-    print "\nUsage of networkedit.py :"
-    print "\n   %s [Projectpath]\n"%sys.argv[0]
-
-try:
-    opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
-except getopt.GetoptError:
-    # print help information and exit:
-    usage()
-    sys.exit(2)
-
-for o, a in opts:
-    if o in ("-h", "--help"):
-        usage()
-        sys.exit()
-
-if len(args) == 0:
-    projectOpen = None 
-elif len(args) == 1:
-    projectOpen = args[0]
-else:
-    usage()
-    sys.exit(2)
-
-ScriptDirectory = sys.path[0]
+ScriptDirectory = os.path.split(os.path.realpath(__file__))[0]
 
 try:
-    from wxPython.html import *
+    import wx.html
 
-    wxEVT_HTML_URL_CLICK = wxNewId()
+    EVT_HTML_URL_CLICK = wx.NewId()
 
-    def EVT_HTML_URL_CLICK(win, func):
-        win.Connect(-1, -1, wxEVT_HTML_URL_CLICK, func)
-
-    class wxHtmlWindowUrlClick(wxPyEvent):
+    class HtmlWindowUrlClick(wx.PyEvent):
         def __init__(self, linkinfo):
-            wxPyEvent.__init__(self)
-            self.SetEventType(wxEVT_HTML_URL_CLICK)
+            wx.PyEvent.__init__(self)
+            self.SetEventType(EVT_HTML_URL_CLICK)
             self.linkinfo = (linkinfo.GetHref(), linkinfo.GetTarget())
-
-    class wxUrlClickHtmlWindow(wxHtmlWindow):
+            
+    class UrlClickHtmlWindow(wx.html.HtmlWindow):
         """ HTML window that generates and OnLinkClicked event.
 
         Use this to avoid having to override HTMLWindow
         """
         def OnLinkClicked(self, linkinfo):
-            wxPostEvent(self, wxHtmlWindowUrlClick(linkinfo))
+            wx.PostEvent(self, HtmlWindowUrlClick(linkinfo))
+        
+        def Bind(self, event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY):
+            if event == HtmlWindowUrlClick:
+                self.Connect(-1, -1, EVT_HTML_URL_CLICK, handler)
+            else:
+                wx.html.HtmlWindow.Bind(event, handler, source=source, id=id, id2=id2)
     
 #-------------------------------------------------------------------------------
 #                                Html Frame
 #-------------------------------------------------------------------------------
 
-    [wxID_HTMLFRAME, wxID_HTMLFRAMEHTMLCONTENT] = [wx.NewId() for _init_ctrls in range(2)]
+    [ID_HTMLFRAME, ID_HTMLFRAMEHTMLCONTENT] = [wx.NewId() for _init_ctrls in range(2)]
 
     class HtmlFrame(wx.Frame):
         def _init_ctrls(self, prnt):
             # generated method, don't edit
-            wx.Frame.__init__(self, id=wxID_HTMLFRAME, name='HtmlFrame',
+            wx.Frame.__init__(self, id=ID_HTMLFRAME, name='HtmlFrame',
                   parent=prnt, pos=wx.Point(320, 231), size=wx.Size(853, 616),
                   style=wx.DEFAULT_FRAME_STYLE, title='')
-            self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_HTMLFRAME)
+            self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
             
-            self.HtmlContent = wxUrlClickHtmlWindow(id=wxID_HTMLFRAMEHTMLCONTENT,
+            self.HtmlContent = UrlClickHtmlWindow(id=ID_HTMLFRAMEHTMLCONTENT,
                   name='HtmlContent', parent=self, pos=wx.Point(0, 0),
-                  size=wx.Size(-1, -1), style=wxHW_SCROLLBAR_AUTO|wxHW_NO_SELECTION)
-            EVT_HTML_URL_CLICK(self.HtmlContent, self.OnLinkClick)
+                  size=wx.Size(-1, -1), style=wx.html.HW_SCROLLBAR_AUTO|wx.html.HW_NO_SELECTION)
+            self.HtmlContent.Bind(HtmlWindowUrlClick, self.OnLinkClick)
 
         def __init__(self, parent, opened):
             self._init_ctrls(parent)
@@ -127,7 +100,7 @@ try:
             try:
                 import webbrowser
             except ImportError:
-                wxMessageBox('Please point your browser at: %s' % url)
+                wx.MessageBox('Please point your browser at: %s' % url)
             else:
                 webbrowser.open(url)
     
@@ -136,169 +109,131 @@ except:
     Html_Window = False
 
 
-[wxID_NETWORKEDIT, wxID_NETWORKEDITNETWORKNODES, 
wxID_NETWORKEDITHELPBAR,
+[ID_NETWORKEDIT, ID_NETWORKEDITNETWORKNODES, 
+ ID_NETWORKEDITHELPBAR,
 ] = [wx.NewId() for _init_ctrls in range(3)]
 
-[wxID_NETWORKEDITADDMENUITEMS0, wxID_NETWORKEDITADDMENUITEMS1, 
- wxID_NETWORKEDITADDMENUITEMS2, wxID_NETWORKEDITADDMENUITEMS3, 
- wxID_NETWORKEDITADDMENUITEMS4, wxID_NETWORKEDITADDMENUITEMS5, 
-] = [wx.NewId() for _init_coll_AddMenu_Items in range(6)]
-
-[wxID_NETWORKEDITFILEMENUITEMS0, wxID_NETWORKEDITFILEMENUITEMS1, 
- wxID_NETWORKEDITFILEMENUITEMS2, wxID_NETWORKEDITFILEMENUITEMS4, 
- wxID_NETWORKEDITFILEMENUITEMS5, wxID_NETWORKEDITFILEMENUITEMS6,
-] = [wx.NewId() for _init_coll_FileMenu_Items in range(6)]
-
-[wxID_NETWORKEDITNETWORKMENUITEMS0, wxID_NETWORKEDITNETWORKMENUITEMS1, 
- wxID_NETWORKEDITNETWORKMENUITEMS3, 
-] = [wx.NewId() for _init_coll_AddMenu_Items in range(3)]
-
+[ID_NETWORKEDITNETWORKMENUBUILDMASTER, 
+] = [wx.NewId() for _init_coll_AddMenu_Items in range(1)]
 
-[wxID_NETWORKEDITEDITMENUITEMS0, wxID_NETWORKEDITEDITMENUITEMS1, 
- wxID_NETWORKEDITEDITMENUITEMS2, wxID_NETWORKEDITEDITMENUITEMS4, 
- wxID_NETWORKEDITEDITMENUITEMS6, wxID_NETWORKEDITEDITMENUITEMS7, 
- wxID_NETWORKEDITEDITMENUITEMS8, 
-] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)]
+[ID_NETWORKEDITEDITMENUNODEINFOS, ID_NETWORKEDITEDITMENUDS301PROFILE, 
+ ID_NETWORKEDITEDITMENUDS302PROFILE, ID_NETWORKEDITEDITMENUOTHERPROFILE, 
+] = [wx.NewId() for _init_coll_EditMenu_Items in range(4)]
 
-[wxID_NETWORKEDITHELPMENUITEMS0, wxID_NETWORKEDITHELPMENUITEMS1,
- wxID_NETWORKEDITHELPMENUITEMS2,
-] = [wx.NewId() for _init_coll_HelpMenu_Items in range(3)]
+[ID_NETWORKEDITADDMENUSDOSERVER, ID_NETWORKEDITADDMENUSDOCLIENT, 
+ ID_NETWORKEDITADDMENUPDOTRANSMIT, ID_NETWORKEDITADDMENUPDORECEIVE, 
+ ID_NETWORKEDITADDMENUMAPVARIABLE, ID_NETWORKEDITADDMENUUSERTYPE, 
+] = [wx.NewId() for _init_coll_AddMenu_Items in range(6)]
 
 class networkedit(wx.Frame):
-    def _init_coll_menuBar1_Menus(self, parent):
-        # generated method, don't edit
-
-        if self.Mode == "solo":
+    def _init_coll_MenuBar_Menus(self, parent):
+        if self.ModeSolo:
             parent.Append(menu=self.FileMenu, title='File')
         parent.Append(menu=self.NetworkMenu, title='Network')
         parent.Append(menu=self.EditMenu, title='Edit')
         parent.Append(menu=self.AddMenu, title='Add')
         parent.Append(menu=self.HelpMenu, title='Help')
 
-    def _init_coll_EditMenu_Items(self, parent):
-        # generated method, don't edit
+    def _init_coll_FileMenu_Items(self, parent):
+        parent.Append(help='', id=wx.ID_NEW,
+              kind=wx.ITEM_NORMAL, text='New\tCTRL+N')
+        parent.Append(help='', id=wx.ID_OPEN,
+              kind=wx.ITEM_NORMAL, text='Open\tCTRL+O')
+        parent.Append(help='', id=wx.ID_CLOSE,
+              kind=wx.ITEM_NORMAL, text='Close\tCTRL+W')
+        parent.AppendSeparator()
+        parent.Append(help='', id=wx.ID_SAVE,
+              kind=wx.ITEM_NORMAL, text='Save\tCTRL+S')
+        parent.AppendSeparator()
+        parent.Append(help='', id=wx.ID_EXIT,
+              kind=wx.ITEM_NORMAL, text='Exit')
+        self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW)
+        self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN)
+        self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu, id=wx.ID_CLOSE)
+        self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
+        self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
+
+    def _init_coll_NetworkMenu_Items(self, parent):
+        parent.Append(help='', id=wx.ID_ADD,
+              kind=wx.ITEM_NORMAL, text='Add Slave Node')
+        parent.Append(help='', id=wx.ID_DELETE,
+              kind=wx.ITEM_NORMAL, text='Remove Slave Node')
+        parent.AppendSeparator()
+        parent.Append(help='', id=ID_NETWORKEDITNETWORKMENUBUILDMASTER,
+              kind=wx.ITEM_NORMAL, text='Build Master Dictionary')
+        self.Bind(wx.EVT_MENU, self.OnAddSlaveMenu, id=wx.ID_ADD)
+        self.Bind(wx.EVT_MENU, self.OnRemoveSlaveMenu, id=wx.ID_DELETE)
+##        self.Bind(wx.EVT_MENU, self.OnBuildMasterMenu,
+##              id=ID_NETWORKEDITNETWORKMENUBUILDMASTER)
 
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS4,
+    def _init_coll_EditMenu_Items(self, parent):
+        parent.Append(help='', id=wx.ID_REFRESH,
               kind=wx.ITEM_NORMAL, text='Refresh\tCTRL+R')
         parent.AppendSeparator()
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS1,
+        parent.Append(help='', id=wx.ID_UNDO,
               kind=wx.ITEM_NORMAL, text='Undo\tCTRL+Z')
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS0,
+        parent.Append(help='', id=wx.ID_REDO,
               kind=wx.ITEM_NORMAL, text='Redo\tCTRL+Y')
         parent.AppendSeparator()
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS6,
+        parent.Append(help='', id=ID_NETWORKEDITEDITMENUNODEINFOS,
               kind=wx.ITEM_NORMAL, text='Node infos')
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS2,
+        parent.Append(help='', id=ID_NETWORKEDITEDITMENUDS301PROFILE,
               kind=wx.ITEM_NORMAL, text='DS-301 Profile')
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS8,
+        parent.Append(help='', id=ID_NETWORKEDITEDITMENUDS302PROFILE,
               kind=wx.ITEM_NORMAL, text='DS-302 Profile')
-        parent.Append(help='', id=wxID_NETWORKEDITEDITMENUITEMS7,
+        parent.Append(help='', id=ID_NETWORKEDITEDITMENUOTHERPROFILE,
               kind=wx.ITEM_NORMAL, text='Other Profile')
-        self.Bind(wx.EVT_MENU, self.OnUndoMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS1)
-        self.Bind(wx.EVT_MENU, self.OnRedoMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS0)
-        self.Bind(wx.EVT_MENU, self.OnCommunicationMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS2)
-        self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS4)
+        self.Bind(wx.EVT_MENU, self.OnRefreshMenu, id=wx.ID_REFRESH)
+        self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO)
+        self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO)
         self.Bind(wx.EVT_MENU, self.OnNodeInfosMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS6)
-        self.Bind(wx.EVT_MENU, self.OnEditProfileMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS7)
+              id=ID_NETWORKEDITEDITMENUNODEINFOS)
+        self.Bind(wx.EVT_MENU, self.OnCommunicationMenu,
+              id=ID_NETWORKEDITEDITMENUDS301PROFILE)
         self.Bind(wx.EVT_MENU, self.OnOtherCommunicationMenu,
-              id=wxID_NETWORKEDITEDITMENUITEMS8)
-
-    def _init_coll_HelpMenu_Items(self, parent):
-        # generated method, don't edit
-
-        parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS0,
-              kind=wx.ITEM_NORMAL, text='DS-301 Standard\tF1')
-        self.Bind(wx.EVT_MENU, self.OnHelpDS301Menu,
-              id=wxID_NETWORKEDITHELPMENUITEMS0)
-        parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS1,
-              kind=wx.ITEM_NORMAL, text='CAN Festival Docs\tF2')
-        self.Bind(wx.EVT_MENU, self.OnHelpCANFestivalMenu,
-              id=wxID_NETWORKEDITHELPMENUITEMS1)
-        if Html_Window and self.Mode == "solo":
-            parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS2,
-                  kind=wx.ITEM_NORMAL, text='About')
-            self.Bind(wx.EVT_MENU, self.OnAboutMenu,
-                  id=wxID_NETWORKEDITHELPMENUITEMS2)
-
-    def _init_coll_FileMenu_Items(self, parent):
-        # generated method, don't edit
-
-        parent.Append(help='', id=wxID_NETWORKEDITFILEMENUITEMS5,
-              kind=wx.ITEM_NORMAL, text='New\tCTRL+N')
-        parent.Append(help='', id=wxID_NETWORKEDITFILEMENUITEMS0,
-              kind=wx.ITEM_NORMAL, text='Open\tCTRL+O')
-        parent.Append(help='', id=wxID_NETWORKEDITFILEMENUITEMS1,
-              kind=wx.ITEM_NORMAL, text='Save\tCTRL+S')
-        parent.Append(help='', id=wxID_NETWORKEDITFILEMENUITEMS2,
-              kind=wx.ITEM_NORMAL, text='Close\tCTRL+W')
-        parent.AppendSeparator()
-        parent.Append(help='', id=wxID_NETWORKEDITFILEMENUITEMS4,
-              kind=wx.ITEM_NORMAL, text='Exit')
-        self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu,
-              id=wxID_NETWORKEDITFILEMENUITEMS0)
-        self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu,
-              id=wxID_NETWORKEDITFILEMENUITEMS1)
-##        self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu,
-##              id=wxID_NETWORKEDITFILEMENUITEMS2)
-        self.Bind(wx.EVT_MENU, self.OnQuitMenu,
-              id=wxID_NETWORKEDITFILEMENUITEMS4)
-        self.Bind(wx.EVT_MENU, self.OnNewProjectMenu,
-              id=wxID_NETWORKEDITFILEMENUITEMS5)
-    
-    def _init_coll_NetworkMenu_Items(self, parent):
-        # generated method, don't edit
+              id=ID_NETWORKEDITEDITMENUDS302PROFILE)
+        self.Bind(wx.EVT_MENU, self.OnEditProfileMenu,
+              id=ID_NETWORKEDITEDITMENUOTHERPROFILE)
 
-        parent.Append(help='', id=wxID_NETWORKEDITNETWORKMENUITEMS0,
-              kind=wx.ITEM_NORMAL, text='Add Slave Node')
-        parent.Append(help='', id=wxID_NETWORKEDITNETWORKMENUITEMS1,
-              kind=wx.ITEM_NORMAL, text='Remove Slave Node')
-        parent.AppendSeparator()
-        parent.Append(help='', id=wxID_NETWORKEDITNETWORKMENUITEMS3,
-              kind=wx.ITEM_NORMAL, text='Build Master Dictionary')
-        self.Bind(wx.EVT_MENU, self.OnAddSlaveMenu,
-              id=wxID_NETWORKEDITNETWORKMENUITEMS0)
-        self.Bind(wx.EVT_MENU, self.OnRemoveSlaveMenu,
-              id=wxID_NETWORKEDITNETWORKMENUITEMS1)
-##        self.Bind(wx.EVT_MENU, self.OnBuildMasterMenu,
-##              id=wxID_NETWORKEDITNETWORKMENUITEMS3)
-    
     def _init_coll_AddMenu_Items(self, parent):
-        # generated method, don't edit
-
-        parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS0,
+        parent.Append(help='', id=ID_NETWORKEDITADDMENUSDOSERVER,
               kind=wx.ITEM_NORMAL, text='SDO Server')
-        parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS1,
+        parent.Append(help='', id=ID_NETWORKEDITADDMENUSDOCLIENT,
               kind=wx.ITEM_NORMAL, text='SDO Client')
-        parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS2,
+        parent.Append(help='', id=ID_NETWORKEDITADDMENUPDOTRANSMIT,
               kind=wx.ITEM_NORMAL, text='PDO Transmit')
-        parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS3,
+        parent.Append(help='', id=ID_NETWORKEDITADDMENUPDORECEIVE,
               kind=wx.ITEM_NORMAL, text='PDO Receive')
-        parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS4,
+        parent.Append(help='', id=ID_NETWORKEDITADDMENUMAPVARIABLE,
               kind=wx.ITEM_NORMAL, text='Map Variable')
-        parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS5,
+        parent.Append(help='', id=ID_NETWORKEDITADDMENUUSERTYPE,
               kind=wx.ITEM_NORMAL, text='User Type')
         self.Bind(wx.EVT_MENU, self.OnAddSDOServerMenu,
-              id=wxID_NETWORKEDITADDMENUITEMS0)
+              id=ID_NETWORKEDITADDMENUSDOSERVER)
         self.Bind(wx.EVT_MENU, self.OnAddSDOClientMenu,
-              id=wxID_NETWORKEDITADDMENUITEMS1)
+              id=ID_NETWORKEDITADDMENUSDOCLIENT)
         self.Bind(wx.EVT_MENU, self.OnAddPDOTransmitMenu,
-              id=wxID_NETWORKEDITADDMENUITEMS2)
+              id=ID_NETWORKEDITADDMENUPDOTRANSMIT)
         self.Bind(wx.EVT_MENU, self.OnAddPDOReceiveMenu,
-              id=wxID_NETWORKEDITADDMENUITEMS3)
+              id=ID_NETWORKEDITADDMENUPDORECEIVE)
         self.Bind(wx.EVT_MENU, self.OnAddMapVariableMenu,
-              id=wxID_NETWORKEDITADDMENUITEMS4)
+              id=ID_NETWORKEDITADDMENUMAPVARIABLE)
         self.Bind(wx.EVT_MENU, self.OnAddUserTypeMenu,
-              id=wxID_NETWORKEDITADDMENUITEMS5)
+              id=ID_NETWORKEDITADDMENUUSERTYPE)
+
+    def _init_coll_HelpMenu_Items(self, parent):
+        parent.Append(help='', id=wx.ID_HELP,
+              kind=wx.ITEM_NORMAL, text='DS-301 Standard\tF1')
+        self.Bind(wx.EVT_MENU, self.OnHelpDS301Menu, id=wx.ID_HELP)
+        parent.Append(help='', id=wx.ID_HELP_CONTEXT,
+              kind=wx.ITEM_NORMAL, text='CAN Festival Docs\tF2')
+        self.Bind(wx.EVT_MENU, self.OnHelpCANFestivalMenu, id=wx.ID_HELP_CONTEXT)
+        if Html_Window and self.ModeSolo:
+            parent.Append(help='', id=wx.ID_ABOUT,
+                  kind=wx.ITEM_NORMAL, text='About')
+            self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT)
 
     def _init_coll_HelpBar_Fields(self, parent):
-        # generated method, don't edit
         parent.SetFieldsCount(3)
 
         parent.SetStatusText(number=0, text='')
@@ -308,23 +243,18 @@ class networkedit(wx.Frame):
         parent.SetStatusWidths([100, 110, -1])
 
     def _init_utils(self):
-        # generated method, don't edit
-        self.menuBar1 = wx.MenuBar()
-        self.menuBar1.SetEvtHandlerEnabled(True)
+        self.MenuBar = wx.MenuBar()
+        self.MenuBar.SetEvtHandlerEnabled(True)
         
-        if self.Mode == "solo":
+        if self.ModeSolo:
             self.FileMenu = wx.Menu(title='')
-        
         self.NetworkMenu = wx.Menu(title='')
-
         self.EditMenu = wx.Menu(title='')
-
         self.AddMenu = wx.Menu(title='')
-
         self.HelpMenu = wx.Menu(title='')
 
-        self._init_coll_menuBar1_Menus(self.menuBar1)
-        if self.Mode == "solo":
+        self._init_coll_MenuBar_Menus(self.MenuBar)
+        if self.ModeSolo:
             self._init_coll_FileMenu_Items(self.FileMenu)
         self._init_coll_NetworkMenu_Items(self.NetworkMenu)
         self._init_coll_EditMenu_Items(self.EditMenu)
@@ -332,33 +262,41 @@ class networkedit(wx.Frame):
         self._init_coll_HelpMenu_Items(self.HelpMenu)
 
     def _init_ctrls(self, prnt):
-        # generated method, don't edit
-        wx.Frame.__init__(self, id=wxID_NETWORKEDIT, name='networkedit',
+        wx.Frame.__init__(self, id=ID_NETWORKEDIT, name='networkedit',
               parent=prnt, pos=wx.Point(149, 178), size=wx.Size(1000, 700),
               style=wx.DEFAULT_FRAME_STYLE, title='Networkedit')
         self._init_utils()
         self.SetClientSize(wx.Size(1000, 700))
-        self.SetMenuBar(self.menuBar1)
-##        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_NETWORKEDIT)
-
-        self.NetworkNodes = wx.Notebook(id=wxID_NETWORKEDITNETWORKNODES,
+        self.SetMenuBar(self.MenuBar)
+        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
+        if not self.ModeSolo:
+            self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
+            accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL, 83, wx.ID_SAVE)])
+            self.SetAcceleratorTable(accel)
+
+        self.NetworkNodes = wx.Notebook(id=ID_NETWORKEDITNETWORKNODES,
               name='NetworkNodes', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 0), style=wxNB_LEFT)
+              size=wx.Size(0, 0), style=wx.NB_LEFT)
         self.NetworkNodes.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
-              self.OnNodeSelectedChanged, id=wxID_NETWORKEDITNETWORKNODES)
+              self.OnNodeSelectedChanged, id=ID_NETWORKEDITNETWORKNODES)
 
-        self.HelpBar = wx.StatusBar(id=wxID_NETWORKEDITHELPBAR, name='HelpBar',
-              parent=self, style=wxST_SIZEGRIP)
+        self.HelpBar = wx.StatusBar(id=ID_NETWORKEDITHELPBAR, name='HelpBar',
+              parent=self, style=wx.ST_SIZEGRIP)
         self._init_coll_HelpBar_Fields(self.HelpBar)
         self.SetStatusBar(self.HelpBar)
 
-    def __init__(self, parent, mode = "solo", nodelist = None):
-        self.Mode = mode
+    def __init__(self, parent, nodelist = None, projectOpen = None):
+        self.ModeSolo = nodelist == None
         self._init_ctrls(parent)
         self.HtmlFrameOpened = []
+        self.BusId = None
+        self.Closing = False
         
-        if self.Mode == "solo":
-            self.Manager = NodeManager(ScriptDirectory)
+        icon = wx.Icon(os.path.join(ScriptDirectory,"networkedit.ico"),wx.BITMAP_TYPE_ICO)
+        self.SetIcon(icon)
+                 
+        if self.ModeSolo:
+            self.Manager = NodeManager()
             if projectOpen:
                 self.NodeList = NodeList(self.Manager)
                 result = self.NodeList.LoadProject(projectOpen)
@@ -369,13 +307,43 @@ class networkedit(wx.Frame):
         else:
             self.NodeList = nodelist
             self.Manager = self.NodeList.GetManager()
+            self.NodeList.SetCurrentSelected(0)
+            self.RefreshNetworkNodes()
+            self.RefreshProfileMenu()
+            self.NetworkNodes.SetFocus()
         
         self.RefreshBufferState()
         self.RefreshTitle()
         self.RefreshMainMenu()
 
-    def GetNoteBook(self):
-        return self.NetworkNodes
+    def SetBusId(self, bus_id):
+        self.BusId = bus_id
+
+    def GetBusId(self):
+        return self.BusId
+
+    def IsClosing(self):
+        return self.Closing
+
+    def GetCurrentNodeId(self):
+        selected = self.NetworkNodes.GetSelection()
+        # At init selected = -1
+        if selected > 0:
+            window = self.NetworkNodes.GetPage(selected)
+            return window.GetIndex()
+        else:
+            return 0
+
+    def OnCloseFrame(self, event):
+        self.Closing = True
+        if not self.ModeSolo and getattr(self, "_onclose", None) != None:
+            self._onclose()
+        event.Skip()
+
+    def OnChar(self, event):
+        if event.ControlDown() and event.GetKeyCode() == 83 and getattr(self, "_onsave", None) != None:
+            self._onsave()
+        event.Skip()
 
     def OnQuitMenu(self, event):
         self.Close()
@@ -414,13 +382,14 @@ class networkedit(wx.Frame):
         event.Skip()
 
     def OnNodeSelectedChanged(self, event):
-        selected = event.GetSelection()
-        # At init selected = -1
-        if selected > 0:
-            window = self.NetworkNodes.GetPage(selected)
-            self.NodeList.SetCurrentSelected(window.GetIndex())
-        self.RefreshMainMenu()
-        self.RefreshStatusBar()
+        if not self.Closing:
+            selected = event.GetSelection()
+            # At init selected = -1
+            if selected >= 0:
+                window = self.NetworkNodes.GetPage(selected)
+                self.NodeList.SetCurrentSelected(window.GetIndex())
+            wx.CallAfter(self.RefreshMainMenu)
+            wx.CallAfter(self.RefreshStatusBar)
         event.Skip()
 
 #-------------------------------------------------------------------------------
@@ -432,11 +401,11 @@ class networkedit(wx.Frame):
             defaultpath = os.path.dirname(self.NodeList.GetRoot())
         else:
             defaultpath = os.getcwd()
-        dialog = wxDirDialog(self , "Choose a project", defaultpath, wxDD_NEW_DIR_BUTTON)
-        if dialog.ShowModal() == wxID_OK:
+        dialog = wx.DirDialog(self , "Choose a project", defaultpath, wx.DD_NEW_DIR_BUTTON)
+        if dialog.ShowModal() == wx.ID_OK:
             projectpath = dialog.GetPath()
             if os.path.isdir(projectpath) and len(os.listdir(projectpath)) == 0:
-                manager = NodeManager(ScriptDirectory)
+                manager = NodeManager()
                 nodelist = NodeList(manager)
                 result = nodelist.LoadProject(projectpath)
                 if not result:
@@ -450,7 +419,7 @@ class networkedit(wx.Frame):
                     self.RefreshProfileMenu()
                     self.RefreshMainMenu()
                 else:
-                    message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR)
+                    message = wx.MessageDialog(self, result, "ERROR", wx.OK|wx.ICON_ERROR)
                     message.ShowModal()
                     message.Destroy()
         event.Skip()
@@ -460,11 +429,11 @@ class networkedit(wx.Frame):
             defaultpath = os.path.dirname(self.NodeList.GetRoot())
         else:
             defaultpath = os.getcwd()
-        dialog = wxDirDialog(self , "Choose a project", defaultpath, 0)
-        if dialog.ShowModal() == wxID_OK:
+        dialog = wx.DirDialog(self , "Choose a project", defaultpath, 0)
+        if dialog.ShowModal() == wx.ID_OK:
             projectpath = dialog.GetPath()
             if os.path.isdir(projectpath):
-                manager = NodeManager(ScriptDirectory)
+                manager = NodeManager()
                 nodelist = NodeList(manager)
                 result = nodelist.LoadProject(projectpath)
                 if not result:
@@ -478,18 +447,43 @@ class networkedit(wx.Frame):
                     self.RefreshProfileMenu()
                     self.RefreshMainMenu()
                 else:
-                    message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                    message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
                     message.ShowModal()
                     message.Destroy()
         dialog.Destroy()
         event.Skip()
 
     def OnSaveProjectMenu(self, event):
-        result = self.NodeList.SaveProject()
-        if result:
-            message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
-            message.ShowModal()
-            message.Destroy()
+        if not self.ModeSolo and getattr(self, "_onsave", None) != None:
+            self._onsave()
+        else:
+            result = self.NodeList.SaveProject()
+            if result:
+                message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
+                message.ShowModal()
+                message.Destroy()
+        event.Skip()
+
+    def OnCloseProjectMenu(self, event):
+        if self.NodeList:
+            if self.NodeList.HasChanged():
+                dialog = wx.MessageDialog(self, "There are changes, do you want to save?",  "Close Project", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
+                answer = dialog.ShowModal()
+                dialog.Destroy()
+                if answer == wx.ID_YES:
+                    result = self.NodeList.SaveProject()
+                    if result:
+                        message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
+                        message.ShowModal()
+                        message.Destroy()
+                elif answer == wx.ID_NO:
+                    self.NodeList.ForceChanged(False)
+            if not self.NodeList.HasChanged():
+                self.Manager = None
+                self.NodeList = None
+                self.RefreshNetworkNodes()
+                self.RefreshTitle()
+                self.RefreshMainMenu()
         event.Skip()
 
 #-------------------------------------------------------------------------------
@@ -499,11 +493,11 @@ class networkedit(wx.Frame):
     def OnAddSlaveMenu(self, event):
         dialog = AddSlaveDialog(self)
         dialog.SetNodeList(self.NodeList)
-        if dialog.ShowModal() == wxID_OK:
+        if dialog.ShowModal() == wx.ID_OK:
             values = dialog.GetValues()
             result = self.NodeList.AddSlaveNode(values["slaveName"], values["slaveNodeID"], values["edsFile"])
             if not result:
-                new_editingpanel = EditingPanel(self, self.NodeList, False)
+                new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False)
                 new_editingpanel.SetIndex(values["slaveNodeID"])
                 idx = self.NodeList.GetOrderNumber(values["slaveNodeID"])
                 self.NetworkNodes.InsertPage(idx, new_editingpanel, "")
@@ -511,7 +505,7 @@ class networkedit(wx.Frame):
                 self.NetworkNodes.SetSelection(idx)
                 self.RefreshBufferState()
             else:
-                message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
                 message.ShowModal()
                 message.Destroy()
         dialog.Destroy()
@@ -520,8 +514,8 @@ class networkedit(wx.Frame):
     def OnRemoveSlaveMenu(self, event):
         slavenames = self.NodeList.GetSlaveNames()
         slaveids = self.NodeList.GetSlaveIDs()
-        dialog = wxSingleChoiceDialog(self, "Choose a slave to remove", "Remove slave", slavenames)
-        if dialog.ShowModal() == wxID_OK:
+        dialog = wx.SingleChoiceDialog(self, "Choose a slave to remove", "Remove slave", slavenames)
+        if dialog.ShowModal() == wx.ID_OK:
             choice = dialog.GetSelection()
             result = self.NodeList.RemoveSlaveNode(slaveids[choice])
             if not result:
@@ -535,7 +529,7 @@ class networkedit(wx.Frame):
                         self.NodeList.SetCurrentSelected(slaveids[new_selection - 1])
                     self.RefreshBufferState()
             else:
-                message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
                 message.ShowModal()
                 message.Destroy()
         event.Skip()
@@ -566,17 +560,18 @@ class networkedit(wx.Frame):
         if self.NetworkNodes.GetPageCount() > 0:
             self.NetworkNodes.DeleteAllPages()
         if self.NodeList:
-            new_editingpanel = EditingPanel(self, self.Manager)
+            new_editingpanel = EditingPanel(self.NetworkNodes, self, self.Manager)
             new_editingpanel.SetIndex(0)
             self.NetworkNodes.AddPage(new_editingpanel, "")
             for idx in self.NodeList.GetSlaveIDs():
-                new_editingpanel = EditingPanel(self, self.NodeList, False)
+                new_editingpanel = EditingPanel(self.NetworkNodes, self, self.NodeList, False)
                 new_editingpanel.SetIndex(idx)
                 self.NetworkNodes.AddPage(new_editingpanel, "")
 
     def RefreshStatusBar(self):
-        if self.HelpBar:
-            window = self.NetworkNodes.GetPage(self.NetworkNodes.GetSelection())
+        selected = self.NetworkNodes.GetSelection()
+        if self.HelpBar and selected >= 0:
+            window = self.NetworkNodes.GetPage(selected)
             selection = window.GetSelection()
             if selection:
                 index, subIndex = selection
@@ -606,68 +601,74 @@ class networkedit(wx.Frame):
                     self.HelpBar.SetStatusText("", i)
 
     def RefreshMainMenu(self):
-        if self.menuBar1:
-            self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, False)
-            if self.NodeList == None:
-                if self.Mode == "solo":
-                    self.menuBar1.EnableTop(1, False)
-                    self.menuBar1.EnableTop(2, False)
-                    self.menuBar1.EnableTop(3, False)
-                    if self.FileMenu:
-                        self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, False)
-                        self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS2, False)
+        self.NetworkMenu.Enable(ID_NETWORKEDITNETWORKMENUBUILDMASTER, False)
+        if self.NodeList == None:
+            if self.ModeSolo:
+                self.MenuBar.EnableTop(1, False)
+                self.MenuBar.EnableTop(2, False)
+                self.MenuBar.EnableTop(3, False)
+                if self.FileMenu:
+                    self.FileMenu.Enable(wx.ID_CLOSE, False)
+                    self.FileMenu.Enable(wx.ID_SAVE, False)
+            else:
+                self.MenuBar.EnableTop(0, False)
+                self.MenuBar.EnableTop(1, False)
+                self.MenuBar.EnableTop(2, False)
+        else:
+            if self.ModeSolo:
+                self.MenuBar.EnableTop(1, True)
+                if self.FileMenu:
+                    self.FileMenu.Enable(wx.ID_CLOSE, True)
+                    self.FileMenu.Enable(wx.ID_SAVE, True)
+                if self.NetworkNodes.GetSelection() == 0:
+                    self.MenuBar.EnableTop(2, True)
+                    self.MenuBar.EnableTop(3, True)
                 else:
-                    self.menuBar1.EnableTop(0, False)
-                    self.menuBar1.EnableTop(1, False)
-                    self.menuBar1.EnableTop(2, False)
+                    self.MenuBar.EnableTop(2, False)      
+                    self.MenuBar.EnableTop(3, False)
             else:
-                if self.Mode == "solo":
-                    self.menuBar1.EnableTop(1, True)
-                    if self.FileMenu:
-                        self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, True)
-                        self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS2, False)
-                    if self.NetworkNodes.GetSelection() == 0:
-                        self.menuBar1.EnableTop(2, True)
-                        self.menuBar1.EnableTop(3, True)
-                    else:
-                        self.menuBar1.EnableTop(2, False)      
-                        self.menuBar1.EnableTop(3, False)
+                self.MenuBar.EnableTop(0, True)
+                if self.NetworkNodes.GetSelection() == 0:
+                    self.MenuBar.EnableTop(1, True)
+                    self.MenuBar.EnableTop(2, True)
                 else:
-                    self.menuBar1.EnableTop(0, True)
-                    if self.NetworkNodes.GetSelection() == 0:
-                        self.menuBar1.EnableTop(1, True)
-                        self.menuBar1.EnableTop(2, True)
-                    else:
-                        self.menuBar1.EnableTop(1, False)      
-                        self.menuBar1.EnableTop(2, False)
+                    self.MenuBar.EnableTop(1, False)      
+                    self.MenuBar.EnableTop(2, False)
 
     def RefreshProfileMenu(self):
-        if self.EditMenu:
-            profile = self.Manager.GetCurrentProfileName()
-            edititem = self.EditMenu.FindItemById(wxID_NETWORKEDITEDITMENUITEMS7)
-            if edititem:
-                length = self.AddMenu.GetMenuItemCount()
-                for i in xrange(length-6):
-                    additem = self.AddMenu.FindItemByPosition(6)
-                    self.AddMenu.Delete(additem.GetId())
-                if profile not in ("None", "DS-301"):
-                    edititem.SetText("%s Profile"%profile)
-                    edititem.Enable(True)
-                    self.AddMenu.AppendSeparator()
-                    for text, indexes in self.Manager.GetCurrentSpecificMenu():
-                        new_id = wx.NewId()
-                        self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
-                        self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
-                else:
-                    edititem.SetText("Other Profile")
-                    edititem.Enable(False)
+        profile = self.Manager.GetCurrentProfileName()
+        edititem = self.EditMenu.FindItemById(ID_NETWORKEDITEDITMENUOTHERPROFILE)
+        if edititem:
+            length = self.AddMenu.GetMenuItemCount()
+            for i in xrange(length-6):
+                additem = self.AddMenu.FindItemByPosition(6)
+                self.AddMenu.Delete(additem.GetId())
+            if profile not in ("None", "DS-301"):
+                edititem.SetText("%s Profile"%profile)
+                edititem.Enable(True)
+                self.AddMenu.AppendSeparator()
+                for text, indexes in self.Manager.GetCurrentSpecificMenu():
+                    new_id = wx.NewId()
+                    self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
+                    self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
+            else:
+                edititem.SetText("Other Profile")
+                edititem.Enable(False)
+
+    def GetProfileCallBack(self, text):
+        def ProfileCallBack(event):
+            self.Manager.AddSpecificEntryToCurrent(text)
+            self.RefreshBufferState()
+            self.RefreshCurrentIndexList()
+            event.Skip()
+        return ProfileCallBack
 
 #-------------------------------------------------------------------------------
 #                              Buffer Functions
 #-------------------------------------------------------------------------------
 
     def RefreshBufferState(self):
-        if self.NodeList:
+        if self.NodeList is not None:
             nodeID = self.Manager.GetCurrentNodeID()
             if nodeID != None:
                 nodename = "0x%2.2X %s"%(nodeID, self.Manager.GetCurrentNodeName())
@@ -704,21 +705,27 @@ class networkedit(wx.Frame):
                 find_index = True
                 index, subIndex = result
                 result = OpenPDFDocIndex(index, ScriptDirectory)
-                if type(result) == StringType:
-                    message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR)
+                if isinstance(result, (StringType, UnicodeType)):
+                    message = wx.MessageDialog(self, result, "ERROR", wx.OK|wx.ICON_ERROR)
                     message.ShowModal()
                     message.Destroy()
         if not find_index:
             result = OpenPDFDocIndex(None, ScriptDirectory)
-            if type(result) == StringType:
-                message = wxMessageDialog(self, result, "ERROR", wxOK|wxICON_ERROR)
+            if isinstance(result, (StringType, UnicodeType)):
+                message = wx.MessageDialog(self, result, "ERROR", wx.OK|wx.ICON_ERROR)
                 message.ShowModal()
                 message.Destroy()
         event.Skip()
         
     def OnHelpCANFestivalMenu(self, event):
         #self.OpenHtmlFrame("CAN Festival Reference", os.path.join(ScriptDirectory, "doc/canfestival.html"), wx.Size(1000, 600))
-        os.system("xpdf -remote CANFESTIVAL %s %d &"%(os.path.join(ScriptDirectory, "doc/manual_en.pdf"),16))
+        if wx.Platform == '__WXMSW__':
+            readerpath = get_acroversion()
+            readerexepath = os.path.join(readerpath,"AcroRd32.exe")
+            if(os.path.isfile(readerexepath)):
+                os.spawnl(os.P_DETACH, readerexepath, "AcroRd32.exe", '"%s"'%os.path.join(ScriptDirectory, "doc","manual_en.pdf"))
+        else:
+            os.system("xpdf -remote CANFESTIVAL %s %d &"%(os.path.join(ScriptDirectory, "doc/manual_en.pdf"),16))
         event.Skip()
 
     def OnAboutMenu(self, event):
@@ -745,7 +752,7 @@ class networkedit(wx.Frame):
     
     def OnOtherCommunicationMenu(self, event):
         dictionary,current = self.Manager.GetCurrentDS302Lists()
-        self.EditProfile("Edit DS-301 Profile", dictionary, current)
+        self.EditProfile("Edit DS-302 Profile", dictionary, current)
         event.Skip()
     
     def OnEditProfileMenu(self, event):
@@ -760,7 +767,7 @@ class networkedit(wx.Frame):
         dialog.SetIndexDictionary(dictionary)
         dialog.SetCurrentList(current)
         dialog.RefreshLists()
-        if dialog.ShowModal() == wxID_OK:
+        if dialog.ShowModal() == wx.ID_OK:
             new_profile = dialog.GetCurrentList()
             addinglist = []
             removinglist = []
@@ -771,7 +778,6 @@ class networkedit(wx.Frame):
                 if index not in new_profile:
                     removinglist.append(index)
             self.Manager.ManageEntriesOfCurrent(addinglist, removinglist)
-            self.Manager.GenerateMapList()
             self.Manager.BufferCurrentNode()
             self.RefreshBufferState()
             self.RefreshCurrentIndexList()
@@ -784,15 +790,17 @@ class networkedit(wx.Frame):
     def OnNodeInfosMenu(self, event):
         dialog = NodeInfosDialog(self)
         name, id, type, description = self.Manager.GetCurrentNodeInfos()
-        dialog.SetValues(name, id, type, description)
-        if dialog.ShowModal() == wxID_OK:
-            name, id, type, description = dialog.GetValues()
+        defaultstringsize = self.Manager.GetCurrentNodeDefaultStringSize()
+        dialog.SetValues(name, id, type, description, defaultstringsize)
+        if dialog.ShowModal() == wx.ID_OK:
+            name, id, type, description, defaultstringsize = dialog.GetValues()
             self.Manager.SetCurrentNodeInfos(name, id, type, description)
+            self.Manager.SetCurrentNodeDefaultStringSize(defaultstringsize)
             self.RefreshBufferState()
             self.RefreshProfileMenu()
-            selected = self.FileOpened.GetSelection()
+            selected = self.NetworkNodes.GetSelection()
             if selected >= 0:
-                window = self.FileOpened.GetPage(selected)
+                window = self.NetworkNodes.GetPage(selected)
                 window.RefreshTable()
         event.Skip()
 
@@ -806,37 +814,41 @@ class networkedit(wx.Frame):
         if index:
             dialog = MapVariableDialog(self)
             dialog.SetIndex(index)
-            if dialog.ShowModal() == wxID_OK:
+            if dialog.ShowModal() == wx.ID_OK:
                 index, name, struct, number = dialog.GetValues()
                 result = self.Manager.AddMapVariableToCurrent(index, name, struct, number)
-                if type(result) != StringType:
+                if not isinstance(result, (StringType, UnicodeType)):
                     self.RefreshBufferState()
                     self.RefreshCurrentIndexList()
                 else:
-                    message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                    message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
                     message.ShowModal()
                     message.Destroy()
             dialog.Destroy()
         else:
-            message = wxMessageDialog(self, result, "No map variable index left!", wxOK|wxICON_ERROR)
+            message = wx.MessageDialog(self, result, "No map variable index left!", wx.OK|wx.ICON_ERROR)
             message.ShowModal()
             message.Destroy()
         
     def AddUserType(self):
         dialog = UserTypeDialog(self)
         dialog.SetTypeList(self.Manager.GetCustomisableTypes())
-        if dialog.ShowModal() == wxID_OK:
+        if dialog.ShowModal() == wx.ID_OK:
             type, min, max, length = dialog.GetValues()
             result = self.Manager.AddUserTypeToCurrent(type, min, max, length)
             if not IsOfType(result, StringType):
                 self.RefreshBufferState()
                 self.RefreshCurrentIndexList()
             else:
-                message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
+                message = wx.MessageDialog(self, result, "Error", wx.OK|wx.ICON_ERROR)
                 message.ShowModal()
                 message.Destroy()
         dialog.Destroy()
 
+    def OpenMasterDCFDialog(self, node_id):
+        self.NetworkNodes.SetSelection(0)
+        self.NetworkNodes.GetPage(0).OpenDCFDialog(node_id)
+
 #-------------------------------------------------------------------------------
 #                               Exception Handler
 #-------------------------------------------------------------------------------
@@ -883,7 +895,7 @@ Error:
     return res
 
 def Display_Error_Dialog(e_value):
-    message = wxMessageDialog(None, str(e_value), "Error", wxOK|wxICON_ERROR)
+    message = wx.MessageDialog(None, str(e_value), "Error", wx.OK|wx.ICON_ERROR)
     message.ShowModal()
     message.Destroy()
 
@@ -899,7 +911,7 @@ def format_namespace(d, indent='    '):
 
 ignored_exceptions = [] # a problem with a line in a module is only reported once per session
 
-def wxAddExceptHook(path, app_version='[No version]'):#, ignored_exceptions=[]):
+def AddExceptHook(path, app_version='[No version]'):#, ignored_exceptions=[]):
     
     def handle_exception(e_type, e_value, e_traceback):
         traceback.print_exception(e_type, e_value, e_traceback) # this is very helpful when there's an exception in the rest of this func
@@ -941,13 +953,37 @@ def wxAddExceptHook(path, app_version='[No version]'):#, ignored_exceptions=[]):
     sys.excepthook = handle_exception
 
 if __name__ == '__main__':
-    app = wxPySimpleApp()
-    wxInitAllImageHandlers()
+    def usage():
+        print "\nUsage of networkedit.py :"
+        print "\n   %s [Projectpath]\n"%sys.argv[0]
+
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
+    except getopt.GetoptError:
+        # print help information and exit:
+        usage()
+        sys.exit(2)
+
+    for o, a in opts:
+        if o in ("-h", "--help"):
+            usage()
+            sys.exit()
+
+    if len(args) == 0:
+        projectOpen = None 
+    elif len(args) == 1:
+        projectOpen = args[0]
+    else:
+        usage()
+        sys.exit(2)
+    
+    app = wx.PySimpleApp()
+    wx.InitAllImageHandlers()
     
     # Install a exception handle for bug reports
-    wxAddExceptHook(os.getcwd(),__version__)
+    AddExceptHook(os.getcwd(),__version__)
     
-    frame = networkedit(None)
+    frame = networkedit(None, projectOpen=projectOpen)
 
     frame.Show()
     app.MainLoop()