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