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: |