author | Edouard Tisserant <edouard.tisserant@gmail.com> |
Sun, 16 Jan 2022 16:57:56 +0100 | |
changeset 3402 | 3f54a680fe45 |
parent 3300 | 95fe62bfe920 |
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1567
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:
1852
diff
changeset
|
25 |
|
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1852
diff
changeset
|
26 |
from __future__ import absolute_import |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
27 |
from __future__ import division |
814 | 28 |
import math |
1224 | 29 |
from time import time as gettime |
814 | 30 |
from threading import Lock |
2457
9deec258ab1a
python3 support: pylint, W1633 # (round-builtin) round built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2450
diff
changeset
|
31 |
from future.builtins import round |
814 | 32 |
|
33 |
import wx |
|
2432
dbc065a2f7a5
python3 support: pylint, W1613 # (xrange-builtin) xrange built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2417
diff
changeset
|
34 |
from six.moves import xrange |
814 | 35 |
|
36 |
from plcopen.structures import * |
|
1948
b9a3f771aaab
Moved some definitions away from controller class, and adaped references them through all code.
Edouard Tisserant
parents:
1931
diff
changeset
|
37 |
from plcopen.types_enums import ComputePouName |
885
fc91d3718b74
Fix bug multiple graph viewer tab displaying values of the same variable can be opened
Laurent Bessard
parents:
882
diff
changeset
|
38 |
from PLCControler import ITEM_VAR_LOCAL, ITEM_POU, ITEM_PROGRAM, ITEM_FUNCTIONBLOCK |
1931 | 39 |
|
40 |
from graphics.GraphicCommons import * |
|
41 |
from graphics.FBD_Objects import * |
|
42 |
from graphics.LD_Objects import * |
|
43 |
from graphics.SFC_Objects import * |
|
44 |
from graphics.RubberBand import RubberBand |
|
45 |
from graphics.DebugDataConsumer import DebugDataConsumer |
|
46 |
||
814 | 47 |
from dialogs import * |
1224 | 48 |
from editors.DebugViewer import DebugViewer, REFRESH_PERIOD |
1853
47a3f39bead0
fix pylint warning "(relative-import) Relative import 'Y', should be 'X.Y'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1852
diff
changeset
|
49 |
from editors.EditorPanel import EditorPanel |
814 | 50 |
|
51 |
SCROLLBAR_UNIT = 10 |
|
52 |
WINDOW_BORDER = 10 |
|
53 |
SCROLL_ZONE = 10 |
|
54 |
||
55 |
CURSORS = None |
|
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
56 |
SFC_Objects = (SFC_Step, SFC_ActionBlock, SFC_Transition, SFC_Divergence, SFC_Jump) |
814 | 57 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
58 |
|
814 | 59 |
def ResetCursors(): |
60 |
global CURSORS |
|
1743
c3c3d1318130
clean-up: fix PEP8 E711 comparison to None should be 'if cond is not None:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
61 |
if CURSORS is None: |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
62 |
CURSORS = [wx.NullCursor, |
814 | 63 |
wx.StockCursor(wx.CURSOR_HAND), |
64 |
wx.StockCursor(wx.CURSOR_SIZENWSE), |
|
65 |
wx.StockCursor(wx.CURSOR_SIZENESW), |
|
66 |
wx.StockCursor(wx.CURSOR_SIZEWE), |
|
67 |
wx.StockCursor(wx.CURSOR_SIZENS)] |
|
68 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
69 |
|
814 | 70 |
if wx.Platform == '__WXMSW__': |
1747
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
71 |
faces = { |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
72 |
'times': 'Times New Roman', |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
73 |
'mono': 'Courier New', |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
74 |
'helv': 'Arial', |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
75 |
'other': 'Comic Sans MS', |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
76 |
'size': 10, |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
77 |
} |
814 | 78 |
else: |
1747
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
79 |
faces = { |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
80 |
'times': 'Times', |
2704
4ba3bdc7d71f
Fix unmatched "Courier" font for monospace fonts on latest ubuntu 20.04. Selected "FreeMono" instead, present since at least 18.04
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2639
diff
changeset
|
81 |
'mono': 'FreeMono', |
1747
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
82 |
'helv': 'Helvetica', |
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
83 |
'other': 'new century schoolbook', |
2345
a56362c818a3
use the same font size on Windows and GNU/Linux
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2344
diff
changeset
|
84 |
'size': 10, |
1747
6046ffa2280f
clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1745
diff
changeset
|
85 |
} |
814 | 86 |
|
1123
55ed55ef7aea
Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents:
1122
diff
changeset
|
87 |
if wx.Platform == '__WXMSW__': |
55ed55ef7aea
Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents:
1122
diff
changeset
|
88 |
MAX_ZOOMIN = 4 |
55ed55ef7aea
Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents:
1122
diff
changeset
|
89 |
else: |
55ed55ef7aea
Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents:
1122
diff
changeset
|
90 |
MAX_ZOOMIN = 7 |
55ed55ef7aea
Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents:
1122
diff
changeset
|
91 |
ZOOM_FACTORS = [math.sqrt(2) ** x for x in xrange(-6, MAX_ZOOMIN)] |
814 | 92 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
93 |
|
814 | 94 |
def GetVariableCreationFunction(variable_type): |
95 |
def variableCreationFunction(viewer, id, specific_values): |
|
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
96 |
return FBD_Variable(viewer, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
97 |
variable_type, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
98 |
specific_values.name, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
99 |
specific_values.value_type, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
100 |
id, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
101 |
specific_values.execution_order) |
814 | 102 |
return variableCreationFunction |
103 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
104 |
|
814 | 105 |
def GetConnectorCreationFunction(connector_type): |
106 |
def connectorCreationFunction(viewer, id, specific_values): |
|
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
107 |
return FBD_Connector(viewer, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
108 |
connector_type, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
109 |
specific_values.name, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
110 |
id) |
814 | 111 |
return connectorCreationFunction |
112 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
113 |
|
814 | 114 |
def commentCreationFunction(viewer, id, specific_values): |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
115 |
return Comment(viewer, specific_values.content, id) |
814 | 116 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
117 |
|
814 | 118 |
def GetPowerRailCreationFunction(powerrail_type): |
119 |
def powerRailCreationFunction(viewer, id, specific_values): |
|
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
120 |
return LD_PowerRail(viewer, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
121 |
powerrail_type, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
122 |
id, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
123 |
specific_values.connectors) |
814 | 124 |
return powerRailCreationFunction |
125 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1747
diff
changeset
|
126 |
|
1762
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
127 |
def NEGATED_VALUE(x): |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
128 |
return x if x is not None else False |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
129 |
|
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
130 |
|
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
131 |
def MODIFIER_VALUE(x): |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
132 |
return x if x is not None else 'none' |
fcc406143e5b
clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1759
diff
changeset
|
133 |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
134 |
|
814 | 135 |
CONTACT_TYPES = {(True, "none"): CONTACT_REVERSE, |
136 |
(False, "rising"): CONTACT_RISING, |
|
137 |
(False, "falling"): CONTACT_FALLING} |
|
138 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
139 |
|
814 | 140 |
def contactCreationFunction(viewer, id, specific_values): |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
141 |
contact_type = CONTACT_TYPES.get((NEGATED_VALUE(specific_values.negated), |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
142 |
MODIFIER_VALUE(specific_values.edge)), |
814 | 143 |
CONTACT_NORMAL) |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
144 |
return LD_Contact(viewer, contact_type, specific_values.name, id) |
814 | 145 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1747
diff
changeset
|
146 |
|
814 | 147 |
COIL_TYPES = {(True, "none", "none"): COIL_REVERSE, |
148 |
(False, "none", "set"): COIL_SET, |
|
149 |
(False, "none", "reset"): COIL_RESET, |
|
150 |
(False, "rising", "none"): COIL_RISING, |
|
151 |
(False, "falling", "none"): COIL_FALLING} |
|
152 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
153 |
|
814 | 154 |
def coilCreationFunction(viewer, id, specific_values): |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
155 |
coil_type = COIL_TYPES.get((NEGATED_VALUE(specific_values.negated), |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
156 |
MODIFIER_VALUE(specific_values.edge), |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
157 |
MODIFIER_VALUE(specific_values.storage)), |
814 | 158 |
COIL_NORMAL) |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
159 |
return LD_Coil(viewer, coil_type, specific_values.name, id) |
814 | 160 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
161 |
|
814 | 162 |
def stepCreationFunction(viewer, id, specific_values): |
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
163 |
step = SFC_Step(viewer, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
164 |
specific_values.name, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
165 |
specific_values.initial, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
166 |
id) |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
167 |
if specific_values.action is not None: |
814 | 168 |
step.AddAction() |
169 |
connector = step.GetActionConnector() |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
170 |
connector.SetPosition(wx.Point(*specific_values.action.position)) |
814 | 171 |
return step |
172 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
173 |
|
814 | 174 |
def transitionCreationFunction(viewer, id, specific_values): |
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
175 |
transition = SFC_Transition(viewer, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
176 |
specific_values.condition_type, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
177 |
specific_values.condition, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
178 |
specific_values.priority, |
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
179 |
id) |
814 | 180 |
return transition |
181 |
||
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1747
diff
changeset
|
182 |
|
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
183 |
divergence_types = [SELECTION_DIVERGENCE, |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
184 |
SELECTION_CONVERGENCE, SIMULTANEOUS_DIVERGENCE, SIMULTANEOUS_CONVERGENCE] |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
185 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
186 |
|
814 | 187 |
def GetDivergenceCreationFunction(divergence_type): |
188 |
def divergenceCreationFunction(viewer, id, specific_values): |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
189 |
return SFC_Divergence(viewer, divergence_type, |
1767
c74815729afd
clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1766
diff
changeset
|
190 |
specific_values.connectors, id) |
814 | 191 |
return divergenceCreationFunction |
192 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
193 |
|
814 | 194 |
def jumpCreationFunction(viewer, id, specific_values): |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
195 |
return SFC_Jump(viewer, specific_values.target, id) |
814 | 196 |
|
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
197 |
|
814 | 198 |
def actionBlockCreationFunction(viewer, id, specific_values): |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
199 |
return SFC_ActionBlock(viewer, specific_values.actions, id) |
814 | 200 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1747
diff
changeset
|
201 |
|
814 | 202 |
ElementCreationFunctions = { |
203 |
"input": GetVariableCreationFunction(INPUT), |
|
204 |
"output": GetVariableCreationFunction(OUTPUT), |
|
205 |
"inout": GetVariableCreationFunction(INOUT), |
|
206 |
"connector": GetConnectorCreationFunction(CONNECTOR), |
|
207 |
"continuation": GetConnectorCreationFunction(CONTINUATION), |
|
208 |
"comment": commentCreationFunction, |
|
209 |
"leftPowerRail": GetPowerRailCreationFunction(LEFTRAIL), |
|
210 |
"rightPowerRail": GetPowerRailCreationFunction(RIGHTRAIL), |
|
211 |
"contact": contactCreationFunction, |
|
212 |
"coil": coilCreationFunction, |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
213 |
"step": stepCreationFunction, |
814 | 214 |
"transition": transitionCreationFunction, |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
215 |
"selectionDivergence": GetDivergenceCreationFunction(SELECTION_DIVERGENCE), |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
216 |
"selectionConvergence": GetDivergenceCreationFunction(SELECTION_CONVERGENCE), |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
217 |
"simultaneousDivergence": GetDivergenceCreationFunction(SIMULTANEOUS_DIVERGENCE), |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
218 |
"simultaneousConvergence": GetDivergenceCreationFunction(SIMULTANEOUS_CONVERGENCE), |
814 | 219 |
"jump": jumpCreationFunction, |
220 |
"actionBlock": actionBlockCreationFunction, |
|
221 |
} |
|
222 |
||
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
223 |
|
814 | 224 |
def sort_blocks(block_infos1, block_infos2): |
225 |
x1, y1 = block_infos1[0].GetPosition() |
|
226 |
x2, y2 = block_infos2[0].GetPosition() |
|
227 |
if y1 == y2: |
|
228 |
return cmp(x1, x2) |
|
229 |
else: |
|
230 |
return cmp(y1, y2) |
|
231 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
232 |
# ------------------------------------------------------------------------------- |
814 | 233 |
# Graphic elements Viewer base class |
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
234 |
# ------------------------------------------------------------------------------- |
814 | 235 |
|
1749
d73b64672238
clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1747
diff
changeset
|
236 |
|
814 | 237 |
class ViewerDropTarget(wx.TextDropTarget): |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
238 |
|
814 | 239 |
def __init__(self, parent): |
240 |
wx.TextDropTarget.__init__(self) |
|
241 |
self.ParentWindow = parent |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
242 |
|
814 | 243 |
def OnDropText(self, x, y, data): |
244 |
self.ParentWindow.Select() |
|
245 |
tagname = self.ParentWindow.GetTagName() |
|
246 |
pou_name, pou_type = self.ParentWindow.Controler.GetEditedElementType(tagname, self.ParentWindow.Debug) |
|
247 |
x, y = self.ParentWindow.CalcUnscrolledPosition(x, y) |
|
248 |
x = int(x / self.ParentWindow.ViewScale[0]) |
|
249 |
y = int(y / self.ParentWindow.ViewScale[1]) |
|
250 |
scaling = self.ParentWindow.Scaling |
|
251 |
message = None |
|
252 |
try: |
|
253 |
values = eval(data) |
|
1780
c52d1460cea8
clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1773
diff
changeset
|
254 |
except Exception: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
255 |
message = _("Invalid value \"%s\" for viewer block") % data |
814 | 256 |
values = None |
2450
5024c19ca8f0
python3 support: pylint, W1652 # (deprecated-types-field) Accessing a deprecated fields on the types module
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2437
diff
changeset
|
257 |
if not isinstance(values, tuple): |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
258 |
message = _("Invalid value \"%s\" for viewer block") % data |
814 | 259 |
values = None |
260 |
if values is not None: |
|
261 |
if values[1] == "debug": |
|
262 |
pass |
|
263 |
elif values[1] == "program": |
|
264 |
message = _("Programs can't be used by other POUs!") |
|
265 |
elif values[1] in ["function", "functionBlock"]: |
|
266 |
if pou_name == values[0]: |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
267 |
message = _("\"%s\" can't use itself!") % pou_name |
814 | 268 |
elif pou_type == "function" and values[1] != "function": |
269 |
message = _("Function Blocks can't be used in Functions!") |
|
270 |
elif self.ParentWindow.Controler.PouIsUsedBy(pou_name, values[0], self.ParentWindow.Debug): |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
271 |
message = _("\"{a1}\" is already used by \"{a2}\"!").format(a1=pou_name, a2=values[0]) |
814 | 272 |
else: |
273 |
blockname = values[2] |
|
274 |
if len(values) > 3: |
|
275 |
blockinputs = values[3] |
|
276 |
else: |
|
277 |
blockinputs = None |
|
278 |
if values[1] != "function" and blockname == "": |
|
279 |
blockname = self.ParentWindow.GenerateNewName(blocktype=values[0]) |
|
280 |
if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]: |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
281 |
message = _("\"%s\" pou already exists!") % blockname |
814 | 282 |
elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
283 |
message = _("\"%s\" element for this pou already exists!") % blockname |
814 | 284 |
else: |
285 |
id = self.ParentWindow.GetNewId() |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
286 |
block = FBD_Block(self.ParentWindow, values[0], blockname, id, inputs=blockinputs) |
814 | 287 |
width, height = block.GetMinSize() |
288 |
if scaling is not None: |
|
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
289 |
x = round(x / scaling[0]) * scaling[0] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
290 |
y = round(y / scaling[1]) * scaling[1] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
291 |
width = round(width / scaling[0] + 0.5) * scaling[0] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
292 |
height = round(height / scaling[1] + 0.5) * scaling[1] |
814 | 293 |
block.SetPosition(x, y) |
294 |
block.SetSize(width, height) |
|
295 |
self.ParentWindow.AddBlock(block) |
|
296 |
self.ParentWindow.Controler.AddEditedElementBlock(tagname, id, values[0], blockname) |
|
297 |
self.ParentWindow.RefreshBlockModel(block) |
|
298 |
self.ParentWindow.RefreshBuffer() |
|
299 |
self.ParentWindow.RefreshScrollBars() |
|
300 |
self.ParentWindow.RefreshVisibleElements() |
|
301 |
self.ParentWindow.RefreshVariablePanel() |
|
1233
5e6d0969bb5d
Fixed bugs in refresh of PouInstanceVariablesPanel
Laurent Bessard
parents:
1229
diff
changeset
|
302 |
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel() |
814 | 303 |
self.ParentWindow.Refresh(False) |
304 |
elif values[1] == "location": |
|
305 |
if pou_type == "program": |
|
306 |
location = values[0] |
|
307 |
if not location.startswith("%"): |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
308 |
dialog = wx.SingleChoiceDialog( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
309 |
self.ParentWindow.ParentWindow, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
310 |
_("Select a variable class:"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
311 |
_("Variable class"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
312 |
[_("Input"), _("Output"), _("Memory")], |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
313 |
wx.DEFAULT_DIALOG_STYLE | wx.OK | wx.CANCEL) |
814 | 314 |
if dialog.ShowModal() == wx.ID_OK: |
315 |
selected = dialog.GetSelection() |
|
316 |
else: |
|
317 |
selected = None |
|
318 |
dialog.Destroy() |
|
319 |
if selected is None: |
|
320 |
return |
|
321 |
if selected == 0: |
|
322 |
location = "%I" + location |
|
323 |
elif selected == 1: |
|
324 |
location = "%Q" + location |
|
325 |
else: |
|
326 |
location = "%M" + location |
|
327 |
var_name = values[3] |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
328 |
dlg = wx.TextEntryDialog( |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
329 |
self.ParentWindow.ParentWindow, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
330 |
_("Confirm or change variable name"), |
1578
f8e2a04c4445
add localization to time strings in DebugVariablePanel and to dialog shown after variable drag'n'drop
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1571
diff
changeset
|
331 |
_('Variable Drop'), var_name) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
332 |
dlg.SetValue(var_name) |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
333 |
var_name = dlg.GetValue() if dlg.ShowModal() == wx.ID_OK else None |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
334 |
dlg.Destroy() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
335 |
if var_name is None: |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
336 |
return |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
337 |
elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
338 |
message = _("\"%s\" pou already exists!") % var_name |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
339 |
elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]: |
814 | 340 |
if location[1] == "Q": |
341 |
var_class = OUTPUT |
|
342 |
else: |
|
343 |
var_class = INPUT |
|
344 |
if values[2] is not None: |
|
345 |
var_type = values[2] |
|
346 |
else: |
|
347 |
var_type = LOCATIONDATATYPES.get(location[2], ["BOOL"])[0] |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
348 |
self.ParentWindow.Controler.AddEditedElementPouVar(tagname, var_type, var_name, location=location, description=values[4]) |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
349 |
self.ParentWindow.RefreshVariablePanel() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
350 |
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel() |
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
351 |
self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
352 |
else: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
353 |
message = _("\"%s\" element for this pou already exists!") % var_name |
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
354 |
elif values[1] == "NamedConstant": |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
355 |
if pou_type == "program": |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
356 |
initval = values[0] |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
357 |
var_name = values[3] |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
358 |
dlg = wx.TextEntryDialog( |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
359 |
self.ParentWindow.ParentWindow, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
360 |
_("Confirm or change variable name"), |
1578
f8e2a04c4445
add localization to time strings in DebugVariablePanel and to dialog shown after variable drag'n'drop
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1571
diff
changeset
|
361 |
_('Variable Drop'), var_name) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
362 |
dlg.SetValue(var_name) |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
363 |
var_name = dlg.GetValue() if dlg.ShowModal() == wx.ID_OK else None |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
364 |
dlg.Destroy() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
365 |
if var_name is None: |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
366 |
return |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
367 |
elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
368 |
message = _("\"%s\" pou already exists!") % var_name |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
369 |
elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]: |
1406
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
370 |
var_class = INPUT |
82db84fe88ea
Added 'NamedConstant' drag'n'drop in programs. It does create a simple variable with initial value and is usefull for drag'n'drop constants from extensions while keeping a name associated with constant
Edouard Tisserant
parents:
1381
diff
changeset
|
371 |
var_type = values[2] |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
372 |
self.ParentWindow.Controler.AddEditedElementPouVar(tagname, var_type, var_name, description=values[4], initval=initval) |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
373 |
self.ParentWindow.RefreshVariablePanel() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
374 |
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel() |
814 | 375 |
self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
376 |
else: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
377 |
message = _("\"%s\" element for this pou already exists!") % var_name |
814 | 378 |
elif values[1] == "Global": |
379 |
var_name = values[0] |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
380 |
dlg = wx.TextEntryDialog( |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
381 |
self.ParentWindow.ParentWindow, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
382 |
_("Confirm or change variable name"), |
1578
f8e2a04c4445
add localization to time strings in DebugVariablePanel and to dialog shown after variable drag'n'drop
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1571
diff
changeset
|
383 |
_('Variable Drop'), var_name) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
384 |
dlg.SetValue(var_name) |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
385 |
var_name = dlg.GetValue() if dlg.ShowModal() == wx.ID_OK else None |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
386 |
dlg.Destroy() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
387 |
if var_name is None: |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
388 |
return |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
389 |
elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
390 |
message = _("\"%s\" pou already exists!") % var_name |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
391 |
elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]: |
3300
95fe62bfe920
Copy description when DnD variables from Globals in resources and configuration variable panels to POUs. Also prevent making exception in case some other DropSource wouldn't provide description.
Edouard Tisserant
parents:
3254
diff
changeset
|
392 |
kwargs = dict(description=values[4]) if len(values)>4 else {} |
95fe62bfe920
Copy description when DnD variables from Globals in resources and configuration variable panels to POUs. Also prevent making exception in case some other DropSource wouldn't provide description.
Edouard Tisserant
parents:
3254
diff
changeset
|
393 |
self.ParentWindow.Controler.AddEditedElementPouExternalVar(tagname, values[2], var_name, **kwargs) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
394 |
self.ParentWindow.RefreshVariablePanel() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
395 |
self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel() |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
396 |
self.ParentWindow.AddVariableBlock(x, y, scaling, INPUT, var_name, values[2]) |
814 | 397 |
else: |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
398 |
message = _("\"%s\" element for this pou already exists!") % var_name |
814 | 399 |
elif values[1] == "Constant": |
400 |
self.ParentWindow.AddVariableBlock(x, y, scaling, INPUT, values[0], None) |
|
401 |
elif values[3] == tagname: |
|
402 |
if values[1] == "Output": |
|
403 |
var_class = OUTPUT |
|
404 |
elif values[1] == "InOut": |
|
405 |
var_class = INPUT |
|
406 |
else: |
|
407 |
var_class = INPUT |
|
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1342
diff
changeset
|
408 |
tree = dict([(var.Name, var.Tree) for var in self.ParentWindow.Controler.GetEditedElementInterfaceVars(tagname, True, self.ParentWindow.Debug)]).get(values[0], None) |
814 | 409 |
if tree is not None: |
410 |
if len(tree[0]) > 0: |
|
411 |
menu = wx.Menu(title='') |
|
412 |
self.GenerateTreeMenu(x, y, scaling, menu, "", var_class, [(values[0], values[2], tree)]) |
|
413 |
self.ParentWindow.PopupMenuXY(menu) |
|
414 |
else: |
|
415 |
self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, values[0], values[2]) |
|
416 |
else: |
|
417 |
message = _("Unknown variable \"%s\" for this POU!") % values[0] |
|
418 |
else: |
|
419 |
message = _("Variable don't belong to this POU!") |
|
420 |
if message is not None: |
|
421 |
wx.CallAfter(self.ShowMessage, message) |
|
422 |
||
423 |
def GenerateTreeMenu(self, x, y, scaling, menu, base_path, var_class, tree): |
|
424 |
for child_name, child_type, (child_tree, child_dimensions) in tree: |
|
425 |
if base_path: |
|
426 |
child_path = "%s.%s" % (base_path, child_name) |
|
427 |
else: |
|
428 |
child_path = child_name |
|
429 |
if len(child_dimensions) > 0: |
|
430 |
child_path += "[%s]" % ",".join([str(dimension[0]) for dimension in child_dimensions]) |
|
431 |
child_name += "[]" |
|
2555
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
432 |
item = menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=child_name) |
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
433 |
self.ParentWindow.Bind(wx.EVT_MENU, self.GetAddVariableBlockFunction(x, y, scaling, var_class, child_path, child_type), item) |
814 | 434 |
if len(child_tree) > 0: |
435 |
child_menu = wx.Menu(title='') |
|
436 |
self.GenerateTreeMenu(x, y, scaling, child_menu, child_path, var_class, child_tree) |
|
2555
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
437 |
menu.AppendMenu(wx.ID_ANY, "%s." % child_name, child_menu) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
438 |
|
814 | 439 |
def GetAddVariableBlockFunction(self, x, y, scaling, var_class, var_name, var_type): |
440 |
def AddVariableFunction(event): |
|
441 |
self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type) |
|
442 |
return AddVariableFunction |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
443 |
|
814 | 444 |
def ShowMessage(self, message): |
1745
f9d32913bad4
clean-up: fix PEP8 E227 missing whitespace around bitwise or shift operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
445 |
message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR) |
814 | 446 |
message.ShowModal() |
447 |
message.Destroy() |
|
448 |
||
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
449 |
|
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
450 |
class DebugInstanceName(DebugDataConsumer): |
2301
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2229
diff
changeset
|
451 |
VALUE_TRANSLATION = None |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
452 |
|
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
453 |
def __init__(self, parent): |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
454 |
DebugDataConsumer.__init__(self) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
455 |
self.Parent = parent |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
456 |
self.ActionLastState = None |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
457 |
self.ActionState = None |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
458 |
self.x_offset = 2 |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
459 |
self.y_offset = 2 |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
460 |
|
2301
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2229
diff
changeset
|
461 |
if self.VALUE_TRANSLATION is None: |
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2229
diff
changeset
|
462 |
self.__class__.VALUE_TRANSLATION = {True: _("Active"), False: _("Inactive")} |
5b8a7dd43f9f
Avoid usage of localized strings before initialization during import in many modules
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2229
diff
changeset
|
463 |
|
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
464 |
def SetValue(self, value): |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
465 |
self.ActionState = value |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
466 |
if self.ActionState != self.ActionLastState: |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
467 |
self.ActionLastState = self.ActionState |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
468 |
wx.CallAfter(self.Parent.ElementNeedRefresh, self) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
469 |
|
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
470 |
def GetInstanceName(self): |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
471 |
return _("Debug: %s") % self.Parent.InstancePath |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
472 |
|
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
473 |
def GetRedrawRect(self): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
474 |
x, y = self.Parent.CalcUnscrolledPosition(self.x_offset, self.y_offset) |
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
475 |
dc = self.Parent.GetLogicalDC() |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
476 |
ipw, _iph = dc.GetTextExtent(self.GetInstanceName()) |
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
477 |
vw, vh = 0, 0 |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
478 |
for value in self.VALUE_TRANSLATION.itervalues(): |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
479 |
w, h = dc.GetTextExtent(" (%s)" % value) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
480 |
vw = max(vw, w) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
481 |
vh = max(vh, h) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
482 |
return wx.Rect(ipw + x, y, vw, vh) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
483 |
|
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
484 |
def Draw(self, dc): |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
485 |
scalex, scaley = dc.GetUserScale() |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
486 |
dc.SetUserScale(1, 1) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
487 |
x, y = self.Parent.CalcUnscrolledPosition(self.x_offset, self.y_offset) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
488 |
|
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
489 |
text = self.GetInstanceName() |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
490 |
if self.ActionState is not None: |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
491 |
text += " (" |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
492 |
|
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
493 |
dc.DrawText(text, x, y) |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
494 |
tw, _th = dc.GetTextExtent(text) |
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
495 |
if self.ActionState is not None: |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
496 |
|
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
497 |
text = self.VALUE_TRANSLATION[self.ActionState] |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
498 |
if self.ActionState: |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
499 |
dc.SetTextForeground(wx.GREEN) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
500 |
dc.DrawText(text, x + tw, y) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
501 |
if self.ActionState: |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
502 |
dc.SetTextForeground(wx.BLACK) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
503 |
tw = tw + dc.GetTextExtent(text)[0] |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
504 |
|
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
505 |
text = ")" |
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
506 |
dc.DrawText(text, x + tw, y) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
507 |
dc.SetUserScale(scalex, scaley) |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
508 |
|
814 | 509 |
|
1176
f4b434672204
Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents:
1170
diff
changeset
|
510 |
class Viewer(EditorPanel, DebugViewer): |
1736
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
511 |
""" |
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
512 |
Class that implements a Viewer based on a wx.ScrolledWindow for drawing and |
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
513 |
manipulating graphic elements |
7e61baa047f0
clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1734
diff
changeset
|
514 |
""" |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
515 |
|
2557
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
516 |
def AppendItem(self, menu, text, callback, *args, **kwargs): |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
517 |
item = menu.Append(wx.ID_ANY, text, *args, **kwargs) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
518 |
self.Bind(wx.EVT_MENU, callback, item) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
519 |
return item |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
520 |
|
814 | 521 |
# Add Block Pin Menu items to the given menu |
522 |
def AddBlockPinMenuItems(self, menu, connector): |
|
2557
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
523 |
no_modifier = self.AppendItem(menu, _(u'No modifier'), self.OnNoModifierMenu, kind=wx.ITEM_RADIO) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
524 |
negated = self.AppendItem(menu, _(u'Negated'), self.OnNegatedMenu, kind=wx.ITEM_RADIO) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
525 |
rising_edge = self.AppendItem(menu, _(u'Rising Edge'), self.OnRisingEdgeMenu, kind=wx.ITEM_RADIO) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
526 |
falling_edge = self.AppendItem(menu, _(u'Falling Edge'), self.OnFallingEdgeMenu, kind=wx.ITEM_RADIO) |
2556
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
527 |
|
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
528 |
not_a_function = self.Controler.GetEditedElementType( |
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
529 |
self.TagName, self.Debug) != "function" |
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
530 |
rising_edge.Enable(not_a_function) |
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
531 |
falling_edge.Enable(not_a_function) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
532 |
|
814 | 533 |
if connector.IsNegated(): |
2556
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
534 |
negated.Check(True) |
814 | 535 |
elif connector.GetEdge() == "rising": |
2556
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
536 |
rising_edge.Check(True) |
814 | 537 |
elif connector.GetEdge() == "falling": |
2556
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
538 |
falling_edge.Check(True) |
814 | 539 |
else: |
2556
f07d389772fd
Continued wx.NewID abuse removal in Viewer.py : get rid of one call to AppendMenu method, having no real purpose apparently. To be continued.
Edouard Tisserant
parents:
2555
diff
changeset
|
540 |
no_modifier.Check(True) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
541 |
|
814 | 542 |
# Add Alignment Menu items to the given menu |
543 |
def AddAlignmentMenuItems(self, menu): |
|
2557
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
544 |
self.AppendItem(menu, _(u'Left'), self.OnAlignLeftMenu) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
545 |
self.AppendItem(menu, _(u'Center'), self.OnAlignCenterMenu) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
546 |
self.AppendItem(menu, _(u'Right'), self.OnAlignRightMenu) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
547 |
menu.AppendSeparator() |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
548 |
self.AppendItem(menu, _(u'Top'), self.OnAlignTopMenu) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
549 |
self.AppendItem(menu, _(u'Middle'), self.OnAlignMiddleMenu) |
a6e7c34497b8
Continued wx.NewID abuse removal in Viewer.py : Added AppendItem to use instead of AppendMenu, made examples with AddBlockPinMenuItems and AddAlignmentMenuItems
Edouard Tisserant
parents:
2556
diff
changeset
|
550 |
self.AppendItem(menu, _(u'Bottom'), self.OnAlignBottomMenu) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
551 |
|
814 | 552 |
# Add Wire Menu items to the given menu |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
553 |
def AddWireMenuItems(self, menu, delete=False, replace=False): |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
554 |
self.AppendItem(menu, _(u'Add Wire Segment'), self.OnAddSegmentMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
555 |
delete_segment = self.AppendItem(menu, _(u'Delete Wire Segment'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
556 |
self.OnDeleteSegmentMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
557 |
replace_wire = self.AppendItem(menu, _(u'Replace Wire by connections'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
558 |
self.OnReplaceWireMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
559 |
|
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
560 |
delete_segment.Enable(delete) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
561 |
replace_wire.Enable(replace) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
562 |
|
814 | 563 |
# Add Divergence Menu items to the given menu |
564 |
def AddDivergenceMenuItems(self, menu, delete=False): |
|
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
565 |
self.AppendItem(menu, _(u'Add Divergence Branch'), |
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
566 |
self.OnAddBranchMenu) |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
567 |
delete_branch = self.AppendItem(menu, _(u'Delete Divergence Branch'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
568 |
self.OnDeleteBranchMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
569 |
|
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
570 |
delete_branch.Enable(delete) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
571 |
|
814 | 572 |
# Add Add Menu items to the given menu |
573 |
def AddAddMenuItems(self, menu): |
|
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
574 |
self.AppendItem(menu, _(u'Block'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
575 |
self.GetAddMenuCallBack(self.AddNewBlock)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
576 |
self.AppendItem(menu, _(u'Variable'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
577 |
self.GetAddMenuCallBack(self.AddNewVariable)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
578 |
self.AppendItem(menu, _(u'Connection'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
579 |
self.GetAddMenuCallBack(self.AddNewConnection)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
580 |
menu.AppendSeparator() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
581 |
|
814 | 582 |
if self.CurrentLanguage != "FBD": |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
583 |
self.AppendItem(menu, _(u'Power Rail'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
584 |
self.GetAddMenuCallBack(self.AddNewPowerRail)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
585 |
self.AppendItem(menu, _(u'Contact'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
586 |
self.GetAddMenuCallBack(self.AddNewContact)) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
587 |
|
814 | 588 |
if self.CurrentLanguage != "SFC": |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
589 |
self.AppendItem(menu, _(u'Coil'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
590 |
self.GetAddMenuCallBack(self.AddNewCoil)) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
591 |
|
814 | 592 |
menu.AppendSeparator() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
593 |
|
814 | 594 |
if self.CurrentLanguage == "SFC": |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
595 |
self.AppendItem(menu, _(u'Initial Step'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
596 |
self.GetAddMenuCallBack(self.AddNewStep, True)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
597 |
self.AppendItem(menu, (u'Step'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
598 |
self.GetAddMenuCallBack(self.AddNewStep)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
599 |
self.AppendItem(menu, (u'Transition'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
600 |
self.GetAddMenuCallBack(self.AddNewTransition)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
601 |
self.AppendItem(menu, (u'Action Block'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
602 |
self.GetAddMenuCallBack(self.AddNewActionBlock)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
603 |
self.AppendItem(menu, (u'Divergence'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
604 |
self.GetAddMenuCallBack(self.AddNewDivergence)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
605 |
self.AppendItem(menu, (u'Jump'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
606 |
self.GetAddMenuCallBack(self.AddNewJump)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
607 |
menu.AppendSeparator() |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
608 |
|
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
609 |
self.AppendItem(menu, _(u'Comment'), |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
610 |
self.GetAddMenuCallBack(self.AddNewComment)) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
611 |
|
814 | 612 |
# Add Default Menu items to the given menu |
613 |
def AddDefaultMenuItems(self, menu, edit=False, block=False): |
|
614 |
if block: |
|
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
615 |
edit_block = self.AppendItem(menu, _(u'Edit Block'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
616 |
self.OnEditBlockMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
617 |
self.AppendItem(menu, _(u'Adjust Block Size'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
618 |
self.OnAdjustBlockSizeMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
619 |
self.AppendItem(menu, _(u'Delete'), self.OnDeleteMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
620 |
|
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
621 |
edit_block.Enable(edit) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
622 |
|
814 | 623 |
else: |
1586
e17406dd4f06
remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1584
diff
changeset
|
624 |
if self.CurrentLanguage == 'FBD': |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
625 |
self.AppendItem(menu, _(u'Clear Execution Order'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
626 |
self.OnClearExecutionOrderMenu) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
627 |
self.AppendItem(menu, _(u'Reset Execution Order'), |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
628 |
self.OnResetExecutionOrderMenu) |
1586
e17406dd4f06
remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1584
diff
changeset
|
629 |
menu.AppendSeparator() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
630 |
|
814 | 631 |
add_menu = wx.Menu(title='') |
632 |
self.AddAddMenuItems(add_menu) |
|
633 |
menu.AppendMenu(-1, _(u'Add'), add_menu) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
634 |
|
814 | 635 |
menu.AppendSeparator() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
636 |
|
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
637 |
cut = self.AppendItem(menu, _(u'Cut'), self.GetClipboardCallBack(self.Cut)) |
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
638 |
copy = self.AppendItem(menu, _(u'Copy'), self.GetClipboardCallBack(self.Copy)) |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
639 |
paste = self.AppendItem(menu, _(u'Paste'), self.GetAddMenuCallBack(self.Paste)) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
640 |
|
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
641 |
cut.Enable(block) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
642 |
copy.Enable(block) |
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
643 |
paste.Enable(self.ParentWindow.GetCopyBuffer() is not None) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
644 |
|
814 | 645 |
def _init_Editor(self, prnt): |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
646 |
self.Editor = wx.ScrolledWindow(prnt, name="Viewer", |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
647 |
pos=wx.Point(0, 0), size=wx.Size(0, 0), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
648 |
style=wx.HSCROLL | wx.VSCROLL) |
814 | 649 |
self.Editor.ParentWindow = self |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
650 |
|
814 | 651 |
# Create a new Viewer |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
652 |
def __init__(self, parent, tagname, window, controler, debug=False, instancepath=""): |
814 | 653 |
self.VARIABLE_PANEL_TYPE = controler.GetPouType(tagname.split("::")[1]) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
654 |
|
814 | 655 |
EditorPanel.__init__(self, parent, tagname, window, controler, debug) |
656 |
DebugViewer.__init__(self, controler, debug) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
657 |
|
814 | 658 |
# Adding a rubberband to Viewer |
659 |
self.rubberBand = RubberBand(viewer=self) |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
660 |
self.Editor.SetBackgroundColour(wx.Colour(255, 255, 255)) |
814 | 661 |
self.Editor.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) |
662 |
self.ResetView() |
|
1342
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
663 |
self.LastClientSize = None |
814 | 664 |
self.Scaling = None |
665 |
self.DrawGrid = True |
|
666 |
self.GridBrush = wx.TRANSPARENT_BRUSH |
|
667 |
self.PageSize = None |
|
668 |
self.PagePen = wx.TRANSPARENT_PEN |
|
669 |
self.DrawingWire = False |
|
670 |
self.current_id = 0 |
|
671 |
self.TagName = tagname |
|
672 |
self.Highlights = [] |
|
673 |
self.SearchParams = None |
|
674 |
self.SearchResults = None |
|
675 |
self.CurrentFindHighlight = None |
|
676 |
self.InstancePath = instancepath |
|
677 |
self.StartMousePos = None |
|
678 |
self.StartScreenPos = None |
|
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
679 |
self.InstanceName = DebugInstanceName(self) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
680 |
|
1224 | 681 |
# Prevent search for highlighted element to be called too often |
682 |
self.LastHighlightCheckTime = gettime() |
|
683 |
# Prevent search for element producing tooltip to be called too often |
|
684 |
self.LastToolTipCheckTime = gettime() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
685 |
|
814 | 686 |
self.Buffering = False |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
687 |
|
814 | 688 |
# Initialize Cursors |
689 |
ResetCursors() |
|
690 |
self.CurrentCursor = 0 |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
691 |
|
814 | 692 |
# Initialize Block, Wire and Comment numbers |
693 |
self.wire_id = 0 |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
694 |
|
814 | 695 |
# Initialize Viewer mode to Selection mode |
696 |
self.Mode = MODE_SELECTION |
|
697 |
self.SavedMode = False |
|
698 |
self.CurrentLanguage = "FBD" |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
699 |
|
814 | 700 |
if not self.Debug: |
701 |
self.Editor.SetDropTarget(ViewerDropTarget(self)) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
702 |
|
814 | 703 |
self.ElementRefreshList = [] |
704 |
self.ElementRefreshList_lock = Lock() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
705 |
|
814 | 706 |
dc = wx.ClientDC(self.Editor) |
2344
94045bfa2d94
use nice and pretty mono font in graphical languages (SFC, FBD, LD) as well
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2341
diff
changeset
|
707 |
while True: |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
708 |
font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"]) |
814 | 709 |
dc.SetFont(font) |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
710 |
width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ") |
2344
94045bfa2d94
use nice and pretty mono font in graphical languages (SFC, FBD, LD) as well
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2341
diff
changeset
|
711 |
if width < 260: |
94045bfa2d94
use nice and pretty mono font in graphical languages (SFC, FBD, LD) as well
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2341
diff
changeset
|
712 |
break |
94045bfa2d94
use nice and pretty mono font in graphical languages (SFC, FBD, LD) as well
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2341
diff
changeset
|
713 |
faces["size"] -= 1 |
94045bfa2d94
use nice and pretty mono font in graphical languages (SFC, FBD, LD) as well
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2341
diff
changeset
|
714 |
self.Editor.SetFont(font) |
2229
3c94bac4526e
Fix 'DoGetTextExtent - invalid DC' error
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2177
diff
changeset
|
715 |
self.MiniTextDC = wx.MemoryDC(wx.EmptyBitmap(1, 1)) |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
716 |
self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["helv"])) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
717 |
|
814 | 718 |
self.CurrentScale = None |
1123
55ed55ef7aea
Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents:
1122
diff
changeset
|
719 |
self.SetScale(ZOOM_FACTORS.index(1.0), False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
720 |
|
814 | 721 |
self.RefreshHighlightsTimer = wx.Timer(self, -1) |
722 |
self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
723 |
|
814 | 724 |
self.ResetView() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
725 |
|
814 | 726 |
# Link Viewer event to corresponding methods |
727 |
self.Editor.Bind(wx.EVT_PAINT, self.OnPaint) |
|
728 |
self.Editor.Bind(wx.EVT_LEFT_DOWN, self.OnViewerLeftDown) |
|
729 |
self.Editor.Bind(wx.EVT_LEFT_UP, self.OnViewerLeftUp) |
|
730 |
self.Editor.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick) |
|
731 |
self.Editor.Bind(wx.EVT_RIGHT_DOWN, self.OnViewerRightDown) |
|
732 |
self.Editor.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp) |
|
733 |
self.Editor.Bind(wx.EVT_MIDDLE_DOWN, self.OnViewerMiddleDown) |
|
734 |
self.Editor.Bind(wx.EVT_MIDDLE_UP, self.OnViewerMiddleUp) |
|
735 |
self.Editor.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer) |
|
736 |
self.Editor.Bind(wx.EVT_MOTION, self.OnViewerMotion) |
|
737 |
self.Editor.Bind(wx.EVT_CHAR, self.OnChar) |
|
738 |
self.Editor.Bind(wx.EVT_SCROLLWIN, self.OnScrollWindow) |
|
739 |
self.Editor.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE, self.OnScrollStop) |
|
740 |
self.Editor.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheelWindow) |
|
741 |
self.Editor.Bind(wx.EVT_SIZE, self.OnMoveWindow) |
|
742 |
self.Editor.Bind(wx.EVT_MOUSE_EVENTS, self.OnViewerMouseEvent) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
743 |
|
814 | 744 |
# Destructor |
745 |
def __del__(self): |
|
746 |
DebugViewer.__del__(self) |
|
747 |
self.Flush() |
|
748 |
self.ResetView() |
|
749 |
self.RefreshHighlightsTimer.Stop() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
750 |
|
814 | 751 |
def SetCurrentCursor(self, cursor): |
752 |
if self.Mode != MODE_MOTION: |
|
753 |
if self.CurrentCursor != cursor: |
|
754 |
self.CurrentCursor = cursor |
|
755 |
self.Editor.SetCursor(CURSORS[cursor]) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
756 |
|
814 | 757 |
def GetScrolledRect(self, rect): |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
758 |
rect.x, rect.y = self.Editor.CalcScrolledPosition(int(rect.x * self.ViewScale[0]), |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
759 |
int(rect.y * self.ViewScale[1])) |
814 | 760 |
rect.width = int(rect.width * self.ViewScale[0]) + 2 |
761 |
rect.height = int(rect.height * self.ViewScale[1]) + 2 |
|
762 |
return rect |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
763 |
|
814 | 764 |
def GetTitle(self): |
765 |
if self.Debug: |
|
766 |
if len(self.InstancePath) > 15: |
|
767 |
return "..." + self.InstancePath[-12:] |
|
768 |
return self.InstancePath |
|
769 |
return EditorPanel.GetTitle(self) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
770 |
|
814 | 771 |
def GetScaling(self): |
772 |
return self.Scaling |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
773 |
|
828
319dac4c4fd3
Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents:
823
diff
changeset
|
774 |
def GetInstancePath(self, variable_base=False): |
319dac4c4fd3
Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents:
823
diff
changeset
|
775 |
if variable_base: |
319dac4c4fd3
Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents:
823
diff
changeset
|
776 |
words = self.TagName.split("::") |
319dac4c4fd3
Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents:
823
diff
changeset
|
777 |
if words[0] in ["A", "T"]: |
319dac4c4fd3
Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents:
823
diff
changeset
|
778 |
return ".".join(self.InstancePath.split(".")[:-1]) |
814 | 779 |
return self.InstancePath |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
780 |
|
814 | 781 |
def IsViewing(self, tagname): |
782 |
if self.Debug: |
|
783 |
return self.InstancePath == tagname |
|
784 |
return EditorPanel.IsViewing(self, tagname) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
785 |
|
814 | 786 |
# Returns a new id |
787 |
def GetNewId(self): |
|
788 |
self.current_id += 1 |
|
789 |
return self.current_id |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
790 |
|
814 | 791 |
def SetScale(self, scale_number, refresh=True, mouse_event=None): |
792 |
new_scale = max(0, min(scale_number, len(ZOOM_FACTORS) - 1)) |
|
793 |
if self.CurrentScale != new_scale: |
|
794 |
if refresh: |
|
795 |
dc = self.GetLogicalDC() |
|
796 |
self.CurrentScale = new_scale |
|
797 |
self.ViewScale = (ZOOM_FACTORS[self.CurrentScale], ZOOM_FACTORS[self.CurrentScale]) |
|
798 |
if refresh: |
|
799 |
self.Editor.Freeze() |
|
800 |
if mouse_event is None: |
|
801 |
client_size = self.Editor.GetClientSize() |
|
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
802 |
mouse_pos = wx.Point(client_size[0] // 2, client_size[1] // 2) |
814 | 803 |
mouse_event = wx.MouseEvent(wx.EVT_MOUSEWHEEL.typeId) |
1498
b11045a2f17c
fix deprecation warnings about accessing properties m_x, m_y of wxKeyEvent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1481
diff
changeset
|
804 |
mouse_event.x = mouse_pos.x |
b11045a2f17c
fix deprecation warnings about accessing properties m_x, m_y of wxKeyEvent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1481
diff
changeset
|
805 |
mouse_event.y = mouse_pos.y |
814 | 806 |
else: |
807 |
mouse_pos = mouse_event.GetPosition() |
|
808 |
pos = mouse_event.GetLogicalPosition(dc) |
|
809 |
xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) |
|
810 |
ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) |
|
811 |
scrollx = max(0, round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT) |
|
812 |
scrolly = max(0, round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT) |
|
813 |
if scrollx > xmax or scrolly > ymax: |
|
814 |
self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax)) |
|
815 |
self.Scroll(scrollx, scrolly) |
|
816 |
else: |
|
817 |
self.Scroll(scrollx, scrolly) |
|
818 |
self.RefreshScrollBars() |
|
819 |
self.RefreshScaling(refresh) |
|
820 |
self.Editor.Thaw() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
821 |
|
814 | 822 |
def GetScale(self): |
823 |
return self.CurrentScale |
|
824 |
||
825 |
def GetViewScale(self): |
|
826 |
return self.ViewScale |
|
827 |
||
828 |
def GetLogicalDC(self, buffered=False): |
|
829 |
if buffered: |
|
830 |
bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize()) |
|
831 |
dc = wx.MemoryDC(bitmap) |
|
832 |
else: |
|
833 |
dc = wx.ClientDC(self.Editor) |
|
834 |
dc.SetFont(self.GetFont()) |
|
2177
10aa87518401
Drop support for wxPython 2.6 and below
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1953
diff
changeset
|
835 |
self.Editor.DoPrepareDC(dc) |
814 | 836 |
dc.SetUserScale(self.ViewScale[0], self.ViewScale[1]) |
837 |
return dc |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
838 |
|
814 | 839 |
def RefreshRect(self, rect, eraseBackground=True): |
840 |
self.Editor.RefreshRect(rect, eraseBackground) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
841 |
|
814 | 842 |
def Scroll(self, x, y): |
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
843 |
if self.Debug and wx.Platform == '__WXMSW__': |
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
844 |
self.Editor.Freeze() |
814 | 845 |
self.Editor.Scroll(x, y) |
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
846 |
if self.Debug: |
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
847 |
if wx.Platform == '__WXMSW__': |
1208
d22fcdfae8d0
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1205
diff
changeset
|
848 |
self.Editor.Thaw() |
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
849 |
else: |
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
850 |
self.Editor.Refresh() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
851 |
|
814 | 852 |
def GetScrollPos(self, orientation): |
853 |
return self.Editor.GetScrollPos(orientation) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
854 |
|
814 | 855 |
def GetScrollRange(self, orientation): |
856 |
return self.Editor.GetScrollRange(orientation) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
857 |
|
814 | 858 |
def GetScrollThumb(self, orientation): |
859 |
return self.Editor.GetScrollThumb(orientation) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
860 |
|
814 | 861 |
def CalcUnscrolledPosition(self, x, y): |
862 |
return self.Editor.CalcUnscrolledPosition(x, y) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
863 |
|
814 | 864 |
def GetViewStart(self): |
865 |
return self.Editor.GetViewStart() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
866 |
|
814 | 867 |
def GetTextExtent(self, text): |
868 |
return self.Editor.GetTextExtent(text) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
869 |
|
814 | 870 |
def GetFont(self): |
871 |
return self.Editor.GetFont() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
872 |
|
814 | 873 |
def GetMiniTextExtent(self, text): |
874 |
return self.MiniTextDC.GetTextExtent(text) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
875 |
|
814 | 876 |
def GetMiniFont(self): |
877 |
return self.MiniTextDC.GetFont() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
878 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
879 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
880 |
# Element management functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
881 |
# ------------------------------------------------------------------------------- |
814 | 882 |
|
883 |
def AddBlock(self, block): |
|
884 |
self.Blocks[block.GetId()] = block |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
885 |
|
814 | 886 |
def AddWire(self, wire): |
887 |
self.wire_id += 1 |
|
888 |
self.Wires[wire] = self.wire_id |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
889 |
|
814 | 890 |
def AddComment(self, comment): |
891 |
self.Comments[comment.GetId()] = comment |
|
892 |
||
893 |
def IsBlock(self, block): |
|
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
894 |
if block is not None: |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
895 |
return self.Blocks.get(block.GetId(), False) |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
896 |
return False |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
897 |
|
814 | 898 |
def IsWire(self, wire): |
899 |
return self.Wires.get(wire, False) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
900 |
|
814 | 901 |
def IsComment(self, comment): |
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
902 |
if comment is not None: |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
903 |
return self.Comments.get(comment.GetId(), False) |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
904 |
return False |
814 | 905 |
|
906 |
def RemoveBlock(self, block): |
|
907 |
self.Blocks.pop(block.GetId()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
908 |
|
814 | 909 |
def RemoveWire(self, wire): |
910 |
self.Wires.pop(wire) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
911 |
|
814 | 912 |
def RemoveComment(self, comment): |
913 |
self.Comments.pop(comment.GetId()) |
|
914 |
||
915 |
def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False): |
|
916 |
blocks = self.Blocks.values() |
|
917 |
wires = self.Wires.keys() |
|
918 |
comments = self.Comments.values() |
|
919 |
if sort_blocks: |
|
920 |
blocks.sort(lambda x, y: cmp(x.GetId(), y.GetId())) |
|
921 |
if sort_wires: |
|
922 |
wires.sort(lambda x, y: cmp(self.Wires[x], self.Wires[y])) |
|
923 |
if sort_comments: |
|
924 |
comments.sort(lambda x, y: cmp(x.GetId(), y.GetId())) |
|
925 |
return blocks + wires + comments |
|
926 |
||
1605
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
927 |
def GetContinuationByName(self, name): |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
928 |
blocks = [] |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
929 |
for block in self.Blocks.itervalues(): |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
930 |
if isinstance(block, FBD_Connector) and\ |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
931 |
block.GetType() == CONTINUATION and\ |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
932 |
block.GetName() == name: |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
933 |
blocks.append(block) |
0b6b60241230
fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1599
diff
changeset
|
934 |
return blocks |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
935 |
|
814 | 936 |
def GetConnectorByName(self, name): |
937 |
for block in self.Blocks.itervalues(): |
|
938 |
if isinstance(block, FBD_Connector) and\ |
|
939 |
block.GetType() == CONNECTOR and\ |
|
940 |
block.GetName() == name: |
|
941 |
return block |
|
942 |
return None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
943 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
944 |
def RefreshVisibleElements(self, xp=None, yp=None): |
814 | 945 |
x, y = self.Editor.CalcUnscrolledPosition(0, 0) |
946 |
if xp is not None: |
|
947 |
x = xp * self.Editor.GetScrollPixelsPerUnit()[0] |
|
948 |
if yp is not None: |
|
949 |
y = yp * self.Editor.GetScrollPixelsPerUnit()[1] |
|
950 |
width, height = self.Editor.GetClientSize() |
|
951 |
screen = wx.Rect(int(x / self.ViewScale[0]), int(y / self.ViewScale[1]), |
|
952 |
int(width / self.ViewScale[0]), int(height / self.ViewScale[1])) |
|
953 |
for comment in self.Comments.itervalues(): |
|
954 |
comment.TestVisible(screen) |
|
955 |
for wire in self.Wires.iterkeys(): |
|
956 |
wire.TestVisible(screen) |
|
957 |
for block in self.Blocks.itervalues(): |
|
958 |
block.TestVisible(screen) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
959 |
|
814 | 960 |
def GetElementIECPath(self, element): |
961 |
iec_path = None |
|
828
319dac4c4fd3
Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents:
823
diff
changeset
|
962 |
instance_path = self.GetInstancePath(True) |
1166
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
963 |
if isinstance(element, (Wire, Connector)): |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
964 |
if isinstance(element, Wire): |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
965 |
element = element.EndConnected |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
966 |
block = element.GetParentBlock() |
814 | 967 |
if isinstance(block, FBD_Block): |
968 |
blockname = block.GetName() |
|
1166
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
969 |
connectorname = element.GetName() |
814 | 970 |
if blockname != "": |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
971 |
iec_path = "%s.%s.%s" % (instance_path, blockname, connectorname) |
814 | 972 |
else: |
973 |
if connectorname == "": |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
974 |
iec_path = "%s.%s%d" % (instance_path, block.GetType(), block.GetId()) |
814 | 975 |
else: |
2639
62b5f7b909a9
Fixed one more sequel of marking temporary variables created while generating ST code out of FBD
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2579
diff
changeset
|
976 |
iec_path = "%s._TMP_%s%d_%s" % (instance_path, block.GetType(), block.GetId(), connectorname) |
814 | 977 |
elif isinstance(block, FBD_Variable): |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
978 |
iec_path = "%s.%s" % (instance_path, block.GetName()) |
814 | 979 |
elif isinstance(block, FBD_Connector): |
980 |
connection = self.GetConnectorByName(block.GetName()) |
|
981 |
if connection is not None: |
|
982 |
connector = connection.GetConnector() |
|
983 |
if len(connector.Wires) == 1: |
|
984 |
iec_path = self.GetElementIECPath(connector.Wires[0][0]) |
|
985 |
elif isinstance(element, LD_Contact): |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
986 |
iec_path = "%s.%s" % (instance_path, element.GetName()) |
814 | 987 |
elif isinstance(element, SFC_Step): |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
988 |
iec_path = "%s.%s.X" % (instance_path, element.GetName()) |
814 | 989 |
elif isinstance(element, SFC_Transition): |
990 |
connectors = element.GetConnectors() |
|
991 |
previous_steps = self.GetPreviousSteps(connectors["inputs"]) |
|
992 |
next_steps = self.GetNextSteps(connectors["outputs"]) |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
993 |
iec_path = "%s.%s->%s" % (instance_path, ",".join(previous_steps), ",".join(next_steps)) |
814 | 994 |
return iec_path |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
995 |
|
1377
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
996 |
def GetWireModifier(self, wire): |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
997 |
connector = wire.EndConnected |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
998 |
block = connector.GetParentBlock() |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
999 |
if isinstance(block, FBD_Connector): |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1000 |
connection = self.GetConnectorByName(block.GetName()) |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1001 |
if connection is not None: |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1002 |
connector = connection.GetConnector() |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1003 |
if len(connector.Wires) == 1: |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1004 |
return self.GetWireModifier(connector.Wires[0][0]) |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1005 |
else: |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1006 |
if connector.IsNegated(): |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1007 |
return "negated" |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1008 |
else: |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1009 |
return connector.GetEdge() |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1010 |
return "none" |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1011 |
|
1644
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1012 |
def CorrectElementSize(self, element, width, height): |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1013 |
min_width, min_height = element.GetMinSize() |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1014 |
if width < min_width: |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1015 |
width = min_width |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1016 |
if height < min_height: |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1017 |
height = min_height |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1018 |
if element.Size != (width, height): |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1019 |
element.SetSize(width, height) |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1020 |
element.RefreshModel() |
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1021 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1022 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1023 |
# Reset functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1024 |
# ------------------------------------------------------------------------------- |
814 | 1025 |
|
1026 |
# Resets Viewer lists |
|
1027 |
def ResetView(self): |
|
1028 |
self.Blocks = {} |
|
1029 |
self.Wires = {} |
|
1030 |
self.Comments = {} |
|
1031 |
self.Subscribed = {} |
|
1032 |
self.SelectedElement = None |
|
1033 |
self.HighlightedElement = None |
|
1034 |
self.ToolTipElement = None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1035 |
|
814 | 1036 |
def Flush(self): |
1205
638d1d430d24
Fixed bug Viewer not refreshed when debugging
Laurent Bessard
parents:
1204
diff
changeset
|
1037 |
self.UnsubscribeAllDataConsumers(tick=False) |
814 | 1038 |
for block in self.Blocks.itervalues(): |
1039 |
block.Flush() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1040 |
|
814 | 1041 |
# Remove all elements |
1042 |
def CleanView(self): |
|
1043 |
for block in self.Blocks.itervalues(): |
|
1044 |
block.Clean() |
|
1045 |
self.ResetView() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1046 |
|
814 | 1047 |
# Changes Viewer mode |
1048 |
def SetMode(self, mode): |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1049 |
if self.Mode != mode or mode == MODE_SELECTION: |
814 | 1050 |
if self.Mode == MODE_MOTION: |
1051 |
wx.CallAfter(self.Editor.SetCursor, wx.NullCursor) |
|
1052 |
self.Mode = mode |
|
1053 |
self.SavedMode = False |
|
1054 |
else: |
|
1055 |
self.SavedMode = True |
|
1056 |
# Reset selection |
|
1057 |
if self.Mode != MODE_SELECTION and self.SelectedElement: |
|
1058 |
self.SelectedElement.SetSelected(False) |
|
1059 |
self.SelectedElement = None |
|
1060 |
if self.Mode == MODE_MOTION: |
|
1061 |
wx.CallAfter(self.Editor.SetCursor, wx.StockCursor(wx.CURSOR_HAND)) |
|
1062 |
self.SavedMode = True |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1063 |
|
814 | 1064 |
# Return current drawing mode |
1065 |
def GetDrawingMode(self): |
|
1066 |
return self.ParentWindow.GetDrawingMode() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1067 |
|
814 | 1068 |
# Buffer the last model state |
1069 |
def RefreshBuffer(self): |
|
1070 |
self.Controler.BufferProject() |
|
1071 |
if self.ParentWindow: |
|
1072 |
self.ParentWindow.RefreshTitle() |
|
1073 |
self.ParentWindow.RefreshFileMenu() |
|
1074 |
self.ParentWindow.RefreshEditMenu() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1075 |
|
814 | 1076 |
def StartBuffering(self): |
1077 |
if not self.Buffering: |
|
1078 |
self.Buffering = True |
|
1079 |
self.Controler.StartBuffering() |
|
1080 |
if self.ParentWindow: |
|
1081 |
self.ParentWindow.RefreshTitle() |
|
1082 |
self.ParentWindow.RefreshFileMenu() |
|
1083 |
self.ParentWindow.RefreshEditMenu() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1084 |
|
814 | 1085 |
def ResetBuffer(self): |
1086 |
if self.Buffering: |
|
1087 |
self.Controler.EndBuffering() |
|
1088 |
self.Buffering = False |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1089 |
|
814 | 1090 |
def GetBufferState(self): |
1091 |
if not self.Debug: |
|
1092 |
return self.Controler.GetBufferState() |
|
1093 |
return False, False |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1094 |
|
814 | 1095 |
def Undo(self): |
1096 |
if not self.Debug: |
|
1097 |
self.Controler.LoadPrevious() |
|
1098 |
self.ParentWindow.CloseTabsWithoutModel() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1099 |
|
814 | 1100 |
def Redo(self): |
1101 |
if not self.Debug: |
|
1102 |
self.Controler.LoadNext() |
|
1103 |
self.ParentWindow.CloseTabsWithoutModel() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1104 |
|
814 | 1105 |
def HasNoModel(self): |
1106 |
if not self.Debug: |
|
1107 |
return self.Controler.GetEditedElement(self.TagName) is None |
|
1108 |
return False |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1109 |
|
814 | 1110 |
# Refresh the current scaling |
1111 |
def RefreshScaling(self, refresh=True): |
|
1112 |
properties = self.Controler.GetProjectProperties(self.Debug) |
|
1113 |
scaling = properties["scaling"][self.CurrentLanguage] |
|
1114 |
if scaling[0] != 0 and scaling[1] != 0: |
|
1115 |
self.Scaling = scaling |
|
1116 |
if self.DrawGrid: |
|
1117 |
width = max(2, int(scaling[0] * self.ViewScale[0])) |
|
1118 |
height = max(2, int(scaling[1] * self.ViewScale[1])) |
|
1119 |
bitmap = wx.EmptyBitmap(width, height) |
|
1120 |
dc = wx.MemoryDC(bitmap) |
|
1121 |
dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour())) |
|
1122 |
dc.Clear() |
|
1123 |
dc.SetPen(MiterPen(wx.Colour(180, 180, 180))) |
|
1124 |
dc.DrawPoint(0, 0) |
|
1125 |
self.GridBrush = wx.BrushFromBitmap(bitmap) |
|
1126 |
else: |
|
1127 |
self.GridBrush = wx.TRANSPARENT_BRUSH |
|
1128 |
else: |
|
1129 |
self.Scaling = None |
|
1130 |
self.GridBrush = wx.TRANSPARENT_BRUSH |
|
1131 |
page_size = properties["pageSize"] |
|
1132 |
if page_size != (0, 0): |
|
1133 |
self.PageSize = map(int, page_size) |
|
1134 |
self.PagePen = MiterPen(wx.Colour(180, 180, 180)) |
|
1135 |
else: |
|
1136 |
self.PageSize = None |
|
1137 |
self.PagePen = wx.TRANSPARENT_PEN |
|
1138 |
if refresh: |
|
1139 |
self.RefreshVisibleElements() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1140 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1141 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1142 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1143 |
# Refresh functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1144 |
# ------------------------------------------------------------------------------- |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1145 |
|
814 | 1146 |
def ElementNeedRefresh(self, element): |
1147 |
self.ElementRefreshList_lock.acquire() |
|
1148 |
self.ElementRefreshList.append(element) |
|
1149 |
self.ElementRefreshList_lock.release() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1150 |
|
1431 | 1151 |
def NewDataAvailable(self, ticks): |
1366
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1152 |
if self.IsShown(): |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1153 |
refresh_rect = None |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1154 |
self.ElementRefreshList_lock.acquire() |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1155 |
for element in self.ElementRefreshList: |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1156 |
if refresh_rect is None: |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1157 |
refresh_rect = element.GetRedrawRect() |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1158 |
else: |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1159 |
refresh_rect.Union(element.GetRedrawRect()) |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1160 |
self.ElementRefreshList = [] |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1161 |
self.ElementRefreshList_lock.release() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1162 |
|
1366
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1163 |
if refresh_rect is not None: |
3756ae754713
Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents:
1363
diff
changeset
|
1164 |
self.RefreshRect(self.GetScrolledRect(refresh_rect), False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1165 |
|
1176
f4b434672204
Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents:
1170
diff
changeset
|
1166 |
def SubscribeAllDataConsumers(self): |
1201
3907f10efcf4
Fixed bug Viewer not refreshed when debugging
Laurent Bessard
parents:
1176
diff
changeset
|
1167 |
self.RefreshView() |
1176
f4b434672204
Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents:
1170
diff
changeset
|
1168 |
DebugViewer.SubscribeAllDataConsumers(self) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1169 |
|
814 | 1170 |
# Refresh Viewer elements |
1171 |
def RefreshView(self, variablepanel=True, selection=None): |
|
1172 |
EditorPanel.RefreshView(self, variablepanel) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1173 |
|
814 | 1174 |
if self.ToolTipElement is not None: |
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
1175 |
self.ToolTipElement.DestroyToolTip() |
814 | 1176 |
self.ToolTipElement = None |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1177 |
|
814 | 1178 |
self.Inhibit(True) |
1179 |
self.current_id = 0 |
|
1180 |
# Start by reseting Viewer |
|
1181 |
self.Flush() |
|
1182 |
self.ResetView() |
|
1183 |
self.ResetBuffer() |
|
1846
14b40afccd69
remove unused variables found by pylint
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1841
diff
changeset
|
1184 |
|
814 | 1185 |
# List of ids of already loaded blocks |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
1186 |
instances = self.Controler.GetEditedElementInstancesInfos(self.TagName, debug=self.Debug) |
814 | 1187 |
# Load Blocks until they are all loaded |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1188 |
while len(instances) > 0: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1189 |
self.loadInstance(instances.popitem(0)[1], instances, selection) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1190 |
|
1766
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1764
diff
changeset
|
1191 |
if selection is not None and isinstance(self.SelectedElement, Graphic_Group): |
1226
93e7a8abce5e
Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents:
1225
diff
changeset
|
1192 |
self.SelectedElement.RefreshWireExclusion() |
93e7a8abce5e
Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents:
1225
diff
changeset
|
1193 |
self.SelectedElement.RefreshBoundingBox() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1194 |
|
814 | 1195 |
self.RefreshScrollBars() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1196 |
|
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
1197 |
if self.TagName.split("::")[0] == "A" and self.Debug: |
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
1198 |
self.AddDataConsumer("%s.Q" % self.InstancePath.upper(), self.InstanceName) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
1199 |
|
814 | 1200 |
for wire in self.Wires: |
1201 |
if not wire.IsConnectedCompatible(): |
|
1202 |
wire.SetValid(False) |
|
1203 |
if self.Debug: |
|
1204 |
iec_path = self.GetElementIECPath(wire) |
|
1205 |
if iec_path is None: |
|
1206 |
block = wire.EndConnected.GetParentBlock() |
|
1207 |
if isinstance(block, LD_PowerRail): |
|
1208 |
wire.SetValue(True) |
|
1209 |
elif self.AddDataConsumer(iec_path.upper(), wire) is None: |
|
1210 |
wire.SetValue("undefined") |
|
1377
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1211 |
else: |
cc8f9177d41c
Fixed bug when debugging wire connected to output connector with modifiers even if connector/continuation is used to replace long wires
Laurent Bessard
parents:
1366
diff
changeset
|
1212 |
wire.SetModifier(self.GetWireModifier(wire)) |
814 | 1213 |
|
1214 |
if self.Debug: |
|
1215 |
for block in self.Blocks.itervalues(): |
|
1216 |
block.SpreadCurrent() |
|
1166
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1217 |
if isinstance(block, FBD_Block): |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1218 |
for output_connector in block.GetConnectors()["outputs"]: |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1219 |
if len(output_connector.GetWires()) == 0: |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1220 |
iec_path = self.GetElementIECPath(output_connector) |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1221 |
if iec_path is not None: |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1222 |
self.AddDataConsumer(iec_path.upper(), output_connector) |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1223 |
else: |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1224 |
iec_path = self.GetElementIECPath(block) |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1225 |
if iec_path is not None: |
2ed9675be08d
Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents:
1141
diff
changeset
|
1226 |
self.AddDataConsumer(iec_path.upper(), block) |
814 | 1227 |
|
1228 |
self.Inhibit(False) |
|
1229 |
self.RefreshVisibleElements() |
|
1230 |
self.ShowHighlights() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1231 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1232 |
|
814 | 1233 |
def GetPreviousSteps(self, connectors): |
1234 |
steps = [] |
|
1235 |
for connector in connectors: |
|
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1236 |
for wire, _handle in connector.GetWires(): |
814 | 1237 |
previous = wire.GetOtherConnected(connector).GetParentBlock() |
1238 |
if isinstance(previous, SFC_Step): |
|
1239 |
steps.append(previous.GetName()) |
|
1240 |
elif isinstance(previous, SFC_Divergence) and previous.GetType() in [SIMULTANEOUS_CONVERGENCE, SELECTION_DIVERGENCE]: |
|
1241 |
connectors = previous.GetConnectors() |
|
1242 |
steps.extend(self.GetPreviousSteps(connectors["inputs"])) |
|
1243 |
return steps |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1244 |
|
814 | 1245 |
def GetNextSteps(self, connectors): |
1246 |
steps = [] |
|
1247 |
for connector in connectors: |
|
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1248 |
for wire, _handle in connector.GetWires(): |
814 | 1249 |
next = wire.GetOtherConnected(connector).GetParentBlock() |
1250 |
if isinstance(next, SFC_Step): |
|
1251 |
steps.append(next.GetName()) |
|
1252 |
elif isinstance(next, SFC_Jump): |
|
1253 |
steps.append(next.GetTarget()) |
|
1254 |
elif isinstance(next, SFC_Divergence) and next.GetType() in [SIMULTANEOUS_DIVERGENCE, SELECTION_CONVERGENCE]: |
|
1255 |
connectors = next.GetConnectors() |
|
1256 |
steps.extend(self.GetNextSteps(connectors["outputs"])) |
|
1257 |
return steps |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1258 |
|
814 | 1259 |
def GetMaxSize(self): |
1260 |
maxx = maxy = 0 |
|
1261 |
for element in self.GetElements(): |
|
1262 |
bbox = element.GetBoundingBox() |
|
1263 |
maxx = max(maxx, bbox.x + bbox.width) |
|
1264 |
maxy = max(maxy, bbox.y + bbox.height) |
|
1265 |
return maxx, maxy |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1266 |
|
814 | 1267 |
def RefreshScrollBars(self, width_incr=0, height_incr=0): |
1268 |
xstart, ystart = self.GetViewStart() |
|
1269 |
window_size = self.Editor.GetClientSize() |
|
1270 |
maxx, maxy = self.GetMaxSize() |
|
1271 |
maxx = max(maxx + WINDOW_BORDER, (xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[0]) |
|
1272 |
maxy = max(maxy + WINDOW_BORDER, (ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[1]) |
|
1273 |
if self.rubberBand.IsShown(): |
|
1274 |
extent = self.rubberBand.GetCurrentExtent() |
|
1275 |
maxx = max(maxx, extent.x + extent.width) |
|
1276 |
maxy = max(maxy, extent.y + extent.height) |
|
1277 |
maxx = int(maxx * self.ViewScale[0]) |
|
1278 |
maxy = int(maxy * self.ViewScale[1]) |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1279 |
self.Editor.SetScrollbars( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1280 |
SCROLLBAR_UNIT, SCROLLBAR_UNIT, |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
1281 |
round(maxx / SCROLLBAR_UNIT) + width_incr, |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
1282 |
round(maxy / SCROLLBAR_UNIT) + height_incr, |
814 | 1283 |
xstart, ystart, True) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1284 |
|
814 | 1285 |
def EnsureVisible(self, block): |
1286 |
xstart, ystart = self.GetViewStart() |
|
1287 |
window_size = self.Editor.GetClientSize() |
|
1288 |
block_bbx = block.GetBoundingBox() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1289 |
|
814 | 1290 |
screen_minx, screen_miny = xstart * SCROLLBAR_UNIT, ystart * SCROLLBAR_UNIT |
1291 |
screen_maxx, screen_maxy = screen_minx + window_size[0], screen_miny + window_size[1] |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1292 |
block_minx = int(block_bbx.x * self.ViewScale[0]) |
814 | 1293 |
block_miny = int(block_bbx.y * self.ViewScale[1]) |
1294 |
block_maxx = int(round((block_bbx.x + block_bbx.width) * self.ViewScale[0])) |
|
1295 |
block_maxy = int(round((block_bbx.y + block_bbx.height) * self.ViewScale[1])) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1296 |
|
814 | 1297 |
xpos, ypos = xstart, ystart |
1298 |
if block_minx < screen_minx and block_maxx < screen_maxx: |
|
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
1299 |
xpos -= (screen_minx - block_minx) // SCROLLBAR_UNIT + 1 |
814 | 1300 |
elif block_maxx > screen_maxx and block_minx > screen_minx: |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
1301 |
xpos += (block_maxx - screen_maxx) // SCROLLBAR_UNIT + 1 |
814 | 1302 |
if block_miny < screen_miny and block_maxy < screen_maxy: |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
1303 |
ypos -= (screen_miny - block_miny) // SCROLLBAR_UNIT + 1 |
814 | 1304 |
elif block_maxy > screen_maxy and block_miny > screen_miny: |
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
1305 |
ypos += (block_maxy - screen_maxy) // SCROLLBAR_UNIT + 1 |
814 | 1306 |
self.Scroll(xpos, ypos) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1307 |
|
814 | 1308 |
def SelectInGroup(self, element): |
1309 |
element.SetSelected(True) |
|
1310 |
if self.SelectedElement is None: |
|
1311 |
self.SelectedElement = element |
|
1312 |
elif isinstance(self.SelectedElement, Graphic_Group): |
|
1226
93e7a8abce5e
Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents:
1225
diff
changeset
|
1313 |
self.SelectedElement.AddElement(element) |
814 | 1314 |
else: |
1315 |
group = Graphic_Group(self) |
|
1226
93e7a8abce5e
Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents:
1225
diff
changeset
|
1316 |
group.AddElement(self.SelectedElement) |
93e7a8abce5e
Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents:
1225
diff
changeset
|
1317 |
group.AddElement(element) |
814 | 1318 |
self.SelectedElement = group |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1319 |
|
814 | 1320 |
# Load instance from given informations |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1321 |
def loadInstance(self, instance, remaining_instances, selection): |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1322 |
self.current_id = max(self.current_id, instance.id) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1323 |
creation_function = ElementCreationFunctions.get(instance.type, None) |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1324 |
connectors = {"inputs": [], "outputs": []} |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1325 |
specific_values = instance.specific_values |
814 | 1326 |
if creation_function is not None: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1327 |
element = creation_function(self, instance.id, specific_values) |
814 | 1328 |
if isinstance(element, SFC_Step): |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1329 |
if len(instance.inputs) > 0: |
814 | 1330 |
element.AddInput() |
1331 |
else: |
|
1332 |
element.RemoveInput() |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1333 |
if len(instance.outputs) > 0: |
814 | 1334 |
element.AddOutput() |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1335 |
if isinstance(element, SFC_Transition) and specific_values.condition_type == "connection": |
814 | 1336 |
connector = element.GetConditionConnector() |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1337 |
self.CreateWires(connector, instance.id, specific_values.connection.links, remaining_instances, selection) |
814 | 1338 |
else: |
1339 |
executionControl = False |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1340 |
for input in instance.inputs: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1341 |
input_edge = MODIFIER_VALUE(input.edge) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1342 |
if input.negated: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1343 |
connectors["inputs"].append((input.name, None, "negated")) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1344 |
elif input_edge: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1345 |
connectors["inputs"].append((input.name, None, input_edge)) |
814 | 1346 |
else: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1347 |
connectors["inputs"].append((input.name, None, "none")) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1348 |
for output in instance.outputs: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1349 |
output_edge = MODIFIER_VALUE(output.edge) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1350 |
if output.negated: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1351 |
connectors["outputs"].append((output.name, None, "negated")) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1352 |
elif output_edge: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1353 |
connectors["outputs"].append((output.name, None, output_edge)) |
814 | 1354 |
else: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1355 |
connectors["outputs"].append((output.name, None, "none")) |
814 | 1356 |
if len(connectors["inputs"]) > 0 and connectors["inputs"][0][0] == "EN": |
1357 |
connectors["inputs"].pop(0) |
|
1358 |
executionControl = True |
|
1359 |
if len(connectors["outputs"]) > 0 and connectors["outputs"][0][0] == "ENO": |
|
1360 |
connectors["outputs"].pop(0) |
|
1361 |
executionControl = True |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1362 |
block_name = specific_values.name if specific_values.name is not None else "" |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1363 |
element = FBD_Block( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1364 |
self, instance.type, block_name, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1365 |
instance.id, len(connectors["inputs"]), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1366 |
connectors=connectors, executionControl=executionControl, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1367 |
executionOrder=specific_values.execution_order) |
814 | 1368 |
if isinstance(element, Comment): |
1369 |
self.AddComment(element) |
|
1370 |
else: |
|
1371 |
self.AddBlock(element) |
|
1372 |
connectors = element.GetConnectors() |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1373 |
element.SetPosition(instance.x, instance.y) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1374 |
element.SetSize(instance.width, instance.height) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1375 |
for i, output_connector in enumerate(instance.outputs): |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1376 |
connector_pos = wx.Point(*output_connector.position) |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1377 |
if isinstance(element, FBD_Block): |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1378 |
connector = element.GetConnector(connector_pos, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1379 |
output_name=output_connector.name) |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1380 |
elif i < len(connectors["outputs"]): |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1381 |
connector = connectors["outputs"][i] |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1382 |
else: |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1383 |
connector = None |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1384 |
if connector is not None: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1385 |
if output_connector.negated: |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1386 |
connector.SetNegated(True) |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1387 |
if output_connector.edge is not None: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1388 |
connector.SetEdge(output_connector.edge) |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1389 |
if connectors["outputs"].index(connector) == i: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1390 |
connector.SetPosition(connector_pos) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1391 |
for i, input_connector in enumerate(instance.inputs): |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1392 |
connector_pos = wx.Point(*input_connector.position) |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1393 |
if isinstance(element, FBD_Block): |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1394 |
connector = element.GetConnector(connector_pos, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1395 |
input_name=input_connector.name) |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1396 |
elif i < len(connectors["inputs"]): |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1397 |
connector = connectors["inputs"][i] |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1398 |
else: |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1399 |
connector = None |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1400 |
if connector is not None: |
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1401 |
if connectors["inputs"].index(connector) == i: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1402 |
connector.SetPosition(connector_pos) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1403 |
if input_connector.negated: |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1404 |
connector.SetNegated(True) |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1405 |
if input_connector.edge is not None: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1406 |
connector.SetEdge(input_connector.edge) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1407 |
if not self.CreateWires(connector, instance.id, input_connector.links, remaining_instances, selection): |
1141
5069a28486b9
Fixed bug connection disappear when removing variable from interface of an already used POU
Laurent Bessard
parents:
1135
diff
changeset
|
1408 |
element.RefreshModel() |
1130
f96e0254f0ce
Fixed loading of Blocks in Viewer when block interface have changed
Laurent Bessard
parents:
1123
diff
changeset
|
1409 |
element.RefreshConnectors() |
1644
976ce8c6195d
Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents:
1619
diff
changeset
|
1410 |
self.CorrectElementSize(element, instance.width, instance.height) |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1411 |
if selection is not None and selection[0].get(instance.id, False): |
814 | 1412 |
self.SelectInGroup(element) |
1413 |
||
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1414 |
def CreateWires(self, start_connector, id, links, remaining_instances, selection=None): |
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1415 |
links_connected = True |
814 | 1416 |
for link in links: |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1417 |
refLocalId = link.refLocalId |
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1418 |
if refLocalId is None: |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1419 |
links_connected = False |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1420 |
continue |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1421 |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1422 |
new_instance = remaining_instances.pop(refLocalId, None) |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1423 |
if new_instance is not None: |
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1424 |
self.loadInstance(new_instance, remaining_instances, selection) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1425 |
|
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1426 |
connected = self.FindElementById(refLocalId) |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1427 |
if connected is None: |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1428 |
links_connected = False |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1429 |
continue |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1430 |
|
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1431 |
points = link.points |
1335
1b9610fc1e6b
Fixed bug when loading graphic pou connection between blocks and no points for drawing wire are defined
Laurent Bessard
parents:
1331
diff
changeset
|
1432 |
end_connector = connected.GetConnector( |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1433 |
wx.Point(points[-1].x, points[-1].y) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1434 |
if len(points) > 0 else wx.Point(0, 0), |
1338
c1e6c712cc35
Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents:
1335
diff
changeset
|
1435 |
link.formalParameter) |
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1436 |
if end_connector is not None: |
1335
1b9610fc1e6b
Fixed bug when loading graphic pou connection between blocks and no points for drawing wire are defined
Laurent Bessard
parents:
1331
diff
changeset
|
1437 |
if len(points) > 0: |
1b9610fc1e6b
Fixed bug when loading graphic pou connection between blocks and no points for drawing wire are defined
Laurent Bessard
parents:
1331
diff
changeset
|
1438 |
wire = Wire(self) |
1b9610fc1e6b
Fixed bug when loading graphic pou connection between blocks and no points for drawing wire are defined
Laurent Bessard
parents:
1331
diff
changeset
|
1439 |
wire.SetPoints(points) |
1b9610fc1e6b
Fixed bug when loading graphic pou connection between blocks and no points for drawing wire are defined
Laurent Bessard
parents:
1331
diff
changeset
|
1440 |
else: |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1441 |
wire = Wire( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1442 |
self, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1443 |
[wx.Point(*start_connector.GetPosition()), start_connector.GetDirection()], |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1444 |
[wx.Point(*end_connector.GetPosition()), end_connector.GetDirection()]) |
1342
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
1445 |
start_connector.Wires.append((wire, 0)) |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
1446 |
end_connector.Wires.append((wire, -1)) |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
1447 |
wire.StartConnected = start_connector |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
1448 |
wire.EndConnected = end_connector |
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1449 |
connected.RefreshConnectors() |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1450 |
self.AddWire(wire) |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1451 |
if selection is not None and (selection[1].get((id, refLocalId), False) or |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1452 |
selection[1].get((refLocalId, id), False)): |
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1453 |
self.SelectInGroup(wire) |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1454 |
else: |
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1455 |
links_connected = False |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1456 |
|
1135
519a21ddbc40
Added support for updating model when broken connection is detected in Viewer
Laurent Bessard
parents:
1133
diff
changeset
|
1457 |
return links_connected |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1458 |
|
814 | 1459 |
def IsOfType(self, type, reference): |
1460 |
return self.Controler.IsOfType(type, reference, self.Debug) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1461 |
|
814 | 1462 |
def IsEndType(self, type): |
1463 |
return self.Controler.IsEndType(type) |
|
1464 |
||
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
1465 |
def GetBlockType(self, type, inputs=None): |
814 | 1466 |
return self.Controler.GetBlockType(type, inputs, self.Debug) |
1467 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1468 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1469 |
# Search Element functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1470 |
# ------------------------------------------------------------------------------- |
814 | 1471 |
|
1472 |
def FindBlock(self, event): |
|
1473 |
dc = self.GetLogicalDC() |
|
1474 |
pos = event.GetLogicalPosition(dc) |
|
1475 |
for block in self.Blocks.itervalues(): |
|
1476 |
if block.HitTest(pos) or block.TestHandle(event) != (0, 0): |
|
1477 |
return block |
|
1478 |
return None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1479 |
|
814 | 1480 |
def FindWire(self, event): |
1481 |
dc = self.GetLogicalDC() |
|
1482 |
pos = event.GetLogicalPosition(dc) |
|
1483 |
for wire in self.Wires: |
|
1484 |
if wire.HitTest(pos) or wire.TestHandle(event) != (0, 0): |
|
1485 |
return wire |
|
1486 |
return None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1487 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
1488 |
def FindElement(self, event, exclude_group=False, connectors=True): |
814 | 1489 |
dc = self.GetLogicalDC() |
1490 |
pos = event.GetLogicalPosition(dc) |
|
1491 |
if self.SelectedElement and not (exclude_group and isinstance(self.SelectedElement, Graphic_Group)): |
|
1492 |
if self.SelectedElement.HitTest(pos, connectors) or self.SelectedElement.TestHandle(event) != (0, 0): |
|
1493 |
return self.SelectedElement |
|
1494 |
for element in self.GetElements(): |
|
1495 |
if element.HitTest(pos, connectors) or element.TestHandle(event) != (0, 0): |
|
1496 |
return element |
|
1497 |
return None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1498 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
1499 |
def FindBlockConnector(self, pos, direction=None, exclude=None): |
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
1500 |
result, _error = self.FindBlockConnectorWithError(pos, direction, exclude) |
1544
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1501 |
return result |
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1502 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
1503 |
def FindBlockConnectorWithError(self, pos, direction=None, exclude=None): |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
1504 |
error = False |
1567
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
1505 |
startblock = None |
814 | 1506 |
for block in self.Blocks.itervalues(): |
1544
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1507 |
connector = block.TestConnector(pos, direction, exclude) |
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1508 |
if connector: |
1567
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
1509 |
if self.IsWire(self.SelectedElement): |
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
1510 |
startblock = self.SelectedElement.StartConnected.GetParentBlock() |
1544
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1511 |
avail, error = connector.ConnectionAvailable(direction, exclude) |
1567
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
1512 |
if not avail or not self.BlockCompatibility(startblock, block, direction): |
1544
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1513 |
connector = None |
1567
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
1514 |
error = True |
1544
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1515 |
return connector, error |
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
1516 |
return None, error |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
1517 |
|
814 | 1518 |
def FindElementById(self, id): |
1519 |
block = self.Blocks.get(id, None) |
|
1520 |
if block is not None: |
|
1521 |
return block |
|
1522 |
comment = self.Comments.get(id, None) |
|
1523 |
if comment is not None: |
|
1524 |
return comment |
|
1525 |
return None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1526 |
|
814 | 1527 |
def SearchElements(self, bbox): |
1528 |
elements = [] |
|
1529 |
for element in self.GetElements(): |
|
1530 |
if element.IsInSelection(bbox): |
|
1531 |
elements.append(element) |
|
1532 |
return elements |
|
1533 |
||
1534 |
def SelectAll(self): |
|
1535 |
if self.SelectedElement is not None: |
|
1536 |
self.SelectedElement.SetSelected(False) |
|
1537 |
self.SelectedElement = Graphic_Group(self) |
|
1226
93e7a8abce5e
Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents:
1225
diff
changeset
|
1538 |
self.SelectedElement.SetElements(self.GetElements()) |
814 | 1539 |
self.SelectedElement.SetSelected(True) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1540 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1541 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1542 |
# Popup menu functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1543 |
# ------------------------------------------------------------------------------- |
814 | 1544 |
|
1545 |
def GetForceVariableMenuFunction(self, iec_path, element): |
|
1546 |
iec_type = self.GetDataType(iec_path) |
|
1750
acf02488f37f
clean-up: fix PEP8 E306 expected 1 blank line before a nested definition, found X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1547 |
|
814 | 1548 |
def ForceVariableFunction(event): |
1549 |
if iec_type is not None: |
|
1550 |
dialog = ForceVariableDialog(self.ParentWindow, iec_type, str(element.GetValue())) |
|
1551 |
if dialog.ShowModal() == wx.ID_OK: |
|
1552 |
self.ParentWindow.AddDebugVariable(iec_path) |
|
1553 |
self.ForceDataValue(iec_path, dialog.GetValue()) |
|
1554 |
return ForceVariableFunction |
|
1555 |
||
1556 |
def GetReleaseVariableMenuFunction(self, iec_path): |
|
1557 |
def ReleaseVariableFunction(event): |
|
1558 |
self.ReleaseDataValue(iec_path) |
|
1559 |
return ReleaseVariableFunction |
|
1560 |
||
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1561 |
def GetChangeVariableTypeMenuFunction(self, type): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1562 |
def ChangeVariableTypeMenu(event): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1563 |
self.ChangeVariableType(self.SelectedElement, type) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1564 |
return ChangeVariableTypeMenu |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1565 |
|
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1566 |
def GetChangeConnectionTypeMenuFunction(self, type): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1567 |
def ChangeConnectionTypeMenu(event): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1568 |
self.ChangeConnectionType(self.SelectedElement, type) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1569 |
return ChangeConnectionTypeMenu |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1570 |
|
814 | 1571 |
def PopupForceMenu(self): |
1572 |
iec_path = self.GetElementIECPath(self.SelectedElement) |
|
1573 |
if iec_path is not None: |
|
1574 |
menu = wx.Menu(title='') |
|
2565 | 1575 |
item = menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=_("Force value")) |
2555
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
1576 |
self.Bind(wx.EVT_MENU, self.GetForceVariableMenuFunction(iec_path.upper(), self.SelectedElement), item) |
2565 | 1577 |
ritem = menu.Append(wx.ID_ANY, help='', kind=wx.ITEM_NORMAL, text=_("Release value")) |
2555
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
1578 |
self.Bind(wx.EVT_MENU, self.GetReleaseVariableMenuFunction(iec_path.upper()), ritem) |
814 | 1579 |
if self.SelectedElement.IsForced(): |
2555
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
1580 |
ritem.Enable(True) |
814 | 1581 |
else: |
2555
5dce99e69027
Start fixing wx.NewId abuse in viewer.py. This shows how to avoid using AppendMenu() function, definitely useless.
Edouard Tisserant
parents:
2494
diff
changeset
|
1582 |
ritem.Enable(False) |
1711
a0682ec03f1f
fixes double mouse capturing after forcing variable in debug mode
Surkov Sergey <surkovsv93@gmail.com>
parents:
1674
diff
changeset
|
1583 |
if self.Editor.HasCapture(): |
a0682ec03f1f
fixes double mouse capturing after forcing variable in debug mode
Surkov Sergey <surkovsv93@gmail.com>
parents:
1674
diff
changeset
|
1584 |
self.Editor.ReleaseMouse() |
814 | 1585 |
self.Editor.PopupMenu(menu) |
1586 |
menu.Destroy() |
|
1587 |
||
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
1588 |
def PopupBlockMenu(self, connector=None): |
814 | 1589 |
menu = wx.Menu(title='') |
1590 |
if connector is not None and connector.IsCompatible("BOOL"): |
|
1591 |
self.AddBlockPinMenuItems(menu, connector) |
|
1592 |
else: |
|
1593 |
edit = self.SelectedElement.GetType() in self.Controler.GetProjectPouNames(self.Debug) |
|
1594 |
self.AddDefaultMenuItems(menu, block=True, edit=edit) |
|
1595 |
self.Editor.PopupMenu(menu) |
|
1596 |
menu.Destroy() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1597 |
|
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1598 |
def PopupVariableMenu(self): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1599 |
menu = wx.Menu(title='') |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1600 |
variable_type = self.SelectedElement.GetType() |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1601 |
for type_label, vtype in [(_("Input"), INPUT), |
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1602 |
(_("Output"), OUTPUT), |
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1603 |
(_("InOut"), INOUT)]: |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
1604 |
item = self.AppendItem(menu, type_label, |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1605 |
self.GetChangeVariableTypeMenuFunction(vtype), |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
1606 |
kind=wx.ITEM_RADIO) |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1607 |
if vtype == variable_type: |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
1608 |
item.Check(True) |
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1609 |
menu.AppendSeparator() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1610 |
self.AddDefaultMenuItems(menu, block=True) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1611 |
self.Editor.PopupMenu(menu) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1612 |
menu.Destroy() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1613 |
|
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1614 |
def PopupConnectionMenu(self): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1615 |
menu = wx.Menu(title='') |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1616 |
connection_type = self.SelectedElement.GetType() |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1617 |
for type_label, ctype in [(_("Connector"), CONNECTOR), |
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1618 |
(_("Continuation"), CONTINUATION)]: |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
1619 |
item = self.AppendItem(menu, type_label, |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1620 |
self.GetChangeConnectionTypeMenuFunction(ctype), |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
1621 |
kind=wx.ITEM_RADIO) |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
1622 |
if ctype == connection_type: |
2567
eb9392511989
More wx.NewID abuse removal. All Viewer.py got cured.
Edouard Tisserant
parents:
2557
diff
changeset
|
1623 |
item.Check(True) |
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1624 |
menu.AppendSeparator() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1625 |
self.AddDefaultMenuItems(menu, block=True) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1626 |
self.Editor.PopupMenu(menu) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
1627 |
menu.Destroy() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1628 |
|
814 | 1629 |
def PopupWireMenu(self, delete=True): |
1630 |
menu = wx.Menu(title='') |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1631 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1632 |
# If Check that wire can be replace by connections or abort |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1633 |
connected = self.SelectedElement.GetConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1634 |
start_connector = ( |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1635 |
self.SelectedElement.GetEndConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1636 |
if self.SelectedElement.GetStartConnected() in connected |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1637 |
else self.SelectedElement.GetStartConnected()) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1638 |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1639 |
self.AddWireMenuItems( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1640 |
menu, delete, |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1641 |
start_connector.GetDirection() == EAST and |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1642 |
not isinstance(start_connector.GetParentBlock(), SFC_Step)) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1643 |
|
814 | 1644 |
menu.AppendSeparator() |
1645 |
self.AddDefaultMenuItems(menu, block=True) |
|
1646 |
self.Editor.PopupMenu(menu) |
|
1647 |
menu.Destroy() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1648 |
|
814 | 1649 |
def PopupDivergenceMenu(self, connector): |
1650 |
menu = wx.Menu(title='') |
|
1651 |
self.AddDivergenceMenuItems(menu, connector) |
|
1652 |
menu.AppendSeparator() |
|
1653 |
self.AddDefaultMenuItems(menu, block=True) |
|
1654 |
self.Editor.PopupMenu(menu) |
|
1655 |
menu.Destroy() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1656 |
|
814 | 1657 |
def PopupGroupMenu(self): |
1658 |
menu = wx.Menu(title='') |
|
1659 |
align_menu = wx.Menu(title='') |
|
1660 |
self.AddAlignmentMenuItems(align_menu) |
|
1661 |
menu.AppendMenu(-1, _(u'Alignment'), align_menu) |
|
1662 |
menu.AppendSeparator() |
|
1663 |
self.AddDefaultMenuItems(menu, block=True) |
|
1664 |
self.Editor.PopupMenu(menu) |
|
1665 |
menu.Destroy() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1666 |
|
814 | 1667 |
def PopupDefaultMenu(self, block=True): |
1668 |
menu = wx.Menu(title='') |
|
1669 |
self.AddDefaultMenuItems(menu, block=block) |
|
1670 |
self.Editor.PopupMenu(menu) |
|
1671 |
menu.Destroy() |
|
1672 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1673 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1674 |
# Menu items functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1675 |
# ------------------------------------------------------------------------------- |
814 | 1676 |
|
1677 |
def OnAlignLeftMenu(self, event): |
|
1678 |
if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): |
|
1679 |
self.SelectedElement.AlignElements(ALIGN_LEFT, None) |
|
1680 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1681 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1682 |
|
814 | 1683 |
def OnAlignCenterMenu(self, event): |
1684 |
if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): |
|
1685 |
self.SelectedElement.AlignElements(ALIGN_CENTER, None) |
|
1686 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1687 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1688 |
|
814 | 1689 |
def OnAlignRightMenu(self, event): |
1690 |
if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): |
|
1691 |
self.SelectedElement.AlignElements(ALIGN_RIGHT, None) |
|
1692 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1693 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1694 |
|
814 | 1695 |
def OnAlignTopMenu(self, event): |
1696 |
if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): |
|
1697 |
self.SelectedElement.AlignElements(None, ALIGN_TOP) |
|
1698 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1699 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1700 |
|
814 | 1701 |
def OnAlignMiddleMenu(self, event): |
1702 |
if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): |
|
1703 |
self.SelectedElement.AlignElements(None, ALIGN_MIDDLE) |
|
1704 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1705 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1706 |
|
814 | 1707 |
def OnAlignBottomMenu(self, event): |
1708 |
if self.SelectedElement is not None and isinstance(self.SelectedElement, Graphic_Group): |
|
1709 |
self.SelectedElement.AlignElements(None, ALIGN_BOTTOM) |
|
1710 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1711 |
self.Editor.Refresh(False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1712 |
|
814 | 1713 |
def OnNoModifierMenu(self, event): |
1714 |
if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): |
|
1715 |
self.SelectedElement.SetConnectorNegated(False) |
|
1716 |
self.SelectedElement.Refresh() |
|
1717 |
self.RefreshBuffer() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1718 |
|
814 | 1719 |
def OnNegatedMenu(self, event): |
1720 |
if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): |
|
1721 |
self.SelectedElement.SetConnectorNegated(True) |
|
1722 |
self.SelectedElement.Refresh() |
|
1723 |
self.RefreshBuffer() |
|
1724 |
||
1725 |
def OnRisingEdgeMenu(self, event): |
|
1726 |
if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): |
|
1727 |
self.SelectedElement.SetConnectorEdge("rising") |
|
1728 |
self.SelectedElement.Refresh() |
|
1729 |
self.RefreshBuffer() |
|
1730 |
||
1731 |
def OnFallingEdgeMenu(self, event): |
|
1732 |
if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): |
|
1733 |
self.SelectedElement.SetConnectorEdge("falling") |
|
1734 |
self.SelectedElement.Refresh() |
|
1735 |
self.RefreshBuffer() |
|
1736 |
||
1737 |
def OnAddSegmentMenu(self, event): |
|
1738 |
if self.SelectedElement is not None and self.IsWire(self.SelectedElement): |
|
1739 |
self.SelectedElement.AddSegment() |
|
1740 |
self.SelectedElement.Refresh() |
|
1741 |
||
1742 |
def OnDeleteSegmentMenu(self, event): |
|
1743 |
if self.SelectedElement is not None and self.IsWire(self.SelectedElement): |
|
1744 |
self.SelectedElement.DeleteSegment() |
|
1745 |
self.SelectedElement.Refresh() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1746 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1747 |
def OnReplaceWireMenu(self, event): |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1748 |
# Check that selected element is a wire before applying replace |
1766
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1764
diff
changeset
|
1749 |
if self.SelectedElement is not None and self.IsWire(self.SelectedElement): |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1750 |
# Get wire redraw bbox to erase it from screen |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1751 |
wire = self.SelectedElement |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1752 |
redraw_rect = wire.GetRedrawRect() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1753 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1754 |
# Get connector at both ends of wire |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1755 |
connected = wire.GetConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1756 |
if wire.GetStartConnected() in connected: |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1757 |
start_connector = wire.GetEndConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1758 |
end_connector = wire.GetStartConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1759 |
wire.UnConnectStartPoint() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1760 |
point_to_connect = 0 |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1761 |
else: |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1762 |
start_connector = wire.GetStartConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1763 |
end_connector = wire.GetEndConnected() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1764 |
wire.UnConnectEndPoint() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1765 |
point_to_connect = -1 |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1766 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1767 |
# Get a new default connection name |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1768 |
connection_name = self.Controler.GenerateNewName( |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1769 |
self.TagName, None, "Connection%d", 0) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1770 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1771 |
# Create a connector to connect to wire |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1772 |
id = self.GetNewId() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1773 |
connection = FBD_Connector(self, CONNECTOR, connection_name, id) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1774 |
connection.SetSize(*self.GetScaledSize(*connection.GetMinSize())) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1775 |
|
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1776 |
# Calculate position of connector at the right of start connector |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1777 |
connector = connection.GetConnectors()["inputs"][0] |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1778 |
rel_pos = connector.GetRelPosition() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1779 |
start_point = start_connector.GetPosition(False) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1780 |
end_point = (start_point[0] + LD_WIRE_SIZE, start_point[1]) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1781 |
connection.SetPosition(end_point[0] - rel_pos[0], |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1782 |
end_point[1] - rel_pos[1]) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1783 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1784 |
# Connect connector to wire |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1785 |
connector.Connect((wire, point_to_connect)) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1786 |
if point_to_connect == 0: |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1787 |
wire.SetPoints([end_point, start_point]) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1788 |
else: |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1789 |
wire.SetPoints([start_point, end_point]) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1790 |
# Update redraw bbox with new wire trace so that it will be redraw |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1791 |
# on screen |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1792 |
redraw_rect.Union(wire.GetRedrawRect()) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1793 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1794 |
# Add connector to Viewer and model |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1795 |
self.AddBlock(connection) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1796 |
self.Controler.AddEditedElementConnection(self.TagName, id, |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1797 |
CONNECTOR) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1798 |
connection.RefreshModel() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1799 |
# Update redraw bbox with new connector bbox so that it will be |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1800 |
# drawn on screen |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1801 |
redraw_rect.Union(connection.GetRedrawRect()) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1802 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1803 |
# Add new continuation |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1804 |
id = self.GetNewId() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1805 |
connection = FBD_Connector(self, CONTINUATION, connection_name, id) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1806 |
connection.SetSize(*self.GetScaledSize(*connection.GetMinSize())) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1807 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1808 |
# Calculate position of connection at the left of end connector |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1809 |
connector = connection.GetConnectors()["outputs"][0] |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1810 |
rel_pos = connector.GetRelPosition() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1811 |
end_point = end_connector.GetPosition(False) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1812 |
start_point = (end_point[0] - LD_WIRE_SIZE, end_point[1]) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1813 |
connection.SetPosition(start_point[0] - rel_pos[0], |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1814 |
start_point[1] - rel_pos[1]) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1815 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1816 |
# Add Wire to Viewer and connect it to blocks |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1817 |
new_wire = Wire(self, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1818 |
[wx.Point(*start_point), connector.GetDirection()], |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1819 |
[wx.Point(*end_point), end_connector.GetDirection()]) |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1820 |
self.AddWire(new_wire) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1821 |
connector.Connect((new_wire, 0), False) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1822 |
end_connector.Connect((new_wire, -1), False) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1823 |
new_wire.ConnectStartPoint(None, connector) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1824 |
new_wire.ConnectEndPoint(None, end_connector) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1825 |
# Update redraw bbox with new wire bbox so that it will be drawn on |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1826 |
# screen |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1827 |
redraw_rect.Union(new_wire.GetRedrawRect()) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1828 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1829 |
# Add connection to Viewer and model |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1830 |
self.AddBlock(connection) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1831 |
self.Controler.AddEditedElementConnection(self.TagName, id, |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1832 |
CONTINUATION) |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1833 |
connection.RefreshModel() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1834 |
# Update redraw bbox with new connection bbox so that it will be |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1835 |
# drawn on screen |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1836 |
redraw_rect.Union(connection.GetRedrawRect()) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1837 |
|
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1838 |
# Refresh model for new wire |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1839 |
end_connector.RefreshParentBlock() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1840 |
|
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1841 |
# Redraw |
1263
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1842 |
self.RefreshBuffer() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1843 |
self.RefreshScrollBars() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1844 |
self.RefreshVisibleElements() |
895605ccac70
Added support for replacing a wire by two connections
Laurent Bessard
parents:
1260
diff
changeset
|
1845 |
self.RefreshRect(self.GetScrolledRect(redraw_rect), False) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1846 |
|
814 | 1847 |
def OnAddBranchMenu(self, event): |
1848 |
if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): |
|
1849 |
self.AddDivergenceBranch(self.SelectedElement) |
|
1850 |
||
1851 |
def OnDeleteBranchMenu(self, event): |
|
1852 |
if self.SelectedElement is not None and self.IsBlock(self.SelectedElement): |
|
1853 |
self.RemoveDivergenceBranch(self.SelectedElement) |
|
1854 |
||
1855 |
def OnEditBlockMenu(self, event): |
|
1856 |
if self.SelectedElement is not None: |
|
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
1857 |
self.ParentWindow.EditProjectElement(ITEM_POU, "P::%s" % self.SelectedElement.GetType()) |
814 | 1858 |
|
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
1859 |
def OnAdjustBlockSizeMenu(self, event): |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
1860 |
if self.SelectedElement is not None: |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
1861 |
movex, movey = self.SelectedElement.SetBestSize(self.Scaling) |
872
6aadbde5f41e
Fix bug when adjusting block size, block informations was not saved when using control + shift + double click
Laurent Bessard
parents:
857
diff
changeset
|
1862 |
self.SelectedElement.RefreshModel(True) |
6aadbde5f41e
Fix bug when adjusting block size, block informations was not saved when using control + shift + double click
Laurent Bessard
parents:
857
diff
changeset
|
1863 |
self.RefreshBuffer() |
6aadbde5f41e
Fix bug when adjusting block size, block informations was not saved when using control + shift + double click
Laurent Bessard
parents:
857
diff
changeset
|
1864 |
self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) |
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
1865 |
|
814 | 1866 |
def OnDeleteMenu(self, event): |
1867 |
if self.SelectedElement is not None: |
|
1868 |
self.SelectedElement.Delete() |
|
1869 |
self.SelectedElement = None |
|
1870 |
self.RefreshBuffer() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
1871 |
self.Editor.Refresh(False) |
814 | 1872 |
|
1873 |
def OnClearExecutionOrderMenu(self, event): |
|
1874 |
self.Controler.ClearEditedElementExecutionOrder(self.TagName) |
|
1875 |
self.RefreshBuffer() |
|
1876 |
self.RefreshView() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1877 |
|
814 | 1878 |
def OnResetExecutionOrderMenu(self, event): |
1879 |
self.Controler.ResetEditedElementExecutionOrder(self.TagName) |
|
1880 |
self.RefreshBuffer() |
|
1881 |
self.RefreshView() |
|
1882 |
||
1883 |
def GetAddMenuCallBack(self, func, *args): |
|
1884 |
def AddMenuCallBack(event): |
|
1885 |
wx.CallAfter(func, self.rubberBand.GetCurrentExtent(), *args) |
|
1886 |
return AddMenuCallBack |
|
1887 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1888 |
def GetAddToWireMenuCallBack(self, func, *args): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1889 |
args += (self.SelectedElement,) |
1750
acf02488f37f
clean-up: fix PEP8 E306 expected 1 blank line before a nested definition, found X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1749
diff
changeset
|
1890 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1891 |
def AddToWireMenuCallBack(event): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1892 |
func(wx.Rect(0, 0, 0, 0), *args) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1893 |
return AddToWireMenuCallBack |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1894 |
|
814 | 1895 |
def GetClipboardCallBack(self, func): |
1896 |
def ClipboardCallback(event): |
|
1897 |
wx.CallAfter(func) |
|
1898 |
return ClipboardCallback |
|
1899 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1900 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1901 |
# Mouse event functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
1902 |
# ------------------------------------------------------------------------------- |
814 | 1903 |
|
1904 |
def OnViewerMouseEvent(self, event): |
|
1224 | 1905 |
self.ResetBuffer() |
1228 | 1906 |
if event.Leaving() and self.ToolTipElement is not None: |
1224 | 1907 |
self.ToolTipElement.DestroyToolTip() |
1228 | 1908 |
elif (not event.Entering() and |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
1909 |
gettime() - self.LastToolTipCheckTime > REFRESH_PERIOD): |
1224 | 1910 |
self.LastToolTipCheckTime = gettime() |
814 | 1911 |
element = None |
1912 |
if not event.Leaving() and not event.LeftUp() and not event.LeftDClick(): |
|
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
1913 |
dc = self.GetLogicalDC() |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
1914 |
pos = event.GetLogicalPosition(dc) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
1915 |
element = self.FindBlockConnector(pos) |
1224 | 1916 |
if element is None or len(element.GetWires()) > 0: |
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
1917 |
element = self.FindElement(event, True, False) |
1228 | 1918 |
if self.ToolTipElement is not None: |
1919 |
self.ToolTipElement.DestroyToolTip() |
|
814 | 1920 |
self.ToolTipElement = element |
1921 |
if self.ToolTipElement is not None: |
|
1922 |
tooltip_pos = self.Editor.ClientToScreen(event.GetPosition()) |
|
1923 |
tooltip_pos.x += 10 |
|
1924 |
tooltip_pos.y += 10 |
|
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
1925 |
self.ToolTipElement.DisplayToolTip(tooltip_pos) |
814 | 1926 |
event.Skip() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
1927 |
|
814 | 1928 |
def OnViewerLeftDown(self, event): |
1929 |
self.Editor.CaptureMouse() |
|
1273
921858d68a13
Fix refresh bug when scrolling Viewer while dragging graphic element or rubberband
Laurent Bessard
parents:
1263
diff
changeset
|
1930 |
self.StartMousePos = event.GetPosition() |
814 | 1931 |
if self.Mode == MODE_SELECTION: |
1932 |
dc = self.GetLogicalDC() |
|
1933 |
pos = event.GetLogicalPosition(dc) |
|
1934 |
if event.ShiftDown() and not event.ControlDown() and self.SelectedElement is not None: |
|
1935 |
element = self.FindElement(event, True) |
|
1936 |
if element is not None: |
|
1937 |
if isinstance(self.SelectedElement, Graphic_Group): |
|
1938 |
self.SelectedElement.SetSelected(False) |
|
1939 |
self.SelectedElement.SelectElement(element) |
|
1940 |
elif self.SelectedElement is not None: |
|
1941 |
group = Graphic_Group(self) |
|
1942 |
group.SelectElement(self.SelectedElement) |
|
1943 |
group.SelectElement(element) |
|
1944 |
self.SelectedElement = group |
|
1945 |
elements = self.SelectedElement.GetElements() |
|
1946 |
if len(elements) == 0: |
|
1947 |
self.SelectedElement = element |
|
1948 |
elif len(elements) == 1: |
|
1949 |
self.SelectedElement = elements[0] |
|
1950 |
self.SelectedElement.SetSelected(True) |
|
1951 |
else: |
|
1952 |
self.rubberBand.Reset() |
|
1953 |
self.rubberBand.OnLeftDown(event, dc, self.Scaling) |
|
1954 |
else: |
|
1955 |
element = self.FindElement(event) |
|
1956 |
if not self.Debug and (element is None or element.TestHandle(event) == (0, 0)): |
|
1957 |
connector = self.FindBlockConnector(pos) |
|
1958 |
else: |
|
1959 |
connector = None |
|
1960 |
if not self.Debug and self.DrawingWire: |
|
1961 |
self.DrawingWire = False |
|
1962 |
if self.SelectedElement is not None: |
|
1963 |
if element is None or element.TestHandle(event) == (0, 0): |
|
1964 |
connector = self.FindBlockConnector(pos, self.SelectedElement.GetConnectionDirection()) |
|
1965 |
if connector is not None: |
|
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
1966 |
event.Dragging = lambda: True |
814 | 1967 |
self.SelectedElement.OnMotion(event, dc, self.Scaling) |
1968 |
if self.SelectedElement.EndConnected is not None: |
|
1969 |
self.SelectedElement.ResetPoints() |
|
1970 |
self.SelectedElement.GeneratePoints() |
|
1971 |
self.SelectedElement.RefreshModel() |
|
1972 |
self.SelectedElement.SetSelected(True) |
|
1973 |
element = self.SelectedElement |
|
1974 |
self.RefreshBuffer() |
|
1975 |
else: |
|
1976 |
rect = self.SelectedElement.GetRedrawRect() |
|
1977 |
self.SelectedElement.Delete() |
|
1978 |
self.SelectedElement = None |
|
1979 |
element = None |
|
1980 |
self.RefreshRect(self.GetScrolledRect(rect), False) |
|
1981 |
elif not self.Debug and connector is not None and not event.ControlDown(): |
|
1982 |
self.DrawingWire = True |
|
1983 |
scaled_pos = GetScaledEventPosition(event, dc, self.Scaling) |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1984 |
directions = { |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1985 |
EAST: [EAST, WEST], |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1986 |
WEST: [WEST, EAST], |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1987 |
NORTH: [NORTH, SOUTH], |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
1988 |
SOUTH: [SOUTH, NORTH]}[connector.GetDirection()] |
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1989 |
wire = Wire(self, |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1990 |
*map(list, zip( |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1991 |
[wx.Point(pos.x, pos.y), |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1992 |
wx.Point(scaled_pos.x, scaled_pos.y)], |
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
1993 |
directions))) |
814 | 1994 |
wire.oldPos = scaled_pos |
1995 |
wire.Handle = (HANDLE_POINT, 0) |
|
1996 |
wire.ProcessDragging(0, 0, event, None) |
|
1997 |
wire.Handle = (HANDLE_POINT, 1) |
|
1998 |
self.AddWire(wire) |
|
1999 |
if self.SelectedElement is not None: |
|
2000 |
self.SelectedElement.SetSelected(False) |
|
2001 |
self.SelectedElement = wire |
|
2002 |
if self.HighlightedElement is not None: |
|
2003 |
self.HighlightedElement.SetHighlighted(False) |
|
2004 |
self.HighlightedElement = wire |
|
2005 |
self.RefreshVisibleElements() |
|
2006 |
self.SelectedElement.SetHighlighted(True) |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2007 |
self.SelectedElement.StartConnected.HighlightParentBlock(True) |
814 | 2008 |
else: |
2009 |
if self.SelectedElement is not None and self.SelectedElement != element: |
|
2010 |
self.SelectedElement.SetSelected(False) |
|
2011 |
self.SelectedElement = None |
|
2012 |
if element is not None: |
|
2013 |
self.SelectedElement = element |
|
2014 |
if self.Debug: |
|
2015 |
Graphic_Element.OnLeftDown(self.SelectedElement, event, dc, self.Scaling) |
|
2016 |
else: |
|
2017 |
self.SelectedElement.OnLeftDown(event, dc, self.Scaling) |
|
2018 |
self.SelectedElement.Refresh() |
|
2019 |
else: |
|
2020 |
self.rubberBand.Reset() |
|
2021 |
self.rubberBand.OnLeftDown(event, dc, self.Scaling) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2022 |
elif self.Mode in [MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2023 |
MODE_CONTACT, MODE_COIL, MODE_POWERRAIL, MODE_INITIALSTEP, |
814 | 2024 |
MODE_STEP, MODE_TRANSITION, MODE_DIVERGENCE, MODE_JUMP, MODE_ACTION]: |
2025 |
self.rubberBand.Reset() |
|
2026 |
self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling) |
|
2027 |
elif self.Mode == MODE_MOTION: |
|
2028 |
self.StartScreenPos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL) |
|
2029 |
event.Skip() |
|
2030 |
||
2031 |
def OnViewerLeftUp(self, event): |
|
2032 |
self.StartMousePos = None |
|
2033 |
if self.rubberBand.IsShown(): |
|
2034 |
if self.Mode == MODE_SELECTION: |
|
2035 |
new_elements = self.SearchElements(self.rubberBand.GetCurrentExtent()) |
|
2036 |
self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) |
|
2037 |
if event.ShiftDown() and self.SelectedElement is not None: |
|
2038 |
if isinstance(self.SelectedElement, Graphic_Group): |
|
2039 |
elements = self.SelectedElement.GetElements() |
|
2040 |
else: |
|
2041 |
elements = [self.SelectedElement] |
|
2042 |
for element in elements: |
|
2043 |
if element not in new_elements: |
|
2044 |
new_elements.append(element) |
|
2045 |
if len(new_elements) == 1: |
|
2046 |
self.SelectedElement = new_elements[0] |
|
2047 |
self.SelectedElement.SetSelected(True) |
|
2048 |
elif len(new_elements) > 1: |
|
2049 |
self.SelectedElement = Graphic_Group(self) |
|
2050 |
self.SelectedElement.SetElements(new_elements) |
|
2051 |
self.SelectedElement.SetSelected(True) |
|
2052 |
else: |
|
2053 |
bbox = self.rubberBand.GetCurrentExtent() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2054 |
self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) |
814 | 2055 |
if self.Mode == MODE_BLOCK: |
2056 |
wx.CallAfter(self.AddNewBlock, bbox) |
|
2057 |
elif self.Mode == MODE_VARIABLE: |
|
2058 |
wx.CallAfter(self.AddNewVariable, bbox) |
|
2059 |
elif self.Mode == MODE_CONNECTION: |
|
2060 |
wx.CallAfter(self.AddNewConnection, bbox) |
|
2061 |
elif self.Mode == MODE_COMMENT: |
|
2062 |
wx.CallAfter(self.AddNewComment, bbox) |
|
2063 |
elif self.Mode == MODE_CONTACT: |
|
2064 |
wx.CallAfter(self.AddNewContact, bbox) |
|
2065 |
elif self.Mode == MODE_COIL: |
|
2066 |
wx.CallAfter(self.AddNewCoil, bbox) |
|
2067 |
elif self.Mode == MODE_POWERRAIL: |
|
2068 |
wx.CallAfter(self.AddNewPowerRail, bbox) |
|
2069 |
elif self.Mode == MODE_INITIALSTEP: |
|
2070 |
wx.CallAfter(self.AddNewStep, bbox, True) |
|
2071 |
elif self.Mode == MODE_STEP: |
|
2072 |
wx.CallAfter(self.AddNewStep, bbox, False) |
|
2073 |
elif self.Mode == MODE_TRANSITION: |
|
2074 |
wx.CallAfter(self.AddNewTransition, bbox) |
|
2075 |
elif self.Mode == MODE_DIVERGENCE: |
|
2076 |
wx.CallAfter(self.AddNewDivergence, bbox) |
|
2077 |
elif self.Mode == MODE_JUMP: |
|
2078 |
wx.CallAfter(self.AddNewJump, bbox) |
|
2079 |
elif self.Mode == MODE_ACTION: |
|
2080 |
wx.CallAfter(self.AddNewActionBlock, bbox) |
|
2081 |
elif self.Mode == MODE_SELECTION and self.SelectedElement is not None: |
|
2082 |
dc = self.GetLogicalDC() |
|
2083 |
if not self.Debug and self.DrawingWire: |
|
2084 |
pos = event.GetLogicalPosition(dc) |
|
2085 |
connector = self.FindBlockConnector(pos, self.SelectedElement.GetConnectionDirection()) |
|
2086 |
if self.SelectedElement.EndConnected is not None: |
|
2087 |
self.DrawingWire = False |
|
2088 |
self.SelectedElement.StartConnected.HighlightParentBlock(False) |
|
2089 |
self.SelectedElement.EndConnected.HighlightParentBlock(False) |
|
2090 |
self.SelectedElement.ResetPoints() |
|
2091 |
self.SelectedElement.OnMotion(event, dc, self.Scaling) |
|
2092 |
self.SelectedElement.GeneratePoints() |
|
2093 |
self.SelectedElement.RefreshModel() |
|
2094 |
self.SelectedElement.SetSelected(True) |
|
2095 |
self.SelectedElement.HighlightPoint(pos) |
|
2096 |
self.RefreshBuffer() |
|
2097 |
elif connector is None or self.SelectedElement.GetDragging(): |
|
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2098 |
items = self.GetPopupMenuItems() |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2099 |
if len(items) > 0: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2100 |
if self.Editor.HasCapture(): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2101 |
self.Editor.ReleaseMouse() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2102 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2103 |
# Popup contextual menu |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2104 |
menu = wx.Menu() |
2579
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
2105 |
for text, callback in items: |
8fb5c6eddc72
Conform to pep8 and pylint :
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2568
diff
changeset
|
2106 |
self.AppendItem(menu, text, callback) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2107 |
self.PopupMenu(menu) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2108 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2109 |
self.SelectedElement.StartConnected.HighlightParentBlock(False) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2110 |
if self.DrawingWire: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2111 |
self.DrawingWire = False |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2112 |
rect = self.SelectedElement.GetRedrawRect() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2113 |
wire = self.SelectedElement |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2114 |
self.SelectedElement = self.SelectedElement.StartConnected.GetParentBlock() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2115 |
self.SelectedElement.SetSelected(True) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2116 |
rect.Union(self.SelectedElement.GetRedrawRect()) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2117 |
wire.Delete() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2118 |
self.RefreshRect(self.GetScrolledRect(rect), False) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2119 |
else: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2120 |
self.SelectedElement.SetSelected(True) |
1260
11903e79ce66
Fixed bug when adding block into Viewer and added wire validity after adding block with wire drop support
Laurent Bessard
parents:
1259
diff
changeset
|
2121 |
if not self.SelectedElement.IsConnectedCompatible(): |
11903e79ce66
Fixed bug when adding block into Viewer and added wire validity after adding block with wire drop support
Laurent Bessard
parents:
1259
diff
changeset
|
2122 |
self.SelectedElement.SetValid(False) |
814 | 2123 |
else: |
2124 |
if self.Debug: |
|
2125 |
Graphic_Element.OnLeftUp(self.SelectedElement, event, dc, self.Scaling) |
|
2126 |
else: |
|
2127 |
self.SelectedElement.OnLeftUp(event, dc, self.Scaling) |
|
2128 |
wx.CallAfter(self.SetCurrentCursor, 0) |
|
2129 |
elif self.Mode == MODE_MOTION: |
|
2130 |
self.StartScreenPos = None |
|
2131 |
if self.Mode != MODE_SELECTION and not self.SavedMode: |
|
2132 |
wx.CallAfter(self.ParentWindow.ResetCurrentMode) |
|
2133 |
if self.Editor.HasCapture(): |
|
2134 |
self.Editor.ReleaseMouse() |
|
2135 |
event.Skip() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2136 |
|
814 | 2137 |
def OnViewerMiddleDown(self, event): |
2138 |
self.Editor.CaptureMouse() |
|
2139 |
self.StartMousePos = event.GetPosition() |
|
2140 |
self.StartScreenPos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL) |
|
2141 |
event.Skip() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2142 |
|
814 | 2143 |
def OnViewerMiddleUp(self, event): |
2144 |
self.StartMousePos = None |
|
2145 |
self.StartScreenPos = None |
|
2146 |
if self.Editor.HasCapture(): |
|
2147 |
self.Editor.ReleaseMouse() |
|
2148 |
event.Skip() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2149 |
|
814 | 2150 |
def OnViewerRightDown(self, event): |
2151 |
self.Editor.CaptureMouse() |
|
2152 |
if self.Mode == MODE_SELECTION: |
|
2153 |
element = self.FindElement(event) |
|
2154 |
if self.SelectedElement is not None and self.SelectedElement != element: |
|
2155 |
self.SelectedElement.SetSelected(False) |
|
2156 |
self.SelectedElement = None |
|
2157 |
if element is not None: |
|
2158 |
self.SelectedElement = element |
|
2159 |
if self.Debug: |
|
2160 |
Graphic_Element.OnRightDown(self.SelectedElement, event, self.GetLogicalDC(), self.Scaling) |
|
2161 |
else: |
|
2162 |
self.SelectedElement.OnRightDown(event, self.GetLogicalDC(), self.Scaling) |
|
2163 |
self.SelectedElement.Refresh() |
|
2164 |
event.Skip() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2165 |
|
814 | 2166 |
def OnViewerRightUp(self, event): |
2167 |
dc = self.GetLogicalDC() |
|
2168 |
self.rubberBand.Reset() |
|
2169 |
self.rubberBand.OnLeftDown(event, dc, self.Scaling) |
|
2170 |
self.rubberBand.OnLeftUp(event, dc, self.Scaling) |
|
2171 |
if self.SelectedElement is not None: |
|
2172 |
if self.Debug: |
|
2173 |
Graphic_Element.OnRightUp(self.SelectedElement, event, self.GetLogicalDC(), self.Scaling) |
|
2174 |
else: |
|
2175 |
self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) |
|
2176 |
wx.CallAfter(self.SetCurrentCursor, 0) |
|
2177 |
elif not self.Debug: |
|
2178 |
self.PopupDefaultMenu(False) |
|
2179 |
if self.Editor.HasCapture(): |
|
2180 |
self.Editor.ReleaseMouse() |
|
2181 |
event.Skip() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2182 |
|
814 | 2183 |
def OnViewerLeftDClick(self, event): |
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2184 |
element = self.FindElement(event) |
814 | 2185 |
if self.Mode == MODE_SELECTION and element is not None: |
2186 |
if self.SelectedElement is not None and self.SelectedElement != element: |
|
2187 |
self.SelectedElement.SetSelected(False) |
|
2188 |
if self.HighlightedElement is not None and self.HighlightedElement != element: |
|
2189 |
self.HighlightedElement.SetHighlighted(False) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2190 |
|
814 | 2191 |
self.SelectedElement = element |
2192 |
self.HighlightedElement = element |
|
2193 |
self.SelectedElement.SetHighlighted(True) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2194 |
|
814 | 2195 |
if self.Debug: |
820
d981fe154c36
Fix bug when Dclick on step and actionBlock in debug mode
laurent
parents:
814
diff
changeset
|
2196 |
if isinstance(self.SelectedElement, FBD_Block): |
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2197 |
dc = self.GetLogicalDC() |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2198 |
pos = event.GetLogicalPosition(dc) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2199 |
connector = self.SelectedElement.TestConnector(pos, EAST) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2200 |
if connector is not None and len(connector.GetWires()) == 0: |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2201 |
iec_path = self.GetElementIECPath(connector) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2202 |
if iec_path is not None: |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2203 |
self.ParentWindow.OpenDebugViewer( |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2204 |
ITEM_VAR_LOCAL, iec_path, connector.GetType()) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2205 |
else: |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2206 |
instance_type = self.SelectedElement.GetType() |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2207 |
pou_type = { |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2208 |
"program": ITEM_PROGRAM, |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2209 |
"functionBlock": ITEM_FUNCTIONBLOCK, |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2210 |
}.get(self.Controler.GetPouType(instance_type)) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2211 |
if pou_type is not None and instance_type in self.Controler.GetProjectPouNames(self.Debug): |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2212 |
self.ParentWindow.OpenDebugViewer( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2213 |
pou_type, |
1734
750eeb7230a1
clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1730
diff
changeset
|
2214 |
"%s.%s" % (self.GetInstancePath(True), self.SelectedElement.GetName()), |
1948
b9a3f771aaab
Moved some definitions away from controller class, and adaped references them through all code.
Edouard Tisserant
parents:
1931
diff
changeset
|
2215 |
ComputePouName(instance_type)) |
814 | 2216 |
else: |
2217 |
iec_path = self.GetElementIECPath(self.SelectedElement) |
|
2218 |
if iec_path is not None: |
|
2219 |
if isinstance(self.SelectedElement, Wire): |
|
2220 |
if self.SelectedElement.EndConnected is not None: |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2221 |
self.ParentWindow.OpenDebugViewer( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2222 |
ITEM_VAR_LOCAL, iec_path, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2223 |
self.SelectedElement.EndConnected.GetType()) |
814 | 2224 |
else: |
885
fc91d3718b74
Fix bug multiple graph viewer tab displaying values of the same variable can be opened
Laurent Bessard
parents:
882
diff
changeset
|
2225 |
self.ParentWindow.OpenDebugViewer(ITEM_VAR_LOCAL, iec_path, "BOOL") |
814 | 2226 |
elif event.ControlDown() and not event.ShiftDown(): |
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
2227 |
if not isinstance(self.SelectedElement, Graphic_Group): |
882
3c6ce0a5ab2c
Fix bug when double click while pressing CTRL on other elements than blocks
Laurent Bessard
parents:
872
diff
changeset
|
2228 |
if isinstance(self.SelectedElement, FBD_Block): |
3c6ce0a5ab2c
Fix bug when double click while pressing CTRL on other elements than blocks
Laurent Bessard
parents:
872
diff
changeset
|
2229 |
instance_type = self.SelectedElement.GetType() |
3c6ce0a5ab2c
Fix bug when double click while pressing CTRL on other elements than blocks
Laurent Bessard
parents:
872
diff
changeset
|
2230 |
else: |
3c6ce0a5ab2c
Fix bug when double click while pressing CTRL on other elements than blocks
Laurent Bessard
parents:
872
diff
changeset
|
2231 |
instance_type = None |
3c6ce0a5ab2c
Fix bug when double click while pressing CTRL on other elements than blocks
Laurent Bessard
parents:
872
diff
changeset
|
2232 |
if instance_type in self.Controler.GetProjectPouNames(self.Debug): |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2233 |
self.ParentWindow.EditProjectElement( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2234 |
ITEM_POU, |
1948
b9a3f771aaab
Moved some definitions away from controller class, and adaped references them through all code.
Edouard Tisserant
parents:
1931
diff
changeset
|
2235 |
ComputePouName(instance_type)) |
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
2236 |
else: |
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
2237 |
self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) |
814 | 2238 |
elif event.ControlDown() and event.ShiftDown(): |
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
2239 |
movex, movey = self.SelectedElement.SetBestSize(self.Scaling) |
872
6aadbde5f41e
Fix bug when adjusting block size, block informations was not saved when using control + shift + double click
Laurent Bessard
parents:
857
diff
changeset
|
2240 |
self.SelectedElement.RefreshModel() |
6aadbde5f41e
Fix bug when adjusting block size, block informations was not saved when using control + shift + double click
Laurent Bessard
parents:
857
diff
changeset
|
2241 |
self.RefreshBuffer() |
6aadbde5f41e
Fix bug when adjusting block size, block informations was not saved when using control + shift + double click
Laurent Bessard
parents:
857
diff
changeset
|
2242 |
self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) |
814 | 2243 |
else: |
2244 |
self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) |
|
2245 |
event.Skip() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2246 |
|
814 | 2247 |
def OnViewerMotion(self, event): |
2248 |
if self.Editor.HasCapture() and not event.Dragging(): |
|
2249 |
return |
|
2250 |
dc = self.GetLogicalDC() |
|
2251 |
pos = GetScaledEventPosition(event, dc, self.Scaling) |
|
2252 |
if event.MiddleIsDown() or self.Mode == MODE_MOTION: |
|
2253 |
if self.StartMousePos is not None and self.StartScreenPos is not None: |
|
2254 |
new_pos = event.GetPosition() |
|
2255 |
xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) |
|
2256 |
ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) |
|
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2257 |
scrollx = max(0, self.StartScreenPos[0] - (new_pos[0] - self.StartMousePos[0]) // SCROLLBAR_UNIT) |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2258 |
scrolly = max(0, self.StartScreenPos[1] - (new_pos[1] - self.StartMousePos[1]) // SCROLLBAR_UNIT) |
814 | 2259 |
if scrollx > xmax or scrolly > ymax: |
2260 |
self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax)) |
|
2261 |
self.Scroll(scrollx, scrolly) |
|
2262 |
else: |
|
2263 |
self.Scroll(scrollx, scrolly) |
|
2264 |
self.RefreshScrollBars() |
|
2265 |
self.RefreshVisibleElements() |
|
2266 |
else: |
|
1766
c1e5b9f19483
clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1764
diff
changeset
|
2267 |
if not event.Dragging() and (gettime() - self.LastHighlightCheckTime) > REFRESH_PERIOD: |
1224 | 2268 |
self.LastHighlightCheckTime = gettime() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2269 |
highlighted = self.FindElement(event, connectors=False) |
814 | 2270 |
if self.HighlightedElement is not None and self.HighlightedElement != highlighted: |
2271 |
self.HighlightedElement.SetHighlighted(False) |
|
2272 |
self.HighlightedElement = None |
|
2273 |
if highlighted is not None: |
|
1225
ed8a89171a6c
Fixed removing display of wire point in debug Viewer
Laurent Bessard
parents:
1224
diff
changeset
|
2274 |
if not self.Debug and isinstance(highlighted, (Wire, Graphic_Group)): |
814 | 2275 |
highlighted.HighlightPoint(pos) |
2276 |
if self.HighlightedElement != highlighted: |
|
2277 |
highlighted.SetHighlighted(True) |
|
2278 |
self.HighlightedElement = highlighted |
|
2279 |
if self.rubberBand.IsShown(): |
|
2280 |
self.rubberBand.OnMotion(event, dc, self.Scaling) |
|
2281 |
elif not self.Debug and self.Mode == MODE_SELECTION and self.SelectedElement is not None: |
|
2282 |
if self.DrawingWire: |
|
1544
2969c2123105
Fix bug with two or more wires connected to one input. Now only one wire can be connected to one input, except BOOLean signals in LD and SFC. If user trying to connect wire with already connected input, wire highlight will become red.
Sergey Surkov <surkovsv93@gmail.com>
parents:
1498
diff
changeset
|
2283 |
connector, errorHighlight = self.FindBlockConnectorWithError(pos, self.SelectedElement.GetConnectionDirection(), self.SelectedElement.EndConnected) |
1752
d14ff9d7eb76
clean-up: fix PEP8 E703 statement ends with a semicolon
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1750
diff
changeset
|
2284 |
self.SelectedElement.ErrHighlight = errorHighlight |
1743
c3c3d1318130
clean-up: fix PEP8 E711 comparison to None should be 'if cond is not None:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
2285 |
if not connector or self.SelectedElement.EndConnected is None: |
814 | 2286 |
self.SelectedElement.ResetPoints() |
2287 |
movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling) |
|
2288 |
self.SelectedElement.GeneratePoints() |
|
2289 |
if movex != 0 or movey != 0: |
|
2290 |
self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) |
|
1225
ed8a89171a6c
Fixed removing display of wire point in debug Viewer
Laurent Bessard
parents:
1224
diff
changeset
|
2291 |
elif not self.Debug: |
814 | 2292 |
self.SelectedElement.HighlightPoint(pos) |
2293 |
else: |
|
2294 |
movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling) |
|
2295 |
if movex != 0 or movey != 0: |
|
2296 |
self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) |
|
2297 |
elif self.Debug and self.StartMousePos is not None and event.Dragging(): |
|
2298 |
pos = event.GetPosition() |
|
2299 |
if abs(self.StartMousePos.x - pos.x) > 5 or abs(self.StartMousePos.y - pos.y) > 5: |
|
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2300 |
element = self.SelectedElement |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2301 |
if isinstance(self.SelectedElement, FBD_Block): |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2302 |
dc = self.GetLogicalDC() |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2303 |
connector = self.SelectedElement.TestConnector( |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2304 |
wx.Point(dc.DeviceToLogicalX(self.StartMousePos.x), |
1170
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2305 |
dc.DeviceToLogicalY(self.StartMousePos.y))) |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2306 |
if connector is not None: |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2307 |
element = connector |
074e46cdedbc
Added support for displaying ToolTip, starting drag'n drop and Double click on Block connectors when debugging
Laurent Bessard
parents:
1166
diff
changeset
|
2308 |
iec_path = self.GetElementIECPath(element) |
814 | 2309 |
if iec_path is not None: |
2310 |
self.StartMousePos = None |
|
2311 |
if self.HighlightedElement is not None: |
|
2312 |
self.HighlightedElement.SetHighlighted(False) |
|
2313 |
self.HighlightedElement = None |
|
2314 |
data = wx.TextDataObject(str((iec_path, "debug"))) |
|
2315 |
dragSource = wx.DropSource(self.Editor) |
|
2316 |
dragSource.SetData(data) |
|
2317 |
dragSource.DoDragDrop() |
|
908
50a8192fbb23
Fixed bug with mouse capture not released in graphic Viewers in debug mode when drag'n dropping wire variable to DebugVariablePanel
Laurent Bessard
parents:
896
diff
changeset
|
2318 |
if self.Editor.HasCapture(): |
50a8192fbb23
Fixed bug with mouse capture not released in graphic Viewers in debug mode when drag'n dropping wire variable to DebugVariablePanel
Laurent Bessard
parents:
896
diff
changeset
|
2319 |
self.Editor.ReleaseMouse() |
50a8192fbb23
Fixed bug with mouse capture not released in graphic Viewers in debug mode when drag'n dropping wire variable to DebugVariablePanel
Laurent Bessard
parents:
896
diff
changeset
|
2320 |
wx.CallAfter(self.SetCurrentCursor, 0) |
814 | 2321 |
self.UpdateScrollPos(event) |
2322 |
event.Skip() |
|
2323 |
||
2324 |
def OnLeaveViewer(self, event): |
|
2325 |
if self.SelectedElement is not None and self.SelectedElement.GetDragging(): |
|
2326 |
event.Skip() |
|
2327 |
elif self.HighlightedElement is not None: |
|
2328 |
self.HighlightedElement.SetHighlighted(False) |
|
2329 |
self.HighlightedElement = None |
|
2330 |
event.Skip() |
|
2331 |
||
2332 |
def UpdateScrollPos(self, event): |
|
2333 |
if (event.Dragging() and self.SelectedElement is not None) or self.rubberBand.IsShown(): |
|
2334 |
position = event.GetPosition() |
|
2335 |
move_window = wx.Point() |
|
2336 |
window_size = self.Editor.GetClientSize() |
|
2337 |
xstart, ystart = self.GetViewStart() |
|
2338 |
if position.x < SCROLL_ZONE and xstart > 0: |
|
2339 |
move_window.x = -1 |
|
2340 |
elif position.x > window_size[0] - SCROLL_ZONE: |
|
2341 |
move_window.x = 1 |
|
2342 |
if position.y < SCROLL_ZONE and ystart > 0: |
|
2343 |
move_window.y = -1 |
|
2344 |
elif position.y > window_size[1] - SCROLL_ZONE: |
|
2345 |
move_window.y = 1 |
|
2346 |
if move_window.x != 0 or move_window.y != 0: |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
2347 |
self.RefreshVisibleElements(xp=xstart + move_window.x, yp=ystart + move_window.y) |
814 | 2348 |
self.Scroll(xstart + move_window.x, ystart + move_window.y) |
2349 |
self.RefreshScrollBars(move_window.x, move_window.y) |
|
2350 |
||
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
2351 |
def BlockCompatibility(self, startblock=None, endblock=None, direction=None): |
1567
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
2352 |
return True |
a4bf874e4949
now only correct chart can be created in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1556
diff
changeset
|
2353 |
|
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2354 |
def GetPopupMenuItems(self): |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2355 |
start_connector = self.SelectedElement.GetStartConnected() |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2356 |
start_direction = start_connector.GetDirection() |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2357 |
startblock = start_connector.GetParentBlock() |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2358 |
items = [] |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2359 |
if isinstance(startblock, SFC_Objects): |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2360 |
startblockname = self.GetBlockName(startblock) |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2361 |
poss_div_types = [] |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2362 |
|
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2363 |
SFC_WireMenu_Buttons = { |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2364 |
'SFC_Step': (_(u'Step'), self.GetAddToWireMenuCallBack(self.AddNewStep, False)), |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2365 |
'SFC_Jump': (_(u'Jump'), self.GetAddToWireMenuCallBack(self.AddNewJump)), |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2366 |
'SFC_Transition': (_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, False)), |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2367 |
'SFC_ActionBlock': (_(u'Action Block'), self.GetAddToWireMenuCallBack(self.AddNewActionBlock))} |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2368 |
|
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2369 |
for endblock in self.SFC_StandardRules.get(startblockname): |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2370 |
if start_direction in endblock: |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2371 |
if endblock[0] in divergence_types: |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2372 |
poss_div_types.append(endblock[0]) |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2373 |
else: |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2374 |
items.append(SFC_WireMenu_Buttons[endblock[0]]) |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2375 |
if len(poss_div_types) > 0: |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2376 |
items.append((_(u'Divergence'), self.GetAddToWireMenuCallBack(self.AddNewDivergence, |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2377 |
poss_div_types))) |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2378 |
elif start_direction == EAST: |
1838
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2379 |
items.extend([ |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2380 |
(_(u'Block'), self.GetAddToWireMenuCallBack(self.AddNewBlock)), |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2381 |
(_(u'Connection'), self.GetAddToWireMenuCallBack(self.AddNewConnection))]) |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2382 |
|
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2383 |
if self.CurrentLanguage != "FBD": |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2384 |
items.append((_(u'Contact'), self.GetAddToWireMenuCallBack(self.AddNewContact))) |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2385 |
|
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2386 |
if self.CurrentLanguage == "LD": |
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2387 |
items.extend([ |
1838
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2388 |
(_(u'Coil'), self.GetAddToWireMenuCallBack(self.AddNewCoil)), |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2389 |
(_(u'Power Rail'), self.GetAddToWireMenuCallBack(self.AddNewPowerRail))]) |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2390 |
|
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2391 |
if self.CurrentLanguage == "SFC": |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2392 |
items.append( |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2393 |
(_(u'Transition'), self.GetAddToWireMenuCallBack(self.AddNewTransition, True))) |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2394 |
else: |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2395 |
items.append( |
646245c1c0d9
fix pylint warning (bad-indentation) Bad indentation. Found X spaces, expected Y
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1834
diff
changeset
|
2396 |
(_(u'Variable'), self.GetAddToWireMenuCallBack(self.AddNewVariable, True))) |
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2397 |
return items |
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2398 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2399 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2400 |
# Keyboard event functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2401 |
# ------------------------------------------------------------------------------- |
814 | 2402 |
|
2403 |
ARROW_KEY_MOVE = { |
|
2404 |
wx.WXK_LEFT: (-1, 0), |
|
2405 |
wx.WXK_RIGHT: (1, 0), |
|
2406 |
wx.WXK_UP: (0, -1), |
|
2407 |
wx.WXK_DOWN: (0, 1), |
|
2408 |
} |
|
2409 |
||
2410 |
def OnChar(self, event): |
|
2411 |
xpos, ypos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL) |
|
2412 |
xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) |
|
2413 |
ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) |
|
2414 |
keycode = event.GetKeyCode() |
|
2415 |
if self.Scaling is not None: |
|
2416 |
scaling = self.Scaling |
|
2417 |
else: |
|
2418 |
scaling = (8, 8) |
|
2419 |
if not self.Debug and keycode == wx.WXK_DELETE and self.SelectedElement is not None: |
|
2420 |
rect = self.SelectedElement.GetRedrawRect(1, 1) |
|
2421 |
self.SelectedElement.Delete() |
|
2422 |
self.SelectedElement = None |
|
2423 |
self.RefreshBuffer() |
|
2424 |
self.RefreshScrollBars() |
|
2425 |
wx.CallAfter(self.SetCurrentCursor, 0) |
|
2426 |
self.RefreshRect(self.GetScrolledRect(rect), False) |
|
2427 |
elif not self.Debug and keycode == wx.WXK_RETURN and self.SelectedElement is not None: |
|
2428 |
self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling) |
|
1763
bcc07ff2362c
clean-up: fix PEP8 W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1762
diff
changeset
|
2429 |
elif keycode in self.ARROW_KEY_MOVE: |
814 | 2430 |
move = self.ARROW_KEY_MOVE[keycode] |
2431 |
if event.ControlDown() and event.ShiftDown(): |
|
2432 |
self.Scroll({-1: 0, 0: xpos, 1: xmax}[move[0]], |
|
2433 |
{-1: 0, 0: ypos, 1: ymax}[move[1]]) |
|
2434 |
self.RefreshVisibleElements() |
|
2435 |
elif event.ControlDown(): |
|
2436 |
self.Scroll(xpos + move[0], ypos + move[1]) |
|
2437 |
self.RefreshScrollBars() |
|
2438 |
self.RefreshVisibleElements() |
|
2439 |
elif not self.Debug and self.SelectedElement is not None: |
|
2440 |
movex, movey = move |
|
2441 |
if not event.AltDown() or event.ShiftDown(): |
|
2442 |
movex *= scaling[0] |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2443 |
movey *= scaling[1] |
814 | 2444 |
if event.ShiftDown() and not event.AltDown(): |
2445 |
movex *= 10 |
|
2446 |
movey *= 10 |
|
2447 |
self.SelectedElement.Move(movex, movey) |
|
2448 |
self.StartBuffering() |
|
2449 |
self.SelectedElement.RefreshModel() |
|
2450 |
self.RefreshScrollBars() |
|
1042
6dbdc6844eb9
Fixed refresh bug when moving selected elements
Laurent Bessard
parents:
980
diff
changeset
|
2451 |
self.RefreshVisibleElements() |
814 | 2452 |
self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)), False) |
2453 |
elif not self.Debug and keycode == wx.WXK_SPACE and self.SelectedElement is not None and self.SelectedElement.Dragging: |
|
2454 |
if self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement): |
|
2455 |
block = self.CopyBlock(self.SelectedElement, wx.Point(*self.SelectedElement.GetPosition())) |
|
2456 |
event = wx.MouseEvent() |
|
1498
b11045a2f17c
fix deprecation warnings about accessing properties m_x, m_y of wxKeyEvent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1481
diff
changeset
|
2457 |
event.x, event.y = self.Editor.ScreenToClient(wx.GetMousePosition()) |
814 | 2458 |
dc = self.GetLogicalDC() |
2459 |
self.SelectedElement.OnLeftUp(event, dc, self.Scaling) |
|
2460 |
self.SelectedElement.SetSelected(False) |
|
2461 |
block.OnLeftDown(event, dc, self.Scaling) |
|
2462 |
self.SelectedElement = block |
|
2463 |
self.SelectedElement.SetSelected(True) |
|
2464 |
self.RefreshVariablePanel() |
|
2465 |
self.RefreshVisibleElements() |
|
2466 |
else: |
|
2467 |
event.Skip() |
|
2468 |
elif keycode == ord("+"): |
|
2469 |
self.SetScale(self.CurrentScale + 1) |
|
2470 |
self.ParentWindow.RefreshDisplayMenu() |
|
2471 |
elif keycode == ord("-"): |
|
2472 |
self.SetScale(self.CurrentScale - 1) |
|
2473 |
self.ParentWindow.RefreshDisplayMenu() |
|
2474 |
else: |
|
2475 |
event.Skip() |
|
2476 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2477 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2478 |
# Model adding functions from Drop Target |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2479 |
# ------------------------------------------------------------------------------- |
814 | 2480 |
|
2481 |
def AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type): |
|
2482 |
id = self.GetNewId() |
|
2483 |
variable = FBD_Variable(self, var_class, var_name, var_type, id) |
|
2484 |
width, height = variable.GetMinSize() |
|
2485 |
if scaling is not None: |
|
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2486 |
x = round(x / scaling[0]) * scaling[0] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2487 |
y = round(y / scaling[1]) * scaling[1] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2488 |
width = round(width / scaling[0] + 0.5) * scaling[0] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2489 |
height = round(height / scaling[1] + 0.5) * scaling[1] |
814 | 2490 |
variable.SetPosition(x, y) |
2491 |
variable.SetSize(width, height) |
|
2492 |
self.AddBlock(variable) |
|
2493 |
self.Controler.AddEditedElementVariable(self.GetTagName(), id, var_class) |
|
2494 |
self.RefreshVariableModel(variable) |
|
2495 |
self.RefreshBuffer() |
|
2496 |
self.RefreshScrollBars() |
|
2497 |
self.RefreshVisibleElements() |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
2498 |
self.Editor.Refresh(False) |
814 | 2499 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2500 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2501 |
# Model adding functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2502 |
# ------------------------------------------------------------------------------- |
814 | 2503 |
|
2504 |
def GetScaledSize(self, width, height): |
|
2505 |
if self.Scaling is not None: |
|
2437
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2506 |
width = round(width / self.Scaling[0] + 0.4) * self.Scaling[0] |
105c20fdeb19
python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2432
diff
changeset
|
2507 |
height = round(height / self.Scaling[1] + 0.4) * self.Scaling[1] |
814 | 2508 |
return width, height |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2509 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2510 |
def AddNewElement(self, element, bbox, wire=None, connector=None): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2511 |
min_width, min_height = (element.GetMinSize(True) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2512 |
if isinstance(element, (LD_PowerRail, |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2513 |
SFC_Divergence)) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2514 |
else element.GetMinSize()) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2515 |
element.SetSize(*self.GetScaledSize( |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2516 |
max(bbox.width, min_width), max(bbox.height, min_height))) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2517 |
if wire is not None: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2518 |
if connector is None: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2519 |
connector = element.GetConnectors()["inputs"][0] |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2520 |
point = wire.GetPoint(-1) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2521 |
rel_pos = connector.GetRelPosition() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2522 |
direction = connector.GetDirection() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2523 |
element.SetPosition( |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2524 |
point[0] - rel_pos[0] - direction[0] * CONNECTOR_SIZE, |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2525 |
point[1] - rel_pos[1] - direction[1] * CONNECTOR_SIZE, |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2526 |
) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2527 |
connector.Connect((wire, -1)) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2528 |
wire.Refresh() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2529 |
self.DrawingWire = False |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2530 |
else: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2531 |
element.SetPosition(bbox.x, bbox.y) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2532 |
self.AddBlock(element) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2533 |
element.RefreshModel() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2534 |
self.RefreshBuffer() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2535 |
self.RefreshScrollBars() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2536 |
self.RefreshVisibleElements() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2537 |
element.Refresh() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2538 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2539 |
def AddNewBlock(self, bbox, wire=None): |
1236
a5d1d2a2f366
Added support for default function block name in FBDBlockDialog
Laurent Bessard
parents:
1233
diff
changeset
|
2540 |
dialog = FBDBlockDialog(self.ParentWindow, self.Controler, self.TagName) |
814 | 2541 |
dialog.SetPreviewFont(self.GetFont()) |
1244 | 2542 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
814 | 2543 |
if dialog.ShowModal() == wx.ID_OK: |
2544 |
id = self.GetNewId() |
|
2545 |
values = dialog.GetValues() |
|
2546 |
values.setdefault("name", "") |
|
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2547 |
block = FBD_Block( |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2548 |
self, values["type"], values["name"], id, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2549 |
values["extension"], values["inputs"], |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2550 |
executionControl=values["executionControl"], |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2551 |
executionOrder=values["executionOrder"]) |
1260
11903e79ce66
Fixed bug when adding block into Viewer and added wire validity after adding block with wire drop support
Laurent Bessard
parents:
1259
diff
changeset
|
2552 |
self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None)) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2553 |
connector = None |
1287 | 2554 |
if wire is not None: |
2555 |
for input_connector in block.GetConnectors()["inputs"]: |
|
2556 |
if input_connector.IsCompatible( |
|
2557 |
wire.GetStartConnectedType()): |
|
2558 |
connector = input_connector |
|
2559 |
break |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2560 |
self.AddNewElement(block, bbox, wire, connector) |
1671
0dc834721d8e
add function block to variable panel if fb is added using toolbar
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1660
diff
changeset
|
2561 |
self.RefreshVariablePanel() |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
2562 |
self.ParentWindow.RefreshPouInstanceVariablesPanel() |
814 | 2563 |
dialog.Destroy() |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2564 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2565 |
def AddNewVariable(self, bbox, exclude_input=False, wire=None): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2566 |
dialog = FBDVariableDialog(self.ParentWindow, self.Controler, self.TagName, exclude_input) |
814 | 2567 |
dialog.SetPreviewFont(self.GetFont()) |
1244 | 2568 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
814 | 2569 |
if dialog.ShowModal() == wx.ID_OK: |
2570 |
id = self.GetNewId() |
|
2571 |
values = dialog.GetValues() |
|
1247 | 2572 |
variable = FBD_Variable(self, values["class"], values["expression"], values["var_type"], id) |
1248
2f08985625c0
Fixed bug FBD variable execution not set when newly created
Laurent Bessard
parents:
1247
diff
changeset
|
2573 |
variable.SetExecutionOrder(values["executionOrder"]) |
1244 | 2574 |
self.Controler.AddEditedElementVariable(self.TagName, id, values["class"]) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2575 |
self.AddNewElement(variable, bbox, wire) |
814 | 2576 |
dialog.Destroy() |
2577 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2578 |
def AddNewConnection(self, bbox, wire=None): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2579 |
if wire is not None: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2580 |
values = { |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2581 |
"type": CONNECTOR, |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2582 |
"name": self.Controler.GenerateNewName( |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2583 |
self.TagName, None, "Connection%d", 0)} |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2584 |
else: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2585 |
dialog = ConnectionDialog(self.ParentWindow, self.Controler, self.TagName) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2586 |
dialog.SetPreviewFont(self.GetFont()) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2587 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2588 |
values = (dialog.GetValues() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2589 |
if dialog.ShowModal() == wx.ID_OK |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2590 |
else None) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2591 |
dialog.Destroy() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2592 |
if values is not None: |
814 | 2593 |
id = self.GetNewId() |
2594 |
connection = FBD_Connector(self, values["type"], values["name"], id) |
|
2595 |
self.Controler.AddEditedElementConnection(self.TagName, id, values["type"]) |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2596 |
self.AddNewElement(connection, bbox, wire) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2597 |
|
814 | 2598 |
def AddNewComment(self, bbox): |
2347
6dca42cd2b2b
Add custom dialog to add/edit comment block in graphical editors
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2345
diff
changeset
|
2599 |
dialog = CommentEditDialog(self.ParentWindow, |
6dca42cd2b2b
Add custom dialog to add/edit comment block in graphical editors
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2345
diff
changeset
|
2600 |
self.GetFont()) |
814 | 2601 |
if dialog.ShowModal() == wx.ID_OK: |
2602 |
value = dialog.GetValue() |
|
2603 |
id = self.GetNewId() |
|
2604 |
comment = Comment(self, value, id) |
|
2605 |
comment.SetPosition(bbox.x, bbox.y) |
|
2606 |
min_width, min_height = comment.GetMinSize() |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2607 |
comment.SetSize(*self.GetScaledSize(max(min_width, bbox.width), max(min_height, bbox.height))) |
814 | 2608 |
self.AddComment(comment) |
2609 |
self.Controler.AddEditedElementComment(self.TagName, id) |
|
2610 |
self.RefreshCommentModel(comment) |
|
2611 |
self.RefreshBuffer() |
|
2612 |
self.RefreshScrollBars() |
|
2613 |
self.RefreshVisibleElements() |
|
2614 |
comment.Refresh() |
|
2615 |
dialog.Destroy() |
|
2616 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2617 |
def AddNewContact(self, bbox, wire=None): |
1246 | 2618 |
dialog = LDElementDialog(self.ParentWindow, self.Controler, self.TagName, "contact") |
814 | 2619 |
dialog.SetPreviewFont(self.GetFont()) |
1246 | 2620 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
814 | 2621 |
if dialog.ShowModal() == wx.ID_OK: |
2622 |
id = self.GetNewId() |
|
2623 |
values = dialog.GetValues() |
|
1246 | 2624 |
contact = LD_Contact(self, values["modifier"], values["variable"], id) |
814 | 2625 |
self.Controler.AddEditedElementContact(self.TagName, id) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2626 |
self.AddNewElement(contact, bbox, wire) |
814 | 2627 |
dialog.Destroy() |
2628 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2629 |
def AddNewCoil(self, bbox, wire=None): |
1246 | 2630 |
dialog = LDElementDialog(self.ParentWindow, self.Controler, self.TagName, "coil") |
814 | 2631 |
dialog.SetPreviewFont(self.GetFont()) |
1246 | 2632 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
814 | 2633 |
if dialog.ShowModal() == wx.ID_OK: |
2634 |
id = self.GetNewId() |
|
2635 |
values = dialog.GetValues() |
|
1246 | 2636 |
coil = LD_Coil(self, values["modifier"], values["variable"], id) |
814 | 2637 |
self.Controler.AddEditedElementCoil(self.TagName, id) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2638 |
self.AddNewElement(coil, bbox, wire) |
814 | 2639 |
dialog.Destroy() |
2640 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2641 |
def AddNewPowerRail(self, bbox, wire=None): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2642 |
if wire is not None: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2643 |
values = { |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2644 |
"type": RIGHTRAIL, |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2645 |
"pin_number": 1} |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2646 |
else: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2647 |
dialog = LDPowerRailDialog(self.ParentWindow, self.Controler, self.TagName) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2648 |
dialog.SetPreviewFont(self.GetFont()) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2649 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2650 |
values = (dialog.GetValues() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2651 |
if dialog.ShowModal() == wx.ID_OK |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2652 |
else None) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2653 |
dialog.Destroy() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2654 |
if values is not None: |
814 | 2655 |
id = self.GetNewId() |
1249 | 2656 |
powerrail = LD_PowerRail(self, values["type"], id, values["pin_number"]) |
814 | 2657 |
self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"]) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2658 |
self.AddNewElement(powerrail, bbox, wire) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2659 |
|
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2660 |
def AddNewStep(self, bbox, initial=False, wire=None): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2661 |
if wire is not None: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2662 |
values = { |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2663 |
"name": self.Controler.GenerateNewName(self.TagName, None, "Step%d", 0), |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2664 |
"input": True, |
1599
466c26b0cfc2
by default init input and output in step sfc block, and output for initial step sfc block
Sergey Surkov <surkovsv93@gmail.com>
parents:
1586
diff
changeset
|
2665 |
"output": True, |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2666 |
"action": False |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2667 |
} |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2668 |
else: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2669 |
dialog = SFCStepDialog(self.ParentWindow, self.Controler, self.TagName, initial) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2670 |
dialog.SetPreviewFont(self.GetFont()) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2671 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2672 |
values = (dialog.GetValues() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2673 |
if dialog.ShowModal() == wx.ID_OK |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2674 |
else None) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2675 |
dialog.Destroy() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2676 |
if values is not None: |
814 | 2677 |
id = self.GetNewId() |
2678 |
step = SFC_Step(self, values["name"], initial, id) |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2679 |
self.Controler.AddEditedElementStep(self.TagName, id) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2680 |
for connector in ["input", "output", "action"]: |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2681 |
getattr(step, ("Add" |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2682 |
if values[connector] |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2683 |
else "Remove") + connector.capitalize())() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2684 |
self.AddNewElement(step, bbox, wire) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2685 |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2686 |
def AddNewTransition(self, bbox, connection=False, wire=None): |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2687 |
if wire is not None and connection: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2688 |
values = { |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2689 |
"type": "connection", |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2690 |
"value": None, |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2691 |
"priority": 0} |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2692 |
else: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2693 |
dialog = SFCTransitionDialog(self.ParentWindow, self.Controler, self.TagName, self.GetDrawingMode() == FREEDRAWING_MODE) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2694 |
dialog.SetPreviewFont(self.GetFont()) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2695 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2696 |
values = (dialog.GetValues() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2697 |
if dialog.ShowModal() == wx.ID_OK |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2698 |
else None) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2699 |
dialog.Destroy() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2700 |
if values is not None: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2701 |
id = self.GetNewId() |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2702 |
transition = SFC_Transition(self, values["type"], values["value"], values["priority"], id) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2703 |
self.Controler.AddEditedElementTransition(self.TagName, id) |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2704 |
if connection: |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2705 |
connector = transition.GetConditionConnector() |
814 | 2706 |
else: |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2707 |
connector = transition.GetConnectors()["inputs"][0] |
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2708 |
self.AddNewElement(transition, bbox, wire, connector) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2709 |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
2710 |
def AddNewDivergence(self, bbox, poss_div_types=None, wire=None): |
1584
431f4ef34bde
make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents:
1581
diff
changeset
|
2711 |
dialog = SFCDivergenceDialog(self.ParentWindow, self.Controler, self.TagName, poss_div_types) |
814 | 2712 |
dialog.SetPreviewFont(self.GetFont()) |
1251 | 2713 |
dialog.SetMinElementSize((bbox.width, bbox.height)) |
814 | 2714 |
if dialog.ShowModal() == wx.ID_OK: |
2715 |
id = self.GetNewId() |
|
2716 |
values = dialog.GetValues() |
|
2717 |
divergence = SFC_Divergence(self, values["type"], values["number"], id) |
|
2718 |
self.Controler.AddEditedElementDivergence(self.TagName, id, values["type"]) |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2719 |
self.AddNewElement(divergence, bbox, wire) |
814 | 2720 |
dialog.Destroy() |
2721 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2722 |
def AddNewJump(self, bbox, wire=None): |
814 | 2723 |
choices = [] |
2724 |
for block in self.Blocks.itervalues(): |
|
2725 |
if isinstance(block, SFC_Step): |
|
2726 |
choices.append(block.GetName()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2727 |
dialog = wx.SingleChoiceDialog(self.ParentWindow, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2728 |
_("Add a new jump"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2729 |
_("Please choose a target"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2730 |
choices, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2731 |
wx.DEFAULT_DIALOG_STYLE | wx.OK | wx.CANCEL) |
814 | 2732 |
if dialog.ShowModal() == wx.ID_OK: |
2733 |
id = self.GetNewId() |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2734 |
jump = SFC_Jump(self, dialog.GetStringSelection(), id) |
814 | 2735 |
self.Controler.AddEditedElementJump(self.TagName, id) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2736 |
self.AddNewElement(jump, bbox, wire) |
814 | 2737 |
dialog.Destroy() |
2738 |
||
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2739 |
def AddNewActionBlock(self, bbox, wire=None): |
814 | 2740 |
dialog = ActionBlockDialog(self.ParentWindow) |
2741 |
dialog.SetQualifierList(self.Controler.GetQualifierTypes()) |
|
2742 |
dialog.SetActionList(self.Controler.GetEditedElementActions(self.TagName, self.Debug)) |
|
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1342
diff
changeset
|
2743 |
dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
814 | 2744 |
if dialog.ShowModal() == wx.ID_OK: |
2745 |
id = self.GetNewId() |
|
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2746 |
actionblock = SFC_ActionBlock(self, dialog.GetValues(), id) |
814 | 2747 |
self.Controler.AddEditedElementActionBlock(self.TagName, id) |
1259
8350222a81c3
Added support for adding graphic element when dropping wire in midair
Laurent Bessard
parents:
1252
diff
changeset
|
2748 |
self.AddNewElement(actionblock, bbox, wire) |
814 | 2749 |
dialog.Destroy() |
2750 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2751 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2752 |
# Edit element content functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
2753 |
# ------------------------------------------------------------------------------- |
814 | 2754 |
|
2755 |
def EditBlockContent(self, block): |
|
1236
a5d1d2a2f366
Added support for default function block name in FBDBlockDialog
Laurent Bessard
parents:
1233
diff
changeset
|
2756 |
dialog = FBDBlockDialog(self.ParentWindow, self.Controler, self.TagName) |
814 | 2757 |
dialog.SetPreviewFont(self.GetFont()) |
1244 | 2758 |
dialog.SetMinElementSize(block.GetSize()) |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2759 |
old_values = { |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2760 |
"name": block.GetName(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2761 |
"type": block.GetType(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2762 |
"extension": block.GetExtension(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2763 |
"inputs": block.GetInputTypes(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2764 |
"executionControl": block.GetExecutionControl(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2765 |
"executionOrder": block.GetExecutionOrder() |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2766 |
} |
814 | 2767 |
dialog.SetValues(old_values) |
2768 |
if dialog.ShowModal() == wx.ID_OK: |
|
2769 |
new_values = dialog.GetValues() |
|
2770 |
rect = block.GetRedrawRect(1, 1) |
|
2771 |
if "name" in new_values: |
|
2772 |
block.SetName(new_values["name"]) |
|
2773 |
else: |
|
2774 |
block.SetName("") |
|
2775 |
block.SetSize(*self.GetScaledSize(new_values["width"], new_values["height"])) |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
2776 |
block.SetType(new_values["type"], new_values["extension"], executionControl=new_values["executionControl"]) |
814 | 2777 |
block.SetExecutionOrder(new_values["executionOrder"]) |
2778 |
rect = rect.Union(block.GetRedrawRect()) |
|
2779 |
self.RefreshBlockModel(block) |
|
2780 |
self.RefreshBuffer() |
|
2781 |
if old_values["executionOrder"] != new_values["executionOrder"]: |
|
2782 |
self.RefreshView(selection=({block.GetId(): True}, {})) |
|
2783 |
else: |
|
2784 |
self.RefreshScrollBars() |
|
2785 |
self.RefreshVisibleElements() |
|
2786 |
block.Refresh(rect) |
|
2787 |
self.RefreshVariablePanel() |
|
2788 |
self.ParentWindow.RefreshPouInstanceVariablesPanel() |
|
2789 |
dialog.Destroy() |
|
2790 |
||
2791 |
def EditVariableContent(self, variable): |
|
1244 | 2792 |
dialog = FBDVariableDialog(self.ParentWindow, self.Controler, self.TagName) |
814 | 2793 |
dialog.SetPreviewFont(self.GetFont()) |
1244 | 2794 |
dialog.SetMinElementSize(variable.GetSize()) |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2795 |
old_values = { |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2796 |
"expression": variable.GetName(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2797 |
"class": variable.GetType(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2798 |
"executionOrder": variable.GetExecutionOrder() |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2799 |
} |
814 | 2800 |
dialog.SetValues(old_values) |
2801 |
if dialog.ShowModal() == wx.ID_OK: |
|
2802 |
new_values = dialog.GetValues() |
|
2803 |
rect = variable.GetRedrawRect(1, 1) |
|
1244 | 2804 |
variable.SetName(new_values["expression"]) |
2805 |
variable.SetType(new_values["class"], new_values["var_type"]) |
|
814 | 2806 |
variable.SetSize(*self.GetScaledSize(new_values["width"], new_values["height"])) |
2807 |
variable.SetExecutionOrder(new_values["executionOrder"]) |
|
2808 |
rect = rect.Union(variable.GetRedrawRect()) |
|
1244 | 2809 |
if old_values["class"] != new_values["class"]: |
814 | 2810 |
id = variable.GetId() |
2811 |
self.Controler.RemoveEditedElementInstance(self.TagName, id) |
|
1244 | 2812 |
self.Controler.AddEditedElementVariable(self.TagName, id, new_values["class"]) |
814 | 2813 |
self.RefreshVariableModel(variable) |
2814 |
self.RefreshBuffer() |
|
2815 |
if old_values["executionOrder"] != new_values["executionOrder"]: |
|
2816 |
self.RefreshView(selection=({variable.GetId(): True}, {})) |
|
2817 |
else: |
|
2818 |
self.RefreshVisibleElements() |
|
2819 |
self.RefreshScrollBars() |
|
2820 |
variable.Refresh(rect) |
|
2821 |
dialog.Destroy() |
|
2822 |
||
2823 |
def EditConnectionContent(self, connection): |
|
1245 | 2824 |
dialog = ConnectionDialog(self.ParentWindow, self.Controler, self.TagName, True) |
814 | 2825 |
dialog.SetPreviewFont(self.GetFont()) |
1245 | 2826 |
dialog.SetMinElementSize(connection.GetSize()) |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2827 |
values = {"name": connection.GetName(), "type": connection.GetType()} |
814 | 2828 |
dialog.SetValues(values) |
856
b64e436f000e
Adding button in ConnectionDialog to propagate connection name modification to all connections with the same name in POU
Laurent Bessard
parents:
852
diff
changeset
|
2829 |
result = dialog.ShowModal() |
b64e436f000e
Adding button in ConnectionDialog to propagate connection name modification to all connections with the same name in POU
Laurent Bessard
parents:
852
diff
changeset
|
2830 |
dialog.Destroy() |
b64e436f000e
Adding button in ConnectionDialog to propagate connection name modification to all connections with the same name in POU
Laurent Bessard
parents:
852
diff
changeset
|
2831 |
if result in [wx.ID_OK, wx.ID_YESTOALL]: |
814 | 2832 |
old_type = connection.GetType() |
2833 |
old_name = connection.GetName() |
|
2834 |
values = dialog.GetValues() |
|
2835 |
rect = connection.GetRedrawRect(1, 1) |
|
2836 |
connection.SetName(values["name"]) |
|
2837 |
connection.SetType(values["type"]) |
|
2838 |
connection.SetSize(*self.GetScaledSize(values["width"], values["height"])) |
|
2839 |
rect = rect.Union(connection.GetRedrawRect()) |
|
2840 |
if old_type != values["type"]: |
|
2841 |
id = connection.GetId() |
|
2842 |
self.Controler.RemoveEditedElementInstance(self.TagName, id) |
|
2843 |
self.Controler.AddEditedElementConnection(self.TagName, id, values["type"]) |
|
2844 |
self.RefreshConnectionModel(connection) |
|
856
b64e436f000e
Adding button in ConnectionDialog to propagate connection name modification to all connections with the same name in POU
Laurent Bessard
parents:
852
diff
changeset
|
2845 |
if old_name != values["name"] and result == wx.ID_YESTOALL: |
814 | 2846 |
self.Controler.UpdateEditedElementUsedVariable(self.TagName, old_name, values["name"]) |
852
1009f956d2ee
Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents:
832
diff
changeset
|
2847 |
self.RefreshBuffer() |
814 | 2848 |
self.RefreshView(selection=({connection.GetId(): True}, {})) |
2849 |
else: |
|
856
b64e436f000e
Adding button in ConnectionDialog to propagate connection name modification to all connections with the same name in POU
Laurent Bessard
parents:
852
diff
changeset
|
2850 |
self.RefreshBuffer() |
814 | 2851 |
self.RefreshScrollBars() |
2852 |
self.RefreshVisibleElements() |
|
2853 |
connection.Refresh(rect) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2854 |
|
814 | 2855 |
def EditContactContent(self, contact): |
1246 | 2856 |
dialog = LDElementDialog(self.ParentWindow, self.Controler, self.TagName, "contact") |
814 | 2857 |
dialog.SetPreviewFont(self.GetFont()) |
1246 | 2858 |
dialog.SetMinElementSize(contact.GetSize()) |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2859 |
dialog.SetValues({"variable": contact.GetName(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2860 |
"modifier": contact.GetType()}) |
814 | 2861 |
if dialog.ShowModal() == wx.ID_OK: |
2862 |
values = dialog.GetValues() |
|
2863 |
rect = contact.GetRedrawRect(1, 1) |
|
1246 | 2864 |
contact.SetName(values["variable"]) |
2865 |
contact.SetType(values["modifier"]) |
|
814 | 2866 |
contact.SetSize(*self.GetScaledSize(values["width"], values["height"])) |
2867 |
rect = rect.Union(contact.GetRedrawRect()) |
|
2868 |
self.RefreshContactModel(contact) |
|
2869 |
self.RefreshBuffer() |
|
2870 |
self.RefreshScrollBars() |
|
2871 |
self.RefreshVisibleElements() |
|
2872 |
contact.Refresh(rect) |
|
2873 |
dialog.Destroy() |
|
2874 |
||
2875 |
def EditCoilContent(self, coil): |
|
1246 | 2876 |
dialog = LDElementDialog(self.ParentWindow, self.Controler, self.TagName, "coil") |
814 | 2877 |
dialog.SetPreviewFont(self.GetFont()) |
1246 | 2878 |
dialog.SetMinElementSize(coil.GetSize()) |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2879 |
dialog.SetValues({"variable": coil.GetName(), |
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2880 |
"modifier": coil.GetType()}) |
814 | 2881 |
if dialog.ShowModal() == wx.ID_OK: |
2882 |
values = dialog.GetValues() |
|
2883 |
rect = coil.GetRedrawRect(1, 1) |
|
1246 | 2884 |
coil.SetName(values["variable"]) |
2885 |
coil.SetType(values["modifier"]) |
|
814 | 2886 |
coil.SetSize(*self.GetScaledSize(values["width"], values["height"])) |
2887 |
rect = rect.Union(coil.GetRedrawRect()) |
|
2888 |
self.RefreshCoilModel(coil) |
|
2889 |
self.RefreshBuffer() |
|
2890 |
self.RefreshScrollBars() |
|
2891 |
self.RefreshVisibleElements() |
|
2892 |
coil.Refresh(rect) |
|
2893 |
dialog.Destroy() |
|
2894 |
||
2895 |
def EditPowerRailContent(self, powerrail): |
|
1249 | 2896 |
dialog = LDPowerRailDialog(self.ParentWindow, self.Controler, self.TagName) |
814 | 2897 |
dialog.SetPreviewFont(self.GetFont()) |
1249 | 2898 |
dialog.SetMinElementSize(powerrail.GetSize()) |
2899 |
powerrail_type = powerrail.GetType() |
|
2900 |
dialog.SetValues({ |
|
2901 |
"type": powerrail.GetType(), |
|
2902 |
"pin_number": len(powerrail.GetConnectors()[ |
|
1878
fb73a6b6622d
fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1853
diff
changeset
|
2903 |
("outputs" if powerrail_type == LEFTRAIL else "inputs")])}) |
814 | 2904 |
if dialog.ShowModal() == wx.ID_OK: |
2905 |
values = dialog.GetValues() |
|
2906 |
rect = powerrail.GetRedrawRect(1, 1) |
|
1249 | 2907 |
powerrail.SetType(values["type"], values["pin_number"]) |
814 | 2908 |
powerrail.SetSize(*self.GetScaledSize(values["width"], values["height"])) |
2909 |
rect = rect.Union(powerrail.GetRedrawRect()) |
|
1249 | 2910 |
if powerrail_type != values["type"]: |
814 | 2911 |
id = powerrail.GetId() |
2912 |
self.Controler.RemoveEditedElementInstance(self.TagName, id) |
|
2913 |
self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"]) |
|
2914 |
self.RefreshPowerRailModel(powerrail) |
|
2915 |
self.RefreshBuffer() |
|
2916 |
self.RefreshScrollBars() |
|
2917 |
self.RefreshVisibleElements() |
|
2918 |
powerrail.Refresh(rect) |
|
2919 |
dialog.Destroy() |
|
2920 |
||
2921 |
def EditStepContent(self, step): |
|
1250
7e6de17c687a
Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents:
1249
diff
changeset
|
2922 |
dialog = SFCStepDialog(self.ParentWindow, self.Controler, self.TagName, step.GetInitial()) |
814 | 2923 |
dialog.SetPreviewFont(self.GetFont()) |
1250
7e6de17c687a
Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents:
1249
diff
changeset
|
2924 |
dialog.SetMinElementSize(step.GetSize()) |
814 | 2925 |
connectors = step.GetConnectors() |
1250
7e6de17c687a
Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents:
1249
diff
changeset
|
2926 |
dialog.SetValues({ |
1739
ec153828ded2
clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1736
diff
changeset
|
2927 |
"name": step.GetName(), |
1250
7e6de17c687a
Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents:
1249
diff
changeset
|
2928 |
"input": len(connectors["inputs"]) > 0, |
7e6de17c687a
Rewrite SFCStepDialog and factorize code for creating common dialog sizers
Laurent Bessard
parents:
1249
diff
changeset
|
2929 |
"output": len(connectors["outputs"]) > 0, |
1743
c3c3d1318130
clean-up: fix PEP8 E711 comparison to None should be 'if cond is not None:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1741
diff
changeset
|
2930 |
"action": step.GetActionConnector() is not None}) |
814 | 2931 |
if dialog.ShowModal() == wx.ID_OK: |
2932 |
values = dialog.GetValues() |
|
2933 |
rect = step.GetRedrawRect(1, 1) |
|
1607
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2934 |
|
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2935 |
new_name = values["name"] |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2936 |
if self.GetDrawingMode() == DRIVENDRAWING_MODE: |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2937 |
old_name = step.GetName().upper() |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2938 |
if new_name.upper() != old_name: |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2939 |
for block in self.Blocks.itervalues(): |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2940 |
if isinstance(block, SFC_Jump): |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2941 |
if old_name == block.GetTarget().upper(): |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2942 |
block.SetTarget(new_name) |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2943 |
block.RefreshModel() |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2944 |
rect = rect.Union(block.GetRedrawRect()) |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2945 |
block.Refresh(rect) |
f9c672ed8f9e
rename all corresponding SFC jumps when SFC step is renamed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1605
diff
changeset
|
2946 |
step.SetName(new_name) |
1730
64d8f52bc8c8
clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1711
diff
changeset
|
2947 |
|
814 | 2948 |
if values["input"]: |
2949 |
step.AddInput() |
|
2950 |
else: |
|
2951 |
step.RemoveInput() |
|
2952 |
if values["output"]: |
|
2953 |
step.AddOutput() |
|
2954 |
else: |
|
2955 |
step.RemoveOutput() |
|
2956 |
if values["action"]: |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2957 |
step.AddAction() |
814 | 2958 |
else: |
2959 |
step.RemoveAction() |
|
2960 |
step.UpdateSize(*self.GetScaledSize(values["width"], values["height"])) |
|
2961 |
rect = rect.Union(step.GetRedrawRect()) |
|
2962 |
self.RefreshStepModel(step) |
|
2963 |
self.RefreshBuffer() |
|
2964 |
self.RefreshScrollBars() |
|
2965 |
self.RefreshVisibleElements() |
|
2966 |
step.Refresh(rect) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2967 |
|
814 | 2968 |
def EditTransitionContent(self, transition): |
1252 | 2969 |
dialog = SFCTransitionDialog(self.ParentWindow, self.Controler, self.TagName, self.GetDrawingMode() == FREEDRAWING_MODE) |
814 | 2970 |
dialog.SetPreviewFont(self.GetFont()) |
1252 | 2971 |
dialog.SetMinElementSize(transition.GetSize()) |
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2972 |
dialog.SetValues({ |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2973 |
"type": transition.GetType(), |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2974 |
"value": transition.GetCondition(), |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2975 |
"priority": transition.GetPriority() |
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2976 |
}) |
814 | 2977 |
if dialog.ShowModal() == wx.ID_OK: |
2978 |
values = dialog.GetValues() |
|
2979 |
rect = transition.GetRedrawRect(1, 1) |
|
1740
b789b695b5c6
clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1739
diff
changeset
|
2980 |
transition.SetType(values["type"], values["value"]) |
814 | 2981 |
transition.SetPriority(values["priority"]) |
2982 |
rect = rect.Union(transition.GetRedrawRect()) |
|
2983 |
self.RefreshTransitionModel(transition) |
|
2984 |
self.RefreshBuffer() |
|
2985 |
self.RefreshScrollBars() |
|
2986 |
self.RefreshVisibleElements() |
|
2987 |
transition.Refresh(rect) |
|
2988 |
dialog.Destroy() |
|
2989 |
||
2990 |
def EditJumpContent(self, jump): |
|
2991 |
choices = [] |
|
2992 |
for block in self.Blocks.itervalues(): |
|
2993 |
if isinstance(block, SFC_Step): |
|
2994 |
choices.append(block.GetName()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
2995 |
dialog = wx.SingleChoiceDialog(self.ParentWindow, |
1768
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2996 |
_("Edit jump target"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2997 |
_("Please choose a target"), |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2998 |
choices, |
691083b5682a
clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1767
diff
changeset
|
2999 |
wx.DEFAULT_DIALOG_STYLE | wx.OK | wx.CANCEL) |
1609
0d961dc6f58f
fix problem that it was impossible to edit SFC jump, if it references non-existent SFC step
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1608
diff
changeset
|
3000 |
try: |
0d961dc6f58f
fix problem that it was impossible to edit SFC jump, if it references non-existent SFC step
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1608
diff
changeset
|
3001 |
indx = choices.index(jump.GetTarget()) |
0d961dc6f58f
fix problem that it was impossible to edit SFC jump, if it references non-existent SFC step
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1608
diff
changeset
|
3002 |
dialog.SetSelection(indx) |
0d961dc6f58f
fix problem that it was impossible to edit SFC jump, if it references non-existent SFC step
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1608
diff
changeset
|
3003 |
except ValueError: |
0d961dc6f58f
fix problem that it was impossible to edit SFC jump, if it references non-existent SFC step
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1608
diff
changeset
|
3004 |
pass |
0d961dc6f58f
fix problem that it was impossible to edit SFC jump, if it references non-existent SFC step
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1608
diff
changeset
|
3005 |
|
814 | 3006 |
if dialog.ShowModal() == wx.ID_OK: |
3007 |
value = dialog.GetStringSelection() |
|
3008 |
rect = jump.GetRedrawRect(1, 1) |
|
3009 |
jump.SetTarget(value) |
|
3010 |
rect = rect.Union(jump.GetRedrawRect()) |
|
3011 |
self.RefreshJumpModel(jump) |
|
3012 |
self.RefreshBuffer() |
|
3013 |
self.RefreshScrollBars() |
|
3014 |
self.RefreshVisibleElements() |
|
3015 |
jump.Refresh(rect) |
|
3016 |
dialog.Destroy() |
|
3017 |
||
3018 |
def EditActionBlockContent(self, actionblock): |
|
3019 |
dialog = ActionBlockDialog(self.ParentWindow) |
|
3020 |
dialog.SetQualifierList(self.Controler.GetQualifierTypes()) |
|
3021 |
dialog.SetActionList(self.Controler.GetEditedElementActions(self.TagName, self.Debug)) |
|
1347
533741e5075c
Fixed pou variables information loading stylesheet
Laurent Bessard
parents:
1342
diff
changeset
|
3022 |
dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName, debug=self.Debug)) |
814 | 3023 |
dialog.SetValues(actionblock.GetActions()) |
3024 |
if dialog.ShowModal() == wx.ID_OK: |
|
3025 |
actions = dialog.GetValues() |
|
3026 |
rect = actionblock.GetRedrawRect(1, 1) |
|
3027 |
actionblock.SetActions(actions) |
|
3028 |
actionblock.SetSize(*self.GetScaledSize(*actionblock.GetSize())) |
|
3029 |
rect = rect.Union(actionblock.GetRedrawRect()) |
|
3030 |
self.RefreshActionBlockModel(actionblock) |
|
3031 |
self.RefreshBuffer() |
|
3032 |
self.RefreshScrollBars() |
|
3033 |
self.RefreshVisibleElements() |
|
3034 |
actionblock.Refresh(rect) |
|
3035 |
dialog.Destroy() |
|
3036 |
||
3037 |
def EditCommentContent(self, comment): |
|
2347
6dca42cd2b2b
Add custom dialog to add/edit comment block in graphical editors
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2345
diff
changeset
|
3038 |
dialog = CommentEditDialog(self.ParentWindow, |
6dca42cd2b2b
Add custom dialog to add/edit comment block in graphical editors
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2345
diff
changeset
|
3039 |
self.GetFont(), |
6dca42cd2b2b
Add custom dialog to add/edit comment block in graphical editors
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2345
diff
changeset
|
3040 |
comment.GetContent(), |
6dca42cd2b2b
Add custom dialog to add/edit comment block in graphical editors
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2345
diff
changeset
|
3041 |
comment.GetSize()) |
814 | 3042 |
if dialog.ShowModal() == wx.ID_OK: |
3043 |
value = dialog.GetValue() |
|
3044 |
rect = comment.GetRedrawRect(1, 1) |
|
3045 |
comment.SetContent(value) |
|
3046 |
comment.SetSize(*self.GetScaledSize(*comment.GetSize())) |
|
3047 |
rect = rect.Union(comment.GetRedrawRect()) |
|
3048 |
self.RefreshCommentModel(comment) |
|
3049 |
self.RefreshBuffer() |
|
3050 |
self.RefreshScrollBars() |
|
3051 |
self.RefreshVisibleElements() |
|
3052 |
comment.Refresh(rect) |
|
3053 |
dialog.Destroy() |
|
3054 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3055 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3056 |
# Model update functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3057 |
# ------------------------------------------------------------------------------- |
814 | 3058 |
|
3059 |
def RefreshBlockModel(self, block): |
|
3060 |
blockid = block.GetId() |
|
3061 |
infos = {} |
|
3062 |
infos["type"] = block.GetType() |
|
3063 |
infos["name"] = block.GetName() |
|
3064 |
if self.CurrentLanguage == "FBD": |
|
3065 |
infos["executionOrder"] = block.GetExecutionOrder() |
|
3066 |
infos["x"], infos["y"] = block.GetPosition() |
|
3067 |
infos["width"], infos["height"] = block.GetSize() |
|
3068 |
infos["connectors"] = block.GetConnectors() |
|
3069 |
self.Controler.SetEditedElementBlockInfos(self.TagName, blockid, infos) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3070 |
|
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3071 |
def ChangeVariableType(self, variable, new_type): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3072 |
old_type = variable.GetType() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3073 |
rect = variable.GetRedrawRect(1, 1) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3074 |
if old_type != new_type: |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3075 |
variable.SetType(new_type, variable.GetValueType()) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3076 |
id = variable.GetId() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3077 |
self.Controler.RemoveEditedElementInstance(self.TagName, id) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3078 |
self.Controler.AddEditedElementVariable(self.TagName, id, new_type) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3079 |
self.RefreshVariableModel(variable) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3080 |
self.RefreshBuffer() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3081 |
self.RefreshVisibleElements() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3082 |
self.RefreshScrollBars() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3083 |
variable.Refresh(rect.Union(variable.GetRedrawRect())) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3084 |
|
814 | 3085 |
def RefreshVariableModel(self, variable): |
3086 |
variableid = variable.GetId() |
|
3087 |
infos = {} |
|
3088 |
infos["name"] = variable.GetName() |
|
3089 |
if self.CurrentLanguage == "FBD": |
|
3090 |
infos["executionOrder"] = variable.GetExecutionOrder() |
|
3091 |
infos["x"], infos["y"] = variable.GetPosition() |
|
3092 |
infos["width"], infos["height"] = variable.GetSize() |
|
3093 |
infos["connectors"] = variable.GetConnectors() |
|
3094 |
self.Controler.SetEditedElementVariableInfos(self.TagName, variableid, infos) |
|
3095 |
||
857
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3096 |
def ChangeConnectionType(self, connection, new_type): |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3097 |
old_type = connection.GetType() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3098 |
rect = connection.GetRedrawRect(1, 1) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3099 |
if old_type != new_type: |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3100 |
connection.SetType(new_type) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3101 |
id = connection.GetId() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3102 |
self.Controler.RemoveEditedElementInstance(self.TagName, id) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3103 |
self.Controler.AddEditedElementConnection(self.TagName, id, new_type) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3104 |
self.RefreshConnectionModel(connection) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3105 |
self.RefreshBuffer() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3106 |
self.RefreshScrollBars() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3107 |
self.RefreshVisibleElements() |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3108 |
connection.Refresh(rect.Union(connection.GetRedrawRect())) |
9695969796d0
Adding support for quickly changing variable and connection type
Laurent Bessard
parents:
856
diff
changeset
|
3109 |
|
814 | 3110 |
def RefreshConnectionModel(self, connection): |
3111 |
connectionid = connection.GetId() |
|
3112 |
infos = {} |
|
3113 |
infos["name"] = connection.GetName() |
|
3114 |
infos["x"], infos["y"] = connection.GetPosition() |
|
3115 |
infos["width"], infos["height"] = connection.GetSize() |
|
3116 |
infos["connector"] = connection.GetConnector() |
|
3117 |
self.Controler.SetEditedElementConnectionInfos(self.TagName, connectionid, infos) |
|
3118 |
||
3119 |
def RefreshCommentModel(self, comment): |
|
3120 |
commentid = comment.GetId() |
|
3121 |
infos = {} |
|
3122 |
infos["content"] = comment.GetContent() |
|
3123 |
infos["x"], infos["y"] = comment.GetPosition() |
|
3124 |
infos["width"], infos["height"] = comment.GetSize() |
|
3125 |
self.Controler.SetEditedElementCommentInfos(self.TagName, commentid, infos) |
|
3126 |
||
3127 |
def RefreshPowerRailModel(self, powerrail): |
|
3128 |
powerrailid = powerrail.GetId() |
|
3129 |
infos = {} |
|
3130 |
infos["x"], infos["y"] = powerrail.GetPosition() |
|
3131 |
infos["width"], infos["height"] = powerrail.GetSize() |
|
3132 |
infos["connectors"] = powerrail.GetConnectors() |
|
3133 |
self.Controler.SetEditedElementPowerRailInfos(self.TagName, powerrailid, infos) |
|
3134 |
||
3135 |
def RefreshContactModel(self, contact): |
|
3136 |
contactid = contact.GetId() |
|
3137 |
infos = {} |
|
3138 |
infos["name"] = contact.GetName() |
|
3139 |
infos["type"] = contact.GetType() |
|
3140 |
infos["x"], infos["y"] = contact.GetPosition() |
|
3141 |
infos["width"], infos["height"] = contact.GetSize() |
|
3142 |
infos["connectors"] = contact.GetConnectors() |
|
3143 |
self.Controler.SetEditedElementContactInfos(self.TagName, contactid, infos) |
|
3144 |
||
3145 |
def RefreshCoilModel(self, coil): |
|
3146 |
coilid = coil.GetId() |
|
3147 |
infos = {} |
|
3148 |
infos["name"] = coil.GetName() |
|
3149 |
infos["type"] = coil.GetType() |
|
3150 |
infos["x"], infos["y"] = coil.GetPosition() |
|
3151 |
infos["width"], infos["height"] = coil.GetSize() |
|
3152 |
infos["connectors"] = coil.GetConnectors() |
|
3153 |
self.Controler.SetEditedElementCoilInfos(self.TagName, coilid, infos) |
|
3154 |
||
3155 |
def RefreshStepModel(self, step): |
|
3156 |
stepid = step.GetId() |
|
3157 |
infos = {} |
|
3158 |
infos["name"] = step.GetName() |
|
3159 |
infos["initial"] = step.GetInitial() |
|
3160 |
infos["x"], infos["y"] = step.GetPosition() |
|
3161 |
infos["width"], infos["height"] = step.GetSize() |
|
3162 |
infos["connectors"] = step.GetConnectors() |
|
3163 |
infos["action"] = step.GetActionConnector() |
|
3164 |
self.Controler.SetEditedElementStepInfos(self.TagName, stepid, infos) |
|
3165 |
||
3166 |
def RefreshTransitionModel(self, transition): |
|
3167 |
transitionid = transition.GetId() |
|
3168 |
infos = {} |
|
3169 |
infos["type"] = transition.GetType() |
|
3170 |
infos["priority"] = transition.GetPriority() |
|
3171 |
infos["condition"] = transition.GetCondition() |
|
3172 |
infos["x"], infos["y"] = transition.GetPosition() |
|
3173 |
infos["width"], infos["height"] = transition.GetSize() |
|
3174 |
infos["connectors"] = transition.GetConnectors() |
|
3175 |
infos["connection"] = transition.GetConditionConnector() |
|
3176 |
self.Controler.SetEditedElementTransitionInfos(self.TagName, transitionid, infos) |
|
3177 |
||
3178 |
def RefreshDivergenceModel(self, divergence): |
|
3179 |
divergenceid = divergence.GetId() |
|
3180 |
infos = {} |
|
3181 |
infos["x"], infos["y"] = divergence.GetPosition() |
|
3182 |
infos["width"], infos["height"] = divergence.GetSize() |
|
3183 |
infos["connectors"] = divergence.GetConnectors() |
|
3184 |
self.Controler.SetEditedElementDivergenceInfos(self.TagName, divergenceid, infos) |
|
3185 |
||
3186 |
def RefreshJumpModel(self, jump): |
|
3187 |
jumpid = jump.GetId() |
|
3188 |
infos = {} |
|
3189 |
infos["target"] = jump.GetTarget() |
|
3190 |
infos["x"], infos["y"] = jump.GetPosition() |
|
3191 |
infos["width"], infos["height"] = jump.GetSize() |
|
3192 |
infos["connector"] = jump.GetConnector() |
|
3193 |
self.Controler.SetEditedElementJumpInfos(self.TagName, jumpid, infos) |
|
3194 |
||
3195 |
def RefreshActionBlockModel(self, actionblock): |
|
3196 |
actionblockid = actionblock.GetId() |
|
3197 |
infos = {} |
|
3198 |
infos["actions"] = actionblock.GetActions() |
|
3199 |
infos["x"], infos["y"] = actionblock.GetPosition() |
|
3200 |
infos["width"], infos["height"] = actionblock.GetSize() |
|
3201 |
infos["connector"] = actionblock.GetConnector() |
|
3202 |
self.Controler.SetEditedElementActionBlockInfos(self.TagName, actionblockid, infos) |
|
3203 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3204 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3205 |
# Model delete functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3206 |
# ------------------------------------------------------------------------------- |
814 | 3207 |
|
3208 |
def DeleteBlock(self, block): |
|
3209 |
elements = [] |
|
3210 |
for output in block.GetConnectors()["outputs"]: |
|
3211 |
for element in output.GetConnectedBlocks(): |
|
3212 |
if element not in elements: |
|
3213 |
elements.append(element) |
|
3214 |
block.Clean() |
|
3215 |
self.RemoveBlock(block) |
|
3216 |
self.Controler.RemoveEditedElementInstance(self.TagName, block.GetId()) |
|
3217 |
for element in elements: |
|
3218 |
element.RefreshModel() |
|
3219 |
wx.CallAfter(self.RefreshVariablePanel) |
|
3220 |
wx.CallAfter(self.ParentWindow.RefreshPouInstanceVariablesPanel) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3221 |
|
814 | 3222 |
def DeleteVariable(self, variable): |
3223 |
connectors = variable.GetConnectors() |
|
3224 |
if len(connectors["outputs"]) > 0: |
|
3225 |
elements = connectors["outputs"][0].GetConnectedBlocks() |
|
3226 |
else: |
|
3227 |
elements = [] |
|
3228 |
variable.Clean() |
|
3229 |
self.RemoveBlock(variable) |
|
3230 |
self.Controler.RemoveEditedElementInstance(self.TagName, variable.GetId()) |
|
3231 |
for element in elements: |
|
3232 |
element.RefreshModel() |
|
3233 |
||
3234 |
def DeleteConnection(self, connection): |
|
3235 |
if connection.GetType() == CONTINUATION: |
|
3236 |
elements = connection.GetConnector().GetConnectedBlocks() |
|
3237 |
else: |
|
3238 |
elements = [] |
|
3239 |
connection.Clean() |
|
3240 |
self.RemoveBlock(connection) |
|
3241 |
self.Controler.RemoveEditedElementInstance(self.TagName, connection.GetId()) |
|
3242 |
for element in elements: |
|
3243 |
element.RefreshModel() |
|
3244 |
||
3245 |
def DeleteComment(self, comment): |
|
3246 |
self.RemoveComment(comment) |
|
3247 |
self.Controler.RemoveEditedElementInstance(self.TagName, comment.GetId()) |
|
3248 |
||
3249 |
def DeleteWire(self, wire): |
|
3250 |
if wire in self.Wires: |
|
3251 |
connected = wire.GetConnected() |
|
3252 |
wire.Clean() |
|
3253 |
self.RemoveWire(wire) |
|
3254 |
for connector in connected: |
|
3255 |
connector.RefreshParentBlock() |
|
3256 |
||
3257 |
def DeleteContact(self, contact): |
|
3258 |
connectors = contact.GetConnectors() |
|
3259 |
elements = connectors["outputs"][0].GetConnectedBlocks() |
|
3260 |
contact.Clean() |
|
3261 |
self.RemoveBlock(contact) |
|
3262 |
self.Controler.RemoveEditedElementInstance(self.TagName, contact.GetId()) |
|
3263 |
for element in elements: |
|
3264 |
element.RefreshModel() |
|
3265 |
||
3266 |
def DeleteCoil(self, coil): |
|
3267 |
connectors = coil.GetConnectors() |
|
3268 |
elements = connectors["outputs"][0].GetConnectedBlocks() |
|
3269 |
coil.Clean() |
|
3270 |
self.RemoveBlock(coil) |
|
3271 |
self.Controler.RemoveEditedElementInstance(self.TagName, coil.GetId()) |
|
3272 |
for element in elements: |
|
3273 |
element.RefreshModel() |
|
3274 |
||
3275 |
def DeletePowerRail(self, powerrail): |
|
3276 |
elements = [] |
|
3277 |
if powerrail.GetType() == LEFTRAIL: |
|
3278 |
connectors = powerrail.GetConnectors() |
|
3279 |
for connector in connectors["outputs"]: |
|
3280 |
for element in connector.GetConnectedBlocks(): |
|
3281 |
if element not in elements: |
|
3282 |
elements.append(element) |
|
3283 |
powerrail.Clean() |
|
3284 |
self.RemoveBlock(powerrail) |
|
3285 |
self.Controler.RemoveEditedElementInstance(self.TagName, powerrail.GetId()) |
|
3286 |
for element in elements: |
|
3287 |
element.RefreshModel() |
|
3288 |
||
3289 |
def DeleteStep(self, step): |
|
3290 |
elements = [] |
|
3291 |
connectors = step.GetConnectors() |
|
3292 |
action_connector = step.GetActionConnector() |
|
3293 |
if len(connectors["outputs"]) > 0: |
|
3294 |
for element in connectors["outputs"][0].GetConnectedBlocks(): |
|
3295 |
if element not in elements: |
|
3296 |
elements.append(element) |
|
3297 |
if action_connector is not None: |
|
3298 |
for element in action_connector.GetConnectedBlocks(): |
|
3299 |
if element not in elements: |
|
3300 |
elements.append(element) |
|
3301 |
step.Clean() |
|
1608
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3302 |
|
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3303 |
if self.GetDrawingMode() == DRIVENDRAWING_MODE: |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3304 |
name = step.GetName().upper() |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3305 |
remove_jumps = [] |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3306 |
for block in self.Blocks.itervalues(): |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3307 |
if isinstance(block, SFC_Jump): |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3308 |
if name == block.GetTarget().upper(): |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3309 |
remove_jumps.append(block) |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3310 |
for jump in remove_jumps: |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3311 |
self.DeleteJump(jump) |
e8efeeb718ab
remove all corresponding SFC jumps when SFC step is removed (but only in DRIVENDRAWING_MODE)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1607
diff
changeset
|
3312 |
|
814 | 3313 |
self.RemoveBlock(step) |
3314 |
self.Controler.RemoveEditedElementInstance(self.TagName, step.GetId()) |
|
3315 |
for element in elements: |
|
3316 |
element.RefreshModel() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3317 |
|
814 | 3318 |
def DeleteTransition(self, transition): |
3319 |
elements = [] |
|
3320 |
connectors = transition.GetConnectors() |
|
3321 |
for element in connectors["outputs"][0].GetConnectedBlocks(): |
|
3322 |
if element not in elements: |
|
3323 |
elements.append(element) |
|
3324 |
transition.Clean() |
|
3325 |
self.RemoveBlock(transition) |
|
3326 |
self.Controler.RemoveEditedElementInstance(self.TagName, transition.GetId()) |
|
3327 |
for element in elements: |
|
3328 |
element.RefreshModel() |
|
3329 |
||
3330 |
def DeleteDivergence(self, divergence): |
|
3331 |
elements = [] |
|
3332 |
connectors = divergence.GetConnectors() |
|
3333 |
for output in connectors["outputs"]: |
|
3334 |
for element in output.GetConnectedBlocks(): |
|
3335 |
if element not in elements: |
|
3336 |
elements.append(element) |
|
3337 |
divergence.Clean() |
|
3338 |
self.RemoveBlock(divergence) |
|
3339 |
self.Controler.RemoveEditedElementInstance(self.TagName, divergence.GetId()) |
|
3340 |
for element in elements: |
|
3341 |
element.RefreshModel() |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3342 |
|
814 | 3343 |
def DeleteJump(self, jump): |
3344 |
jump.Clean() |
|
3345 |
self.RemoveBlock(jump) |
|
3346 |
self.Controler.RemoveEditedElementInstance(self.TagName, jump.GetId()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3347 |
|
814 | 3348 |
def DeleteActionBlock(self, actionblock): |
3349 |
actionblock.Clean() |
|
3350 |
self.RemoveBlock(actionblock) |
|
3351 |
self.Controler.RemoveEditedElementInstance(self.TagName, actionblock.GetId()) |
|
3352 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3353 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3354 |
# Editing functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3355 |
# ------------------------------------------------------------------------------- |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3356 |
|
814 | 3357 |
def Cut(self): |
3358 |
if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement) or isinstance(self.SelectedElement, Graphic_Group)): |
|
3359 |
blocks, wires = self.SelectedElement.GetDefinition() |
|
3360 |
text = self.Controler.GetEditedElementInstancesCopy(self.TagName, blocks, wires, self.Debug) |
|
3361 |
self.ParentWindow.SetCopyBuffer(text) |
|
3362 |
rect = self.SelectedElement.GetRedrawRect(1, 1) |
|
3363 |
self.SelectedElement.Delete() |
|
3364 |
self.SelectedElement = None |
|
3365 |
self.RefreshBuffer() |
|
3366 |
self.RefreshScrollBars() |
|
3367 |
self.RefreshVariablePanel() |
|
3368 |
self.ParentWindow.RefreshPouInstanceVariablesPanel() |
|
3369 |
self.RefreshRect(self.GetScrolledRect(rect), False) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3370 |
|
814 | 3371 |
def Copy(self): |
3372 |
if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement) or isinstance(self.SelectedElement, Graphic_Group)): |
|
3373 |
blocks, wires = self.SelectedElement.GetDefinition() |
|
3374 |
text = self.Controler.GetEditedElementInstancesCopy(self.TagName, blocks, wires, self.Debug) |
|
3375 |
self.ParentWindow.SetCopyBuffer(text) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3376 |
|
814 | 3377 |
def Paste(self, bbx=None): |
3378 |
if not self.Debug: |
|
3379 |
element = self.ParentWindow.GetCopyBuffer() |
|
3380 |
if bbx is None: |
|
3381 |
mouse_pos = self.Editor.ScreenToClient(wx.GetMousePosition()) |
|
3382 |
middle = wx.Rect(0, 0, *self.Editor.GetClientSize()).InsideXY(mouse_pos.x, mouse_pos.y) |
|
3383 |
if middle: |
|
3384 |
x, y = self.CalcUnscrolledPosition(mouse_pos.x, mouse_pos.y) |
|
3385 |
else: |
|
3386 |
x, y = self.CalcUnscrolledPosition(0, 0) |
|
3387 |
new_pos = [int(x / self.ViewScale[0]), int(y / self.ViewScale[1])] |
|
3388 |
else: |
|
3389 |
middle = True |
|
3390 |
new_pos = [bbx.x, bbx.y] |
|
3391 |
result = self.Controler.PasteEditedElementInstances(self.TagName, element, new_pos, middle, self.Debug) |
|
2450
5024c19ca8f0
python3 support: pylint, W1652 # (deprecated-types-field) Accessing a deprecated fields on the types module
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2437
diff
changeset
|
3392 |
if not isinstance(result, string_types): |
814 | 3393 |
self.RefreshBuffer() |
3394 |
self.RefreshView(selection=result) |
|
3395 |
self.RefreshVariablePanel() |
|
3396 |
self.ParentWindow.RefreshPouInstanceVariablesPanel() |
|
3397 |
else: |
|
1745
f9d32913bad4
clean-up: fix PEP8 E227 missing whitespace around bitwise or shift operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1744
diff
changeset
|
3398 |
message = wx.MessageDialog(self.Editor, result, "Error", wx.OK | wx.ICON_ERROR) |
814 | 3399 |
message.ShowModal() |
3400 |
message.Destroy() |
|
3401 |
||
3402 |
def CanAddElement(self, block): |
|
3403 |
if isinstance(block, Graphic_Group): |
|
3404 |
return block.CanAddBlocks(self) |
|
3405 |
elif self.CurrentLanguage == "SFC": |
|
3406 |
return True |
|
3407 |
elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)): |
|
3408 |
return True |
|
3409 |
elif self.CurrentLanguage == "FBD" and isinstance(block, (FBD_Block, FBD_Variable, FBD_Connector, Comment)): |
|
3410 |
return True |
|
3411 |
return False |
|
3412 |
||
1852
70c1cc354a8f
fix pylint warning '(dangerous-default-value) Dangerous default value {} as argument'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1850
diff
changeset
|
3413 |
def GenerateNewName(self, element=None, blocktype=None, exclude=None): |
814 | 3414 |
if element is not None and isinstance(element, SFC_Step): |
3415 |
format = "Step%d" |
|
3416 |
else: |
|
3417 |
if element is not None: |
|
3418 |
blocktype = element.GetType() |
|
3419 |
if blocktype is None: |
|
3420 |
blocktype = "Block" |
|
3421 |
format = "%s%%d" % blocktype |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3422 |
return self.Controler.GenerateNewName(self.TagName, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3423 |
None, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3424 |
format, |
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3425 |
exclude=exclude, |
1122
84de51ab40d2
Adding support for using current selected variable for generate newly added variable informations in VariablePanel
Laurent Bessard
parents:
1089
diff
changeset
|
3426 |
debug=self.Debug) |
814 | 3427 |
|
3428 |
def IsNamedElement(self, element): |
|
3429 |
return isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step) |
|
3430 |
||
3431 |
def CopyBlock(self, element, pos): |
|
3432 |
if isinstance(element, Graphic_Group): |
|
3433 |
block = element.Clone(self, pos=pos) |
|
3434 |
else: |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
885
diff
changeset
|
3435 |
new_id = self.GetNewId() |
814 | 3436 |
if self.IsNamedElement(element): |
3437 |
name = self.GenerateNewName(element) |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
885
diff
changeset
|
3438 |
block = element.Clone(self, new_id, name, pos) |
814 | 3439 |
else: |
3440 |
name = None |
|
891
39f355a535d8
Fix bug when copying transition and the connected FBD or LD diagram
Laurent Bessard
parents:
885
diff
changeset
|
3441 |
block = element.Clone(self, new_id, pos=pos) |
814 | 3442 |
self.AddBlockInModel(block) |
3443 |
return block |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3444 |
|
814 | 3445 |
def AddBlockInModel(self, block): |
3446 |
if isinstance(block, Comment): |
|
3447 |
self.AddComment(block) |
|
3448 |
self.Controler.AddEditedElementComment(self.TagName, block.GetId()) |
|
3449 |
self.RefreshCommentModel(block) |
|
3450 |
else: |
|
3451 |
self.AddBlock(block) |
|
3452 |
if isinstance(block, FBD_Block): |
|
3453 |
self.Controler.AddEditedElementBlock(self.TagName, block.GetId(), block.GetType(), block.GetName()) |
|
3454 |
self.RefreshBlockModel(block) |
|
3455 |
elif isinstance(block, FBD_Variable): |
|
3456 |
self.Controler.AddEditedElementVariable(self.TagName, block.GetId(), block.GetType()) |
|
3457 |
self.RefreshVariableModel(block) |
|
3458 |
elif isinstance(block, FBD_Connector): |
|
3459 |
self.Controler.AddEditedElementConnection(self.TagName, block.GetId(), block.GetType()) |
|
3460 |
self.RefreshConnectionModel(block) |
|
3461 |
elif isinstance(block, LD_Contact): |
|
3462 |
self.Controler.AddEditedElementContact(self.TagName, block.GetId()) |
|
3463 |
self.RefreshContactModel(block) |
|
3464 |
elif isinstance(block, LD_Coil): |
|
3465 |
self.Controler.AddEditedElementCoil(self.TagName, block.GetId()) |
|
3466 |
self.RefreshCoilModel(block) |
|
3467 |
elif isinstance(block, LD_PowerRail): |
|
3468 |
self.Controler.AddEditedElementPowerRail(self.TagName, block.GetId(), block.GetType()) |
|
3469 |
self.RefreshPowerRailModel(block) |
|
3470 |
elif isinstance(block, SFC_Step): |
|
3471 |
self.Controler.AddEditedElementStep(self.TagName, block.GetId()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3472 |
self.RefreshStepModel(block) |
814 | 3473 |
elif isinstance(block, SFC_Transition): |
3474 |
self.Controler.AddEditedElementTransition(self.TagName, block.GetId()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3475 |
self.RefreshTransitionModel(block) |
814 | 3476 |
elif isinstance(block, SFC_Divergence): |
3477 |
self.Controler.AddEditedElementDivergence(self.TagName, block.GetId(), block.GetType()) |
|
3478 |
self.RefreshDivergenceModel(block) |
|
3479 |
elif isinstance(block, SFC_Jump): |
|
3480 |
self.Controler.AddEditedElementJump(self.TagName, block.GetId()) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3481 |
self.RefreshJumpModel(block) |
814 | 3482 |
elif isinstance(block, SFC_ActionBlock): |
3483 |
self.Controler.AddEditedElementActionBlock(self.TagName, block.GetId()) |
|
3484 |
self.RefreshActionBlockModel(block) |
|
3485 |
||
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3486 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3487 |
# Find and Replace functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3488 |
# ------------------------------------------------------------------------------- |
814 | 3489 |
|
3490 |
def Find(self, direction, search_params): |
|
3491 |
if self.SearchParams != search_params: |
|
3492 |
self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3493 |
|
814 | 3494 |
self.SearchParams = search_params |
3495 |
self.SearchResults = [] |
|
3496 |
blocks = [] |
|
1847
6198190bc121
explicitly mark unused variables found by pylint with _ or dummy
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1846
diff
changeset
|
3497 |
for infos, start, end, _text in self.Controler.SearchInPou(self.TagName, search_params, self.Debug): |
2417
316ee9fff395
cleanup: pylint, R0123 # (literal-comparison) Comparison to literal
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2347
diff
changeset
|
3498 |
if (infos[0] == self.TagName or self.TagName.split("::")[0] in ['A', 'T']) and infos[1] != 'name': |
1619
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1609
diff
changeset
|
3499 |
if infos[1] in ["var_local", "var_input", "var_output", "var_inout"]: |
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1609
diff
changeset
|
3500 |
self.SearchResults.append((infos[1:], start, end, SEARCH_RESULT_HIGHLIGHT)) |
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1609
diff
changeset
|
3501 |
else: |
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1609
diff
changeset
|
3502 |
block = self.Blocks.get(infos[2]) |
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1609
diff
changeset
|
3503 |
if block is not None: |
163d3a883575
fix local search in actions and transitions
Surkov Sergey <surkovsv93@gmail.com>
parents:
1609
diff
changeset
|
3504 |
blocks.append((block, (infos[1:], start, end, SEARCH_RESULT_HIGHLIGHT))) |
814 | 3505 |
blocks.sort(sort_blocks) |
3506 |
self.SearchResults.extend([infos for block, infos in blocks]) |
|
1057
3837e165b3f9
Added support for search in PythonEditor and IECCodeViewer
Laurent Bessard
parents:
1042
diff
changeset
|
3507 |
self.CurrentFindHighlight = None |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3508 |
|
814 | 3509 |
if len(self.SearchResults) > 0: |
3510 |
if self.CurrentFindHighlight is not None: |
|
3511 |
old_idx = self.SearchResults.index(self.CurrentFindHighlight) |
|
3512 |
if self.SearchParams["wrap"]: |
|
3513 |
idx = (old_idx + direction) % len(self.SearchResults) |
|
3514 |
else: |
|
3515 |
idx = max(0, min(old_idx + direction, len(self.SearchResults) - 1)) |
|
3516 |
if idx != old_idx: |
|
3517 |
self.RemoveHighlight(*self.CurrentFindHighlight) |
|
3518 |
self.CurrentFindHighlight = self.SearchResults[idx] |
|
3519 |
self.AddHighlight(*self.CurrentFindHighlight) |
|
3520 |
else: |
|
3521 |
self.CurrentFindHighlight = self.SearchResults[0] |
|
3522 |
self.AddHighlight(*self.CurrentFindHighlight) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3523 |
|
814 | 3524 |
else: |
3525 |
if self.CurrentFindHighlight is not None: |
|
3526 |
self.RemoveHighlight(*self.CurrentFindHighlight) |
|
3527 |
self.CurrentFindHighlight = None |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3528 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3529 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3530 |
# Highlights showing functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3531 |
# ------------------------------------------------------------------------------- |
814 | 3532 |
|
3533 |
def OnRefreshHighlightsTimer(self, event): |
|
3534 |
self.RefreshView() |
|
3535 |
event.Skip() |
|
3536 |
||
3537 |
def ClearHighlights(self, highlight_type=None): |
|
3538 |
EditorPanel.ClearHighlights(self, highlight_type) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3539 |
|
814 | 3540 |
if highlight_type is None: |
3541 |
self.Highlights = [] |
|
3542 |
else: |
|
3543 |
self.Highlights = [(infos, start, end, highlight) for (infos, start, end, highlight) in self.Highlights if highlight != highlight_type] |
|
3544 |
self.RefreshView() |
|
3545 |
||
3546 |
def AddHighlight(self, infos, start, end, highlight_type): |
|
3547 |
EditorPanel.AddHighlight(self, infos, start, end, highlight_type) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3548 |
|
814 | 3549 |
self.Highlights.append((infos, start, end, highlight_type)) |
3550 |
if infos[0] not in ["var_local", "var_input", "var_output", "var_inout"]: |
|
3551 |
block = self.Blocks.get(infos[1]) |
|
3552 |
if block is not None: |
|
3553 |
self.EnsureVisible(block) |
|
3554 |
self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3555 |
|
814 | 3556 |
def RemoveHighlight(self, infos, start, end, highlight_type): |
3557 |
EditorPanel.RemoveHighlight(self, infos, start, end, highlight_type) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3558 |
|
814 | 3559 |
if (infos, start, end, highlight_type) in self.Highlights: |
3560 |
self.Highlights.remove((infos, start, end, highlight_type)) |
|
3561 |
self.RefreshHighlightsTimer.Start(int(REFRESH_HIGHLIGHT_PERIOD * 1000), oneShot=True) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3562 |
|
814 | 3563 |
def ShowHighlights(self): |
3564 |
for infos, start, end, highlight_type in self.Highlights: |
|
3565 |
if infos[0] in ["comment", "io_variable", "block", "connector", "coil", "contact", "step", "transition", "jump", "action_block"]: |
|
3566 |
block = self.FindElementById(infos[1]) |
|
3567 |
if block is not None: |
|
3568 |
block.AddHighlight(infos[2:], start, end, highlight_type) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3569 |
|
1782
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3570 |
# ------------------------------------------------------------------------------- |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3571 |
# Drawing functions |
5b6ad7a7fd9d
clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1780
diff
changeset
|
3572 |
# ------------------------------------------------------------------------------- |
814 | 3573 |
|
3574 |
def OnScrollWindow(self, event): |
|
1273
921858d68a13
Fix refresh bug when scrolling Viewer while dragging graphic element or rubberband
Laurent Bessard
parents:
1263
diff
changeset
|
3575 |
if self.Editor.HasCapture() and self.StartMousePos is not None: |
814 | 3576 |
return |
3577 |
if wx.Platform == '__WXMSW__': |
|
3578 |
wx.CallAfter(self.RefreshVisibleElements) |
|
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
3579 |
self.Editor.Freeze() |
1208
d22fcdfae8d0
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1205
diff
changeset
|
3580 |
wx.CallAfter(self.Editor.Thaw) |
814 | 3581 |
elif event.GetOrientation() == wx.HORIZONTAL: |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
3582 |
self.RefreshVisibleElements(xp=event.GetPosition()) |
814 | 3583 |
else: |
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
3584 |
self.RefreshVisibleElements(yp=event.GetPosition()) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3585 |
|
1203
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3586 |
# Handle scroll in debug to fully redraw area and ensuring |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3587 |
# instance path is fully draw without flickering |
1204
8a620b460b49
Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents:
1203
diff
changeset
|
3588 |
if self.Debug and wx.Platform != '__WXMSW__': |
1203
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3589 |
x, y = self.GetViewStart() |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3590 |
if event.GetOrientation() == wx.HORIZONTAL: |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3591 |
self.Scroll(event.GetPosition(), y) |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3592 |
else: |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3593 |
self.Scroll(x, event.GetPosition()) |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3594 |
else: |
4399ddd024e5
Added support for drawing instance path at a fixed position in Viewer debug mode
Laurent Bessard
parents:
1201
diff
changeset
|
3595 |
event.Skip() |
814 | 3596 |
|
3597 |
def OnScrollStop(self, event): |
|
3598 |
self.RefreshScrollBars() |
|
3599 |
event.Skip() |
|
3600 |
||
3601 |
def OnMouseWheelWindow(self, event): |
|
3602 |
if self.StartMousePos is None or self.StartScreenPos is None: |
|
2494
a30dfc8a0c29
fix zoom-in/zoom-out using mouse wheel
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2457
diff
changeset
|
3603 |
rotation = event.GetWheelRotation() // event.GetWheelDelta() |
814 | 3604 |
if event.ShiftDown(): |
3605 |
x, y = self.GetViewStart() |
|
3606 |
xp = max(0, min(x - rotation * 3, self.Editor.GetVirtualSize()[0] / self.Editor.GetScrollPixelsPerUnit()[0])) |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
3607 |
self.RefreshVisibleElements(xp=xp) |
814 | 3608 |
self.Scroll(xp, y) |
3609 |
elif event.ControlDown(): |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
3610 |
self.SetScale(self.CurrentScale + rotation, mouse_event=event) |
814 | 3611 |
self.ParentWindow.RefreshDisplayMenu() |
3612 |
else: |
|
3613 |
x, y = self.GetViewStart() |
|
3614 |
yp = max(0, min(y - rotation * 3, self.Editor.GetVirtualSize()[1] / self.Editor.GetScrollPixelsPerUnit()[1])) |
|
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
3615 |
self.RefreshVisibleElements(yp=yp) |
814 | 3616 |
self.Scroll(x, yp) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3617 |
|
814 | 3618 |
def OnMoveWindow(self, event): |
1342
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
3619 |
client_size = self.GetClientSize() |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
3620 |
if self.LastClientSize != client_size: |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
3621 |
self.LastClientSize = client_size |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
3622 |
self.RefreshScrollBars() |
c17507a10807
Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents:
1338
diff
changeset
|
3623 |
self.RefreshVisibleElements() |
814 | 3624 |
event.Skip() |
3625 |
||
1744
69dfdb26f600
clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1743
diff
changeset
|
3626 |
def DoDrawing(self, dc, printing=False): |
814 | 3627 |
if printing: |
3628 |
if getattr(dc, "printing", False): |
|
3629 |
font = wx.Font(self.GetFont().GetPointSize(), wx.MODERN, wx.NORMAL, wx.NORMAL) |
|
3630 |
dc.SetFont(font) |
|
3631 |
else: |
|
3632 |
dc.SetFont(self.GetFont()) |
|
3633 |
else: |
|
3634 |
dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour())) |
|
3635 |
dc.Clear() |
|
3636 |
dc.BeginDrawing() |
|
3637 |
if self.Scaling is not None and self.DrawGrid and not printing: |
|
3638 |
dc.SetPen(wx.TRANSPARENT_PEN) |
|
3639 |
dc.SetBrush(self.GridBrush) |
|
3640 |
xstart, ystart = self.GetViewStart() |
|
3641 |
window_size = self.Editor.GetClientSize() |
|
3642 |
width, height = self.Editor.GetVirtualSize() |
|
3643 |
width = int(max(width, xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[0]) |
|
3644 |
height = int(max(height, ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[1]) |
|
3645 |
dc.DrawRectangle(1, 1, width, height) |
|
3646 |
if self.PageSize is not None and not printing: |
|
3647 |
dc.SetPen(self.PagePen) |
|
3648 |
xstart, ystart = self.GetViewStart() |
|
3649 |
window_size = self.Editor.GetClientSize() |
|
2341
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3650 |
if self.PageSize[0] != 0: |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3651 |
for x in xrange(self.PageSize[0] - (xstart * SCROLLBAR_UNIT) % self.PageSize[0], int(window_size[0] / self.ViewScale[0]), self.PageSize[0]): |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3652 |
dc.DrawLine(xstart * SCROLLBAR_UNIT + x + 1, int(ystart * SCROLLBAR_UNIT / self.ViewScale[0]), |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3653 |
xstart * SCROLLBAR_UNIT + x + 1, int((ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[0])) |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3654 |
if self.PageSize[1] != 0: |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3655 |
for y in xrange(self.PageSize[1] - (ystart * SCROLLBAR_UNIT) % self.PageSize[1], int(window_size[1] / self.ViewScale[1]), self.PageSize[1]): |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3656 |
dc.DrawLine(int(xstart * SCROLLBAR_UNIT / self.ViewScale[0]), ystart * SCROLLBAR_UNIT + y + 1, |
210cddfa16cf
Avoid division by zero in case width or height for page are not specified
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
2301
diff
changeset
|
3657 |
int((xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[1]), ystart * SCROLLBAR_UNIT + y + 1) |
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3658 |
|
814 | 3659 |
# Draw all elements |
3660 |
for comment in self.Comments.itervalues(): |
|
3661 |
if comment != self.SelectedElement and (comment.IsVisible() or printing): |
|
3662 |
comment.Draw(dc) |
|
3663 |
for wire in self.Wires.iterkeys(): |
|
3664 |
if wire != self.SelectedElement and (wire.IsVisible() or printing): |
|
1759
56e7f4a11046
clean-up: fix PEP8 E712 comparison to True should be 'if cond is True:' or 'if cond:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1757
diff
changeset
|
3665 |
if not self.Debug or not wire.GetValue(): |
814 | 3666 |
wire.Draw(dc) |
3667 |
if self.Debug: |
|
3668 |
for wire in self.Wires.iterkeys(): |
|
1759
56e7f4a11046
clean-up: fix PEP8 E712 comparison to True should be 'if cond is True:' or 'if cond:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1757
diff
changeset
|
3669 |
if wire != self.SelectedElement and (wire.IsVisible() or printing) and wire.GetValue(): |
814 | 3670 |
wire.Draw(dc) |
3671 |
for block in self.Blocks.itervalues(): |
|
3672 |
if block != self.SelectedElement and (block.IsVisible() or printing): |
|
3673 |
block.Draw(dc) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3674 |
|
814 | 3675 |
if self.SelectedElement is not None and (self.SelectedElement.IsVisible() or printing): |
3676 |
self.SelectedElement.Draw(dc) |
|
1417
374238039643
Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents:
1406
diff
changeset
|
3677 |
|
814 | 3678 |
if not printing: |
3679 |
if self.Debug: |
|
1674
85e22d514c05
show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
1671
diff
changeset
|
3680 |
self.InstanceName.Draw(dc) |
814 | 3681 |
if self.rubberBand.IsShown(): |
3682 |
self.rubberBand.Draw(dc) |
|
3683 |
dc.EndDrawing() |
|
3684 |
||
3685 |
def OnPaint(self, event): |
|
3686 |
dc = self.GetLogicalDC(True) |
|
3687 |
self.DoDrawing(dc) |
|
3688 |
wx.BufferedPaintDC(self.Editor, dc.GetAsBitmap()) |
|
3689 |
if self.Debug: |
|
3690 |
DebugViewer.RefreshNewData(self) |
|
3691 |
event.Skip() |