objdictgen/networkedit.py
changeset 242 4864f7f01e1d
parent 238 be485a93e3f7
child 243 7fcc129a06ce
equal deleted inserted replaced
241:4ecc2f3690f4 242:4864f7f01e1d
    35 from nodelist import *
    35 from nodelist import *
    36 from nodemanager import *
    36 from nodemanager import *
    37 from subindextable import *
    37 from subindextable import *
    38 from commondialogs import *
    38 from commondialogs import *
    39 from doc_index.DS301_index import *
    39 from doc_index.DS301_index import *
    40 from config_utils import *
       
    41 
    40 
    42 def create(parent):
    41 def create(parent):
    43     return networkedit(parent)
    42     return networkedit(parent)
    44 
    43 
    45 def usage():
    44 def usage():
    63 elif len(args) == 1:
    62 elif len(args) == 1:
    64     projectOpen = args[0]
    63     projectOpen = args[0]
    65 else:
    64 else:
    66     usage()
    65     usage()
    67     sys.exit(2)
    66     sys.exit(2)
    68 
    67 ScriptDirectory = ""
    69 ScriptDirectory = sys.path[0]
    68 for path in sys.path:
       
    69     if os.path.isfile(os.path.join(path, "networkedit.py")):
       
    70         ScriptDirectory = path
    70 
    71 
    71 try:
    72 try:
    72     from wxPython.html import *
    73     from wxPython.html import *
    73 
    74 
    74     wxEVT_HTML_URL_CLICK = wxNewId()
    75     wxEVT_HTML_URL_CLICK = wxNewId()
   168 
   169 
   169 class networkedit(wx.Frame):
   170 class networkedit(wx.Frame):
   170     def _init_coll_menuBar1_Menus(self, parent):
   171     def _init_coll_menuBar1_Menus(self, parent):
   171         # generated method, don't edit
   172         # generated method, don't edit
   172 
   173 
   173         if self.Mode == "solo":
   174         if self.ModeSolo:
   174             parent.Append(menu=self.FileMenu, title='File')
   175             parent.Append(menu=self.FileMenu, title='File')
   175         parent.Append(menu=self.NetworkMenu, title='Network')
   176         parent.Append(menu=self.NetworkMenu, title='Network')
   176         parent.Append(menu=self.EditMenu, title='Edit')
   177         parent.Append(menu=self.EditMenu, title='Edit')
   177         parent.Append(menu=self.AddMenu, title='Add')
   178         parent.Append(menu=self.AddMenu, title='Add')
   178         parent.Append(menu=self.HelpMenu, title='Help')
   179         parent.Append(menu=self.HelpMenu, title='Help')
   220               id=wxID_NETWORKEDITHELPMENUITEMS0)
   221               id=wxID_NETWORKEDITHELPMENUITEMS0)
   221         parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS1,
   222         parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS1,
   222               kind=wx.ITEM_NORMAL, text='CAN Festival Docs\tF2')
   223               kind=wx.ITEM_NORMAL, text='CAN Festival Docs\tF2')
   223         self.Bind(wx.EVT_MENU, self.OnHelpCANFestivalMenu,
   224         self.Bind(wx.EVT_MENU, self.OnHelpCANFestivalMenu,
   224               id=wxID_NETWORKEDITHELPMENUITEMS1)
   225               id=wxID_NETWORKEDITHELPMENUITEMS1)
   225         if Html_Window and self.Mode == "solo":
   226         if Html_Window and self.ModeSolo:
   226             parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS2,
   227             parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS2,
   227                   kind=wx.ITEM_NORMAL, text='About')
   228                   kind=wx.ITEM_NORMAL, text='About')
   228             self.Bind(wx.EVT_MENU, self.OnAboutMenu,
   229             self.Bind(wx.EVT_MENU, self.OnAboutMenu,
   229                   id=wxID_NETWORKEDITHELPMENUITEMS2)
   230                   id=wxID_NETWORKEDITHELPMENUITEMS2)
   230 
   231 
   244               kind=wx.ITEM_NORMAL, text='Exit')
   245               kind=wx.ITEM_NORMAL, text='Exit')
   245         self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu,
   246         self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu,
   246               id=wxID_NETWORKEDITFILEMENUITEMS0)
   247               id=wxID_NETWORKEDITFILEMENUITEMS0)
   247         self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu,
   248         self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu,
   248               id=wxID_NETWORKEDITFILEMENUITEMS1)
   249               id=wxID_NETWORKEDITFILEMENUITEMS1)
   249 ##        self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu,
   250         self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu,
   250 ##              id=wxID_NETWORKEDITFILEMENUITEMS2)
   251               id=wxID_NETWORKEDITFILEMENUITEMS2)
   251         self.Bind(wx.EVT_MENU, self.OnQuitMenu,
   252         self.Bind(wx.EVT_MENU, self.OnQuitMenu,
   252               id=wxID_NETWORKEDITFILEMENUITEMS4)
   253               id=wxID_NETWORKEDITFILEMENUITEMS4)
   253         self.Bind(wx.EVT_MENU, self.OnNewProjectMenu,
   254         self.Bind(wx.EVT_MENU, self.OnNewProjectMenu,
   254               id=wxID_NETWORKEDITFILEMENUITEMS5)
   255               id=wxID_NETWORKEDITFILEMENUITEMS5)
   255     
   256     
   265               kind=wx.ITEM_NORMAL, text='Build Master Dictionary')
   266               kind=wx.ITEM_NORMAL, text='Build Master Dictionary')
   266         self.Bind(wx.EVT_MENU, self.OnAddSlaveMenu,
   267         self.Bind(wx.EVT_MENU, self.OnAddSlaveMenu,
   267               id=wxID_NETWORKEDITNETWORKMENUITEMS0)
   268               id=wxID_NETWORKEDITNETWORKMENUITEMS0)
   268         self.Bind(wx.EVT_MENU, self.OnRemoveSlaveMenu,
   269         self.Bind(wx.EVT_MENU, self.OnRemoveSlaveMenu,
   269               id=wxID_NETWORKEDITNETWORKMENUITEMS1)
   270               id=wxID_NETWORKEDITNETWORKMENUITEMS1)
   270         self.Bind(wx.EVT_MENU, self.OnBuildMasterMenu,
   271 ##        self.Bind(wx.EVT_MENU, self.OnBuildMasterMenu,
   271               id=wxID_NETWORKEDITNETWORKMENUITEMS3)
   272 ##              id=wxID_NETWORKEDITNETWORKMENUITEMS3)
   272     
   273     
   273     def _init_coll_AddMenu_Items(self, parent):
   274     def _init_coll_AddMenu_Items(self, parent):
   274         # generated method, don't edit
   275         # generated method, don't edit
   275 
   276 
   276         parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS0,
   277         parent.Append(help='', id=wxID_NETWORKEDITADDMENUITEMS0,
   311     def _init_utils(self):
   312     def _init_utils(self):
   312         # generated method, don't edit
   313         # generated method, don't edit
   313         self.menuBar1 = wx.MenuBar()
   314         self.menuBar1 = wx.MenuBar()
   314         self.menuBar1.SetEvtHandlerEnabled(True)
   315         self.menuBar1.SetEvtHandlerEnabled(True)
   315         
   316         
   316         if self.Mode == "solo":
   317         if self.ModeSolo:
   317             self.FileMenu = wx.Menu(title='')
   318             self.FileMenu = wx.Menu(title='')
   318         
   319         
   319         self.NetworkMenu = wx.Menu(title='')
   320         self.NetworkMenu = wx.Menu(title='')
   320 
   321 
   321         self.EditMenu = wx.Menu(title='')
   322         self.EditMenu = wx.Menu(title='')
   323         self.AddMenu = wx.Menu(title='')
   324         self.AddMenu = wx.Menu(title='')
   324 
   325 
   325         self.HelpMenu = wx.Menu(title='')
   326         self.HelpMenu = wx.Menu(title='')
   326 
   327 
   327         self._init_coll_menuBar1_Menus(self.menuBar1)
   328         self._init_coll_menuBar1_Menus(self.menuBar1)
   328         if self.Mode == "solo":
   329         if self.ModeSolo:
   329             self._init_coll_FileMenu_Items(self.FileMenu)
   330             self._init_coll_FileMenu_Items(self.FileMenu)
   330         self._init_coll_NetworkMenu_Items(self.NetworkMenu)
   331         self._init_coll_NetworkMenu_Items(self.NetworkMenu)
   331         self._init_coll_EditMenu_Items(self.EditMenu)
   332         self._init_coll_EditMenu_Items(self.EditMenu)
   332         self._init_coll_AddMenu_Items(self.AddMenu)
   333         self._init_coll_AddMenu_Items(self.AddMenu)
   333         self._init_coll_HelpMenu_Items(self.HelpMenu)
   334         self._init_coll_HelpMenu_Items(self.HelpMenu)
   338               parent=prnt, pos=wx.Point(149, 178), size=wx.Size(1000, 700),
   339               parent=prnt, pos=wx.Point(149, 178), size=wx.Size(1000, 700),
   339               style=wx.DEFAULT_FRAME_STYLE, title='Networkedit')
   340               style=wx.DEFAULT_FRAME_STYLE, title='Networkedit')
   340         self._init_utils()
   341         self._init_utils()
   341         self.SetClientSize(wx.Size(1000, 700))
   342         self.SetClientSize(wx.Size(1000, 700))
   342         self.SetMenuBar(self.menuBar1)
   343         self.SetMenuBar(self.menuBar1)
   343 ##        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_NETWORKEDIT)
   344         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_NETWORKEDIT)
   344 
   345 
   345         self.NetworkNodes = wx.Notebook(id=wxID_NETWORKEDITNETWORKNODES,
   346         self.NetworkNodes = wx.Notebook(id=wxID_NETWORKEDITNETWORKNODES,
   346               name='NetworkNodes', parent=self, pos=wx.Point(0, 0),
   347               name='NetworkNodes', parent=self, pos=wx.Point(0, 0),
   347               size=wx.Size(0, 0), style=wxNB_LEFT)
   348               size=wx.Size(0, 0), style=wxNB_LEFT)
   348         self.NetworkNodes.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
   349         self.NetworkNodes.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED,
   351         self.HelpBar = wx.StatusBar(id=wxID_NETWORKEDITHELPBAR, name='HelpBar',
   352         self.HelpBar = wx.StatusBar(id=wxID_NETWORKEDITHELPBAR, name='HelpBar',
   352               parent=self, style=wxST_SIZEGRIP)
   353               parent=self, style=wxST_SIZEGRIP)
   353         self._init_coll_HelpBar_Fields(self.HelpBar)
   354         self._init_coll_HelpBar_Fields(self.HelpBar)
   354         self.SetStatusBar(self.HelpBar)
   355         self.SetStatusBar(self.HelpBar)
   355 
   356 
   356     def __init__(self, parent, mode = "solo", nodelist = None):
   357     def __init__(self, parent, nodelist = None):
   357         self.Mode = mode
   358         self.ModeSolo = nodelist == None
   358         self._init_ctrls(parent)
   359         self._init_ctrls(parent)
       
   360         self.Parent = parent
   359         self.HtmlFrameOpened = []
   361         self.HtmlFrameOpened = []
       
   362         self.BusId = None
   360         
   363         
   361         if self.Mode == "solo":
   364         if self.ModeSolo:
   362             self.Manager = NodeManager(ScriptDirectory)
   365             self.Manager = NodeManager(ScriptDirectory)
   363             if projectOpen:
   366             if projectOpen:
   364                 self.NodeList = NodeList(self.Manager)
   367                 self.NodeList = NodeList(self.Manager)
   365                 result = self.NodeList.LoadProject(projectOpen)
   368                 result = self.NodeList.LoadProject(projectOpen)
   366                 if not result:
   369                 if not result:
   368             else:
   371             else:
   369                 self.NodeList = None
   372                 self.NodeList = None
   370         else:
   373         else:
   371             self.NodeList = nodelist
   374             self.NodeList = nodelist
   372             self.Manager = self.NodeList.GetManager()
   375             self.Manager = self.NodeList.GetManager()
       
   376             self.NodeList.SetCurrentSelected(0)
       
   377             self.RefreshNetworkNodes()
       
   378             self.RefreshProfileMenu()
   373         
   379         
   374         self.RefreshBufferState()
   380         self.RefreshBufferState()
   375         self.RefreshTitle()
   381         self.RefreshTitle()
   376         self.RefreshMainMenu()
   382         self.RefreshMainMenu()
       
   383 
       
   384     def SetBusId(self, bus_id):
       
   385         self.BusId = bus_id
       
   386 
       
   387     def GetBusId(self):
       
   388         return self.BusId
       
   389 
       
   390     def GetCurrentNodeId(self):
       
   391         selected = self.NetworkNodes.GetSelection()
       
   392         # At init selected = -1
       
   393         if selected > 0:
       
   394             window = self.NetworkNodes.GetPage(selected)
       
   395             return window.GetIndex()
       
   396         else:
       
   397             return 0
       
   398 
       
   399     def OnCloseFrame(self, event):
       
   400         if not self.ModeSolo:
       
   401             self.Parent.CloseEditor(self.BusId)
       
   402         event.Skip()
   377 
   403 
   378     def GetNoteBook(self):
   404     def GetNoteBook(self):
   379         return self.NetworkNodes
   405         return self.NetworkNodes
   380 
   406 
   381     def OnQuitMenu(self, event):
   407     def OnQuitMenu(self, event):
   435             defaultpath = os.getcwd()
   461             defaultpath = os.getcwd()
   436         dialog = wxDirDialog(self , "Choose a project", defaultpath, wxDD_NEW_DIR_BUTTON)
   462         dialog = wxDirDialog(self , "Choose a project", defaultpath, wxDD_NEW_DIR_BUTTON)
   437         if dialog.ShowModal() == wxID_OK:
   463         if dialog.ShowModal() == wxID_OK:
   438             projectpath = dialog.GetPath()
   464             projectpath = dialog.GetPath()
   439             if os.path.isdir(projectpath) and len(os.listdir(projectpath)) == 0:
   465             if os.path.isdir(projectpath) and len(os.listdir(projectpath)) == 0:
       
   466                 os.mkdir(os.path.join(projectpath, "eds"))
   440                 manager = NodeManager(ScriptDirectory)
   467                 manager = NodeManager(ScriptDirectory)
   441                 nodelist = NodeList(manager)
   468                 nodelist = NodeList(manager)
   442                 result = nodelist.LoadProject(projectpath)
   469                 result = nodelist.LoadProject(projectpath)
   443                 if not result:
   470                 if not result:
   444                     self.Manager = manager
   471                     self.Manager = manager
   491             message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
   518             message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
   492             message.ShowModal()
   519             message.ShowModal()
   493             message.Destroy()
   520             message.Destroy()
   494         event.Skip()
   521         event.Skip()
   495 
   522 
   496     def OnBuildMasterMenu(self, event):
   523     def OnCloseProjectMenu(self, event):
   497         if self.NodeList:
   524         if self.NodeList:
   498             dialog = wxFileDialog(self, "Choose a locations file", os.getcwd(), "",  "text files (*.txt)|*.od|All files|*.*", wxOPEN|wxCHANGE_DIR)
   525             if self.NodeList.HasChanged():
   499             if dialog.ShowModal() == wxID_OK:
   526                 dialog = wxMessageDialog(self, "There are changes, do you want to save?",  "Close Project", wxYES_NO|wxCANCEL|wxICON_QUESTION)
   500                 filepath = dialog.GetPath()
   527                 answer = dialog.ShowModal()
   501                 dialog.Destroy()
   528                 dialog.Destroy()
   502                 if os.path.isfile(filepath):
   529                 if answer == wxID_YES:
   503                     dialog = wxTextEntryDialog(self, "Busname selection", "Please enter the bus number", "", wxOK|wxCANCEL)
   530                     result = self.NodeList.SaveProject()
   504                     if dialog.ShowModal() == wxID_OK:
   531                     if result:
   505                         busname = None
   532                         message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR)
   506                         try:
   533                         message.ShowModal()
   507                             busname = int(dialog.GetValue())
   534                         message.Destroy()
   508                         except:
   535                 elif answer == wxID_NO:
   509                             pass
   536                     self.NodeList.ForceChanged(False)
   510                         if busname:
   537             if not self.NodeList.HasChanged():
   511                             file = open(filepath, "r")
   538                 self.Manager = None
   512                             locations = [(elements[0], elements[1]) for elements in [line.strip().split(" ") for line in file.readlines()]]
   539                 self.NodeList = None
   513                             GenerateConciseDCF(locations, busname, self.NodeList)
   540                 self.RefreshNetworkNodes()
   514                             message = wxMessageDialog(self, "Master node generation successful!", "Error", wxOK|wxICON_ERROR)
   541                 self.RefreshTitle()
   515                             message.ShowModal()
   542                 self.RefreshMainMenu()
   516                             message.Destroy()
   543         event.Skip()
   517                         else:
       
   518                             message = wxMessageDialog(self, "Busname must be a number!", "Error", wxOK|wxICON_ERROR)
       
   519                             message.ShowModal()
       
   520                             message.Destroy()
       
   521                 else:
       
   522                     message = wxMessageDialog(self, "\"%s\" isn't a valid file!"%filepath, "Error", wxOK|wxICON_ERROR)
       
   523                     message.ShowModal()
       
   524                     message.Destroy()
       
   525         event.Skip()
       
   526         
       
   527 
   544 
   528 #-------------------------------------------------------------------------------
   545 #-------------------------------------------------------------------------------
   529 #                             Slave Nodes Management
   546 #                             Slave Nodes Management
   530 #-------------------------------------------------------------------------------
   547 #-------------------------------------------------------------------------------
   531 
   548 
   638                 for i in xrange(3):
   655                 for i in xrange(3):
   639                     self.HelpBar.SetStatusText("", i)
   656                     self.HelpBar.SetStatusText("", i)
   640 
   657 
   641     def RefreshMainMenu(self):
   658     def RefreshMainMenu(self):
   642         if self.menuBar1:
   659         if self.menuBar1:
       
   660             self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, False)
   643             if self.NodeList == None:
   661             if self.NodeList == None:
   644                 self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, False)
   662                 if self.ModeSolo:
   645                 if self.Mode == "solo":
       
   646                     self.menuBar1.EnableTop(1, False)
   663                     self.menuBar1.EnableTop(1, False)
   647                     self.menuBar1.EnableTop(2, False)
   664                     self.menuBar1.EnableTop(2, False)
   648                     self.menuBar1.EnableTop(3, False)
   665                     self.menuBar1.EnableTop(3, False)
   649                     if self.FileMenu:
   666                     if self.FileMenu:
   650                         self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, False)
   667                         self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, False)
   652                 else:
   669                 else:
   653                     self.menuBar1.EnableTop(0, False)
   670                     self.menuBar1.EnableTop(0, False)
   654                     self.menuBar1.EnableTop(1, False)
   671                     self.menuBar1.EnableTop(1, False)
   655                     self.menuBar1.EnableTop(2, False)
   672                     self.menuBar1.EnableTop(2, False)
   656             else:
   673             else:
   657                 self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, True)
   674                 if self.ModeSolo:
   658                 if self.Mode == "solo":
       
   659                     self.menuBar1.EnableTop(1, True)
   675                     self.menuBar1.EnableTop(1, True)
   660                     if self.FileMenu:
   676                     if self.FileMenu:
   661                         self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, True)
   677                         self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, True)
   662                         self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS2, True)
   678                         self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS2, True)
   663                     if self.NetworkNodes.GetSelection() == 0:
   679                     if self.NetworkNodes.GetSelection() == 0:
   693                         self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
   709                         self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
   694                         self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
   710                         self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
   695                 else:
   711                 else:
   696                     edititem.SetText("Other Profile")
   712                     edititem.SetText("Other Profile")
   697                     edititem.Enable(False)
   713                     edititem.Enable(False)
   698 
       
   699     def GetProfileCallBack(self, text):
       
   700         def ProfileCallBack(event):
       
   701             self.Manager.AddSpecificEntryToCurrent(text)
       
   702             self.RefreshBufferState()
       
   703             self.RefreshCurrentIndexList()
       
   704             event.Skip()
       
   705         return ProfileCallBack
       
   706 
   714 
   707 #-------------------------------------------------------------------------------
   715 #-------------------------------------------------------------------------------
   708 #                              Buffer Functions
   716 #                              Buffer Functions
   709 #-------------------------------------------------------------------------------
   717 #-------------------------------------------------------------------------------
   710 
   718