objdictgen/subindextable.py
changeset 327 b904d9a99e28
parent 324 c6865f99747a
child 336 42ab55532da8
equal deleted inserted replaced
326:98a83c4194b5 327:b904d9a99e28
   207                         editor = wx.grid.GridCellTextEditor()
   207                         editor = wx.grid.GridCellTextEditor()
   208                         renderer = wx.grid.GridCellStringRenderer()
   208                         renderer = wx.grid.GridCellStringRenderer()
   209                     elif editortype == "domain":
   209                     elif editortype == "domain":
   210                         editor = wx.grid.GridCellTextEditor()
   210                         editor = wx.grid.GridCellTextEditor()
   211                         renderer = wx.grid.GridCellStringRenderer()
   211                         renderer = wx.grid.GridCellStringRenderer()
       
   212                     elif editortype == "dcf":
       
   213                         editor = wx.grid.GridCellTextEditor()
       
   214                         renderer = wx.grid.GridCellStringRenderer()
   212                 else:
   215                 else:
   213                     grid.SetReadOnly(row, col, True)
   216                     grid.SetReadOnly(row, col, True)
   214                     
   217                     
   215                 grid.SetCellEditor(row, col, editor)
   218                 grid.SetCellEditor(row, col, editor)
   216                 grid.SetCellRenderer(row, col, renderer)
   219                 grid.SetCellRenderer(row, col, renderer)
   245 [ID_EDITINGPANELINDEXLISTMENUITEMS0, ID_EDITINGPANELINDEXLISTMENUITEMS1, 
   248 [ID_EDITINGPANELINDEXLISTMENUITEMS0, ID_EDITINGPANELINDEXLISTMENUITEMS1, 
   246  ID_EDITINGPANELINDEXLISTMENUITEMS2, 
   249  ID_EDITINGPANELINDEXLISTMENUITEMS2, 
   247 ] = [wx.NewId() for _init_coll_IndexListMenu_Items in range(3)]
   250 ] = [wx.NewId() for _init_coll_IndexListMenu_Items in range(3)]
   248 
   251 
   249 [ID_EDITINGPANELMENU1ITEMS0, ID_EDITINGPANELMENU1ITEMS1, 
   252 [ID_EDITINGPANELMENU1ITEMS0, ID_EDITINGPANELMENU1ITEMS1, 
   250  ID_EDITINGPANELMENU1ITEMS3, 
   253  ID_EDITINGPANELMENU1ITEMS3, ID_EDITINGPANELMENU1ITEMS4, 
   251 ] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(3)]
   254 ] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(4)]
   252 
   255 
   253 class EditingPanel(wx.SplitterWindow):
   256 class EditingPanel(wx.SplitterWindow):
   254     def _init_coll_AddToListSizer_Items(self, parent):
   257     def _init_coll_AddToListSizer_Items(self, parent):
   255         parent.AddWindow(self.AddButton, 0, border=0, flag=0)
   258         parent.AddWindow(self.AddButton, 0, border=0, flag=0)
   256         parent.AddWindow(self.IndexChoice, 0, border=0, flag=wx.GROW)
   259         parent.AddWindow(self.IndexChoice, 0, border=0, flag=wx.GROW)
   280         parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS1,
   283         parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS1,
   281               kind=wx.ITEM_NORMAL, text='Delete subindexes')
   284               kind=wx.ITEM_NORMAL, text='Delete subindexes')
   282         parent.AppendSeparator()
   285         parent.AppendSeparator()
   283         parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS3,
   286         parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS3,
   284               kind=wx.ITEM_NORMAL, text='Default value')
   287               kind=wx.ITEM_NORMAL, text='Default value')
       
   288         if not self.Editable:
       
   289             parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS4,
       
   290                   kind=wx.ITEM_NORMAL, text='Add to DCF')
   285         self.Bind(wx.EVT_MENU, self.OnAddSubindexMenu,
   291         self.Bind(wx.EVT_MENU, self.OnAddSubindexMenu,
   286               id=ID_EDITINGPANELMENU1ITEMS0)
   292               id=ID_EDITINGPANELMENU1ITEMS0)
   287         self.Bind(wx.EVT_MENU, self.OnDeleteSubindexMenu,
   293         self.Bind(wx.EVT_MENU, self.OnDeleteSubindexMenu,
   288               id=ID_EDITINGPANELMENU1ITEMS1)
   294               id=ID_EDITINGPANELMENU1ITEMS1)
   289         self.Bind(wx.EVT_MENU, self.OnDefaultValueSubindexMenu,
   295         self.Bind(wx.EVT_MENU, self.OnDefaultValueSubindexMenu,
   290               id=ID_EDITINGPANELMENU1ITEMS3)
   296               id=ID_EDITINGPANELMENU1ITEMS3)
       
   297         if not self.Editable:
       
   298             self.Bind(wx.EVT_MENU, self.OnAddToDCFSubindexMenu,
       
   299                   id=ID_EDITINGPANELMENU1ITEMS4)
   291 
   300 
   292     def _init_coll_IndexListMenu_Items(self, parent):
   301     def _init_coll_IndexListMenu_Items(self, parent):
   293         parent.Append(help='', id=ID_EDITINGPANELINDEXLISTMENUITEMS0,
   302         parent.Append(help='', id=ID_EDITINGPANELINDEXLISTMENUITEMS0,
   294               kind=wx.ITEM_NORMAL, text='Rename')
   303               kind=wx.ITEM_NORMAL, text='Rename')
   295         parent.Append(help='', id=ID_EDITINGPANELINDEXLISTMENUITEMS2,
   304         parent.Append(help='', id=ID_EDITINGPANELINDEXLISTMENUITEMS2,
   369               self.OnSubindexGridRightClick)
   378               self.OnSubindexGridRightClick)
   370         self.SubindexGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL,
   379         self.SubindexGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL,
   371               self.OnSubindexGridSelectCell)
   380               self.OnSubindexGridSelectCell)
   372         self.SubindexGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, 
   381         self.SubindexGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, 
   373               self.OnSubindexGridCellLeftClick)
   382               self.OnSubindexGridCellLeftClick)
       
   383         self.SubindexGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, 
       
   384               self.OnSubindexGridEditorShown)
   374 
   385 
   375         self.CallbackCheck = wx.CheckBox(id=ID_EDITINGPANELCALLBACKCHECK,
   386         self.CallbackCheck = wx.CheckBox(id=ID_EDITINGPANELCALLBACKCHECK,
   376               label='Have Callbacks', name='CallbackCheck',
   387               label='Have Callbacks', name='CallbackCheck',
   377               parent=self.SubindexGridPanel, pos=wx.Point(0, 0), size=wx.Size(152,
   388               parent=self.SubindexGridPanel, pos=wx.Point(0, 0), size=wx.Size(152,
   378               24), style=0)
   389               24), style=0)
   397               0), size=wx.Size(-1, 30), style=0)
   408               0), size=wx.Size(-1, 30), style=0)
   398 
   409 
   399         self._init_sizers()
   410         self._init_sizers()
   400 
   411 
   401     def __init__(self, parent, window, manager, editable = True):
   412     def __init__(self, parent, window, manager, editable = True):
       
   413         self.Editable = editable
   402         self._init_ctrls(parent)
   414         self._init_ctrls(parent)
   403         self.ParentWindow = window
   415         self.ParentWindow = window
   404         self.Manager = manager
   416         self.Manager = manager
   405         self.ListIndex = []
   417         self.ListIndex = []
   406         self.ChoiceIndex = []
   418         self.ChoiceIndex = []
   407         self.FirstCall = False
   419         self.FirstCall = False
   408         self.Editable = editable
       
   409         self.Index = None
   420         self.Index = None
   410         
   421         
   411         for values in DictionaryOrganisation:
   422         for values in DictionaryOrganisation:
   412             text = "   0x%04X-0x%04X      %s"%(values["minIndex"], values["maxIndex"], values["name"])
   423             text = "   0x%04X-0x%04X      %s"%(values["minIndex"], values["maxIndex"], values["name"])
   413             self.PartList.Append(text)
   424             self.PartList.Append(text)
   577 
   588 
   578 #-------------------------------------------------------------------------------
   589 #-------------------------------------------------------------------------------
   579 #                        Editing Table value function
   590 #                        Editing Table value function
   580 #-------------------------------------------------------------------------------
   591 #-------------------------------------------------------------------------------
   581 
   592 
       
   593     def OnSubindexGridEditorShown(self, event):
       
   594         row, col = event.GetRow(), event.GetCol() 
       
   595         if self.Table.GetEditor(row, col) == "dcf":
       
   596             wx.CallAfter(self.ShowDCFEntryDialog, row, col)
       
   597             event.Veto()
       
   598         else:
       
   599             event.Skip()
       
   600 
       
   601     def ShowDCFEntryDialog(self, row, col):
       
   602         if self.Editable:
       
   603             selected = self.IndexList.GetSelection()
       
   604             if selected != wx.NOT_FOUND:
       
   605                 index = self.ListIndex[selected]
       
   606                 if self.Manager.IsCurrentEntry(index):
       
   607                     dialog = DCFEntryValuesDialog(self)
       
   608                     dialog.SetValues(self.Table.GetValue(row, col).decode("hex_codec"))
       
   609                     if dialog.ShowModal() == wx.ID_OK:
       
   610                         value = dialog.GetValues()
       
   611                         self.Manager.SetCurrentEntry(index, row, value, "value", "dcf")
       
   612                         self.ParentWindow.RefreshBufferState()
       
   613                         wx.CallAfter(self.RefreshTable)
       
   614 
   582     def OnSubindexGridCellChange(self, event):
   615     def OnSubindexGridCellChange(self, event):
   583         if self.Editable:
   616         if self.Editable:
   584             index = self.Table.GetCurrentIndex()
   617             index = self.Table.GetCurrentIndex()
   585             subIndex = event.GetRow()
   618             subIndex = event.GetRow()
   586             col = event.GetCol()
   619             col = event.GetCol()
   652                         self.SubindexGridMenu.FindItemByPosition(3).Enable(True)
   685                         self.SubindexGridMenu.FindItemByPosition(3).Enable(True)
   653                     else:
   686                     else:
   654                         self.SubindexGridMenu.FindItemByPosition(3).Enable(False)
   687                         self.SubindexGridMenu.FindItemByPosition(3).Enable(False)
   655                     if showpopup:
   688                     if showpopup:
   656                         self.PopupMenu(self.SubindexGridMenu)
   689                         self.PopupMenu(self.SubindexGridMenu)
   657         event.Skip()
   690         elif self.Table.GetColLabelValue(event.GetCol()) == "value":
       
   691             selected = self.IndexList.GetSelection()
       
   692             if selected != wx.NOT_FOUND:
       
   693                 index = self.ListIndex[selected]
       
   694                 if self.Manager.IsCurrentEntry(index):
       
   695                     infos = self.Manager.GetEntryInfos(index)
       
   696                     if not infos["struct"] & OD_MultipleSubindexes or event.GetRow() > 0:
       
   697                         self.SubindexGridMenu.FindItemByPosition(0).Enable(False)
       
   698                         self.SubindexGridMenu.FindItemByPosition(1).Enable(False)
       
   699                         self.SubindexGridMenu.FindItemByPosition(3).Enable(False)
       
   700                         self.SubindexGridMenu.FindItemByPosition(4).Enable(True)
       
   701                         self.PopupMenu(self.SubindexGridMenu)
       
   702         event.Skip()
       
   703 
       
   704     def OnAddToDCFSubindexMenu(self, event):
       
   705         if not self.Editable:
       
   706             selected = self.IndexList.GetSelection()
       
   707             if selected != wx.NOT_FOUND:
       
   708                 index = self.ListIndex[selected]
       
   709                 subindex = self.SubindexGrid.GetGridCursorRow()
       
   710                 entry_infos = self.Manager.GetEntryInfos(index)
       
   711                 if not entry_infos["struct"] & OD_MultipleSubindexes or subindex != 0:
       
   712                     subentry_infos = self.Manager.GetSubentryInfos(index, subindex)
       
   713                     typeinfos = self.Manager.GetEntryInfos(subentry_infos["type"])
       
   714                     if typeinfos:
       
   715                         node_id = self.ParentWindow.GetCurrentNodeId()
       
   716                         self.Manager.AddToMasterDCF(node_id, index, subindex, max(1, typeinfos["size"] / 8), int(self.Table.GetValueByName(subindex, "value"), 16))    
       
   717                         self.ParentWindow.OpenMasterDCFDialog(node_id)
       
   718 
       
   719     def OpenDCFDIalog(self, node_id):
       
   720         self.PartList.SetSelection(7)
       
   721         self.RefreshIndexList()
       
   722         self.IndexList.SetSelection(self.ListIndex.index(0x1F22))
       
   723         self.RefreshTable()
       
   724         self.SubindexGrid.SetGridCursor(node_id, 3)
       
   725         self.ShowDCFEntryDialog(node_id, 3)
   658 
   726 
   659     def OnRenameIndexMenu(self, event):
   727     def OnRenameIndexMenu(self, event):
   660         if self.Editable:
   728         if self.Editable:
   661             selected = self.IndexList.GetSelection()
   729             selected = self.IndexList.GetSelection()
   662             if selected != wx.NOT_FOUND:
   730             if selected != wx.NOT_FOUND: