# HG changeset patch # User laurent # Date 1326129412 -3600 # Node ID e747685e4241c81da1df4dcff812454e9e3944b7 # Parent 05394e275a1c099abc1f3a215c53c9d6b469b5ee Adding support for checking location validity when filled by user diff -r 05394e275a1c -r e747685e4241 controls/VariablePanel.py --- a/controls/VariablePanel.py Mon Jan 09 11:08:08 2012 +0100 +++ b/controls/VariablePanel.py Mon Jan 09 18:16:52 2012 +0100 @@ -24,6 +24,7 @@ import os import wx, wx.grid +import re from types import TupleType, StringType, UnicodeType @@ -85,6 +86,8 @@ "External": lambda x: {"Constant": "Constant"}.get(x, "") } +LOCATION_MODEL = re.compile("((?:%[IQM](?:\*|(?:[XBWLD]?[0-9](?:\.[0-9])*)))?)$") + class VariableTable(CustomTable): """ @@ -637,28 +640,17 @@ row, col = event.GetRow(), event.GetCol() colname = self.Table.GetColLabelValue(col, False) value = self.Table.GetValue(row, col) - + message = None + if colname == "Name" and value != "": if not TestIdentifier(value): - message = wx.MessageDialog(self, _("\"%s\" is not a valid identifier!")%value, _("Error"), wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() - event.Veto() + message = _("\"%s\" is not a valid identifier!") % value elif value.upper() in IEC_KEYWORDS: - message = wx.MessageDialog(self, _("\"%s\" is a keyword. It can't be used!")%value, _("Error"), wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() - event.Veto() + message = _("\"%s\" is a keyword. It can't be used!") % value elif value.upper() in self.PouNames: - message = wx.MessageDialog(self, _("A POU named \"%s\" already exists!")%value, _("Error"), wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() - event.Veto() + message = _("A POU named \"%s\" already exists!") % value elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]: - message = wx.MessageDialog(self, _("A variable with \"%s\" as name already exists in this pou!")%value, _("Error"), wx.OK|wx.ICON_ERROR) - message.ShowModal() - message.Destroy() - event.Veto() + message = _("A variable with \"%s\" as name already exists in this pou!") % value else: self.SaveValues(False) old_value = self.Table.GetOldValue() @@ -668,10 +660,19 @@ self.ParentWindow.RefreshView(variablepanel = False) self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, INSTANCESTREE, LIBRARYTREE) event.Skip() + elif colname == "Location" and LOCATION_MODEL.match(value) is None: + message = _("\"%s\" is not a valid location!") % value else: self.SaveValues() if colname == "Class": self.ParentWindow.RefreshView(variablepanel = False) + + if message is not None: + dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) + dialog.ShowModal() + dialog.Destroy() + event.Veto() + else: event.Skip() def OnVariablesGridEditorShown(self, event):