diff -r 98a83c4194b5 -r b904d9a99e28 objdictgen/subindextable.py --- a/objdictgen/subindextable.py Thu Dec 06 17:59:06 2007 +0100 +++ b/objdictgen/subindextable.py Fri Dec 07 17:28:18 2007 +0100 @@ -209,6 +209,9 @@ elif editortype == "domain": editor = wx.grid.GridCellTextEditor() renderer = wx.grid.GridCellStringRenderer() + elif editortype == "dcf": + editor = wx.grid.GridCellTextEditor() + renderer = wx.grid.GridCellStringRenderer() else: grid.SetReadOnly(row, col, True) @@ -247,8 +250,8 @@ ] = [wx.NewId() for _init_coll_IndexListMenu_Items in range(3)] [ID_EDITINGPANELMENU1ITEMS0, ID_EDITINGPANELMENU1ITEMS1, - ID_EDITINGPANELMENU1ITEMS3, -] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(3)] + ID_EDITINGPANELMENU1ITEMS3, ID_EDITINGPANELMENU1ITEMS4, +] = [wx.NewId() for _init_coll_SubindexGridMenu_Items in range(4)] class EditingPanel(wx.SplitterWindow): def _init_coll_AddToListSizer_Items(self, parent): @@ -282,12 +285,18 @@ parent.AppendSeparator() parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS3, kind=wx.ITEM_NORMAL, text='Default value') + if not self.Editable: + parent.Append(help='', id=ID_EDITINGPANELMENU1ITEMS4, + kind=wx.ITEM_NORMAL, text='Add to DCF') self.Bind(wx.EVT_MENU, self.OnAddSubindexMenu, id=ID_EDITINGPANELMENU1ITEMS0) self.Bind(wx.EVT_MENU, self.OnDeleteSubindexMenu, id=ID_EDITINGPANELMENU1ITEMS1) self.Bind(wx.EVT_MENU, self.OnDefaultValueSubindexMenu, id=ID_EDITINGPANELMENU1ITEMS3) + if not self.Editable: + self.Bind(wx.EVT_MENU, self.OnAddToDCFSubindexMenu, + id=ID_EDITINGPANELMENU1ITEMS4) def _init_coll_IndexListMenu_Items(self, parent): parent.Append(help='', id=ID_EDITINGPANELINDEXLISTMENUITEMS0, @@ -371,6 +380,8 @@ self.OnSubindexGridSelectCell) self.SubindexGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnSubindexGridCellLeftClick) + self.SubindexGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, + self.OnSubindexGridEditorShown) self.CallbackCheck = wx.CheckBox(id=ID_EDITINGPANELCALLBACKCHECK, label='Have Callbacks', name='CallbackCheck', @@ -399,13 +410,13 @@ self._init_sizers() def __init__(self, parent, window, manager, editable = True): + self.Editable = editable self._init_ctrls(parent) self.ParentWindow = window self.Manager = manager self.ListIndex = [] self.ChoiceIndex = [] self.FirstCall = False - self.Editable = editable self.Index = None for values in DictionaryOrganisation: @@ -579,6 +590,28 @@ # Editing Table value function #------------------------------------------------------------------------------- + def OnSubindexGridEditorShown(self, event): + row, col = event.GetRow(), event.GetCol() + if self.Table.GetEditor(row, col) == "dcf": + wx.CallAfter(self.ShowDCFEntryDialog, row, col) + event.Veto() + else: + event.Skip() + + def ShowDCFEntryDialog(self, row, col): + if self.Editable: + selected = self.IndexList.GetSelection() + if selected != wx.NOT_FOUND: + index = self.ListIndex[selected] + if self.Manager.IsCurrentEntry(index): + dialog = DCFEntryValuesDialog(self) + dialog.SetValues(self.Table.GetValue(row, col).decode("hex_codec")) + if dialog.ShowModal() == wx.ID_OK: + value = dialog.GetValues() + self.Manager.SetCurrentEntry(index, row, value, "value", "dcf") + self.ParentWindow.RefreshBufferState() + wx.CallAfter(self.RefreshTable) + def OnSubindexGridCellChange(self, event): if self.Editable: index = self.Table.GetCurrentIndex() @@ -654,7 +687,42 @@ self.SubindexGridMenu.FindItemByPosition(3).Enable(False) if showpopup: self.PopupMenu(self.SubindexGridMenu) - event.Skip() + elif self.Table.GetColLabelValue(event.GetCol()) == "value": + selected = self.IndexList.GetSelection() + if selected != wx.NOT_FOUND: + index = self.ListIndex[selected] + if self.Manager.IsCurrentEntry(index): + infos = self.Manager.GetEntryInfos(index) + if not infos["struct"] & OD_MultipleSubindexes or event.GetRow() > 0: + self.SubindexGridMenu.FindItemByPosition(0).Enable(False) + self.SubindexGridMenu.FindItemByPosition(1).Enable(False) + self.SubindexGridMenu.FindItemByPosition(3).Enable(False) + self.SubindexGridMenu.FindItemByPosition(4).Enable(True) + self.PopupMenu(self.SubindexGridMenu) + event.Skip() + + def OnAddToDCFSubindexMenu(self, event): + if not self.Editable: + selected = self.IndexList.GetSelection() + if selected != wx.NOT_FOUND: + index = self.ListIndex[selected] + subindex = self.SubindexGrid.GetGridCursorRow() + entry_infos = self.Manager.GetEntryInfos(index) + if not entry_infos["struct"] & OD_MultipleSubindexes or subindex != 0: + subentry_infos = self.Manager.GetSubentryInfos(index, subindex) + typeinfos = self.Manager.GetEntryInfos(subentry_infos["type"]) + if typeinfos: + node_id = self.ParentWindow.GetCurrentNodeId() + self.Manager.AddToMasterDCF(node_id, index, subindex, max(1, typeinfos["size"] / 8), int(self.Table.GetValueByName(subindex, "value"), 16)) + self.ParentWindow.OpenMasterDCFDialog(node_id) + + def OpenDCFDIalog(self, node_id): + self.PartList.SetSelection(7) + self.RefreshIndexList() + self.IndexList.SetSelection(self.ListIndex.index(0x1F22)) + self.RefreshTable() + self.SubindexGrid.SetGridCursor(node_id, 3) + self.ShowDCFEntryDialog(node_id, 3) def OnRenameIndexMenu(self, event): if self.Editable: @@ -755,4 +823,4 @@ self.Manager.SetCurrentEntryToDefault(index, row) self.ParentWindow.RefreshBufferState() self.RefreshIndexList() - event.Skip() \ No newline at end of file + event.Skip()