diff -r 2a9549e4380e -r addb6eff8d94 editors/CodeFileEditor.py --- a/editors/CodeFileEditor.py Fri Jul 20 11:05:17 2018 +0200 +++ b/editors/CodeFileEditor.py Fri Jul 20 11:10:42 2018 +0200 @@ -598,7 +598,30 @@ # Helper for VariablesGrid values # ------------------------------------------------------------------------------- +class AllGridCellEditor(wx.grid.GridCellTextEditor): + def __init__(self, table, row, col): + wx.grid.GridCellTextEditor.__init__(self) + +class ClassGridCellEditor(wx.grid.GridCellChoiceEditor): + def __init__(self, table, row, col): + wx.grid.GridCellChoiceEditor.__init__(self) + self.SetParameters("input,memory,output") + + class VariablesTable(CustomTable): + __defaultColumnType = dict( + [(name, AllGridCellEditor) for name in + ["Name", "Initial", "Description", "OnChange", "Options"]] + + [('Class', ClassGridCellEditor), ('Type', None)]) + + def __init__(self, *args, **kwargs): + my_columns = kwargs.pop("additional_columns") + super(VariablesTable, self).__init__(*args, **kwargs) + self.columnTypes = dict(self.__defaultColumnType) + if my_columns is not None: + for key in my_columns.keys(): + if key in self.columnTypes.keys(): + self.columnTypes[key] = my_columns[key] def GetValue(self, row, col): if row < self.GetNumberRows(): @@ -621,15 +644,9 @@ renderer = None colname = self.GetColLabelValue(col, False) - if colname in ["Name", "Initial", "Description", "OnChange", "Options"]: - editor = wx.grid.GridCellTextEditor() - elif colname == "Class": - editor = wx.grid.GridCellChoiceEditor() - editor.SetParameters("input,memory,output") - elif colname == "Type": - pass - else: - grid.SetReadOnly(row, col, True) + editortype = self.columnTypes.get(colname, None) + if editortype is not None: + editor = editortype(self, row, col) grid.SetCellEditor(row, col, editor) grid.SetCellRenderer(row, col, renderer) @@ -640,7 +657,7 @@ class VariablesEditor(wx.Panel): - def __init__(self, parent, window, controler): + def __init__(self, parent, window, controler, additional_columns=None): wx.Panel.__init__(self, parent, style=wx.TAB_TRAVERSAL) main_sizer = wx.FlexGridSizer(cols=2, hgap=0, rows=1, vgap=4) @@ -680,7 +697,8 @@ "OnChange": "", "Options": "" } - self.Table = VariablesTable(self, [], self.GetVariableTableColnames()) + + self.Table = VariablesTable(self, [], self.GetVariableTableColnames(), additional_columns=additional_columns) self.ColAlignements = [wx.ALIGN_RIGHT] + \ [wx.ALIGN_LEFT]*(len(self.VariablesDefaultValue)) self.ColSizes = [20, 150] + [130]*(len(self.VariablesDefaultValue)-1) @@ -845,6 +863,7 @@ CONFNODEEDITOR_TABS = [] CODE_EDITOR = None + COLUMNS_TYPE = None def _create_CodePanel(self, prnt): self.CodeEditorPanel = wx.SplitterWindow(prnt) @@ -852,7 +871,8 @@ self.VariablesPanel = VariablesEditor(self.CodeEditorPanel, self.ParentWindow, - self.Controler) + self.Controler, + self.COLUMNS_TYPE) if self.CODE_EDITOR is not None: self.CodeEditor = self.CODE_EDITOR(self.CodeEditorPanel,