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