# HG changeset patch # User lbessard # Date 1185007165 -7200 # Node ID 4864f7f01e1d5e5f6bba7eb9b010194fe267105c # Parent 4ecc2f3690f41dbdaddfe269cd39dd9e14bbbb2e Changes in networkedit for integration with beremiz diff -r 4ecc2f3690f4 -r 4864f7f01e1d drivers/can_peak/.cvsignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drivers/can_peak/.cvsignore Sat Jul 21 10:39:25 2007 +0200 @@ -0,0 +1,1 @@ +Makefile diff -r 4ecc2f3690f4 -r 4864f7f01e1d drivers/generic/.cvsignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drivers/generic/.cvsignore Sat Jul 21 10:39:25 2007 +0200 @@ -0,0 +1,1 @@ +Makefile diff -r 4ecc2f3690f4 -r 4864f7f01e1d examples/AppliMaster_Linux/.cvsignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/AppliMaster_Linux/.cvsignore Sat Jul 21 10:39:25 2007 +0200 @@ -0,0 +1,1 @@ +Makefile diff -r 4ecc2f3690f4 -r 4864f7f01e1d examples/AppliSlave_Linux/.cvsignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/AppliSlave_Linux/.cvsignore Sat Jul 21 10:39:25 2007 +0200 @@ -0,0 +1,1 @@ +Makefile diff -r 4ecc2f3690f4 -r 4864f7f01e1d objdictgen/networkedit.py --- a/objdictgen/networkedit.py Tue Jul 17 18:20:50 2007 +0200 +++ b/objdictgen/networkedit.py Sat Jul 21 10:39:25 2007 +0200 @@ -37,7 +37,6 @@ from subindextable import * from commondialogs import * from doc_index.DS301_index import * -from config_utils import * def create(parent): return networkedit(parent) @@ -65,8 +64,10 @@ else: usage() sys.exit(2) - -ScriptDirectory = sys.path[0] +ScriptDirectory = "" +for path in sys.path: + if os.path.isfile(os.path.join(path, "networkedit.py")): + ScriptDirectory = path try: from wxPython.html import * @@ -170,7 +171,7 @@ def _init_coll_menuBar1_Menus(self, parent): # generated method, don't edit - if self.Mode == "solo": + if self.ModeSolo: parent.Append(menu=self.FileMenu, title='File') parent.Append(menu=self.NetworkMenu, title='Network') parent.Append(menu=self.EditMenu, title='Edit') @@ -222,7 +223,7 @@ 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": + if Html_Window and self.ModeSolo: parent.Append(help='', id=wxID_NETWORKEDITHELPMENUITEMS2, kind=wx.ITEM_NORMAL, text='About') self.Bind(wx.EVT_MENU, self.OnAboutMenu, @@ -246,8 +247,8 @@ 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.OnCloseProjectMenu, + id=wxID_NETWORKEDITFILEMENUITEMS2) self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wxID_NETWORKEDITFILEMENUITEMS4) self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, @@ -267,8 +268,8 @@ id=wxID_NETWORKEDITNETWORKMENUITEMS0) self.Bind(wx.EVT_MENU, self.OnRemoveSlaveMenu, id=wxID_NETWORKEDITNETWORKMENUITEMS1) - self.Bind(wx.EVT_MENU, self.OnBuildMasterMenu, - id=wxID_NETWORKEDITNETWORKMENUITEMS3) +## self.Bind(wx.EVT_MENU, self.OnBuildMasterMenu, +## id=wxID_NETWORKEDITNETWORKMENUITEMS3) def _init_coll_AddMenu_Items(self, parent): # generated method, don't edit @@ -313,7 +314,7 @@ self.menuBar1 = wx.MenuBar() self.menuBar1.SetEvtHandlerEnabled(True) - if self.Mode == "solo": + if self.ModeSolo: self.FileMenu = wx.Menu(title='') self.NetworkMenu = wx.Menu(title='') @@ -325,7 +326,7 @@ self.HelpMenu = wx.Menu(title='') self._init_coll_menuBar1_Menus(self.menuBar1) - if self.Mode == "solo": + if self.ModeSolo: self._init_coll_FileMenu_Items(self.FileMenu) self._init_coll_NetworkMenu_Items(self.NetworkMenu) self._init_coll_EditMenu_Items(self.EditMenu) @@ -340,7 +341,7 @@ self._init_utils() self.SetClientSize(wx.Size(1000, 700)) self.SetMenuBar(self.menuBar1) -## self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_NETWORKEDIT) + self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_NETWORKEDIT) self.NetworkNodes = wx.Notebook(id=wxID_NETWORKEDITNETWORKNODES, name='NetworkNodes', parent=self, pos=wx.Point(0, 0), @@ -353,12 +354,14 @@ 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): + self.ModeSolo = nodelist == None self._init_ctrls(parent) + self.Parent = parent self.HtmlFrameOpened = [] + self.BusId = None - if self.Mode == "solo": + if self.ModeSolo: self.Manager = NodeManager(ScriptDirectory) if projectOpen: self.NodeList = NodeList(self.Manager) @@ -370,11 +373,34 @@ else: self.NodeList = nodelist self.Manager = self.NodeList.GetManager() + self.NodeList.SetCurrentSelected(0) + self.RefreshNetworkNodes() + self.RefreshProfileMenu() self.RefreshBufferState() self.RefreshTitle() self.RefreshMainMenu() + def SetBusId(self, bus_id): + self.BusId = bus_id + + def GetBusId(self): + return self.BusId + + 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): + if not self.ModeSolo: + self.Parent.CloseEditor(self.BusId) + event.Skip() + def GetNoteBook(self): return self.NetworkNodes @@ -437,6 +463,7 @@ if dialog.ShowModal() == wxID_OK: projectpath = dialog.GetPath() if os.path.isdir(projectpath) and len(os.listdir(projectpath)) == 0: + os.mkdir(os.path.join(projectpath, "eds")) manager = NodeManager(ScriptDirectory) nodelist = NodeList(manager) result = nodelist.LoadProject(projectpath) @@ -493,37 +520,27 @@ message.Destroy() event.Skip() - def OnBuildMasterMenu(self, event): + def OnCloseProjectMenu(self, event): if self.NodeList: - dialog = wxFileDialog(self, "Choose a locations file", os.getcwd(), "", "text files (*.txt)|*.od|All files|*.*", wxOPEN|wxCHANGE_DIR) - if dialog.ShowModal() == wxID_OK: - filepath = dialog.GetPath() + if self.NodeList.HasChanged(): + dialog = wxMessageDialog(self, "There are changes, do you want to save?", "Close Project", wxYES_NO|wxCANCEL|wxICON_QUESTION) + answer = dialog.ShowModal() dialog.Destroy() - if os.path.isfile(filepath): - dialog = wxTextEntryDialog(self, "Busname selection", "Please enter the bus number", "", wxOK|wxCANCEL) - if dialog.ShowModal() == wxID_OK: - busname = None - try: - busname = int(dialog.GetValue()) - except: - pass - if busname: - file = open(filepath, "r") - locations = [(elements[0], elements[1]) for elements in [line.strip().split(" ") for line in file.readlines()]] - GenerateConciseDCF(locations, busname, self.NodeList) - message = wxMessageDialog(self, "Master node generation successful!", "Error", wxOK|wxICON_ERROR) - message.ShowModal() - message.Destroy() - else: - message = wxMessageDialog(self, "Busname must be a number!", "Error", wxOK|wxICON_ERROR) - message.ShowModal() - message.Destroy() - else: - message = wxMessageDialog(self, "\"%s\" isn't a valid file!"%filepath, "Error", wxOK|wxICON_ERROR) - message.ShowModal() - message.Destroy() - event.Skip() - + if answer == wxID_YES: + result = self.NodeList.SaveProject() + if result: + message = wxMessageDialog(self, result, "Error", wxOK|wxICON_ERROR) + message.ShowModal() + message.Destroy() + elif answer == wxID_NO: + self.NodeList.ForceChanged(False) + if not self.NodeList.HasChanged(): + self.Manager = None + self.NodeList = None + self.RefreshNetworkNodes() + self.RefreshTitle() + self.RefreshMainMenu() + event.Skip() #------------------------------------------------------------------------------- # Slave Nodes Management @@ -640,9 +657,9 @@ def RefreshMainMenu(self): if self.menuBar1: + self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, False) if self.NodeList == None: - self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, False) - if self.Mode == "solo": + if self.ModeSolo: self.menuBar1.EnableTop(1, False) self.menuBar1.EnableTop(2, False) self.menuBar1.EnableTop(3, False) @@ -654,8 +671,7 @@ self.menuBar1.EnableTop(1, False) self.menuBar1.EnableTop(2, False) else: - self.NetworkMenu.Enable(wxID_NETWORKEDITNETWORKMENUITEMS3, True) - if self.Mode == "solo": + if self.ModeSolo: self.menuBar1.EnableTop(1, True) if self.FileMenu: self.FileMenu.Enable(wxID_NETWORKEDITFILEMENUITEMS1, True) @@ -696,14 +712,6 @@ 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 #------------------------------------------------------------------------------- diff -r 4ecc2f3690f4 -r 4864f7f01e1d objdictgen/nodelist.py --- a/objdictgen/nodelist.py Tue Jul 17 18:20:50 2007 +0200 +++ b/objdictgen/nodelist.py Sat Jul 21 10:39:25 2007 +0200 @@ -29,25 +29,30 @@ import eds_utils import os, shutil - #------------------------------------------------------------------------------- # Definition of NodeList Object #------------------------------------------------------------------------------- - """ Class recording a node list for a CANOpen network. """ class NodeList: - def __init__(self, manager): + def __init__(self, manager, netname = ""): self.Root = "" self.Manager = manager - self.NetworkName = "" + self.NetworkName = netname self.SlaveNodes = {} self.EDSNodes = {} self.CurrentSelected = None + self.Changed = False + + def HasChanged(self): + return self.Changed or not self.Manager.CurrentIsSaved() + + def ForceChanged(self, changed): + self.Changed = changed def GetNetworkName(self): return self.NetworkName @@ -80,7 +85,7 @@ def GetCurrentSelected(self): return self.CurrentSelected - def LoadProject(self, root): + def LoadProject(self, root, netname = None): self.SlaveNodes = {} self.EDSNodes = {} @@ -98,20 +103,22 @@ if result != None: return result - result = self.LoadMasterNode() + result = self.LoadMasterNode(netname) if result != None: return result - result = self.LoadSlaveNodes() + result = self.LoadSlaveNodes(netname) if result != None: return result - - def SaveProject(self): - result = self.SaveMasterNode() + + self.NetworkName = netname + + def SaveProject(self, netname = None): + result = self.SaveMasterNode(netname) if result != None: return result - result = self.SaveNodeList() + result = self.SaveNodeList(netname) if result != None: return result @@ -137,6 +144,7 @@ if eds in self.EDSNodes.keys(): slave = {"Name" : nodeName, "EDS" : eds, "Node" : self.EDSNodes[eds]} self.SlaveNodes[nodeID] = slave + self.Changed = True return None else: return "\"%s\" EDS file is not available"%eds @@ -144,47 +152,71 @@ def RemoveSlaveNode(self, index): if index in self.SlaveNodes.keys(): self.SlaveNodes.pop(index) + OnCloseProjectMenu return None else: return "Node with \"0x%2.2X\" ID doesn't exist" - def LoadMasterNode(self): - masterpath = os.path.join(self.Root, "master.od") + def LoadMasterNode(self, netname = None): + if netname: + masterpath = os.path.join(self.Root, "%s_master.od"%netname) + else: + masterpath = os.path.join(self.Root, "master.od") if os.path.isfile(masterpath): self.Manager.OpenFileInCurrent(masterpath) else: self.Manager.CreateNewNode("MasterNode", 0x00, "master", "", "None", "", "heartbeat", ["DS302"]) return None - def SaveMasterNode(self): - masterpath = os.path.join(self.Root, "master.od") + def SaveMasterNode(self, netname = None): + if netname: + masterpath = os.path.join(self.Root, "%s_master.od"%netname) + else: + masterpath = os.path.join(self.Root, "master.od") if self.Manager.SaveCurrentInFile(masterpath): return None else: return "Fail to save Master Node" - def LoadSlaveNodes(self): + def LoadSlaveNodes(self, netname = None): cpjpath = os.path.join(self.Root, "nodelist.cpj") if os.path.isfile(cpjpath): try: networks = eds_utils.ParseCPJFile(cpjpath) - if len(networks) > 0: - self.NetworkName = networks[0]["Name"] - for nodeid, node in networks[0]["Nodes"].items(): + network = None + if netname: + for net in networks: + if net["Name"] == netname: + network = net + self.NetworkName = netname + elif len(networks) > 0: + network = networks[0] + self.NetworkName = network["Name"] + if network: + for nodeid, node in network["Nodes"].items(): if node["Present"] == 1: result = self.AddSlaveNode(node["Name"], nodeid, node["DCFName"]) if result != None: - return result + return result + self.Changed = False except SyntaxError, message: return "Unable to load CPJ file\n%s"%message return None - def SaveNodeList(self): - cpjpath = os.path.join(self.Root, "nodelist.cpj") - content = eds_utils.GenerateCPJContent(self) - file = open(cpjpath, "w") - file.write(content) - file.close() + def SaveNodeList(self, netname = None): + try: + cpjpath = os.path.join(self.Root, "nodelist.cpj") + content = eds_utils.GenerateCPJContent(self) + if netname: + file = open(cpjpath, "a") + else: + file = open(cpjpath, "w") + file.write(content) + file.close() + self.Changed = False + return None + except: + return "Fail to save node list" def GetSlaveNodeEntry(self, nodeid, index, subindex = None): if nodeid in self.SlaveNodes.keys(): @@ -233,6 +265,16 @@ return node.GetEntryInfos(index) return None + def GetSubentryInfos(self, index, subindex): + if self.CurrentSelected != None: + if self.CurrentSelected == 0: + return self.Manager.GetSubentryInfos(index, subindex) + else: + node = self.SlaveNodes[self.CurrentSelected]["Node"] + if node: + return node.GetSubentryInfos(index, subindex) + return None + def GetCurrentValidIndexes(self, min, max): if self.CurrentSelected != None: if self.CurrentSelected == 0: @@ -252,27 +294,29 @@ def GetCurrentEntryValues(self, index): if self.CurrentSelected != None: node = self.SlaveNodes[self.CurrentSelected]["Node"] - node.SetNodeID(self.CurrentSelected) if node: return self.Manager.GetNodeEntryValues(node, index) else: print "Can't find node" return [], [] - + if __name__ == "__main__": from nodemanager import * import os, sys, shutil manager = NodeManager(sys.path[0]) + nodelist = NodeList(manager) - #result = nodelist.LoadProject("/home/deobox/beremiz/test_nodelist") - result = nodelist.LoadProject("/home/deobox/Desktop/TestMapping") + + result = nodelist.LoadProject("/home/laurent/test_nodelist") if result != None: print result else: print "MasterNode :" manager.CurrentNode.Print() + print for nodeid, node in nodelist.SlaveNodes.items(): print "SlaveNode name=%s id=0x%2.2X :"%(node["Name"], nodeid) node["Node"].Print() - + print + diff -r 4ecc2f3690f4 -r 4864f7f01e1d objdictgen/nodemanager.py --- a/objdictgen/nodemanager.py Tue Jul 17 18:20:50 2007 +0200 +++ b/objdictgen/nodemanager.py Sat Jul 21 10:39:25 2007 +0200 @@ -227,7 +227,7 @@ elif option == "StoreEDS": AddIndexList.extend([0x1021, 0x1022]) # Add a new buffer - index = self.AddNodeBuffer() + index = self.AddNodeBuffer(self.CurrentNode.Copy(), False) self.SetCurrentFilePath("") # Add Mandatory indexes self.ManageEntriesOfCurrent(AddIndexList, []) @@ -306,9 +306,8 @@ result = eds_utils.GenerateNode(filepath, self.ScriptDirectory) if isinstance(result, Node): self.CurrentNode = result - index = self.AddNodeBuffer() + index = self.AddNodeBuffer(self.CurrentNode.Copy(), False) self.SetCurrentFilePath("") - self.BufferCurrentNode() return index else: return result @@ -596,21 +595,10 @@ self.CurrentNode.SetParamsEntry(index, None, callback = value) self.BufferCurrentNode() - def ResetCurrentDefaultValue(self, index, subIndex): - subentry_infos = self.GetSubentryInfos(index, subIndex) - if "default" in subentry_infos: - default = subentry_infos["default"] - else: - default = self.GetTypeDefaultValue(subentry_infos["type"]) - self.CurrentNode.SetEntry(index, subIndex, default) - - def SetCurrentEntry(self, index, subIndex, value, name, editor): if self.CurrentNode and self.CurrentNode.IsEntry(index): if name == "value": - if editor == None: - self.CurrentNode.SetEntry(index, subIndex, value) - elif editor == "map": + if editor == "map": value = self.CurrentNode.GetMapValue(value) if value: self.CurrentNode.SetEntry(index, subIndex, value) @@ -753,11 +741,6 @@ def GetCurrentNodeIndex(self): return self.NodeIndex - def GetCurrentNode(self): - if self.NodeIndex: - return self.CurrentNode - return None - def GetCurrentFilename(self): return self.GetFilename(self.NodeIndex) diff -r 4ecc2f3690f4 -r 4864f7f01e1d objdictgen/subindextable.py --- a/objdictgen/subindextable.py Tue Jul 17 18:20:50 2007 +0200 +++ b/objdictgen/subindextable.py Sat Jul 21 10:39:25 2007 +0200 @@ -50,6 +50,8 @@ {"minIndex" : 0x6000, "maxIndex" : 0x9FFF, "name" : "Standardized Device Profile"}, {"minIndex" : 0xA000, "maxIndex" : 0xBFFF, "name" : "Standardized Interface Profile"}] +SizeConversion = {1 : "X", 8 : "B", 16 : "W", 24 : "D", 32 : "D", 40 : "L", 48 : "L", 56 : "L", 64 : "L"} + class SubindexTable(wxPyGridTableBase): """ @@ -249,8 +251,8 @@ wxID_EDITINGPANELINDEXLISTMENUITEMS2, ] = [wx.NewId() for _init_coll_IndexListMenu_Items in range(3)] -[wxID_EDITINGPANELMENU1ITEMS0, wxID_EDITINGPANELMENU1ITEMS1, wxID_EDITINGPANELMENU1ITEMS2, -] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(3)] +[wxID_EDITINGPANELMENU1ITEMS0, wxID_EDITINGPANELMENU1ITEMS1, +] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(2)] class EditingPanel(wx.SplitterWindow): def _init_coll_AddToListSizer_Items(self, parent): @@ -295,14 +297,10 @@ kind=wx.ITEM_NORMAL, text='Add') parent.Append(help='', id=wxID_EDITINGPANELMENU1ITEMS1, kind=wx.ITEM_NORMAL, text='Delete') - parent.Append(help='', id=wxID_EDITINGPANELMENU1ITEMS2, - kind=wx.ITEM_NORMAL, text='Default Value') self.Bind(wx.EVT_MENU, self.OnAddSubindexMenu, id=wxID_EDITINGPANELMENU1ITEMS0) self.Bind(wx.EVT_MENU, self.OnDeleteSubindexMenu, id=wxID_EDITINGPANELMENU1ITEMS1) - self.Bind(wx.EVT_MENU, self.OnDefaultValueSubindexMenu, - id=wxID_EDITINGPANELMENU1ITEMS2) def _init_coll_IndexListMenu_Items(self, parent): # generated method, don't edit @@ -391,6 +389,7 @@ self.OnSubindexGridRightClick) self.SubindexGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSubindexGridSelectCell) + self.SubindexGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSubindexGridCellLeftClick) self.CallbackCheck = wx.CheckBox(id=wxID_EDITINGPANELCALLBACKCHECK, label='Have Callbacks', name='CallbackCheck', @@ -457,6 +456,10 @@ return index, subIndex return None + def OnSubindexGridCellLeftClick(self, event): + wxCallAfter(self.BeginDrag) + event.Skip() + def OnAddButtonClick(self, event): if self.Editable: self.SubindexGrid.SetGridCursor(0, 0) @@ -494,9 +497,31 @@ event.Skip() def OnSubindexGridSelectCell(self, event): + wxCallAfter(self.BeginDrag) wxCallAfter(self.Parent.RefreshStatusBar) event.Skip() + def BeginDrag(self): + row = self.SubindexGrid.GetGridCursorRow() + col = self.SubindexGrid.GetGridCursorCol() + if not self.Editable and col == 0: + selected = self.IndexList.GetSelection() + if selected != wxNOT_FOUND: + index = self.ListIndex[selected] + subindex = self.SubindexGrid.GetGridCursorRow() + entry_infos = self.Manager.GetEntryInfos(index) + if not entry_infos["struct"] & OD_MultipleSubindexes or row != 0: + subentry_infos = self.Manager.GetSubentryInfos(index, subindex) + typeinfos = self.Manager.GetEntryInfos(subentry_infos["type"]) + if subentry_infos["pdo"] and typeinfos: + bus_id = self.Parent.GetBusId() + node_id = self.Parent.GetCurrentNodeId() + size = typeinfos["size"] + data = wxTextDataObject(str(("%s%d.%d.%d.%d"%(SizeConversion[size], bus_id, node_id, index, subindex), "location"))) + dragSource = wxDropSource(self.SubindexGrid) + dragSource.SetData(data) + dragSource.DoDragDrop() + #------------------------------------------------------------------------------- # Refresh Functions #------------------------------------------------------------------------------- @@ -636,16 +661,8 @@ index = self.ListIndex[selected] if self.Manager.IsCurrentEntry(index): infos = self.Manager.GetEntryInfos(index) - if 0x5fff >= index >= 0x2000 and infos["struct"] & OD_MultipleSubindexes or infos["struct"] & OD_IdenticalSubindexes: - # enable add and delet entries - self.SubindexGridMenu.FindItemById(wxID_EDITINGPANELMENU1ITEMS0).Enable(True) - self.SubindexGridMenu.FindItemById(wxID_EDITINGPANELMENU1ITEMS1).Enable(True) - else: - # disable add and delet entries - self.SubindexGridMenu.FindItemById(wxID_EDITINGPANELMENU1ITEMS0).Enable(False) - self.SubindexGridMenu.FindItemById(wxID_EDITINGPANELMENU1ITEMS1).Enable(False) - self.SubindexGrid.SetGridCursor(event.GetRow(), event.GetCol()) - wxCallAfter(self.PopupMenu,self.SubindexGridMenu) + if index >= 0x2000 and infos["struct"] & OD_MultipleSubindexes or infos["struct"] & OD_IdenticalSubindexes: + self.PopupMenu(self.SubindexGridMenu) event.Skip() def OnRenameIndexMenu(self, event): @@ -737,14 +754,3 @@ dialog.Destroy() event.Skip() - def OnDefaultValueSubindexMenu(self, event): - if self.Editable: - selected = self.IndexList.GetSelection() - if selected != wxNOT_FOUND: - index = self.ListIndex[selected] - if self.Manager.IsCurrentEntry(index): - self.Manager.ResetCurrentDefaultValue(index,self.SubindexGrid.GetGridCursorRow()) - self.Parent.RefreshBufferState() - self.RefreshIndexList() - event.Skip() -