objdictgen/objdictedit.py
changeset 491 2ad3dedf6c6a
parent 488 01ab26d29117
child 512 e84806c0ada4
equal deleted inserted replaced
490:305d75028630 491:2ad3dedf6c6a
   287     def __init__(self, parent, manager = None, filesOpen = []):
   287     def __init__(self, parent, manager = None, filesOpen = []):
   288         self.ModeSolo = manager == None
   288         self.ModeSolo = manager == None
   289         self._init_ctrls(parent)
   289         self._init_ctrls(parent)
   290         self.HtmlFrameOpened = []
   290         self.HtmlFrameOpened = []
   291         self.BusId = None
   291         self.BusId = None
       
   292         self.Closing = False
   292         
   293         
   293         icon = wx.Icon(os.path.join(ScriptDirectory,"networkedit.ico"),wx.BITMAP_TYPE_ICO)
   294         icon = wx.Icon(os.path.join(ScriptDirectory,"networkedit.ico"),wx.BITMAP_TYPE_ICO)
   294         self.SetIcon(icon)
   295         self.SetIcon(icon)
   295         
   296         
   296         if self.ModeSolo:
   297         if self.ModeSolo:
   306             for index in self.Manager.GetBufferIndexes():
   307             for index in self.Manager.GetBufferIndexes():
   307                 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager)
   308                 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager)
   308                 new_editingpanel.SetIndex(index)
   309                 new_editingpanel.SetIndex(index)
   309                 self.FileOpened.AddPage(new_editingpanel, "")
   310                 self.FileOpened.AddPage(new_editingpanel, "")
   310         
   311         
   311         window = self.FileOpened.GetPage(0)
   312         if self.Manager.GetBufferNumber() > 0:
   312         if window:
   313             window = self.FileOpened.GetPage(0)
   313             self.Manager.ChangeCurrentNode(window.GetIndex())
   314             if window:
   314             self.FileOpened.SetSelection(0)
   315                 self.Manager.ChangeCurrentNode(window.GetIndex())
       
   316                 self.FileOpened.SetSelection(0)
   315         
   317         
   316         if self.Manager.CurrentDS302Defined():
   318         if self.Manager.CurrentDS302Defined():
   317             self.EditMenu.Enable(ID_OBJDICTEDITEDITMENUDS302PROFILE, True)
   319             self.EditMenu.Enable(ID_OBJDICTEDITEDITMENUDS302PROFILE, True)
   318         else:
   320         else:
   319             self.EditMenu.Enable(ID_OBJDICTEDITEDITMENUDS302PROFILE, False)
   321             self.EditMenu.Enable(ID_OBJDICTEDITEDITMENUDS302PROFILE, False)
   327         self.BusId = bus_id
   329         self.BusId = bus_id
   328 
   330 
   329     def GetBusId(self):
   331     def GetBusId(self):
   330         return self.BusId
   332         return self.BusId
   331 
   333 
       
   334     def IsClosing(self):
       
   335         return self.Closing
       
   336 
   332     def OnAddSDOServerMenu(self, event):
   337     def OnAddSDOServerMenu(self, event):
   333         self.Manager.AddSDOServerToCurrent()
   338         self.Manager.AddSDOServerToCurrent()
   334         self.RefreshBufferState()
   339         self.RefreshBufferState()
   335         self.RefreshCurrentIndexList()
   340         self.RefreshCurrentIndexList()
   336         event.Skip()
   341         event.Skip()
   360     def OnAddUserTypeMenu(self, event):
   365     def OnAddUserTypeMenu(self, event):
   361         self.AddUserType()
   366         self.AddUserType()
   362         event.Skip()
   367         event.Skip()
   363 
   368 
   364     def OnFileSelectedChanged(self, event):
   369     def OnFileSelectedChanged(self, event):
   365         selected = event.GetSelection()
   370         if not self.Closing:
   366         # At init selected = -1
   371             selected = event.GetSelection()
   367         if selected >= 0:
   372             # At init selected = -1
   368             window = self.FileOpened.GetPage(selected)
   373             if selected >= 0:
   369             if window:
   374                 window = self.FileOpened.GetPage(selected)
   370                 self.Manager.ChangeCurrentNode(window.GetIndex())
   375                 if window:
   371                 wx.CallAfter(self.RefreshBufferState)
   376                     self.Manager.ChangeCurrentNode(window.GetIndex())
   372                 self.RefreshStatusBar()
   377                     wx.CallAfter(self.RefreshBufferState)
   373                 self.RefreshProfileMenu()
   378                     self.RefreshStatusBar()
       
   379                     self.RefreshProfileMenu()
   374         event.Skip()
   380         event.Skip()
   375 
   381 
   376     def OnHelpDS301Menu(self, event):
   382     def OnHelpDS301Menu(self, event):
   377         find_index = False
   383         find_index = False
   378         selected = self.FileOpened.GetSelection()
   384         selected = self.FileOpened.GetSelection()
   422     def OnQuitMenu(self, event):
   428     def OnQuitMenu(self, event):
   423         self.Close()
   429         self.Close()
   424         event.Skip()
   430         event.Skip()
   425     
   431     
   426     def OnCloseFrame(self, event):
   432     def OnCloseFrame(self, event):
       
   433         self.Closing = True
   427         if not self.ModeSolo:
   434         if not self.ModeSolo:
   428             if getattr(self, "_onclose", None) != None:
   435             if getattr(self, "_onclose", None) != None:
   429                 self._onclose()
   436                 self._onclose()
   430             event.Skip()
   437             event.Skip()
   431         elif self.Manager.OneFileHasChanged():
   438         elif self.Manager.OneFileHasChanged():
   432             dialog = wx.MessageDialog(self, "There are changes, do you want to save?",  "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
   439             dialog = wx.MessageDialog(self, "There are changes, do you want to save?",  "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
   433             answer = dialog.ShowModal()
   440             answer = dialog.ShowModal()
   434             dialog.Destroy()
   441             dialog.Destroy()
   435             if answer == wx.ID_YES:
   442             if answer == wx.ID_YES:
   436                 self.Manager.ChangeCurrentNode(0)
   443                 for i in xrange(self.Manager.GetBufferNumber()):
   437                 for i in xrange(self.FileOpened.GetPageCount()):
       
   438                     window = self.FileOpened.GetPage(i)
       
   439                     self.Manager.ChangeCurrentNode(window.GetIndex())
       
   440                     if self.Manager.CurrentIsSaved():
   444                     if self.Manager.CurrentIsSaved():
   441                         self.Manager.CloseCurrent()
   445                         self.Manager.CloseCurrent()
   442                     else:
   446                     else:
   443                         self.Save()
   447                         self.Save()
   444                         self.Manager.CloseCurrent(True)
   448                         self.Manager.CloseCurrent(True)
   445                 event.Skip()
   449                 event.Skip()
   446             elif answer == wx.ID_NO:
   450             elif answer == wx.ID_NO:
   447                 for i in xrange(self.FileOpened.GetPageCount()):
       
   448                     self.Manager.CloseCurrent(True)
       
   449                 wx.CallAfter(self.Close)
       
   450                 event.Skip()
   451                 event.Skip()
       
   452             else:
       
   453                 event.Veto()
   451         else:
   454         else:
   452             event.Skip()
   455             event.Skip()
   453 
   456 
   454 #-------------------------------------------------------------------------------
   457 #-------------------------------------------------------------------------------
   455 #                             Refresh Functions
   458 #                             Refresh Functions
   469         selected = self.FileOpened.GetSelection()
   472         selected = self.FileOpened.GetSelection()
   470         window = self.FileOpened.GetPage(selected)
   473         window = self.FileOpened.GetPage(selected)
   471         window.RefreshIndexList()
   474         window.RefreshIndexList()
   472 
   475 
   473     def RefreshStatusBar(self):
   476     def RefreshStatusBar(self):
   474         if self and self.HelpBar:
   477         selected = self.FileOpened.GetSelection()
   475             selected = self.FileOpened.GetSelection()
   478         if selected >= 0:
   476             if selected >= 0:
   479             window = self.FileOpened.GetPage(selected)
   477                 window = self.FileOpened.GetPage(selected)
   480             selection = window.GetSelection()
   478                 selection = window.GetSelection()
   481             if selection:
   479                 if selection:
   482                 index, subIndex = selection
   480                     index, subIndex = selection
   483                 if self.Manager.IsCurrentEntry(index):
   481                     if self.Manager.IsCurrentEntry(index):
   484                     self.HelpBar.SetStatusText("Index: 0x%04X"%index, 0)
   482                         self.HelpBar.SetStatusText("Index: 0x%04X"%index, 0)
   485                     self.HelpBar.SetStatusText("Subindex: 0x%02X"%subIndex, 1)
   483                         self.HelpBar.SetStatusText("Subindex: 0x%02X"%subIndex, 1)
   486                     entryinfos = self.Manager.GetEntryInfos(index)
   484                         entryinfos = self.Manager.GetEntryInfos(index)
   487                     name = entryinfos["name"]
   485                         name = entryinfos["name"]
   488                     category = "Optional"
   486                         category = "Optional"
   489                     if entryinfos["need"]:
   487                         if entryinfos["need"]:
   490                         category = "Mandatory"
   488                             category = "Mandatory"
   491                     struct = "VAR"
   489                         struct = "VAR"
   492                     number = ""
   490                         number = ""
   493                     if entryinfos["struct"] & OD_IdenticalIndexes:
   491                         if entryinfos["struct"] & OD_IdenticalIndexes:
   494                         number = " possibly defined %d times"%entryinfos["nbmax"]
   492                             number = " possibly defined %d times"%entryinfos["nbmax"]
   495                     if entryinfos["struct"] & OD_IdenticalSubindexes:
   493                         if entryinfos["struct"] & OD_IdenticalSubindexes:
   496                         struct = "REC"
   494                             struct = "REC"
   497                     elif entryinfos["struct"] & OD_MultipleSubindexes:
   495                         elif entryinfos["struct"] & OD_MultipleSubindexes:
   498                         struct = "ARRAY"
   496                             struct = "ARRAY"
   499                     text = "%s: %s entry of struct %s%s."%(name,category,struct,number)
   497                         text = "%s: %s entry of struct %s%s."%(name,category,struct,number)
   500                     self.HelpBar.SetStatusText(text, 2)
   498                         self.HelpBar.SetStatusText(text, 2)
       
   499                     else:
       
   500                         for i in xrange(3):
       
   501                             self.HelpBar.SetStatusText("", i)
       
   502                 else:
   501                 else:
   503                     for i in xrange(3):
   502                     for i in xrange(3):
   504                         self.HelpBar.SetStatusText("", i)
   503                         self.HelpBar.SetStatusText("", i)
       
   504             else:
       
   505                 for i in xrange(3):
       
   506                     self.HelpBar.SetStatusText("", i)
   505 
   507 
   506     def RefreshMainMenu(self):
   508     def RefreshMainMenu(self):
   507         if self:
   509         if self.FileOpened.GetPageCount() > 0:
   508             if self.FileOpened.GetPageCount() > 0:
   510             if self.ModeSolo:
   509                 if self.ModeSolo:
   511                 self.MenuBar.EnableTop(1, True)
   510                     self.MenuBar.EnableTop(1, True)
   512                 self.MenuBar.EnableTop(2, True)
   511                     self.MenuBar.EnableTop(2, True)
   513                 self.FileMenu.Enable(wx.ID_CLOSE, True)
   512                     if self.FileMenu:
   514                 self.FileMenu.Enable(wx.ID_SAVE, True)
   513                         self.FileMenu.Enable(wx.ID_CLOSE, True)
   515                 self.FileMenu.Enable(wx.ID_SAVEAS, True)
   514                         self.FileMenu.Enable(wx.ID_SAVE, True)
   516                 self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, True)
   515                         self.FileMenu.Enable(wx.ID_SAVEAS, True)
   517                 self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, True)
   516                         self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, True)
   518             else:
   517                         self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, True)
   519                 self.MenuBar.EnableTop(0, True)
   518                 else:
   520                 self.MenuBar.EnableTop(1, True)
   519                     self.MenuBar.EnableTop(0, True)
   521         else:
   520                     self.MenuBar.EnableTop(1, True)
   522             if self.ModeSolo:
   521             else:
   523                 self.MenuBar.EnableTop(1, False)
   522                 if self.ModeSolo:
   524                 self.MenuBar.EnableTop(2, False)
   523                     self.MenuBar.EnableTop(1, False)
   525                 self.FileMenu.Enable(wx.ID_CLOSE, False)
   524                     self.MenuBar.EnableTop(2, False)
   526                 self.FileMenu.Enable(wx.ID_SAVE, False)
   525                     if self.FileMenu:
   527                 self.FileMenu.Enable(wx.ID_SAVEAS, False)
   526                         self.FileMenu.Enable(wx.ID_CLOSE, False)
   528                 self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, False)
   527                         self.FileMenu.Enable(wx.ID_SAVE, False)
   529                 self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, False)
   528                         self.FileMenu.Enable(wx.ID_SAVEAS, False)
   530             else:
   529                         self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTEDS, False)
   531                 self.MenuBar.EnableTop(0, False)
   530                         self.FileMenu.Enable(ID_OBJDICTEDITFILEMENUEXPORTC, False)
   532                 self.MenuBar.EnableTop(1, False)
   531                 else:
       
   532                     self.MenuBar.EnableTop(0, False)
       
   533                     self.MenuBar.EnableTop(1, False)
       
   534 
   533 
   535     def RefreshEditMenu(self):
   534     def RefreshEditMenu(self):
   536         if self.EditMenu:
   535         if self.FileOpened.GetPageCount() > 0:
   537             if self.FileOpened.GetPageCount() > 0:
   536             undo, redo = self.Manager.GetCurrentBufferState()
   538                 undo, redo = self.Manager.GetCurrentBufferState()
   537             self.EditMenu.Enable(wx.ID_UNDO, undo)
   539                 self.EditMenu.Enable(wx.ID_UNDO, undo)
   538             self.EditMenu.Enable(wx.ID_REDO, redo)
   540                 self.EditMenu.Enable(wx.ID_REDO, redo)
   539         else:
   541             else:
   540             self.EditMenu.Enable(wx.ID_UNDO, False)
   542                 self.EditMenu.Enable(wx.ID_UNDO, False)
   541             self.EditMenu.Enable(wx.ID_REDO, False)
   543                 self.EditMenu.Enable(wx.ID_REDO, False)
       
   544 
   542 
   545     def RefreshProfileMenu(self):
   543     def RefreshProfileMenu(self):
   546         if self.EditMenu:
   544         profile = self.Manager.GetCurrentProfileName()
   547             profile = self.Manager.GetCurrentProfileName()
   545         edititem = self.EditMenu.FindItemById(ID_OBJDICTEDITEDITMENUOTHERPROFILE)
   548             edititem = self.EditMenu.FindItemById(ID_OBJDICTEDITEDITMENUOTHERPROFILE)
   546         if edititem:
   549             if edititem:
   547             length = self.AddMenu.GetMenuItemCount()
   550                 length = self.AddMenu.GetMenuItemCount()
   548             for i in xrange(length-6):
   551                 for i in xrange(length-6):
   549                 additem = self.AddMenu.FindItemByPosition(6)
   552                     additem = self.AddMenu.FindItemByPosition(6)
   550                 self.AddMenu.Delete(additem.GetId())
   553                     self.AddMenu.Delete(additem.GetId())
   551             if profile not in ("None", "DS-301"):
   554                 if profile not in ("None", "DS-301"):
   552                 edititem.SetText("%s Profile"%profile)
   555                     edititem.SetText("%s Profile"%profile)
   553                 edititem.Enable(True)
   556                     edititem.Enable(True)
   554                 self.AddMenu.AppendSeparator()
   557                     self.AddMenu.AppendSeparator()
   555                 for text, indexes in self.Manager.GetCurrentSpecificMenu():
   558                     for text, indexes in self.Manager.GetCurrentSpecificMenu():
   556                     new_id = wx.NewId()
   559                         new_id = wx.NewId()
   557                     self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
   560                         self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text)
   558                     self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
   561                         self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id)
   559             else:
   562                 else:
   560                 edititem.SetText("Other Profile")
   563                     edititem.SetText("Other Profile")
   561                 edititem.Enable(False)
   564                     edititem.Enable(False)
       
   565         
   562         
   566 
   563 
   567 #-------------------------------------------------------------------------------
   564 #-------------------------------------------------------------------------------
   568 #                            Buffer Functions
   565 #                            Buffer Functions
   569 #-------------------------------------------------------------------------------
   566 #-------------------------------------------------------------------------------
   749                 message = wx.MessageDialog(self, "\"%s\" is not a valid file!"%filepath, "Error", wx.OK|wx.ICON_ERROR)
   746                 message = wx.MessageDialog(self, "\"%s\" is not a valid file!"%filepath, "Error", wx.OK|wx.ICON_ERROR)
   750                 message.ShowModal()
   747                 message.ShowModal()
   751                 message.Destroy()
   748                 message.Destroy()
   752         dialog.Destroy()
   749         dialog.Destroy()
   753         event.Skip()
   750         event.Skip()
   754 
       
   755 
   751 
   756     def OnExportEDSMenu(self, event):
   752     def OnExportEDSMenu(self, event):
   757         dialog = wx.FileDialog(self, "Choose a file", os.getcwd(), self.Manager.GetCurrentNodeInfos()[0], "EDS files (*.eds)|*.eds|All files|*.*", wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR)
   753         dialog = wx.FileDialog(self, "Choose a file", os.getcwd(), self.Manager.GetCurrentNodeInfos()[0], "EDS files (*.eds)|*.eds|All files|*.*", wx.SAVE|wx.OVERWRITE_PROMPT|wx.CHANGE_DIR)
   758         if dialog.ShowModal() == wx.ID_OK:
   754         if dialog.ShowModal() == wx.ID_OK:
   759             filepath = dialog.GetPath()
   755             filepath = dialog.GetPath()