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 |