165 [ID_OBJDICTEDITADDMENUSDOSERVER, ID_OBJDICTEDITADDMENUSDOCLIENT, |
164 [ID_OBJDICTEDITADDMENUSDOSERVER, ID_OBJDICTEDITADDMENUSDOCLIENT, |
166 ID_OBJDICTEDITADDMENUPDOTRANSMIT, ID_OBJDICTEDITADDMENUPDORECEIVE, |
165 ID_OBJDICTEDITADDMENUPDOTRANSMIT, ID_OBJDICTEDITADDMENUPDORECEIVE, |
167 ID_OBJDICTEDITADDMENUMAPVARIABLE, ID_OBJDICTEDITADDMENUUSERTYPE, |
166 ID_OBJDICTEDITADDMENUMAPVARIABLE, ID_OBJDICTEDITADDMENUUSERTYPE, |
168 ] = [wx.NewId() for _init_coll_AddMenu_Items in range(6)] |
167 ] = [wx.NewId() for _init_coll_AddMenu_Items in range(6)] |
169 |
168 |
170 class objdictedit(wx.Frame): |
169 class objdictedit(wx.Frame, NodeEditorTemplate): |
|
170 |
|
171 EDITMENU_ID = ID_OBJDICTEDITEDITMENUOTHERPROFILE |
|
172 |
171 def _init_coll_MenuBar_Menus(self, parent): |
173 def _init_coll_MenuBar_Menus(self, parent): |
172 if self.ModeSolo: |
174 if self.ModeSolo: |
173 parent.Append(menu=self.FileMenu, title=_('File')) |
175 parent.Append(menu=self.FileMenu, title=_('File')) |
174 parent.Append(menu=self.EditMenu, title=_('Edit')) |
176 parent.Append(menu=self.EditMenu, title=_('Edit')) |
175 parent.Append(menu=self.AddMenu, title=_('Add')) |
177 parent.Append(menu=self.AddMenu, title=_('Add')) |
326 parent=self, style=wx.ST_SIZEGRIP) |
328 parent=self, style=wx.ST_SIZEGRIP) |
327 self._init_coll_HelpBar_Fields(self.HelpBar) |
329 self._init_coll_HelpBar_Fields(self.HelpBar) |
328 self.SetStatusBar(self.HelpBar) |
330 self.SetStatusBar(self.HelpBar) |
329 |
331 |
330 def __init__(self, parent, manager = None, filesOpen = []): |
332 def __init__(self, parent, manager = None, filesOpen = []): |
331 self.ModeSolo = manager == None |
333 if manager is None: |
|
334 NodeEditorTemplate.__init__(self, NodeManager(), self, True) |
|
335 else: |
|
336 NodeEditorTemplate.__init__(self, manager, self, False) |
332 self._init_ctrls(parent) |
337 self._init_ctrls(parent) |
333 self.HtmlFrameOpened = [] |
338 self.HtmlFrameOpened = [] |
334 self.BusId = None |
|
335 self.Closing = False |
|
336 |
339 |
337 icon = wx.Icon(os.path.join(ScriptDirectory,"networkedit.ico"),wx.BITMAP_TYPE_ICO) |
340 icon = wx.Icon(os.path.join(ScriptDirectory,"networkedit.ico"),wx.BITMAP_TYPE_ICO) |
338 self.SetIcon(icon) |
341 self.SetIcon(icon) |
339 |
342 |
340 if self.ModeSolo: |
343 if self.ModeSolo: |
341 self.Manager = NodeManager() |
|
342 for filepath in filesOpen: |
344 for filepath in filesOpen: |
343 result = self.Manager.OpenFileInCurrent(os.path.abspath(filepath)) |
345 result = self.Manager.OpenFileInCurrent(os.path.abspath(filepath)) |
344 if isinstance(result, (IntType, LongType)): |
346 if isinstance(result, (IntType, LongType)): |
345 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager) |
347 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager) |
346 new_editingpanel.SetIndex(result) |
348 new_editingpanel.SetIndex(result) |
347 self.FileOpened.AddPage(new_editingpanel, "") |
349 self.FileOpened.AddPage(new_editingpanel, "") |
348 else: |
350 else: |
349 self.Manager = manager |
|
350 for index in self.Manager.GetBufferIndexes(): |
351 for index in self.Manager.GetBufferIndexes(): |
351 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager) |
352 new_editingpanel = EditingPanel(self.FileOpened, self, self.Manager) |
352 new_editingpanel.SetIndex(index) |
353 new_editingpanel.SetIndex(index) |
353 self.FileOpened.AddPage(new_editingpanel, "") |
354 self.FileOpened.AddPage(new_editingpanel, "") |
354 |
355 |
366 self.RefreshBufferState() |
367 self.RefreshBufferState() |
367 self.RefreshProfileMenu() |
368 self.RefreshProfileMenu() |
368 self.RefreshTitle() |
369 self.RefreshTitle() |
369 self.RefreshMainMenu() |
370 self.RefreshMainMenu() |
370 |
371 |
371 def SetBusId(self, bus_id): |
|
372 self.BusId = bus_id |
|
373 |
|
374 def GetBusId(self): |
|
375 return self.BusId |
|
376 |
|
377 def IsClosing(self): |
|
378 return self.Closing |
|
379 |
|
380 def OnAddSDOServerMenu(self, event): |
|
381 self.Manager.AddSDOServerToCurrent() |
|
382 self.RefreshBufferState() |
|
383 self.RefreshCurrentIndexList() |
|
384 |
|
385 def OnAddSDOClientMenu(self, event): |
|
386 self.Manager.AddSDOClientToCurrent() |
|
387 self.RefreshBufferState() |
|
388 self.RefreshCurrentIndexList() |
|
389 |
|
390 def OnAddPDOTransmitMenu(self, event): |
|
391 self.Manager.AddPDOTransmitToCurrent() |
|
392 self.RefreshBufferState() |
|
393 self.RefreshCurrentIndexList() |
|
394 |
|
395 def OnAddPDOReceiveMenu(self, event): |
|
396 self.Manager.AddPDOReceiveToCurrent() |
|
397 self.RefreshBufferState() |
|
398 self.RefreshCurrentIndexList() |
|
399 |
|
400 def OnAddMapVariableMenu(self, event): |
|
401 self.AddMapVariable() |
|
402 |
|
403 def OnAddUserTypeMenu(self, event): |
|
404 self.AddUserType() |
|
405 |
|
406 def OnFileSelectedChanged(self, event): |
372 def OnFileSelectedChanged(self, event): |
407 if not self.Closing: |
373 if not self.Closing: |
408 selected = event.GetSelection() |
374 selected = event.GetSelection() |
409 # At init selected = -1 |
375 # At init selected = -1 |
410 if selected >= 0: |
376 if selected >= 0: |
504 if self.FileOpened.GetPageCount() > 0: |
470 if self.FileOpened.GetPageCount() > 0: |
505 self.SetTitle(_("Objdictedit - %s")%self.Manager.GetCurrentFilename()) |
471 self.SetTitle(_("Objdictedit - %s")%self.Manager.GetCurrentFilename()) |
506 else: |
472 else: |
507 self.SetTitle(_("Objdictedit")) |
473 self.SetTitle(_("Objdictedit")) |
508 |
474 |
509 def OnRefreshMenu(self, event): |
|
510 self.RefreshCurrentIndexList() |
|
511 |
|
512 def RefreshCurrentIndexList(self): |
475 def RefreshCurrentIndexList(self): |
513 selected = self.FileOpened.GetSelection() |
476 selected = self.FileOpened.GetSelection() |
514 window = self.FileOpened.GetPage(selected) |
477 window = self.FileOpened.GetPage(selected) |
515 window.RefreshIndexList() |
478 window.RefreshIndexList() |
516 |
479 |
517 def RefreshStatusBar(self): |
480 def RefreshStatusBar(self): |
518 selected = self.FileOpened.GetSelection() |
481 selected = self.FileOpened.GetSelection() |
519 if selected >= 0: |
482 if selected >= 0: |
520 window = self.FileOpened.GetPage(selected) |
483 window = self.FileOpened.GetPage(selected) |
521 selection = window.GetSelection() |
484 self.SetStatusBarText(window.GetSelection(), self.Manager) |
522 if selection: |
|
523 index, subIndex = selection |
|
524 if self.Manager.IsCurrentEntry(index): |
|
525 self.HelpBar.SetStatusText(_("Index: 0x%04X")%index, 0) |
|
526 self.HelpBar.SetStatusText(_("Subindex: 0x%02X")%subIndex, 1) |
|
527 entryinfos = self.Manager.GetEntryInfos(index) |
|
528 name = entryinfos["name"] |
|
529 category = _("Optional") |
|
530 if entryinfos["need"]: |
|
531 category = _("Mandatory") |
|
532 struct = "VAR" |
|
533 number = "" |
|
534 if entryinfos["struct"] & OD_IdenticalIndexes: |
|
535 number = _(" possibly defined %d times")%entryinfos["nbmax"] |
|
536 if entryinfos["struct"] & OD_IdenticalSubindexes: |
|
537 struct = "REC" |
|
538 elif entryinfos["struct"] & OD_MultipleSubindexes: |
|
539 struct = "ARRAY" |
|
540 text = _("%s: %s entry of struct %s%s.")%(name,category,struct,number) |
|
541 self.HelpBar.SetStatusText(text, 2) |
|
542 else: |
|
543 for i in xrange(3): |
|
544 self.HelpBar.SetStatusText("", i) |
|
545 else: |
|
546 for i in xrange(3): |
|
547 self.HelpBar.SetStatusText("", i) |
|
548 |
485 |
549 def RefreshMainMenu(self): |
486 def RefreshMainMenu(self): |
550 if self.FileOpened.GetPageCount() > 0: |
487 if self.FileOpened.GetPageCount() > 0: |
551 if self.ModeSolo: |
488 if self.ModeSolo: |
552 self.MenuBar.EnableTop(1, True) |
489 self.MenuBar.EnableTop(1, True) |
579 self.EditMenu.Enable(wx.ID_REDO, redo) |
516 self.EditMenu.Enable(wx.ID_REDO, redo) |
580 else: |
517 else: |
581 self.EditMenu.Enable(wx.ID_UNDO, False) |
518 self.EditMenu.Enable(wx.ID_UNDO, False) |
582 self.EditMenu.Enable(wx.ID_REDO, False) |
519 self.EditMenu.Enable(wx.ID_REDO, False) |
583 |
520 |
584 def RefreshProfileMenu(self): |
|
585 profile = self.Manager.GetCurrentProfileName() |
|
586 edititem = self.EditMenu.FindItemById(ID_OBJDICTEDITEDITMENUOTHERPROFILE) |
|
587 if edititem: |
|
588 length = self.AddMenu.GetMenuItemCount() |
|
589 for i in xrange(length-6): |
|
590 additem = self.AddMenu.FindItemByPosition(6) |
|
591 self.AddMenu.Delete(additem.GetId()) |
|
592 if profile not in ("None", "DS-301"): |
|
593 edititem.SetText(_("%s Profile")%profile) |
|
594 edititem.Enable(True) |
|
595 self.AddMenu.AppendSeparator() |
|
596 for text, indexes in self.Manager.GetCurrentSpecificMenu(): |
|
597 new_id = wx.NewId() |
|
598 self.AddMenu.Append(help='', id=new_id, kind=wx.ITEM_NORMAL, text=text) |
|
599 self.Bind(wx.EVT_MENU, self.GetProfileCallBack(text), id=new_id) |
|
600 else: |
|
601 edititem.SetText(_("Other Profile")) |
|
602 edititem.Enable(False) |
|
603 |
|
604 |
|
605 #------------------------------------------------------------------------------- |
521 #------------------------------------------------------------------------------- |
606 # Buffer Functions |
522 # Buffer Functions |
607 #------------------------------------------------------------------------------- |
523 #------------------------------------------------------------------------------- |
608 |
524 |
609 def RefreshBufferState(self): |
525 def RefreshBufferState(self): |
610 fileopened = self.Manager.GetAllFilenames() |
526 fileopened = self.Manager.GetAllFilenames() |
611 for idx, filename in enumerate(fileopened): |
527 for idx, filename in enumerate(fileopened): |
612 self.FileOpened.SetPageText(idx, filename) |
528 self.FileOpened.SetPageText(idx, filename) |
613 self.RefreshEditMenu() |
529 self.RefreshEditMenu() |
614 self.RefreshTitle() |
530 self.RefreshTitle() |
615 |
|
616 def OnUndoMenu(self, event): |
|
617 self.Manager.LoadCurrentPrevious() |
|
618 self.RefreshCurrentIndexList() |
|
619 self.RefreshBufferState() |
|
620 |
|
621 def OnRedoMenu(self, event): |
|
622 self.Manager.LoadCurrentNext() |
|
623 self.RefreshCurrentIndexList() |
|
624 self.RefreshBufferState() |
|
625 |
|
626 |
531 |
627 #------------------------------------------------------------------------------- |
532 #------------------------------------------------------------------------------- |
628 # Load and Save Funtions |
533 # Load and Save Funtions |
629 #------------------------------------------------------------------------------- |
534 #------------------------------------------------------------------------------- |
630 |
535 |
826 message = wx.MessageDialog(self, _("\"%s\" is not a valid folder!")%os.path.dirname(filepath), _("Error"), wx.OK|wx.ICON_ERROR) |
731 message = wx.MessageDialog(self, _("\"%s\" is not a valid folder!")%os.path.dirname(filepath), _("Error"), wx.OK|wx.ICON_ERROR) |
827 message.ShowModal() |
732 message.ShowModal() |
828 message.Destroy() |
733 message.Destroy() |
829 dialog.Destroy() |
734 dialog.Destroy() |
830 |
735 |
831 #------------------------------------------------------------------------------- |
|
832 # Editing Profiles functions |
|
833 #------------------------------------------------------------------------------- |
|
834 |
|
835 def OnCommunicationMenu(self, event): |
|
836 dictionary,current = self.Manager.GetCurrentCommunicationLists() |
|
837 self.EditProfile(_("Edit DS-301 Profile"), dictionary, current) |
|
838 |
|
839 def OnOtherCommunicationMenu(self, event): |
|
840 dictionary,current = self.Manager.GetCurrentDS302Lists() |
|
841 self.EditProfile(_("Edit DS-302 Profile"), dictionary, current) |
|
842 |
|
843 def OnEditProfileMenu(self, event): |
|
844 title = _("Edit %s Profile")%self.Manager.GetCurrentProfileName() |
|
845 dictionary,current = self.Manager.GetCurrentProfileLists() |
|
846 self.EditProfile(title, dictionary, current) |
|
847 |
|
848 def EditProfile(self, title, dictionary, current): |
|
849 dialog = CommunicationDialog(self) |
|
850 dialog.SetTitle(title) |
|
851 dialog.SetIndexDictionary(dictionary) |
|
852 dialog.SetCurrentList(current) |
|
853 dialog.RefreshLists() |
|
854 if dialog.ShowModal() == wx.ID_OK: |
|
855 new_profile = dialog.GetCurrentList() |
|
856 addinglist = [] |
|
857 removinglist = [] |
|
858 for index in new_profile: |
|
859 if index not in current: |
|
860 addinglist.append(index) |
|
861 for index in current: |
|
862 if index not in new_profile: |
|
863 removinglist.append(index) |
|
864 self.Manager.ManageEntriesOfCurrent(addinglist, removinglist) |
|
865 self.Manager.BufferCurrentNode() |
|
866 self.RefreshBufferState() |
|
867 self.RefreshCurrentIndexList() |
|
868 dialog.Destroy() |
|
869 |
|
870 def GetProfileCallBack(self, text): |
|
871 def ProfileCallBack(event): |
|
872 self.Manager.AddSpecificEntryToCurrent(text) |
|
873 self.RefreshBufferState() |
|
874 self.RefreshCurrentIndexList() |
|
875 return ProfileCallBack |
|
876 |
|
877 #------------------------------------------------------------------------------- |
|
878 # Edit Node informations function |
|
879 #------------------------------------------------------------------------------- |
|
880 |
|
881 def OnNodeInfosMenu(self, event): |
|
882 dialog = NodeInfosDialog(self) |
|
883 name, id, type, description = self.Manager.GetCurrentNodeInfos() |
|
884 defaultstringsize = self.Manager.GetCurrentNodeDefaultStringSize() |
|
885 dialog.SetValues(name, id, type, description, defaultstringsize) |
|
886 if dialog.ShowModal() == wx.ID_OK: |
|
887 name, id, type, description, defaultstringsize = dialog.GetValues() |
|
888 self.Manager.SetCurrentNodeInfos(name, id, type, description) |
|
889 self.Manager.SetCurrentNodeDefaultStringSize(defaultstringsize) |
|
890 self.RefreshBufferState() |
|
891 self.RefreshProfileMenu() |
|
892 selected = self.FileOpened.GetSelection() |
|
893 if selected >= 0: |
|
894 window = self.FileOpened.GetPage(selected) |
|
895 window.RefreshTable() |
|
896 |
|
897 |
|
898 #------------------------------------------------------------------------------- |
|
899 # Add User Types and Variables |
|
900 #------------------------------------------------------------------------------- |
|
901 |
|
902 def AddMapVariable(self): |
|
903 index = self.Manager.GetCurrentNextMapIndex() |
|
904 if index: |
|
905 dialog = MapVariableDialog(self) |
|
906 dialog.SetIndex(index) |
|
907 if dialog.ShowModal() == wx.ID_OK: |
|
908 index, name, struct, number = dialog.GetValues() |
|
909 result = self.Manager.AddMapVariableToCurrent(index, name, struct, number) |
|
910 if not isinstance(result, (StringType, UnicodeType)): |
|
911 self.RefreshBufferState() |
|
912 self.RefreshCurrentIndexList() |
|
913 else: |
|
914 message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR) |
|
915 message.ShowModal() |
|
916 message.Destroy() |
|
917 dialog.Destroy() |
|
918 else: |
|
919 message = wx.MessageDialog(self, result, _("No map variable index left!"), wx.OK|wx.ICON_ERROR) |
|
920 message.ShowModal() |
|
921 message.Destroy() |
|
922 |
|
923 def AddUserType(self): |
|
924 dialog = UserTypeDialog(self) |
|
925 dialog.SetTypeList(self.Manager.GetCustomisableTypes()) |
|
926 if dialog.ShowModal() == wx.ID_OK: |
|
927 type, min, max, length = dialog.GetValues() |
|
928 result = self.Manager.AddUserTypeToCurrent(type, min, max, length) |
|
929 if not result: |
|
930 self.RefreshBufferState() |
|
931 self.RefreshCurrentIndexList() |
|
932 else: |
|
933 message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR) |
|
934 message.ShowModal() |
|
935 message.Destroy() |
|
936 dialog.Destroy() |
|
937 |
|
938 |
736 |
939 #------------------------------------------------------------------------------- |
737 #------------------------------------------------------------------------------- |
940 # Exception Handler |
738 # Exception Handler |
941 #------------------------------------------------------------------------------- |
739 #------------------------------------------------------------------------------- |
942 |
740 |