controls/VariablePanel.py
changeset 2578 eed31489c909
parent 2574 48a486000e84
child 2579 8fb5c6eddc72
equal deleted inserted replaced
2577:f88eef34a523 2578:eed31489c909
    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)