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(): |
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 |