diff -r bb5440697405 -r 3a98027ff372 editors/ResourceEditor.py --- a/editors/ResourceEditor.py Thu Mar 09 13:01:28 2017 +0500 +++ b/editors/ResourceEditor.py Thu Mar 09 15:35:19 2017 +0300 @@ -31,7 +31,7 @@ from dialogs.DurationEditorDialog import IEC_TIME_MODEL from EditorPanel import EditorPanel from util.BitmapLibrary import GetBitmap - +from plcopen.structures import LOCATIONDATATYPES, TestIdentifier, IEC_KEYWORDS, DefaultType #------------------------------------------------------------------------------- # Configuration Editor class #------------------------------------------------------------------------------- @@ -108,7 +108,7 @@ def GetValue(self, row, col): if row < self.GetNumberRows(): colname = self.GetColLabelValue(col, False) - value = str(self.data[row].get(colname, "")) + value = self.data[row].get(colname, "") if colname == "Triggering": return _(value) return value @@ -432,9 +432,28 @@ self.TasksGrid.RefreshButtons() self.InstancesGrid.RefreshButtons() + def ShowErrorMessage(self, message): + dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) + dialog.ShowModal() + dialog.Destroy() + def OnTasksGridCellChange(self, event): row, col = event.GetRow(), event.GetCol() if self.TasksTable.GetColLabelValue(col, False) == "Name": + value = self.TasksTable.GetValue(row, col) + message = None + + if not TestIdentifier(value): + message = _("\"%s\" is not a valid identifier!") % value + elif value.upper() in IEC_KEYWORDS: + message = _("\"%s\" is a keyword. It can't be used!") % value + elif value.upper() in [var["Name"].upper() for i, var in enumerate(self.TasksTable.data) if i!=row]: + message = _("A task with the same name already exists!") + if message is not None: + event.Veto() + wx.CallAfter(self.ShowErrorMessage, message) + return + tasklist = [name for name in self.TaskList.split(",") if name != ""] for i in xrange(self.TasksTable.GetNumberRows()): task = self.TasksTable.GetValueByName(i, "Name") @@ -454,6 +473,22 @@ event.Skip() def OnInstancesGridCellChange(self, event): + row, col = event.GetRow(), event.GetCol() + if self.InstancesTable.GetColLabelValue(col, False) == "Name": + value = self.InstancesTable.GetValue(row, col) + message = None + + if not TestIdentifier(value): + message = _("\"%s\" is not a valid identifier!") % value + elif value.upper() in IEC_KEYWORDS: + message = _("\"%s\" is a keyword. It can't be used!") % value + elif value.upper() in [var["Name"].upper() for i ,var in enumerate(self.InstancesTable.data) if i!=row]: + message = _("An instance with the same name already exists!") + if message is not None: + event.Veto() + wx.CallAfter(self.ShowErrorMessage, message) + return + self.RefreshModel() self.ParentWindow.RefreshPouInstanceVariablesPanel() self.InstancesGrid.RefreshButtons()