32 import wx.grid |
32 import wx.grid |
33 import wx.lib.buttons |
33 import wx.lib.buttons |
34 from six import string_types |
34 from six import string_types |
35 from six.moves import xrange |
35 from six.moves import xrange |
36 |
36 |
|
37 |
37 from plcopen.structures import LOCATIONDATATYPES, TestIdentifier, IEC_KEYWORDS, DefaultType |
38 from plcopen.structures import LOCATIONDATATYPES, TestIdentifier, IEC_KEYWORDS, DefaultType |
38 from plcopen.VariableInfoCollector import _VariableInfos |
39 from plcopen.VariableInfoCollector import _VariableInfos |
39 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD, ERROR_HIGHLIGHT |
40 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD, ERROR_HIGHLIGHT |
40 from dialogs.ArrayTypeDialog import ArrayTypeDialog |
41 from dialogs.ArrayTypeDialog import ArrayTypeDialog |
41 from controls.CustomGrid import CustomGrid |
42 from controls.CustomGrid import CustomGrid |
148 if colname in ["Class", "Option"]: |
149 if colname in ["Class", "Option"]: |
149 return _(value) |
150 return _(value) |
150 return value |
151 return value |
151 |
152 |
152 def SetValue(self, row, col, value): |
153 def SetValue(self, row, col, value): |
|
154 print("SetValue",row, col, value) |
153 if col < len(self.colnames): |
155 if col < len(self.colnames): |
154 colname = self.GetColLabelValue(col, False) |
156 colname = self.GetColLabelValue(col, False) |
155 if colname == "Name": |
157 if colname == "Name": |
156 self.old_value = getattr(self.data[row], colname) |
158 self.old_value = getattr(self.data[row], colname) |
157 elif colname == "Class": |
159 elif colname == "Class": |
786 def ShowErrorMessage(self, message): |
788 def ShowErrorMessage(self, message): |
787 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR) |
789 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR) |
788 dialog.ShowModal() |
790 dialog.ShowModal() |
789 dialog.Destroy() |
791 dialog.Destroy() |
790 |
792 |
|
793 def OnVariableNameChange(self, old_name, new_name): |
|
794 """ propagate renaming of variable to the rest of the project """ |
|
795 if old_name != "": |
|
796 self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_name, new_name) |
|
797 self.Controler.BufferProject() |
|
798 wx.CallAfter(self.ParentWindow.RefreshView, False) |
|
799 self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
|
800 |
|
801 def CheckVariableName(self, value, row): |
|
802 if not TestIdentifier(value): |
|
803 message = _("\"%s\" is not a valid identifier!") % value |
|
804 elif value.upper() in IEC_KEYWORDS: |
|
805 message = _("\"%s\" is a keyword. It can't be used!") % value |
|
806 elif value.upper() in self.PouNames: |
|
807 message = _("A POU named \"%s\" already exists!") % value |
|
808 elif value.upper() in [var.Name.upper() for var in self.Values if var != self.Table.data[row]]: |
|
809 message = _("A variable with \"%s\" as name already exists in this pou!") % value |
|
810 else: |
|
811 return None |
|
812 return message |
|
813 |
791 def OnVariablesGridCellChange(self, event): |
814 def OnVariablesGridCellChange(self, event): |
792 row, col = event.GetRow(), event.GetCol() |
815 row, col = event.GetRow(), event.GetCol() |
793 colname = self.Table.GetColLabelValue(col, False) |
816 colname = self.Table.GetColLabelValue(col, False) |
794 value = self.Table.GetValue(row, col) |
817 value = self.Table.GetValue(row, col) |
795 message = None |
818 message = None |
796 |
819 |
797 if colname == "Name" and value != "": |
820 if colname == "Name" and value != "": |
798 if not TestIdentifier(value): |
821 message = self.CheckVariableName(value, row) |
799 message = _("\"%s\" is not a valid identifier!") % value |
822 if message is None: |
800 elif value.upper() in IEC_KEYWORDS: |
|
801 message = _("\"%s\" is a keyword. It can't be used!") % value |
|
802 elif value.upper() in self.PouNames: |
|
803 message = _("A POU named \"%s\" already exists!") % value |
|
804 elif value.upper() in [var.Name.upper() for var in self.Values if var != self.Table.data[row]]: |
|
805 message = _("A variable with \"%s\" as name already exists in this pou!") % value |
|
806 else: |
|
807 self.SaveValues(False) |
823 self.SaveValues(False) |
808 old_value = self.Table.GetOldValue() |
824 old_value = self.Table.GetOldValue() |
809 if old_value != "": |
825 self.OnVariableNameChange(old_value, value) |
810 self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_value, value) |
|
811 self.Controler.BufferProject() |
|
812 wx.CallAfter(self.ParentWindow.RefreshView, False) |
|
813 self.ParentWindow._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES, POUINSTANCEVARIABLESPANEL, LIBRARYTREE) |
|
814 else: |
826 else: |
815 self.SaveValues() |
827 self.SaveValues() |
816 if colname == "Class": |
828 if colname == "Class": |
817 self.ClearLocation(row, col, value) |
829 self.ClearLocation(row, col, value) |
818 wx.CallAfter(self.ParentWindow.RefreshView) |
830 wx.CallAfter(self.ParentWindow.RefreshView) |