editors/ResourceEditor.py
changeset 1657 3a98027ff372
parent 1611 5e64d552b25a
child 1734 750eeb7230a1
equal deleted inserted replaced
1656:bb5440697405 1657:3a98027ff372
    29 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD, ERROR_HIGHLIGHT
    29 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD, ERROR_HIGHLIGHT
    30 from controls import CustomGrid, CustomTable, DurationCellEditor
    30 from controls import CustomGrid, CustomTable, DurationCellEditor
    31 from dialogs.DurationEditorDialog import IEC_TIME_MODEL
    31 from dialogs.DurationEditorDialog import IEC_TIME_MODEL
    32 from EditorPanel import EditorPanel
    32 from EditorPanel import EditorPanel
    33 from util.BitmapLibrary import GetBitmap
    33 from util.BitmapLibrary import GetBitmap
    34 
    34 from plcopen.structures import LOCATIONDATATYPES, TestIdentifier, IEC_KEYWORDS, DefaultType
    35 #-------------------------------------------------------------------------------
    35 #-------------------------------------------------------------------------------
    36 #                          Configuration Editor class
    36 #                          Configuration Editor class
    37 #-------------------------------------------------------------------------------
    37 #-------------------------------------------------------------------------------
    38 
    38 
    39 [ID_CONFIGURATIONEDITOR,
    39 [ID_CONFIGURATIONEDITOR,
   106         self.ColSizes = list
   106         self.ColSizes = list
   107 
   107 
   108     def GetValue(self, row, col):
   108     def GetValue(self, row, col):
   109         if row < self.GetNumberRows():
   109         if row < self.GetNumberRows():
   110             colname = self.GetColLabelValue(col, False)
   110             colname = self.GetColLabelValue(col, False)
   111             value = str(self.data[row].get(colname, ""))
   111             value = self.data[row].get(colname, "")
   112             if colname == "Triggering":
   112             if colname == "Triggering":
   113                 return _(value)
   113                 return _(value)
   114             return value
   114             return value
   115 
   115 
   116     def SetValue(self, row, col, value):
   116     def SetValue(self, row, col, value):
   430         self.TasksTable.ResetView(self.TasksGrid)
   430         self.TasksTable.ResetView(self.TasksGrid)
   431         self.InstancesTable.ResetView(self.InstancesGrid)
   431         self.InstancesTable.ResetView(self.InstancesGrid)
   432         self.TasksGrid.RefreshButtons()
   432         self.TasksGrid.RefreshButtons()
   433         self.InstancesGrid.RefreshButtons()
   433         self.InstancesGrid.RefreshButtons()
   434 
   434 
       
   435     def ShowErrorMessage(self, message):
       
   436         dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
       
   437         dialog.ShowModal()
       
   438         dialog.Destroy()
       
   439 
   435     def OnTasksGridCellChange(self, event):
   440     def OnTasksGridCellChange(self, event):
   436         row, col = event.GetRow(), event.GetCol()
   441         row, col = event.GetRow(), event.GetCol()
   437         if self.TasksTable.GetColLabelValue(col, False) == "Name":
   442         if self.TasksTable.GetColLabelValue(col, False) == "Name":
       
   443             value = self.TasksTable.GetValue(row, col)
       
   444             message = None
       
   445 
       
   446             if not TestIdentifier(value):
       
   447                 message = _("\"%s\" is not a valid identifier!") % value
       
   448             elif value.upper() in IEC_KEYWORDS:
       
   449                 message = _("\"%s\" is a keyword. It can't be used!") % value
       
   450             elif value.upper() in [var["Name"].upper() for i, var in enumerate(self.TasksTable.data) if i!=row]:
       
   451                 message = _("A task with the same name already exists!")
       
   452             if message is not None:
       
   453                 event.Veto()
       
   454                 wx.CallAfter(self.ShowErrorMessage, message)
       
   455                 return
       
   456 
   438             tasklist = [name for name in self.TaskList.split(",") if name != ""]
   457             tasklist = [name for name in self.TaskList.split(",") if name != ""]
   439             for i in xrange(self.TasksTable.GetNumberRows()):
   458             for i in xrange(self.TasksTable.GetNumberRows()):
   440                 task = self.TasksTable.GetValueByName(i, "Name")
   459                 task = self.TasksTable.GetValueByName(i, "Name")
   441                 if task in tasklist:
   460                 if task in tasklist:
   442                     tasklist.remove(task)
   461                     tasklist.remove(task)
   452         if colname in ["Triggering", "Name", "Single", "Interval"]:
   471         if colname in ["Triggering", "Name", "Single", "Interval"]:
   453             wx.CallAfter(self.RefreshView, False)
   472             wx.CallAfter(self.RefreshView, False)
   454         event.Skip()
   473         event.Skip()
   455 
   474 
   456     def OnInstancesGridCellChange(self, event):
   475     def OnInstancesGridCellChange(self, event):
       
   476         row, col = event.GetRow(), event.GetCol()
       
   477         if self.InstancesTable.GetColLabelValue(col, False) == "Name":
       
   478             value = self.InstancesTable.GetValue(row, col)
       
   479             message = None
       
   480 
       
   481             if not TestIdentifier(value):
       
   482                 message = _("\"%s\" is not a valid identifier!") % value
       
   483             elif value.upper() in IEC_KEYWORDS:
       
   484                 message = _("\"%s\" is a keyword. It can't be used!") % value
       
   485             elif value.upper() in [var["Name"].upper() for i ,var in enumerate(self.InstancesTable.data) if i!=row]:
       
   486                 message = _("An instance with the same name already exists!")
       
   487             if message is not None:
       
   488                 event.Veto()
       
   489                 wx.CallAfter(self.ShowErrorMessage, message)
       
   490                 return
       
   491 
   457         self.RefreshModel()
   492         self.RefreshModel()
   458         self.ParentWindow.RefreshPouInstanceVariablesPanel()
   493         self.ParentWindow.RefreshPouInstanceVariablesPanel()
   459         self.InstancesGrid.RefreshButtons()
   494         self.InstancesGrid.RefreshButtons()
   460         event.Skip()
   495         event.Skip()
   461 
   496