author | Edouard Tisserant <edouard.tisserant@gmail.com> |
Tue, 19 Oct 2021 12:58:22 +0200 | |
changeset 3366 | 1ca385429bba |
parent 2737 | 38afed869ff6 |
child 3303 | 0ffb41625592 |
permissions | -rw-r--r-- |
814 | 1 |
#!/usr/bin/env python |
2 |
# -*- coding: utf-8 -*- |
|
3 |
||
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
4 |
# This file is part of Beremiz, a Integrated Development Environment for |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
5 |
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival. |
814 | 6 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
7 |
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD |
814 | 8 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
9 |
# See COPYING file for copyrights details. |
814 | 10 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
11 |
# This program is free software; you can redistribute it and/or |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
12 |
# modify it under the terms of the GNU General Public License |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
13 |
# as published by the Free Software Foundation; either version 2 |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
14 |
# of the License, or (at your option) any later version. |
814 | 15 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
16 |
# This program is distributed in the hope that it will be useful, |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
17 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
18 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
19 |
# GNU General Public License for more details. |
814 | 20 |
# |
1571
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
21 |
# You should have received a copy of the GNU General Public License |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
22 |
# along with this program; if not, write to the Free Software |
486f94a8032c
fix license notices in source files and license files under GPLv2+
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1423
diff
changeset
|
23 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
814 | 24 |
|
1853
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
25 |
|
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
26 |
from __future__ import absolute_import |
814 | 27 |
import wx |
28 |
import wx.lib.buttons |
|
29 |
import wx.grid |
|
2432
dbc065a2f7a5
python3 support: pylint, W1613 # (xrange-builtin) xrange built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
30 |
from six.moves import xrange |
814 | 31 |
|
831
dec885ba1f2b
Adding support for signaling that a task interval isn't well formatted
laurent
parents:
814
diff
changeset
|
32 |
from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD, ERROR_HIGHLIGHT |
814 | 33 |
from controls import CustomGrid, CustomTable, DurationCellEditor |
831
dec885ba1f2b
Adding support for signaling that a task interval isn't well formatted
laurent
parents:
814
diff
changeset
|
34 |
from dialogs.DurationEditorDialog import IEC_TIME_MODEL |
1853
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
35 |
from editors.EditorPanel import EditorPanel |
814 | 36 |
from util.BitmapLibrary import GetBitmap |
1834
cd42b426028b
fix ungrouped imports from package X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1782
diff
changeset
|
37 |
from util.TranslationCatalogs import NoTranslate |
1850
614396cbffbf
fix pylint warning '(unused-import), Unused import connectors'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1847
diff
changeset
|
38 |
from plcopen.structures import TestIdentifier, IEC_KEYWORDS |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
39 |
|
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
40 |
|
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
41 |
# ------------------------------------------------------------------------------- |
814 | 42 |
# Configuration Editor class |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
43 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
44 |
|
814 | 45 |
|
46 |
class ConfigurationEditor(EditorPanel): |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
47 |
|
814 | 48 |
VARIABLE_PANEL_TYPE = "config" |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
49 |
|
814 | 50 |
def GetBufferState(self): |
51 |
return self.Controler.GetBufferState() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
52 |
|
814 | 53 |
def Undo(self): |
54 |
self.Controler.LoadPrevious() |
|
55 |
self.ParentWindow.CloseTabsWithoutModel() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
56 |
|
814 | 57 |
def Redo(self): |
58 |
self.Controler.LoadNext() |
|
59 |
self.ParentWindow.CloseTabsWithoutModel() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
60 |
|
814 | 61 |
def HasNoModel(self): |
62 |
return self.Controler.GetEditedElement(self.TagName) is None |
|
63 |
||
64 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
65 |
# ------------------------------------------------------------------------------- |
814 | 66 |
# Resource Editor class |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
67 |
# ------------------------------------------------------------------------------- |
814 | 68 |
|
69 |
def GetTasksTableColnames(): |
|
1762
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
70 |
_ = NoTranslate |
814 | 71 |
return [_("Name"), _("Triggering"), _("Single"), _("Interval"), _("Priority")] |
72 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
73 |
|
814 | 74 |
def GetTaskTriggeringOptions(): |
1762
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
75 |
_ = NoTranslate |
814 | 76 |
return [_("Interrupt"), _("Cyclic")] |
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
77 |
|
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
78 |
|
1762
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
79 |
def SingleCellEditor(*x): |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
80 |
return wx.grid.GridCellChoiceEditor() |
1423
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
81 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
82 |
|
1423
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
83 |
def CheckSingle(single, varlist): |
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
84 |
return single in varlist |
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
85 |
|
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
86 |
|
814 | 87 |
def GetInstancesTableColnames(): |
1762
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
88 |
_ = NoTranslate |
814 | 89 |
return [_("Name"), _("Type"), _("Task")] |
90 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
91 |
|
814 | 92 |
class ResourceTable(CustomTable): |
93 |
""" |
|
94 |
A custom wx.grid.Grid Table using user supplied data |
|
95 |
""" |
|
96 |
def __init__(self, parent, data, colnames): |
|
97 |
# The base class must be initialized *first* |
|
98 |
CustomTable.__init__(self, parent, data, colnames) |
|
99 |
self.ColAlignements = [] |
|
100 |
self.ColSizes = [] |
|
2301
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2232
diff
changeset
|
101 |
self.TASKTRIGGERINGOPTIONS_DICT = dict([(_(option), option) |
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2232
diff
changeset
|
102 |
for option in GetTaskTriggeringOptions()]) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
103 |
|
814 | 104 |
def GetColAlignements(self): |
105 |
return self.ColAlignements |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
106 |
|
814 | 107 |
def SetColAlignements(self, list): |
108 |
self.ColAlignements = list |
|
109 |
||
110 |
def GetColSizes(self): |
|
111 |
return self.ColSizes |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
112 |
|
814 | 113 |
def SetColSizes(self, list): |
114 |
self.ColSizes = list |
|
115 |
||
116 |
def GetValue(self, row, col): |
|
117 |
if row < self.GetNumberRows(): |
|
118 |
colname = self.GetColLabelValue(col, False) |
|
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
119 |
value = self.data[row].get(colname, "") |
814 | 120 |
if colname == "Triggering": |
121 |
return _(value) |
|
122 |
return value |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
123 |
|
814 | 124 |
def SetValue(self, row, col, value): |
125 |
if col < len(self.colnames): |
|
126 |
colname = self.GetColLabelValue(col, False) |
|
127 |
if colname == "Triggering": |
|
2301
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2232
diff
changeset
|
128 |
value = self.TASKTRIGGERINGOPTIONS_DICT[value] |
814 | 129 |
self.data[row][colname] = value |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
130 |
|
814 | 131 |
def _updateColAttrs(self, grid): |
132 |
""" |
|
133 |
wx.grid.Grid -> update the column attributes to add the |
|
134 |
appropriate renderer given the column name. |
|
135 |
||
136 |
Otherwise default to the default renderer. |
|
137 |
""" |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
138 |
|
814 | 139 |
for col in range(self.GetNumberCols()): |
140 |
attr = wx.grid.GridCellAttr() |
|
141 |
attr.SetAlignment(self.ColAlignements[col], wx.ALIGN_CENTRE) |
|
142 |
grid.SetColAttr(col, attr) |
|
143 |
grid.SetColSize(col, self.ColSizes[col]) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
144 |
|
814 | 145 |
for row in range(self.GetNumberRows()): |
146 |
row_highlights = self.Highlights.get(row, {}) |
|
147 |
for col in range(self.GetNumberCols()): |
|
148 |
editor = None |
|
149 |
renderer = None |
|
879
55b8a16ead2b
Fix resource task interval error highlighting
Laurent Bessard
parents:
831
diff
changeset
|
150 |
error = False |
814 | 151 |
colname = self.GetColLabelValue(col, False) |
152 |
grid.SetReadOnly(row, col, False) |
|
153 |
if colname == "Name": |
|
154 |
editor = wx.grid.GridCellTextEditor() |
|
155 |
renderer = wx.grid.GridCellStringRenderer() |
|
156 |
elif colname == "Interval": |
|
1275
8d4de18c9f29
Fixed DurationCellEditor to make it reusable
Laurent Bessard
parents:
1026
diff
changeset
|
157 |
editor = DurationCellEditor(self, colname) |
814 | 158 |
renderer = wx.grid.GridCellStringRenderer() |
159 |
if self.GetValueByName(row, "Triggering") != "Cyclic": |
|
160 |
grid.SetReadOnly(row, col, True) |
|
879
55b8a16ead2b
Fix resource task interval error highlighting
Laurent Bessard
parents:
831
diff
changeset
|
161 |
interval = self.GetValueByName(row, colname) |
55b8a16ead2b
Fix resource task interval error highlighting
Laurent Bessard
parents:
831
diff
changeset
|
162 |
if interval != "" and IEC_TIME_MODEL.match(interval.upper()) is None: |
55b8a16ead2b
Fix resource task interval error highlighting
Laurent Bessard
parents:
831
diff
changeset
|
163 |
error = True |
814 | 164 |
elif colname == "Single": |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
165 |
editor = SingleCellEditor(self, colname) |
814 | 166 |
editor.SetParameters(self.Parent.VariableList) |
167 |
if self.GetValueByName(row, "Triggering") != "Interrupt": |
|
168 |
grid.SetReadOnly(row, col, True) |
|
1423
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
169 |
single = self.GetValueByName(row, colname) |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
170 |
if single != "" and not CheckSingle(single, self.Parent.VariableList): |
1423
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
171 |
error = True |
814 | 172 |
elif colname == "Triggering": |
173 |
editor = wx.grid.GridCellChoiceEditor() |
|
1026
96a2dc05651a
Fixed Triggering column cell choice editor, removing useless and bugging empty string option
Laurent Bessard
parents:
899
diff
changeset
|
174 |
editor.SetParameters(",".join(map(_, GetTaskTriggeringOptions()))) |
814 | 175 |
elif colname == "Type": |
176 |
editor = wx.grid.GridCellChoiceEditor() |
|
177 |
editor.SetParameters(self.Parent.TypeList) |
|
178 |
elif colname == "Priority": |
|
179 |
editor = wx.grid.GridCellNumberEditor() |
|
180 |
editor.SetParameters("0,65535") |
|
181 |
elif colname == "Task": |
|
182 |
editor = wx.grid.GridCellChoiceEditor() |
|
183 |
editor.SetParameters(self.Parent.TaskList) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
184 |
|
814 | 185 |
grid.SetCellEditor(row, col, editor) |
186 |
grid.SetCellRenderer(row, col, renderer) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
187 |
|
879
55b8a16ead2b
Fix resource task interval error highlighting
Laurent Bessard
parents:
831
diff
changeset
|
188 |
if error: |
831
dec885ba1f2b
Adding support for signaling that a task interval isn't well formatted
laurent
parents:
814
diff
changeset
|
189 |
highlight_colours = ERROR_HIGHLIGHT |
dec885ba1f2b
Adding support for signaling that a task interval isn't well formatted
laurent
parents:
814
diff
changeset
|
190 |
else: |
dec885ba1f2b
Adding support for signaling that a task interval isn't well formatted
laurent
parents:
814
diff
changeset
|
191 |
highlight_colours = row_highlights.get(colname.lower(), [(wx.WHITE, wx.BLACK)])[-1] |
814 | 192 |
grid.SetCellBackgroundColour(row, col, highlight_colours[0]) |
193 |
grid.SetCellTextColour(row, col, highlight_colours[1]) |
|
194 |
self.ResizeRow(grid, row) |
|
195 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
196 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
197 |
# Highlights showing functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
198 |
# ------------------------------------------------------------------------------- |
814 | 199 |
|
200 |
def AddHighlight(self, infos, highlight_type): |
|
201 |
row_highlights = self.Highlights.setdefault(infos[0], {}) |
|
202 |
col_highlights = row_highlights.setdefault(infos[1], []) |
|
203 |
col_highlights.append(highlight_type) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
204 |
|
814 | 205 |
def ClearHighlights(self, highlight_type=None): |
206 |
if highlight_type is None: |
|
207 |
self.Highlights = {} |
|
208 |
else: |
|
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
209 |
for _row, row_highlights in self.Highlights.iteritems(): |
814 | 210 |
row_items = row_highlights.items() |
211 |
for col, col_highlights in row_items: |
|
212 |
if highlight_type in col_highlights: |
|
213 |
col_highlights.remove(highlight_type) |
|
214 |
if len(col_highlights) == 0: |
|
215 |
row_highlights.pop(col) |
|
216 |
||
217 |
||
218 |
class ResourceEditor(EditorPanel): |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
219 |
|
814 | 220 |
VARIABLE_PANEL_TYPE = "resource" |
221 |
||
222 |
def _init_Editor(self, parent): |
|
1745
f9d32913bad4
clean-up: fix PEP8 E227 missing whitespace around bitwise or shift operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
223 |
self.Editor = wx.Panel(parent, style=wx.SUNKEN_BORDER | wx.TAB_TRAVERSAL) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
224 |
|
814 | 225 |
main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) |
226 |
main_sizer.AddGrowableCol(0) |
|
227 |
main_sizer.AddGrowableRow(0) |
|
228 |
main_sizer.AddGrowableRow(1) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
229 |
|
814 | 230 |
tasks_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) |
231 |
tasks_sizer.AddGrowableCol(0) |
|
232 |
tasks_sizer.AddGrowableRow(1) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
233 |
main_sizer.AddSizer(tasks_sizer, border=5, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
234 |
flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
235 |
|
814 | 236 |
tasks_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0) |
237 |
tasks_buttons_sizer.AddGrowableCol(0) |
|
238 |
tasks_buttons_sizer.AddGrowableRow(0) |
|
239 |
tasks_sizer.AddSizer(tasks_buttons_sizer, flag=wx.GROW) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
240 |
|
814 | 241 |
tasks_label = wx.StaticText(self.Editor, label=_(u'Tasks:')) |
242 |
tasks_buttons_sizer.AddWindow(tasks_label, flag=wx.ALIGN_BOTTOM) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
243 |
|
814 | 244 |
for name, bitmap, help in [ |
245 |
("AddTaskButton", "add_element", _("Add task")), |
|
246 |
("DeleteTaskButton", "remove_element", _("Remove task")), |
|
247 |
("UpTaskButton", "up", _("Move task up")), |
|
248 |
("DownTaskButton", "down", _("Move task down"))]: |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
249 |
button = wx.lib.buttons.GenBitmapButton(self.Editor, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
250 |
bitmap=GetBitmap(bitmap), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
251 |
size=wx.Size(28, 28), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
252 |
style=wx.NO_BORDER) |
814 | 253 |
button.SetToolTipString(help) |
254 |
setattr(self, name, button) |
|
255 |
tasks_buttons_sizer.AddWindow(button) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
256 |
|
814 | 257 |
self.TasksGrid = CustomGrid(self.Editor, style=wx.VSCROLL) |
258 |
self.TasksGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnTasksGridCellChange) |
|
259 |
tasks_sizer.AddWindow(self.TasksGrid, flag=wx.GROW) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
260 |
|
814 | 261 |
instances_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5) |
262 |
instances_sizer.AddGrowableCol(0) |
|
263 |
instances_sizer.AddGrowableRow(1) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
264 |
main_sizer.AddSizer(instances_sizer, border=5, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
265 |
flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
266 |
|
814 | 267 |
instances_buttons_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0) |
268 |
instances_buttons_sizer.AddGrowableCol(0) |
|
269 |
instances_buttons_sizer.AddGrowableRow(0) |
|
270 |
instances_sizer.AddSizer(instances_buttons_sizer, flag=wx.GROW) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
271 |
|
814 | 272 |
instances_label = wx.StaticText(self.Editor, label=_(u'Instances:')) |
273 |
instances_buttons_sizer.AddWindow(instances_label, flag=wx.ALIGN_BOTTOM) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
274 |
|
814 | 275 |
for name, bitmap, help in [ |
276 |
("AddInstanceButton", "add_element", _("Add instance")), |
|
277 |
("DeleteInstanceButton", "remove_element", _("Remove instance")), |
|
278 |
("UpInstanceButton", "up", _("Move instance up")), |
|
279 |
("DownInstanceButton", "down", _("Move instance down"))]: |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
280 |
button = wx.lib.buttons.GenBitmapButton( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
281 |
self.Editor, bitmap=GetBitmap(bitmap), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
282 |
size=wx.Size(28, 28), style=wx.NO_BORDER) |
814 | 283 |
button.SetToolTipString(help) |
284 |
setattr(self, name, button) |
|
285 |
instances_buttons_sizer.AddWindow(button) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
286 |
|
814 | 287 |
self.InstancesGrid = CustomGrid(self.Editor, style=wx.VSCROLL) |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
288 |
self.InstancesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnInstancesGridCellChange) |
814 | 289 |
instances_sizer.AddWindow(self.InstancesGrid, flag=wx.GROW) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
290 |
|
814 | 291 |
self.Editor.SetSizer(main_sizer) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
292 |
|
814 | 293 |
def __init__(self, parent, tagname, window, controler): |
294 |
EditorPanel.__init__(self, parent, tagname, window, controler) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
295 |
|
814 | 296 |
self.RefreshHighlightsTimer = wx.Timer(self, -1) |
297 |
self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
298 |
|
1968
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
299 |
self.TasksDefaultValue = {"Name": "task0", "Triggering": "Cyclic", |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
300 |
"Single": "", "Interval": "T#20ms", "Priority": 0} |
814 | 301 |
self.TasksTable = ResourceTable(self, [], GetTasksTableColnames()) |
302 |
self.TasksTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_RIGHT, wx.ALIGN_RIGHT]) |
|
303 |
self.TasksTable.SetColSizes([200, 100, 100, 150, 100]) |
|
304 |
self.TasksGrid.SetTable(self.TasksTable) |
|
305 |
self.TasksGrid.SetButtons({"Add": self.AddTaskButton, |
|
306 |
"Delete": self.DeleteTaskButton, |
|
307 |
"Up": self.UpTaskButton, |
|
308 |
"Down": self.DownTaskButton}) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
309 |
|
814 | 310 |
def _AddTask(new_row): |
1968
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
311 |
if new_row > 0: |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
312 |
row_content = self.TasksTable.data[new_row-1].copy() |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
313 |
old_name = row_content['Name'] |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
314 |
row_content['Name'] =\ |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
315 |
self.Controler.GenerateNewName(self.TagName, old_name, old_name+'%d') |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
316 |
else: |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
317 |
row_content = self.TasksDefaultValue.copy() |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
318 |
|
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
319 |
self.TasksTable.InsertRow(new_row, row_content) |
814 | 320 |
self.RefreshModel() |
321 |
self.RefreshView() |
|
322 |
return new_row |
|
323 |
setattr(self.TasksGrid, "_AddRow", _AddTask) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
324 |
|
814 | 325 |
def _DeleteTask(row): |
326 |
self.TasksTable.RemoveRow(row) |
|
327 |
self.RefreshModel() |
|
328 |
self.RefreshView() |
|
329 |
setattr(self.TasksGrid, "_DeleteRow", _DeleteTask) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
330 |
|
814 | 331 |
def _MoveTask(row, move): |
332 |
new_row = self.TasksTable.MoveRow(row, move) |
|
333 |
if new_row != row: |
|
334 |
self.RefreshModel() |
|
335 |
self.RefreshView() |
|
336 |
return new_row |
|
337 |
setattr(self.TasksGrid, "_MoveRow", _MoveTask) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
338 |
|
814 | 339 |
self.TasksGrid.SetRowLabelSize(0) |
340 |
self.TasksTable.ResetView(self.TasksGrid) |
|
341 |
self.TasksGrid.RefreshButtons() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
342 |
|
1968
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
343 |
self.InstancesDefaultValue = {"Name": "instance0", "Type": "", "Task": ""} |
814 | 344 |
self.InstancesTable = ResourceTable(self, [], GetInstancesTableColnames()) |
345 |
self.InstancesTable.SetColAlignements([wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]) |
|
346 |
self.InstancesTable.SetColSizes([200, 150, 150]) |
|
347 |
self.InstancesGrid.SetTable(self.InstancesTable) |
|
348 |
self.InstancesGrid.SetButtons({"Add": self.AddInstanceButton, |
|
349 |
"Delete": self.DeleteInstanceButton, |
|
350 |
"Up": self.UpInstanceButton, |
|
351 |
"Down": self.DownInstanceButton}) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
352 |
|
814 | 353 |
def _AddInstance(new_row): |
1968
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
354 |
if new_row > 0: |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
355 |
row_content = self.InstancesTable.data[new_row - 1].copy() |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
356 |
old_name = row_content['Name'] |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
357 |
row_content['Name'] =\ |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
358 |
self.Controler.GenerateNewName(self.TagName, old_name, old_name+'%d') |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
359 |
else: |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
360 |
row_content = self.InstancesDefaultValue.copy() |
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
361 |
|
64827679f3f1
add fields autocomplete when adding task or instance in resources
Surkov Sergey <surkovsv93@gmail.com>
parents:
1853
diff
changeset
|
362 |
self.InstancesTable.InsertRow(new_row, row_content) |
814 | 363 |
self.RefreshModel() |
364 |
self.RefreshView() |
|
365 |
return new_row |
|
366 |
setattr(self.InstancesGrid, "_AddRow", _AddInstance) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
367 |
|
814 | 368 |
def _DeleteInstance(row): |
369 |
self.InstancesTable.RemoveRow(row) |
|
370 |
self.RefreshModel() |
|
371 |
self.RefreshView() |
|
372 |
setattr(self.InstancesGrid, "_DeleteRow", _DeleteInstance) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
373 |
|
814 | 374 |
def _MoveInstance(row, move): |
375 |
new_row = max(0, min(row + move, self.InstancesTable.GetNumberRows() - 1)) |
|
376 |
if new_row != row: |
|
377 |
if self.InstancesTable.GetValueByName(row, "Task") != self.InstancesTable.GetValueByName(new_row, "Task"): |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
378 |
return row |
814 | 379 |
self.InstancesTable.MoveRow(row, move) |
380 |
self.RefreshModel() |
|
381 |
self.RefreshView() |
|
382 |
return new_row |
|
383 |
setattr(self.InstancesGrid, "_MoveRow", _MoveInstance) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
384 |
|
814 | 385 |
def _RefreshInstanceButtons(): |
386 |
if self: |
|
387 |
rows = self.InstancesTable.GetNumberRows() |
|
388 |
row = self.InstancesGrid.GetGridCursorRow() |
|
389 |
self.DeleteInstanceButton.Enable(rows > 0) |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
390 |
self.UpInstanceButton.Enable( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
391 |
row > 0 and |
814 | 392 |
self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row - 1, "Task")) |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
393 |
self.DownInstanceButton.Enable( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
394 |
0 <= row < rows - 1 and |
814 | 395 |
self.InstancesTable.GetValueByName(row, "Task") == self.InstancesTable.GetValueByName(row + 1, "Task")) |
396 |
setattr(self.InstancesGrid, "RefreshButtons", _RefreshInstanceButtons) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
397 |
|
814 | 398 |
self.InstancesGrid.SetRowLabelSize(0) |
399 |
self.InstancesTable.ResetView(self.InstancesGrid) |
|
400 |
self.InstancesGrid.RefreshButtons() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
401 |
|
814 | 402 |
self.TasksGrid.SetFocus() |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
403 |
|
814 | 404 |
def __del__(self): |
405 |
self.RefreshHighlightsTimer.Stop() |
|
406 |
||
407 |
def RefreshTypeList(self): |
|
408 |
self.TypeList = "" |
|
409 |
blocktypes = self.Controler.GetBlockResource() |
|
410 |
for blocktype in blocktypes: |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1657
diff
changeset
|
411 |
self.TypeList += ",%s" % blocktype |
814 | 412 |
|
413 |
def RefreshTaskList(self): |
|
414 |
self.TaskList = "" |
|
415 |
for row in xrange(self.TasksTable.GetNumberRows()): |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1657
diff
changeset
|
416 |
self.TaskList += ",%s" % self.TasksTable.GetValueByName(row, "Name") |
814 | 417 |
|
418 |
def RefreshVariableList(self): |
|
419 |
self.VariableList = "" |
|
420 |
for variable in self.Controler.GetEditedResourceVariables(self.TagName): |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1657
diff
changeset
|
421 |
self.VariableList += ",%s" % variable |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
422 |
|
814 | 423 |
def RefreshModel(self): |
424 |
self.Controler.SetEditedResourceInfos(self.TagName, self.TasksTable.GetData(), self.InstancesTable.GetData()) |
|
425 |
self.RefreshBuffer() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
426 |
|
814 | 427 |
# Buffer the last model state |
428 |
def RefreshBuffer(self): |
|
429 |
self.Controler.BufferProject() |
|
430 |
self.ParentWindow.RefreshTitle() |
|
431 |
self.ParentWindow.RefreshFileMenu() |
|
432 |
self.ParentWindow.RefreshEditMenu() |
|
433 |
||
434 |
def GetBufferState(self): |
|
435 |
return self.Controler.GetBufferState() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
436 |
|
814 | 437 |
def Undo(self): |
438 |
self.Controler.LoadPrevious() |
|
439 |
self.ParentWindow.CloseTabsWithoutModel() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
440 |
|
814 | 441 |
def Redo(self): |
442 |
self.Controler.LoadNext() |
|
443 |
self.ParentWindow.CloseTabsWithoutModel() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
444 |
|
814 | 445 |
def HasNoModel(self): |
446 |
return self.Controler.GetEditedElement(self.TagName) is None |
|
447 |
||
448 |
def RefreshView(self, variablepanel=True): |
|
449 |
EditorPanel.RefreshView(self, variablepanel) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
450 |
|
814 | 451 |
tasks, instances = self.Controler.GetEditedResourceInfos(self.TagName) |
452 |
self.TasksTable.SetData(tasks) |
|
453 |
self.InstancesTable.SetData(instances) |
|
454 |
self.RefreshTypeList() |
|
455 |
self.RefreshTaskList() |
|
456 |
self.RefreshVariableList() |
|
457 |
self.TasksTable.ResetView(self.TasksGrid) |
|
458 |
self.InstancesTable.ResetView(self.InstancesGrid) |
|
459 |
self.TasksGrid.RefreshButtons() |
|
460 |
self.InstancesGrid.RefreshButtons() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
461 |
|
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
462 |
def ShowErrorMessage(self, message): |
1745
f9d32913bad4
clean-up: fix PEP8 E227 missing whitespace around bitwise or shift operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1742
diff
changeset
|
463 |
dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR) |
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
464 |
dialog.ShowModal() |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
465 |
dialog.Destroy() |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
466 |
|
814 | 467 |
def OnTasksGridCellChange(self, event): |
468 |
row, col = event.GetRow(), event.GetCol() |
|
1604
7f98c091be56
fix issue with task rename if "Name" column label is translated into
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1571
diff
changeset
|
469 |
if self.TasksTable.GetColLabelValue(col, False) == "Name": |
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
470 |
value = self.TasksTable.GetValue(row, col) |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
471 |
message = None |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
472 |
|
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
473 |
if not TestIdentifier(value): |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
474 |
message = _("\"%s\" is not a valid identifier!") % value |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
475 |
elif value.upper() in IEC_KEYWORDS: |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
476 |
message = _("\"%s\" is a keyword. It can't be used!") % value |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
477 |
elif value.upper() in [var["Name"].upper() for i, var in enumerate(self.TasksTable.data) if i != row]: |
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
478 |
message = _("A task with the same name already exists!") |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
479 |
if message is not None: |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
480 |
event.Veto() |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
481 |
wx.CallAfter(self.ShowErrorMessage, message) |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
482 |
return |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
483 |
|
814 | 484 |
tasklist = [name for name in self.TaskList.split(",") if name != ""] |
485 |
for i in xrange(self.TasksTable.GetNumberRows()): |
|
486 |
task = self.TasksTable.GetValueByName(i, "Name") |
|
487 |
if task in tasklist: |
|
488 |
tasklist.remove(task) |
|
489 |
if len(tasklist) > 0: |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1604
diff
changeset
|
490 |
old_name = tasklist[0].upper() |
814 | 491 |
new_name = self.TasksTable.GetValue(row, col) |
492 |
for i in xrange(self.InstancesTable.GetNumberRows()): |
|
1611
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1604
diff
changeset
|
493 |
name = self.InstancesTable.GetValueByName(i, "Task").upper() |
5e64d552b25a
make renames caseinsensitive
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1604
diff
changeset
|
494 |
if old_name == name: |
814 | 495 |
self.InstancesTable.SetValueByName(i, "Task", new_name) |
2232
3220dd020675
If task type is changed from 'interrupt' to 'cyclic' init interval with T#20ms.
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1968
diff
changeset
|
496 |
if self.TasksTable.GetColLabelValue(col, False) == "Triggering": |
3220dd020675
If task type is changed from 'interrupt' to 'cyclic' init interval with T#20ms.
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1968
diff
changeset
|
497 |
self.TasksTable.SetValueByName(row, "Interval", "T#20ms") |
814 | 498 |
self.RefreshModel() |
499 |
colname = self.TasksTable.GetColLabelValue(col, False) |
|
1423
4e33f644f7cf
Added highlighting of wrong SINGLE task trigger
Edouard Tisserant
parents:
1420
diff
changeset
|
500 |
if colname in ["Triggering", "Name", "Single", "Interval"]: |
814 | 501 |
wx.CallAfter(self.RefreshView, False) |
502 |
event.Skip() |
|
503 |
||
504 |
def OnInstancesGridCellChange(self, event): |
|
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
505 |
row, col = event.GetRow(), event.GetCol() |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
506 |
if self.InstancesTable.GetColLabelValue(col, False) == "Name": |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
507 |
value = self.InstancesTable.GetValue(row, col) |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
508 |
message = None |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
509 |
|
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
510 |
if not TestIdentifier(value): |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
511 |
message = _("\"%s\" is not a valid identifier!") % value |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
512 |
elif value.upper() in IEC_KEYWORDS: |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
513 |
message = _("\"%s\" is a keyword. It can't be used!") % value |
1742
92932cd370a4
clean-up: fix PEP8 E225 missing whitespace around operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
514 |
elif value.upper() in [var["Name"].upper() for i, var in enumerate(self.InstancesTable.data) if i != row]: |
1657
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
515 |
message = _("An instance with the same name already exists!") |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
516 |
if message is not None: |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
517 |
event.Veto() |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
518 |
wx.CallAfter(self.ShowErrorMessage, message) |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
519 |
return |
3a98027ff372
apply constraints to names for tasks and task instances in resource configuration
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1611
diff
changeset
|
520 |
|
814 | 521 |
self.RefreshModel() |
522 |
self.ParentWindow.RefreshPouInstanceVariablesPanel() |
|
523 |
self.InstancesGrid.RefreshButtons() |
|
524 |
event.Skip() |
|
525 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
526 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
527 |
# Highlights showing functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
528 |
# ------------------------------------------------------------------------------- |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
529 |
|
814 | 530 |
def OnRefreshHighlightsTimer(self, event): |
531 |
self.RefreshView() |
|
532 |
event.Skip() |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
533 |
|
814 | 534 |
def AddHighlight(self, infos, start, end, highlight_type): |
899
64aa66d481c5
Fix bug in resource search result highlighting
Laurent Bessard
parents:
879
diff
changeset
|
535 |
EditorPanel.AddHighlight(self, infos, start, end, highlight_type) |
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
536 |
|
814 | 537 |
if infos[0] == "task": |
538 |
self.TasksTable.AddHighlight(infos[1:], highlight_type) |
|
539 |
elif infos[0] == "instance": |
|
540 |
self.InstancesTable.AddHighlight(infos[1:], highlight_type) |
|
541 |
self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True) |
|
542 |
||
543 |
def ClearHighlights(self, highlight_type=None): |
|
544 |
EditorPanel.ClearHighlights(self, highlight_type) |
|
1420
71b1545d746f
Enable overloading of task triggerring source cell editor (SINGLE) in resource editor. PLCGenerator now generates MULTI keywork instead of SINGLE when task's activation is surroundes with square brackets
Edouard Tisserant
parents:
1275
diff
changeset
|
545 |
|
814 | 546 |
self.TasksTable.ClearHighlights(highlight_type) |
547 |
self.InstancesTable.ClearHighlights(highlight_type) |
|
548 |
self.TasksTable.ResetView(self.TasksGrid) |
|
549 |
self.InstancesTable.ResetView(self.InstancesGrid) |