diff -r 3f2024f30553 -r 9dbb79722fbc DataTypeEditor.py --- a/DataTypeEditor.py Wed Oct 12 23:47:48 2011 +0200 +++ b/DataTypeEditor.py Fri Oct 14 19:26:29 2011 +0200 @@ -24,9 +24,10 @@ import wx import wx.grid -import wx.gizmos + from plcopen.structures import IEC_KEYWORDS, TestIdentifier from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD +from controls import CustomEditableListBox, CustomGrid import re @@ -187,6 +188,9 @@ def AppendRow(self, row_content): self.data.append(row_content) + def InsertRow(self, row_index, row_content): + self.data.insert(row_index, row_content) + def RemoveRow(self, row_index): self.data.pop(row_index) @@ -194,9 +198,8 @@ new_idx = max(0, min(idx + move, len(self.data) - 1)) if new_idx != idx: self.data.insert(new_idx, self.data.pop(idx)) - return new_idx - return None - + return new_idx + def GetRow(self, row_index): return self.data[row_index] @@ -460,23 +463,11 @@ name='EnumeratedPanel', parent=self, pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - self.EnumeratedValues = wx.gizmos.EditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, + self.EnumeratedValues = CustomEditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0), size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) - self.EnumeratedValues.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEnumeratedValueEndEdit) - self.EnumeratedValues.GetEditButton().SetToolTipString(_("Edit item")) - new_button = self.EnumeratedValues.GetNewButton() - new_button.SetToolTipString(_("New item")) - new_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) - del_button = self.EnumeratedValues.GetDelButton() - del_button.SetToolTipString(_("Delete item")) - del_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) - up_button = self.EnumeratedValues.GetUpButton() - up_button.SetToolTipString(_("Move up")) - up_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) - down_button = self.EnumeratedValues.GetDownButton() - down_button.SetToolTipString(_("Move down")) - down_button.Bind(wx.EVT_BUTTON, self.OnEnumeratedValuesChanged) + for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: + setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged) self.staticText8 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT8, label=_('Initial Value:'), name='staticText8', parent=self.EnumeratedPanel, @@ -502,24 +493,13 @@ size=wx.Size(0, 28), style=wx.CB_READONLY) self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORARRAYBASETYPE) - self.ArrayDimensions = wx.gizmos.EditableListBox(id=ID_DATATYPEEDITORARRAYDIMENSIONS, + self.ArrayDimensions = CustomEditableListBox(id=ID_DATATYPEEDITORARRAYDIMENSIONS, name='ArrayDimensions', parent=self.ArrayPanel, label=_("Dimensions:"), pos=wx.Point(0, 0), size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) self.ArrayDimensions.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnDimensionsChanged) - self.ArrayDimensions.GetEditButton().SetToolTipString(_("Edit item")) - new_button = self.ArrayDimensions.GetNewButton() - new_button.SetToolTipString(_("New item")) - new_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) - del_button = self.ArrayDimensions.GetDelButton() - del_button.SetToolTipString(_("Delete item")) - del_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) - up_button = self.ArrayDimensions.GetUpButton() - up_button.SetToolTipString(_("Move up")) - up_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) - down_button = self.ArrayDimensions.GetDownButton() - down_button.SetToolTipString(_("Move down")) - down_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) - + for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: + setattr(self.EnumeratedValues, func, self.OnDimensionsChanged) + self.staticText10 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT10, label=_('Initial Value:'), name='staticText10', parent=self.ArrayPanel, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) @@ -539,7 +519,7 @@ label=_('Elements :'), name='staticText11', parent=self.StructurePanel, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.StructureElementsGrid = wx.grid.Grid(id=ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID, + self.StructureElementsGrid = CustomGrid(id=ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID, name='StructureElementsGrid', parent=self.StructurePanel, pos=wx.Point(0, 0), size=wx.Size(0, 150), style=wx.VSCROLL) self.StructureElementsGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, @@ -554,27 +534,23 @@ else: wx.grid.EVT_GRID_CELL_CHANGE(self.StructureElementsGrid, self.OnStructureElementsGridCellChange) wx.grid.EVT_GRID_EDITOR_SHOWN(self.StructureElementsGrid, self.OnStructureElementsGridEditorShown) - + self.StructureAddButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON, label=_('Add'), name='StructureAddButton', parent=self.StructurePanel, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.Bind(wx.EVT_BUTTON, self.OnStructureAddButton, id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON) - + self.StructureDeleteButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON, label=_('Delete'), name='StructureDeleteButton', parent=self.StructurePanel, pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - self.Bind(wx.EVT_BUTTON, self.OnStructureDeleteButton, id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON) - + self.StructureUpButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON, label='^', name='StructureUpButton', parent=self.StructurePanel, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) - self.Bind(wx.EVT_BUTTON, self.OnStructureUpButton, id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON) - + self.StructureDownButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON, label='v', name='StructureDownButton', parent=self.StructurePanel, pos=wx.Point(0, 0), size=wx.Size(32, 32), style=0) - self.Bind(wx.EVT_BUTTON, self.OnStructureDownButton, id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON) - + self._init_sizers() def __init__(self, parent, tagname, window, controler): @@ -586,6 +562,32 @@ self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] self.StructureElementsGrid.SetTable(self.StructureElementsTable) + self.StructureElementsGrid.SetButtons({"Add": self.StructureAddButton, + "Delete": self.StructureDeleteButton, + "Up": self.StructureUpButton, + "Down": self.StructureDownButton}) + + def _AddStructureElement(new_row): + self.StructureElementsTable.InsertRow(new_row, self.StructureElementDefaultValue.copy()) + self.RefreshTypeInfos() + self.StructureElementsTable.ResetView(self.StructureElementsGrid) + return new_row + setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement) + + def _DeleteStructureElement(row): + self.StructureElementsTable.RemoveRow(row) + self.RefreshTypeInfos() + self.StructureElementsTable.ResetView(self.StructureElementsGrid) + setattr(self.StructureElementsGrid, "_DeleteRow", _DeleteStructureElement) + + def _MoveStructureElement(row, move): + new_row = self.StructureElementsTable.MoveRow(row, move) + if new_row != row: + self.RefreshTypeInfos() + self.StructureElementsTable.ResetView(self.StructureElementsGrid) + return new_row + setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement) + self.StructureElementsGrid.SetRowLabelSize(0) for col in range(self.StructureElementsTable.GetNumberCols()): attr = wx.grid.GridCellAttr() @@ -593,6 +595,7 @@ self.StructureElementsGrid.SetColAttr(col, attr) self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col]) self.StructureElementsGrid.AutoSizeColumn(col, False) + self.StructureElementsGrid.RefreshButtons() for datatype in GetDatatypeTypes(): self.DerivationType.Append(_(datatype)) @@ -690,6 +693,7 @@ self.RefreshDisplayedInfos() self.ShowHighlights() self.StructureElementsTable.ResetView(self.StructureElementsGrid) + self.StructureElementsGrid.RefreshButtons() self.Initializing = False def RefreshScaling(self, refresh=True): @@ -758,38 +762,6 @@ wx.CallAfter(self.RefreshTypeInfos) event.Skip() - def OnStructureAddButton(self, event): - new_row = self.StructureElementDefaultValue.copy() - self.StructureElementsTable.AppendRow(new_row) - self.RefreshTypeInfos() - self.StructureElementsTable.ResetView(self.StructureElementsGrid) - event.Skip() - - def OnStructureDeleteButton(self, event): - row = self.StructureElementsGrid.GetGridCursorRow() - self.StructureElementsTable.RemoveRow(row) - self.RefreshTypeInfos() - self.StructureElementsTable.ResetView(self.StructureElementsGrid) - event.Skip() - - def OnStructureUpButton(self, event): - row = self.StructureElementsGrid.GetGridCursorRow() - new_index = self.StructureElementsTable.MoveRow(row, -1) - if new_index is not None: - self.RefreshTypeInfos() - self.StructureElementsTable.ResetView(self.StructureElementsGrid) - self.StructureElementsGrid.SetGridCursor(new_index, self.StructureElementsGrid.GetGridCursorCol()) - event.Skip() - - def OnStructureDownButton(self, event): - row = self.StructureElementsGrid.GetGridCursorRow() - new_index = self.StructureElementsTable.MoveRow(row, 1) - if new_index is not None: - self.RefreshTypeInfos() - self.StructureElementsTable.ResetView(self.StructureElementsGrid) - self.StructureElementsGrid.SetGridCursor(new_index, self.StructureElementsGrid.GetGridCursorCol()) - event.Skip() - def OnStructureElementsGridCellChange(self, event): row, col = event.GetRow(), event.GetCol() colname = self.StructureElementsTable.GetColLabelValue(col) @@ -817,7 +789,7 @@ event.Veto() else: self.RefreshTypeInfos() - self.StructureElementsTable.ResetView(self.StructureElementsGrid) + wx.CallAfter(self.StructureElementsTable.ResetView, self.StructureElementsGrid) ## old_value = self.Table.GetOldValue() ## if old_value != "": ## self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_value, value) @@ -825,9 +797,13 @@ event.Skip() else: self.RefreshTypeInfos() - self.StructureElementsTable.ResetView(self.StructureElementsGrid) + wx.CallAfter(self.StructureElementsTable.ResetView, self.StructureElementsGrid) event.Skip() + def OnStructureElementsGridSelectCell(self, event): + wx.CallAfter(self.RefreshStructureButtons) + event.Skip() + def OnStructureElementsGridEditorShown(self, event): row, col = event.GetRow(), event.GetCol() if self.StructureElementsTable.GetColLabelValue(col) == "Type":