editors/Viewer.py
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Mon, 21 Aug 2017 21:55:18 +0300
changeset 1782 5b6ad7a7fd9d
parent 1780 c52d1460cea8
child 1834 cd42b426028b
permissions -rw-r--r--
clean-up: fix PEP8 E265 block comment should start with '# '
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     1
#!/usr/bin/env python
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     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
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     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
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     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
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    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
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    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
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    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
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    24
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    25
import re
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    26
import math
1224
30e72bc7d21b Fixed lag when moving mouse over Viewer
Laurent Bessard
parents: 1208
diff changeset
    27
from time import time as gettime
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    28
from types import TupleType
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    29
from threading import Lock
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    30
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    31
import wx
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    32
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    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
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
    35
from graphics.DebugDataConsumer import DebugDataConsumer
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    36
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    37
from dialogs import *
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    38
from graphics import *
1224
30e72bc7d21b Fixed lag when moving mouse over Viewer
Laurent Bessard
parents: 1208
diff changeset
    39
from editors.DebugViewer import DebugViewer, REFRESH_PERIOD
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    40
from EditorPanel import EditorPanel
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    41
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    42
SCROLLBAR_UNIT = 10
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    43
WINDOW_BORDER = 10
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    44
SCROLL_ZONE = 10
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    45
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    46
CURSORS = None
1584
431f4ef34bde make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents: 1581
diff changeset
    47
SFC_Objects = (SFC_Step, SFC_ActionBlock, SFC_Transition, SFC_Divergence, SFC_Jump)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    48
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
    49
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    50
def ResetCursors():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    51
    global CURSORS
1743
c3c3d1318130 clean-up: fix PEP8 E711 comparison to None should be 'if cond is not None:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1741
diff changeset
    52
    if CURSORS is None:
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
    53
        CURSORS = [wx.NullCursor,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    54
                   wx.StockCursor(wx.CURSOR_HAND),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    55
                   wx.StockCursor(wx.CURSOR_SIZENWSE),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    56
                   wx.StockCursor(wx.CURSOR_SIZENESW),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    57
                   wx.StockCursor(wx.CURSOR_SIZEWE),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    58
                   wx.StockCursor(wx.CURSOR_SIZENS)]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    59
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
    60
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    61
def AppendMenu(parent, help, id, kind, text):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    62
    if wx.VERSION >= (2, 6, 0):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    63
        parent.Append(help=help, id=id, kind=kind, text=text)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    64
    else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    65
        parent.Append(helpString=help, id=id, kind=kind, item=text)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    66
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1747
diff changeset
    67
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    68
if wx.Platform == '__WXMSW__':
1747
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    69
    faces = {
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    70
        'times': 'Times New Roman',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    71
        'mono':  'Courier New',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    72
        'helv':  'Arial',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    73
        'other': 'Comic Sans MS',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    74
        'size':  10,
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    75
    }
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    76
else:
1747
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    77
    faces = {
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    78
        'times': 'Times',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    79
        'mono':  'Courier',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    80
        'helv':  'Helvetica',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    81
        'other': 'new century schoolbook',
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    82
        'size':  12,
6046ffa2280f clean-up: fix PEP8 E201 whitespace after '{'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1745
diff changeset
    83
    }
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    84
1123
55ed55ef7aea Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents: 1122
diff changeset
    85
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
    86
    MAX_ZOOMIN = 4
55ed55ef7aea Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents: 1122
diff changeset
    87
else:
55ed55ef7aea Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents: 1122
diff changeset
    88
    MAX_ZOOMIN = 7
55ed55ef7aea Fixed bug on biggest Viewer zoom factor preventing them to be used on Windows
Laurent Bessard
parents: 1122
diff changeset
    89
ZOOM_FACTORS = [math.sqrt(2) ** x for x in xrange(-6, MAX_ZOOMIN)]
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    90
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
    91
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    92
def GetVariableCreationFunction(variable_type):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    93
    def variableCreationFunction(viewer, id, specific_values):
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
    94
        return FBD_Variable(viewer,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
    95
                            variable_type,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
    96
                            specific_values.name,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
    97
                            specific_values.value_type,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
    98
                            id,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
    99
                            specific_values.execution_order)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   100
    return variableCreationFunction
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   101
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   102
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   103
def GetConnectorCreationFunction(connector_type):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   104
    def connectorCreationFunction(viewer, id, specific_values):
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   105
        return FBD_Connector(viewer,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   106
                             connector_type,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   107
                             specific_values.name,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   108
                             id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   109
    return connectorCreationFunction
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   110
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   111
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   112
def commentCreationFunction(viewer, id, specific_values):
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   113
    return Comment(viewer, specific_values.content, id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   114
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   115
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   116
def GetPowerRailCreationFunction(powerrail_type):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   117
    def powerRailCreationFunction(viewer, id, specific_values):
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   118
        return LD_PowerRail(viewer,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   119
                            powerrail_type,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   120
                            id,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   121
                            specific_values.connectors)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   122
    return powerRailCreationFunction
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   123
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1747
diff changeset
   124
1762
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   125
def NEGATED_VALUE(x):
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   126
    return x if x is not None else False
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   127
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   128
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   129
def MODIFIER_VALUE(x):
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   130
    return x if x is not None else 'none'
fcc406143e5b clean-up: fix PEP8 E731 do not assign a lambda expression, use a def
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1759
diff changeset
   131
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   132
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   133
CONTACT_TYPES = {(True, "none"): CONTACT_REVERSE,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   134
                 (False, "rising"): CONTACT_RISING,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   135
                 (False, "falling"): CONTACT_FALLING}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   136
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   137
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   138
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
   139
    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
   140
                                      MODIFIER_VALUE(specific_values.edge)),
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   141
                                     CONTACT_NORMAL)
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   142
    return LD_Contact(viewer, contact_type, specific_values.name, id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   143
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1747
diff changeset
   144
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   145
COIL_TYPES = {(True, "none", "none"): COIL_REVERSE,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   146
              (False, "none", "set"): COIL_SET,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   147
              (False, "none", "reset"): COIL_RESET,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   148
              (False, "rising", "none"): COIL_RISING,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   149
              (False, "falling", "none"): COIL_FALLING}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   150
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   151
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   152
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
   153
    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
   154
                                MODIFIER_VALUE(specific_values.edge),
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   155
                                MODIFIER_VALUE(specific_values.storage)),
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   156
                               COIL_NORMAL)
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   157
    return LD_Coil(viewer, coil_type, specific_values.name, id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   158
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   159
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   160
def stepCreationFunction(viewer, id, specific_values):
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   161
    step = SFC_Step(viewer,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   162
                    specific_values.name,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   163
                    specific_values.initial,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   164
                    id)
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   165
    if specific_values.action is not None:
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   166
        step.AddAction()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   167
        connector = step.GetActionConnector()
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   168
        connector.SetPosition(wx.Point(*specific_values.action.position))
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   169
    return step
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   170
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   171
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   172
def transitionCreationFunction(viewer, id, specific_values):
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   173
    transition = SFC_Transition(viewer,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   174
                                specific_values.condition_type,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   175
                                specific_values.condition,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   176
                                specific_values.priority,
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   177
                                id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   178
    return transition
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   179
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1747
diff changeset
   180
1584
431f4ef34bde make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents: 1581
diff changeset
   181
divergence_types = [SELECTION_DIVERGENCE,
431f4ef34bde make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents: 1581
diff changeset
   182
                    SELECTION_CONVERGENCE, SIMULTANEOUS_DIVERGENCE, SIMULTANEOUS_CONVERGENCE]
431f4ef34bde make only correct blocks(by IEC 61131-3 standard) available in wire popup menu in SFC Viewer
Sergey Surkov <surkovsv93@gmail.com>
parents: 1581
diff changeset
   183
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   184
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   185
def GetDivergenceCreationFunction(divergence_type):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   186
    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
   187
        return SFC_Divergence(viewer, divergence_type,
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1766
diff changeset
   188
                              specific_values.connectors, id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   189
    return divergenceCreationFunction
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   190
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   191
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   192
def jumpCreationFunction(viewer, id, specific_values):
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   193
    return SFC_Jump(viewer, specific_values.target, id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   194
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   195
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   196
def actionBlockCreationFunction(viewer, id, specific_values):
1338
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
   197
    return SFC_ActionBlock(viewer, specific_values.actions, id)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   198
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1747
diff changeset
   199
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   200
ElementCreationFunctions = {
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   201
    "input": GetVariableCreationFunction(INPUT),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   202
    "output": GetVariableCreationFunction(OUTPUT),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   203
    "inout": GetVariableCreationFunction(INOUT),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   204
    "connector": GetConnectorCreationFunction(CONNECTOR),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   205
    "continuation": GetConnectorCreationFunction(CONTINUATION),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   206
    "comment": commentCreationFunction,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   207
    "leftPowerRail": GetPowerRailCreationFunction(LEFTRAIL),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   208
    "rightPowerRail": GetPowerRailCreationFunction(RIGHTRAIL),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   209
    "contact": contactCreationFunction,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   210
    "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
   211
    "step": stepCreationFunction,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   212
    "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
   213
    "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
   214
    "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
   215
    "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
   216
    "simultaneousConvergence": GetDivergenceCreationFunction(SIMULTANEOUS_CONVERGENCE),
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   217
    "jump": jumpCreationFunction,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   218
    "actionBlock": actionBlockCreationFunction,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   219
}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   220
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   221
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   222
def sort_blocks(block_infos1, block_infos2):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   223
    x1, y1 = block_infos1[0].GetPosition()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   224
    x2, y2 = block_infos2[0].GetPosition()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   225
    if y1 == y2:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   226
        return cmp(x1, x2)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   227
    else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   228
        return cmp(y1, y2)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   229
1782
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
   230
# -------------------------------------------------------------------------------
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   231
#                       Graphic elements Viewer base class
1782
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
   232
# -------------------------------------------------------------------------------
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   233
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1747
diff changeset
   234
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   235
# ID Constants for alignment menu items
1773
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   236
[
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   237
    ID_VIEWERALIGNMENTMENUITEMS0, ID_VIEWERALIGNMENTMENUITEMS1,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   238
    ID_VIEWERALIGNMENTMENUITEMS2, ID_VIEWERALIGNMENTMENUITEMS4,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   239
    ID_VIEWERALIGNMENTMENUITEMS5, ID_VIEWERALIGNMENTMENUITEMS6,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   240
] = [wx.NewId() for _init_coll_AlignmentMenu_Items in range(6)]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   241
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   242
# ID Constants for contextual menu items
1773
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   243
[
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   244
    ID_VIEWERCONTEXTUALMENUITEMS0, ID_VIEWERCONTEXTUALMENUITEMS1,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   245
    ID_VIEWERCONTEXTUALMENUITEMS2, ID_VIEWERCONTEXTUALMENUITEMS3,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   246
    ID_VIEWERCONTEXTUALMENUITEMS5, ID_VIEWERCONTEXTUALMENUITEMS6,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   247
    ID_VIEWERCONTEXTUALMENUITEMS8, ID_VIEWERCONTEXTUALMENUITEMS9,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   248
    ID_VIEWERCONTEXTUALMENUITEMS11, ID_VIEWERCONTEXTUALMENUITEMS12,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   249
    ID_VIEWERCONTEXTUALMENUITEMS14, ID_VIEWERCONTEXTUALMENUITEMS16,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   250
    ID_VIEWERCONTEXTUALMENUITEMS17,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   251
] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(13)]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   252
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   253
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   254
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
   255
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   256
    def __init__(self, parent):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   257
        wx.TextDropTarget.__init__(self)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   258
        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
   259
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   260
    def OnDropText(self, x, y, data):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   261
        self.ParentWindow.Select()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   262
        tagname = self.ParentWindow.GetTagName()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   263
        pou_name, pou_type = self.ParentWindow.Controler.GetEditedElementType(tagname, self.ParentWindow.Debug)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   264
        x, y = self.ParentWindow.CalcUnscrolledPosition(x, y)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   265
        x = int(x / self.ParentWindow.ViewScale[0])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   266
        y = int(y / self.ParentWindow.ViewScale[1])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   267
        scaling = self.ParentWindow.Scaling
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   268
        message = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   269
        try:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   270
            values = eval(data)
1780
c52d1460cea8 clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1773
diff changeset
   271
        except Exception:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   272
            message = _("Invalid value \"%s\" for viewer block") % data
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   273
            values = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   274
        if not isinstance(values, TupleType):
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   275
            message = _("Invalid value \"%s\" for viewer block") % data
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   276
            values = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   277
        if values is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   278
            if values[1] == "debug":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   279
                pass
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   280
            elif values[1] == "program":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   281
                message = _("Programs can't be used by other POUs!")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   282
            elif values[1] in ["function", "functionBlock"]:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   283
                words = tagname.split("::")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   284
                if pou_name == values[0]:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   285
                    message = _("\"%s\" can't use itself!") % pou_name
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   286
                elif pou_type == "function" and values[1] != "function":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   287
                    message = _("Function Blocks can't be used in Functions!")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   288
                elif self.ParentWindow.Controler.PouIsUsedBy(pou_name, values[0], self.ParentWindow.Debug):
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   289
                    message = _("\"{a1}\" is already used by \"{a2}\"!").format(a1=pou_name, a2=values[0])
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   290
                else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   291
                    blockname = values[2]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   292
                    if len(values) > 3:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   293
                        blockinputs = values[3]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   294
                    else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   295
                        blockinputs = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   296
                    if values[1] != "function" and blockname == "":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   297
                        blockname = self.ParentWindow.GenerateNewName(blocktype=values[0])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   298
                    if blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   299
                        message = _("\"%s\" pou already exists!") % blockname
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   300
                    elif blockname.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   301
                        message = _("\"%s\" element for this pou already exists!") % blockname
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   302
                    else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   303
                        id = self.ParentWindow.GetNewId()
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   304
                        block = FBD_Block(self.ParentWindow, values[0], blockname, id, inputs=blockinputs)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   305
                        width, height = block.GetMinSize()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   306
                        if scaling is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   307
                            x = round(float(x) / float(scaling[0])) * scaling[0]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   308
                            y = round(float(y) / float(scaling[1])) * scaling[1]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   309
                            width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   310
                            height = round(float(height) / float(scaling[1]) + 0.5) * scaling[1]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   311
                        block.SetPosition(x, y)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   312
                        block.SetSize(width, height)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   313
                        self.ParentWindow.AddBlock(block)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   314
                        self.ParentWindow.Controler.AddEditedElementBlock(tagname, id, values[0], blockname)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   315
                        self.ParentWindow.RefreshBlockModel(block)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   316
                        self.ParentWindow.RefreshBuffer()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   317
                        self.ParentWindow.RefreshScrollBars()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   318
                        self.ParentWindow.RefreshVisibleElements()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   319
                        self.ParentWindow.RefreshVariablePanel()
1233
5e6d0969bb5d Fixed bugs in refresh of PouInstanceVariablesPanel
Laurent Bessard
parents: 1229
diff changeset
   320
                        self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   321
                        self.ParentWindow.Refresh(False)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   322
            elif values[1] == "location":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   323
                if pou_type == "program":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   324
                    location = values[0]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   325
                    if not location.startswith("%"):
1768
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   326
                        dialog = wx.SingleChoiceDialog(
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   327
                            self.ParentWindow.ParentWindow,
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   328
                            _("Select a variable class:"),
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   329
                            _("Variable class"),
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   330
                            [_("Input"), _("Output"), _("Memory")],
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   331
                            wx.DEFAULT_DIALOG_STYLE | wx.OK | wx.CANCEL)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   332
                        if dialog.ShowModal() == wx.ID_OK:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   333
                            selected = dialog.GetSelection()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   334
                        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   335
                            selected = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   336
                        dialog.Destroy()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   337
                        if selected is None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   338
                            return
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   339
                        if selected == 0:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   340
                            location = "%I" + location
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   341
                        elif selected == 1:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   342
                            location = "%Q" + location
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   343
                        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   344
                            location = "%M" + location
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   345
                    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
   346
                    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
   347
                        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
   348
                        _("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
   349
                        _('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
   350
                    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
   351
                    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
   352
                    dlg.Destroy()
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   353
                    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
   354
                        return
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   355
                    elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   356
                        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
   357
                    elif not var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetEditedElementVariables(tagname, self.ParentWindow.Debug)]:
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   358
                        if location[1] == "Q":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   359
                            var_class = OUTPUT
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   360
                        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   361
                            var_class = INPUT
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   362
                        if values[2] is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   363
                            var_type = values[2]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   364
                        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   365
                            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
   366
                        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
   367
                        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
   368
                        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
   369
                        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
   370
                    else:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   371
                        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
   372
            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
   373
                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
   374
                    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
   375
                    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
   376
                    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
   377
                        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
   378
                        _("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
   379
                        _('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
   380
                    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
   381
                    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
   382
                    dlg.Destroy()
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   383
                    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
   384
                        return
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   385
                    elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   386
                        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
   387
                    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
   388
                        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
   389
                        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
   390
                        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
   391
                        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
   392
                        self.ParentWindow.ParentWindow.RefreshPouInstanceVariablesPanel()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   393
                        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
   394
                    else:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   395
                        message = _("\"%s\" element for this pou already exists!") % var_name
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   396
            elif values[1] == "Global":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   397
                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
   398
                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
   399
                    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
   400
                    _("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
   401
                    _('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
   402
                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
   403
                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
   404
                dlg.Destroy()
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   405
                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
   406
                    return
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   407
                elif var_name.upper() in [name.upper() for name in self.ParentWindow.Controler.GetProjectPouNames(self.ParentWindow.Debug)]:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   408
                    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
   409
                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
   410
                    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
   411
                    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
   412
                    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
   413
                    self.ParentWindow.AddVariableBlock(x, y, scaling, INPUT, var_name, values[2])
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   414
                else:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
   415
                    message = _("\"%s\" element for this pou already exists!") % var_name
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   416
            elif values[1] == "Constant":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   417
                self.ParentWindow.AddVariableBlock(x, y, scaling, INPUT, values[0], None)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   418
            elif values[3] == tagname:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   419
                if values[1] == "Output":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   420
                    var_class = OUTPUT
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   421
                elif values[1] == "InOut":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   422
                    var_class = INPUT
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   423
                else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   424
                    var_class = INPUT
1347
533741e5075c Fixed pou variables information loading stylesheet
Laurent Bessard
parents: 1342
diff changeset
   425
                tree = dict([(var.Name, var.Tree) for var in self.ParentWindow.Controler.GetEditedElementInterfaceVars(tagname, True, self.ParentWindow.Debug)]).get(values[0], None)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   426
                if tree is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   427
                    if len(tree[0]) > 0:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   428
                        menu = wx.Menu(title='')
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   429
                        self.GenerateTreeMenu(x, y, scaling, menu, "", var_class, [(values[0], values[2], tree)])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   430
                        self.ParentWindow.PopupMenuXY(menu)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   431
                    else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   432
                        self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, values[0], values[2])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   433
                else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   434
                    message = _("Unknown variable \"%s\" for this POU!") % values[0]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   435
            else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   436
                message = _("Variable don't belong to this POU!")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   437
        if message is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   438
            wx.CallAfter(self.ShowMessage, message)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   439
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   440
    def GenerateTreeMenu(self, x, y, scaling, menu, base_path, var_class, tree):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   441
        for child_name, child_type, (child_tree, child_dimensions) in tree:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   442
            if base_path:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   443
                child_path = "%s.%s" % (base_path, child_name)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   444
            else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   445
                child_path = child_name
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   446
            if len(child_dimensions) > 0:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   447
                child_path += "[%s]" % ",".join([str(dimension[0]) for dimension in child_dimensions])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   448
                child_name += "[]"
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   449
            new_id = wx.NewId()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   450
            AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=child_name)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   451
            self.ParentWindow.Bind(wx.EVT_MENU, self.GetAddVariableBlockFunction(x, y, scaling, var_class, child_path, child_type), id=new_id)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   452
            if len(child_tree) > 0:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   453
                new_id = wx.NewId()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   454
                child_menu = wx.Menu(title='')
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   455
                self.GenerateTreeMenu(x, y, scaling, child_menu, child_path, var_class, child_tree)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   456
                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
   457
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   458
    def GetAddVariableBlockFunction(self, x, y, scaling, var_class, var_name, var_type):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   459
        def AddVariableFunction(event):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   460
            self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, var_name, var_type)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   461
        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
   462
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   463
    def ShowMessage(self, message):
1745
f9d32913bad4 clean-up: fix PEP8 E227 missing whitespace around bitwise or shift operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1744
diff changeset
   464
        message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   465
        message.ShowModal()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   466
        message.Destroy()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   467
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   468
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   469
class DebugInstanceName(DebugDataConsumer):
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   470
    VALUE_TRANSLATION = {True: _("Active"), False: _("Inactive")}
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   471
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   472
    def __init__(self, parent):
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   473
        DebugDataConsumer.__init__(self)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   474
        self.Parent = parent
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   475
        self.ActionLastState = None
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   476
        self.ActionState = None
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   477
        self.x_offset = 2
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   478
        self.y_offset = 2
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   479
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   480
    def SetValue(self, value):
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   481
        self.ActionState = value
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   482
        if self.ActionState != self.ActionLastState:
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   483
            self.ActionLastState = self.ActionState
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   484
            wx.CallAfter(self.Parent.ElementNeedRefresh, self)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   485
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   486
    def GetInstanceName(self):
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   487
        return _("Debug: %s") % self.Parent.InstancePath
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   488
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   489
    def GetRedrawRect(self):
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   490
        x, y = self.Parent.CalcUnscrolledPosition(self.x_offset, self.y_offset)
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   491
        dc = self.Parent.GetLogicalDC()
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   492
        ipw, iph = dc.GetTextExtent(self.GetInstanceName())
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   493
        vw, vh = 0, 0
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   494
        for value in self.VALUE_TRANSLATION.itervalues():
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   495
            w, h = dc.GetTextExtent(" (%s)" % value)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   496
            vw = max(vw, w)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   497
            vh = max(vh, h)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   498
        return wx.Rect(ipw + x, y, vw, vh)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   499
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   500
    def Draw(self, dc):
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   501
        scalex, scaley = dc.GetUserScale()
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   502
        dc.SetUserScale(1, 1)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   503
        x, y = self.Parent.CalcUnscrolledPosition(self.x_offset, self.y_offset)
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   504
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   505
        text = self.GetInstanceName()
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   506
        if self.ActionState is not None:
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   507
            text += " ("
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   508
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   509
        dc.DrawText(text, x, y)
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   510
        tw, th = dc.GetTextExtent(text)
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   511
        if self.ActionState is not None:
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   512
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   513
            text = self.VALUE_TRANSLATION[self.ActionState]
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   514
            if self.ActionState:
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   515
                dc.SetTextForeground(wx.GREEN)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   516
            dc.DrawText(text, x + tw, y)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   517
            if self.ActionState:
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   518
                dc.SetTextForeground(wx.BLACK)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   519
            tw = tw + dc.GetTextExtent(text)[0]
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   520
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
   521
            text = ")"
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   522
            dc.DrawText(text, x + tw, y)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   523
        dc.SetUserScale(scalex, scaley)
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   524
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   525
1176
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1170
diff changeset
   526
class Viewer(EditorPanel, DebugViewer):
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   527
    """
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   528
    Class that implements a Viewer based on a wx.ScrolledWindow for drawing and
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   529
    manipulating graphic elements
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1734
diff changeset
   530
    """
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   531
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   532
    if wx.VERSION < (2, 6, 0):
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   533
        def Bind(self, event, function, id=None):
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   534
            if id is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   535
                event(self, id, function)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   536
            else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   537
                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
   538
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   539
    # Add list of menu items to the given menu
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   540
    def AddMenuItems(self, menu, items):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   541
        for item in items:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   542
            if item is None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   543
                menu.AppendSeparator()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   544
            else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   545
                id, kind, text, help, callback = item
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   546
                AppendMenu(menu, help=help, id=id, kind=kind, text=text)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   547
                # Link menu event to corresponding called functions
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   548
                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
   549
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   550
    # Add Block Pin Menu items to the given menu
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   551
    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
   552
        [ID_NO_MODIFIER, ID_NEGATED, ID_RISING_EDGE,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   553
         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
   554
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   555
        # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   556
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   557
            (ID_NO_MODIFIER, wx.ITEM_RADIO, _(u'No Modifier'), '', self.OnNoModifierMenu),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   558
            (ID_NEGATED, wx.ITEM_RADIO, _(u'Negated'), '', self.OnNegatedMenu),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   559
            (ID_RISING_EDGE, wx.ITEM_RADIO, _(u'Rising Edge'), '', self.OnRisingEdgeMenu),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   560
            (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
   561
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   562
        type = self.Controler.GetEditedElementType(self.TagName, self.Debug)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   563
        menu.Enable(ID_RISING_EDGE, type != "function")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   564
        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
   565
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   566
        if connector.IsNegated():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   567
            menu.Check(ID_NEGATED, True)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   568
        elif connector.GetEdge() == "rising":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   569
            menu.Check(ID_RISING_EDGE, True)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   570
        elif connector.GetEdge() == "falling":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   571
            menu.Check(ID_FALLING_EDGE, True)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   572
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   573
            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
   574
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   575
    # Add Alignment Menu items to the given menu
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   576
    def AddAlignmentMenuItems(self, menu):
1773
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   577
        [
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   578
            ID_ALIGN_LEFT, ID_ALIGN_CENTER, ID_ALIGN_RIGHT,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   579
            ID_ALIGN_TOP, ID_ALIGN_MIDDLE, ID_ALIGN_BOTTOM,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   580
        ] = [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
   581
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   582
        # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   583
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   584
            (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
   585
            (ID_ALIGN_CENTER, wx.ITEM_NORMAL, _(u'Center'), '', self.OnAlignCenterMenu),
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   586
            (ID_ALIGN_RIGHT, wx.ITEM_NORMAL, _(u'Right'), '', self.OnAlignRightMenu),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   587
            None,
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   588
            (ID_ALIGN_TOP, wx.ITEM_NORMAL, _(u'Top'), '', self.OnAlignTopMenu),
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   589
            (ID_ALIGN_MIDDLE, wx.ITEM_NORMAL, _(u'Middle'), '', self.OnAlignMiddleMenu),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   590
            (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
   591
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   592
    # 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
   593
    def AddWireMenuItems(self, menu, delete=False, replace=False):
895605ccac70 Added support for replacing a wire by two connections
Laurent Bessard
parents: 1260
diff changeset
   594
        [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
   595
         ] = [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
   596
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   597
        # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   598
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   599
            (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
   600
            (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
   601
            (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
   602
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   603
        menu.Enable(ID_DELETE_SEGMENT, delete)
1263
895605ccac70 Added support for replacing a wire by two connections
Laurent Bessard
parents: 1260
diff changeset
   604
        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
   605
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   606
    # Add Divergence Menu items to the given menu
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   607
    def AddDivergenceMenuItems(self, menu, delete=False):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   608
        [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
   609
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   610
        # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   611
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   612
            (ID_ADD_BRANCH, wx.ITEM_NORMAL, _(u'Add Divergence Branch'), '', self.OnAddBranchMenu),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   613
            (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
   614
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   615
        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
   616
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   617
    # Add Add Menu items to the given menu
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   618
    def AddAddMenuItems(self, menu):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   619
        [ID_ADD_BLOCK, ID_ADD_VARIABLE, ID_ADD_CONNECTION,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   620
         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
   621
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   622
        # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   623
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   624
            (ID_ADD_BLOCK, wx.ITEM_NORMAL, _(u'Block'), '', self.GetAddMenuCallBack(self.AddNewBlock)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   625
            (ID_ADD_VARIABLE, wx.ITEM_NORMAL, _(u'Variable'), '', self.GetAddMenuCallBack(self.AddNewVariable)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   626
            (ID_ADD_CONNECTION, wx.ITEM_NORMAL, _(u'Connection'), '', self.GetAddMenuCallBack(self.AddNewConnection)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   627
            None])
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   628
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   629
        if self.CurrentLanguage != "FBD":
1773
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   630
            [
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   631
                ID_ADD_POWER_RAIL, ID_ADD_CONTACT, ID_ADD_COIL,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   632
            ] = [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
   633
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   634
            # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   635
            self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   636
                (ID_ADD_POWER_RAIL, wx.ITEM_NORMAL, _(u'Power Rail'), '', self.GetAddMenuCallBack(self.AddNewPowerRail)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   637
                (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
   638
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   639
            if self.CurrentLanguage != "SFC":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   640
                self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   641
                     (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
   642
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   643
            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
   644
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   645
        if self.CurrentLanguage == "SFC":
1773
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   646
            [
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   647
                ID_ADD_INITIAL_STEP, ID_ADD_STEP, ID_ADD_TRANSITION,
38fde37c3766 clean-up: fix PEP8 E124 closing bracket does not match visual indentation
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1768
diff changeset
   648
                ID_ADD_ACTION_BLOCK, ID_ADD_DIVERGENCE, ID_ADD_JUMP,
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   649
            ] = [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
   650
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   651
            # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   652
            self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   653
                (ID_ADD_INITIAL_STEP, wx.ITEM_NORMAL, _(u'Initial Step'), '', self.GetAddMenuCallBack(self.AddNewStep, True)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   654
                (ID_ADD_STEP, wx.ITEM_NORMAL, _(u'Step'), '', self.GetAddMenuCallBack(self.AddNewStep)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   655
                (ID_ADD_TRANSITION, wx.ITEM_NORMAL, _(u'Transition'), '', self.GetAddMenuCallBack(self.AddNewTransition)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   656
                (ID_ADD_ACTION_BLOCK, wx.ITEM_NORMAL, _(u'Action Block'), '', self.GetAddMenuCallBack(self.AddNewActionBlock)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   657
                (ID_ADD_DIVERGENCE, wx.ITEM_NORMAL, _(u'Divergence'), '', self.GetAddMenuCallBack(self.AddNewDivergence)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   658
                (ID_ADD_JUMP, wx.ITEM_NORMAL, _(u'Jump'), '', self.GetAddMenuCallBack(self.AddNewJump)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   659
                None])
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   660
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   661
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   662
             (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
   663
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   664
    # Add Default Menu items to the given menu
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   665
    def AddDefaultMenuItems(self, menu, edit=False, block=False):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   666
        if block:
852
1009f956d2ee Fix support for adjusting block size to block minimum size and to Viewer scaling
Laurent Bessard
parents: 832
diff changeset
   667
            [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
   668
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   669
            # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   670
            self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   671
                 (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
   672
                 (ID_ADJUST_BLOCK_SIZE, wx.ITEM_NORMAL, _(u'Adjust Block Size'), '', self.OnAdjustBlockSizeMenu),
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   673
                 (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
   674
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   675
            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
   676
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   677
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   678
            [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
   679
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   680
            # Create menu items
1586
e17406dd4f06 remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents: 1584
diff changeset
   681
            if self.CurrentLanguage == 'FBD':
e17406dd4f06 remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents: 1584
diff changeset
   682
                self.AddMenuItems(menu, [
e17406dd4f06 remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents: 1584
diff changeset
   683
                    (ID_CLEAR_EXEC_ORDER, wx.ITEM_NORMAL, _(u'Clear Execution Order'), '', self.OnClearExecutionOrderMenu),
e17406dd4f06 remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents: 1584
diff changeset
   684
                    (ID_RESET_EXEC_ORDER, wx.ITEM_NORMAL, _(u'Reset Execution Order'), '', self.OnResetExecutionOrderMenu)])
e17406dd4f06 remove clear and reset execution order buttons in popup menu in SFC and LD viewers.
Sergey Surkov <surkovsv93@gmail.com>
parents: 1584
diff changeset
   685
                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
   686
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   687
            add_menu = wx.Menu(title='')
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   688
            self.AddAddMenuItems(add_menu)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   689
            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
   690
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   691
        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
   692
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   693
        [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
   694
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   695
        # Create menu items
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   696
        self.AddMenuItems(menu, [
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   697
             (ID_CUT, wx.ITEM_NORMAL, _(u'Cut'), '', self.GetClipboardCallBack(self.Cut)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   698
             (ID_COPY, wx.ITEM_NORMAL, _(u'Copy'), '', self.GetClipboardCallBack(self.Copy)),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   699
             (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
   700
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   701
        menu.Enable(ID_CUT, block)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   702
        menu.Enable(ID_COPY, block)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   703
        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
   704
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   705
    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
   706
        self.Editor = wx.ScrolledWindow(prnt, name="Viewer",
1768
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   707
                                        pos=wx.Point(0, 0), size=wx.Size(0, 0),
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   708
                                        style=wx.HSCROLL | wx.VSCROLL)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   709
        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
   710
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   711
    # Create a new Viewer
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   712
    def __init__(self, parent, tagname, window, controler, debug=False, instancepath=""):
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   713
        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
   714
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   715
        EditorPanel.__init__(self, parent, tagname, window, controler, debug)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   716
        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
   717
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   718
        # Adding a rubberband to Viewer
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   719
        self.rubberBand = RubberBand(viewer=self)
1740
b789b695b5c6 clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1739
diff changeset
   720
        self.Editor.SetBackgroundColour(wx.Colour(255, 255, 255))
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   721
        self.Editor.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   722
        self.ResetView()
1342
c17507a10807 Fixed various latency issues removing unnecessary calls
Laurent Bessard
parents: 1338
diff changeset
   723
        self.LastClientSize = None
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   724
        self.Scaling = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   725
        self.DrawGrid = True
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   726
        self.GridBrush = wx.TRANSPARENT_BRUSH
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   727
        self.PageSize = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   728
        self.PagePen = wx.TRANSPARENT_PEN
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   729
        self.DrawingWire = False
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   730
        self.current_id = 0
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   731
        self.TagName = tagname
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   732
        self.Highlights = []
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   733
        self.SearchParams = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   734
        self.SearchResults = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   735
        self.CurrentFindHighlight = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   736
        self.InstancePath = instancepath
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   737
        self.StartMousePos = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   738
        self.StartScreenPos = None
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
   739
        self.InstanceName = DebugInstanceName(self)
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
   740
1224
30e72bc7d21b Fixed lag when moving mouse over Viewer
Laurent Bessard
parents: 1208
diff changeset
   741
        # Prevent search for highlighted element to be called too often
30e72bc7d21b Fixed lag when moving mouse over Viewer
Laurent Bessard
parents: 1208
diff changeset
   742
        self.LastHighlightCheckTime = gettime()
30e72bc7d21b Fixed lag when moving mouse over Viewer
Laurent Bessard
parents: 1208
diff changeset
   743
        # Prevent search for element producing tooltip to be called too often
30e72bc7d21b Fixed lag when moving mouse over Viewer
Laurent Bessard
parents: 1208
diff changeset
   744
        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
   745
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   746
        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
   747
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   748
        # Initialize Cursors
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   749
        ResetCursors()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   750
        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
   751
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   752
        # Initialize Block, Wire and Comment numbers
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   753
        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
   754
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   755
        # Initialize Viewer mode to Selection mode
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   756
        self.Mode = MODE_SELECTION
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   757
        self.SavedMode = False
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   758
        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
   759
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   760
        if not self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   761
            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
   762
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   763
        self.ElementRefreshList = []
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   764
        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
   765
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   766
        dc = wx.ClientDC(self.Editor)
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   767
        font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"])
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   768
        dc.SetFont(font)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   769
        width, height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   770
        while width > 260:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   771
            faces["size"] -= 1
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   772
            font = wx.Font(faces["size"], wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["mono"])
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   773
            dc.SetFont(font)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   774
            width, height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   775
        self.SetFont(font)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   776
        self.MiniTextDC = wx.MemoryDC()
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
   777
        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
   778
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   779
        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
   780
        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
   781
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   782
        self.RefreshHighlightsTimer = wx.Timer(self, -1)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   783
        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
   784
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   785
        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
   786
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   787
        # Link Viewer event to corresponding methods
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   788
        self.Editor.Bind(wx.EVT_PAINT, self.OnPaint)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   789
        self.Editor.Bind(wx.EVT_LEFT_DOWN, self.OnViewerLeftDown)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   790
        self.Editor.Bind(wx.EVT_LEFT_UP, self.OnViewerLeftUp)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   791
        self.Editor.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   792
        self.Editor.Bind(wx.EVT_RIGHT_DOWN, self.OnViewerRightDown)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   793
        self.Editor.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   794
        self.Editor.Bind(wx.EVT_MIDDLE_DOWN, self.OnViewerMiddleDown)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   795
        self.Editor.Bind(wx.EVT_MIDDLE_UP, self.OnViewerMiddleUp)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   796
        self.Editor.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   797
        self.Editor.Bind(wx.EVT_MOTION, self.OnViewerMotion)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   798
        self.Editor.Bind(wx.EVT_CHAR, self.OnChar)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   799
        self.Editor.Bind(wx.EVT_SCROLLWIN, self.OnScrollWindow)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   800
        self.Editor.Bind(wx.EVT_SCROLLWIN_THUMBRELEASE, self.OnScrollStop)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   801
        self.Editor.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheelWindow)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   802
        self.Editor.Bind(wx.EVT_SIZE, self.OnMoveWindow)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   803
        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
   804
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   805
    # Destructor
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   806
    def __del__(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   807
        DebugViewer.__del__(self)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   808
        self.Flush()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   809
        self.ResetView()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   810
        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
   811
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   812
    def SetCurrentCursor(self, cursor):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   813
        if self.Mode != MODE_MOTION:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   814
            global CURSORS
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   815
            if self.CurrentCursor != cursor:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   816
                self.CurrentCursor = cursor
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   817
                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
   818
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   819
    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
   820
        rect.x, rect.y = self.Editor.CalcScrolledPosition(int(rect.x * self.ViewScale[0]),
1768
691083b5682a clean-up: fix PEP8 E128 continuation line under-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1767
diff changeset
   821
                                                          int(rect.y * self.ViewScale[1]))
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   822
        rect.width = int(rect.width * self.ViewScale[0]) + 2
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   823
        rect.height = int(rect.height * self.ViewScale[1]) + 2
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   824
        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
   825
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   826
    def GetTitle(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   827
        if self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   828
            if len(self.InstancePath) > 15:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   829
                return "..." + self.InstancePath[-12:]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   830
            return self.InstancePath
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   831
        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
   832
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   833
    def GetScaling(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   834
        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
   835
828
319dac4c4fd3 Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents: 823
diff changeset
   836
    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
   837
        if variable_base:
319dac4c4fd3 Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents: 823
diff changeset
   838
            words = self.TagName.split("::")
319dac4c4fd3 Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents: 823
diff changeset
   839
            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
   840
                return ".".join(self.InstancePath.split(".")[:-1])
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   841
        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
   842
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   843
    def IsViewing(self, tagname):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   844
        if self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   845
            return self.InstancePath == tagname
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   846
        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
   847
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   848
    # Returns a new id
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   849
    def GetNewId(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   850
        self.current_id += 1
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   851
        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
   852
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   853
    def SetScale(self, scale_number, refresh=True, mouse_event=None):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   854
        new_scale = max(0, min(scale_number, len(ZOOM_FACTORS) - 1))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   855
        if self.CurrentScale != new_scale:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   856
            if refresh:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   857
                dc = self.GetLogicalDC()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   858
            self.CurrentScale = new_scale
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   859
            self.ViewScale = (ZOOM_FACTORS[self.CurrentScale], ZOOM_FACTORS[self.CurrentScale])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   860
            if refresh:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   861
                self.Editor.Freeze()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   862
                if mouse_event is None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   863
                    client_size = self.Editor.GetClientSize()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   864
                    mouse_pos = wx.Point(client_size[0] / 2, client_size[1] / 2)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   865
                    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
   866
                    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
   867
                    mouse_event.y = mouse_pos.y
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   868
                else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   869
                    mouse_pos = mouse_event.GetPosition()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   870
                pos = mouse_event.GetLogicalPosition(dc)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   871
                xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   872
                ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   873
                scrollx = max(0, round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   874
                scrolly = max(0, round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   875
                if scrollx > xmax or scrolly > ymax:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   876
                    self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   877
                    self.Scroll(scrollx, scrolly)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   878
                else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   879
                    self.Scroll(scrollx, scrolly)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   880
                    self.RefreshScrollBars()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   881
                self.RefreshScaling(refresh)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   882
                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
   883
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   884
    def GetScale(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   885
        return self.CurrentScale
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   886
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   887
    def GetViewScale(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   888
        return self.ViewScale
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   889
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   890
    def GetLogicalDC(self, buffered=False):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   891
        if buffered:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   892
            bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   893
            dc = wx.MemoryDC(bitmap)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   894
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   895
            dc = wx.ClientDC(self.Editor)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   896
        dc.SetFont(self.GetFont())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   897
        if wx.VERSION >= (2, 6, 0):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   898
            self.Editor.DoPrepareDC(dc)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   899
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   900
            self.Editor.PrepareDC(dc)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   901
        dc.SetUserScale(self.ViewScale[0], self.ViewScale[1])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   902
        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
   903
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   904
    def RefreshRect(self, rect, eraseBackground=True):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   905
        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
   906
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   907
    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
   908
        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
   909
            self.Editor.Freeze()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   910
        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
   911
        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
   912
            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
   913
                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
   914
            else:
8a620b460b49 Fixed support for drawing instance path at a fixed position in Viewer debug mode on Windows
Laurent Bessard
parents: 1203
diff changeset
   915
                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
   916
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   917
    def GetScrollPos(self, orientation):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   918
        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
   919
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   920
    def GetScrollRange(self, orientation):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   921
        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
   922
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   923
    def GetScrollThumb(self, orientation):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   924
        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
   925
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   926
    def CalcUnscrolledPosition(self, x, y):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   927
        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
   928
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   929
    def GetViewStart(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   930
        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
   931
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   932
    def GetTextExtent(self, text):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   933
        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
   934
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   935
    def GetFont(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   936
        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
   937
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   938
    def GetMiniTextExtent(self, text):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   939
        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
   940
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   941
    def GetMiniFont(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   942
        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
   943
1782
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
   944
    # -------------------------------------------------------------------------------
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
   945
    #                         Element management functions
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
   946
    # -------------------------------------------------------------------------------
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   947
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   948
    def AddBlock(self, block):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   949
        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
   950
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   951
    def AddWire(self, wire):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   952
        self.wire_id += 1
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   953
        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
   954
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   955
    def AddComment(self, comment):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   956
        self.Comments[comment.GetId()] = comment
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   957
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   958
    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
   959
        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
   960
            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
   961
        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
   962
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   963
    def IsWire(self, wire):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   964
        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
   965
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   966
    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
   967
        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
   968
            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
   969
        return False
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   970
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   971
    def RemoveBlock(self, block):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   972
        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
   973
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   974
    def RemoveWire(self, wire):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   975
        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
   976
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   977
    def RemoveComment(self, comment):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   978
        self.Comments.pop(comment.GetId())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   979
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   980
    def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   981
        blocks = self.Blocks.values()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   982
        wires = self.Wires.keys()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   983
        comments = self.Comments.values()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   984
        if sort_blocks:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   985
            blocks.sort(lambda x, y: cmp(x.GetId(), y.GetId()))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   986
        if sort_wires:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   987
            wires.sort(lambda x, y: cmp(self.Wires[x], self.Wires[y]))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   988
        if sort_comments:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   989
            comments.sort(lambda x, y: cmp(x.GetId(), y.GetId()))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   990
        return blocks + wires + comments
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   991
1605
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   992
    def GetContinuationByName(self, name):
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   993
        blocks = []
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   994
        for block in self.Blocks.itervalues():
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   995
            if isinstance(block, FBD_Connector) and\
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   996
               block.GetType() == CONTINUATION and\
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   997
               block.GetName() == name:
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   998
                blocks.append(block)
0b6b60241230 fix issue that in Debug mode LD instance doesn't show correctly its state after
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1599
diff changeset
   999
        return blocks
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
  1000
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1001
    def GetConnectorByName(self, name):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1002
        for block in self.Blocks.itervalues():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1003
            if isinstance(block, FBD_Connector) and\
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1004
               block.GetType() == CONNECTOR and\
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1005
               block.GetName() == name:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1006
                return block
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1007
        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
  1008
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
  1009
    def RefreshVisibleElements(self, xp=None, yp=None):
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1010
        x, y = self.Editor.CalcUnscrolledPosition(0, 0)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1011
        if xp is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1012
            x = xp * self.Editor.GetScrollPixelsPerUnit()[0]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1013
        if yp is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1014
            y = yp * self.Editor.GetScrollPixelsPerUnit()[1]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1015
        width, height = self.Editor.GetClientSize()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1016
        screen = wx.Rect(int(x / self.ViewScale[0]), int(y / self.ViewScale[1]),
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1017
                         int(width / self.ViewScale[0]), int(height / self.ViewScale[1]))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1018
        for comment in self.Comments.itervalues():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1019
            comment.TestVisible(screen)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1020
        for wire in self.Wires.iterkeys():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1021
            wire.TestVisible(screen)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1022
        for block in self.Blocks.itervalues():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1023
            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
  1024
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1025
    def GetElementIECPath(self, element):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1026
        iec_path = None
828
319dac4c4fd3 Fix debug of Action and Transition defined in FBD and LD using Viewer
laurent
parents: 823
diff changeset
  1027
        instance_path = self.GetInstancePath(True)
1166
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1028
        if isinstance(element, (Wire, Connector)):
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1029
            if isinstance(element, Wire):
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1030
                element = element.EndConnected
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1031
            block = element.GetParentBlock()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1032
            if isinstance(block, FBD_Block):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1033
                blockname = block.GetName()
1166
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1034
                connectorname = element.GetName()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1035
                if blockname != "":
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1036
                    iec_path = "%s.%s.%s" % (instance_path, blockname, connectorname)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1037
                else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1038
                    if connectorname == "":
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1039
                        iec_path = "%s.%s%d" % (instance_path, block.GetType(), block.GetId())
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1040
                    else:
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1041
                        iec_path = "%s.%s%d_%s" % (instance_path, block.GetType(), block.GetId(), connectorname)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1042
            elif isinstance(block, FBD_Variable):
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1043
                iec_path = "%s.%s" % (instance_path, block.GetName())
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1044
            elif isinstance(block, FBD_Connector):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1045
                connection = self.GetConnectorByName(block.GetName())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1046
                if connection is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1047
                    connector = connection.GetConnector()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1048
                    if len(connector.Wires) == 1:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1049
                        iec_path = self.GetElementIECPath(connector.Wires[0][0])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1050
        elif isinstance(element, LD_Contact):
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1051
            iec_path = "%s.%s" % (instance_path, element.GetName())
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1052
        elif isinstance(element, SFC_Step):
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1053
            iec_path = "%s.%s.X" % (instance_path, element.GetName())
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1054
        elif isinstance(element, SFC_Transition):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1055
            connectors = element.GetConnectors()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1056
            previous_steps = self.GetPreviousSteps(connectors["inputs"])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1057
            next_steps = self.GetNextSteps(connectors["outputs"])
1734
750eeb7230a1 clean-up: fix some PEP8 E228 missing whitespace around modulo operator
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
  1058
            iec_path = "%s.%s->%s" % (instance_path, ",".join(previous_steps), ",".join(next_steps))
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1059
        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
  1060
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
  1061
    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
  1062
        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
  1063
        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
  1064
        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
  1065
            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
  1066
            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
  1067
                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
  1068
                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
  1069
                    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
  1070
        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
  1071
            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
  1072
                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
  1073
            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
  1074
                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
  1075
        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
  1076
1644
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1077
    def CorrectElementSize(self, element, width, height):
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1078
        min_width, min_height = element.GetMinSize()
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1079
        if width < min_width:
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1080
            width = min_width
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1081
        if height < min_height:
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1082
            height = min_height
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1083
        if element.Size != (width, height):
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1084
            element.SetSize(width, height)
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1085
            element.RefreshModel()
976ce8c6195d Correct element size, if block type or variable name is wider than block width.
Surkov Sergey <surkovsv93@gmail.com>
parents: 1619
diff changeset
  1086
1782
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
  1087
    # -------------------------------------------------------------------------------
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
  1088
    #                              Reset functions
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
  1089
    # -------------------------------------------------------------------------------
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1090
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1091
    # Resets Viewer lists
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1092
    def ResetView(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1093
        self.Blocks = {}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1094
        self.Wires = {}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1095
        self.Comments = {}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1096
        self.Subscribed = {}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1097
        self.SelectedElement = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1098
        self.HighlightedElement = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1099
        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
  1100
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1101
    def Flush(self):
1205
638d1d430d24 Fixed bug Viewer not refreshed when debugging
Laurent Bessard
parents: 1204
diff changeset
  1102
        self.UnsubscribeAllDataConsumers(tick=False)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1103
        for block in self.Blocks.itervalues():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1104
            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
  1105
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1106
    # Remove all elements
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1107
    def CleanView(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1108
        for block in self.Blocks.itervalues():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1109
            block.Clean()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1110
        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
  1111
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1112
    # Changes Viewer mode
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1113
    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
  1114
        if self.Mode != mode or mode == MODE_SELECTION:
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1115
            if self.Mode == MODE_MOTION:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1116
                wx.CallAfter(self.Editor.SetCursor, wx.NullCursor)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1117
            self.Mode = mode
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1118
            self.SavedMode = False
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1119
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1120
            self.SavedMode = True
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1121
        # Reset selection
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1122
        if self.Mode != MODE_SELECTION and self.SelectedElement:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1123
            self.SelectedElement.SetSelected(False)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1124
            self.SelectedElement = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1125
        if self.Mode == MODE_MOTION:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1126
            wx.CallAfter(self.Editor.SetCursor, wx.StockCursor(wx.CURSOR_HAND))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1127
            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
  1128
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1129
    # Return current drawing mode
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1130
    def GetDrawingMode(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1131
        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
  1132
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1133
    # Buffer the last model state
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1134
    def RefreshBuffer(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1135
        self.Controler.BufferProject()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1136
        if self.ParentWindow:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1137
            self.ParentWindow.RefreshTitle()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1138
            self.ParentWindow.RefreshFileMenu()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1139
            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
  1140
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1141
    def StartBuffering(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1142
        if not self.Buffering:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1143
            self.Buffering = True
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1144
            self.Controler.StartBuffering()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1145
            if self.ParentWindow:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1146
                self.ParentWindow.RefreshTitle()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1147
                self.ParentWindow.RefreshFileMenu()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1148
                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
  1149
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1150
    def ResetBuffer(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1151
        if self.Buffering:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1152
            self.Controler.EndBuffering()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1153
            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
  1154
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1155
    def GetBufferState(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1156
        if not self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1157
            return self.Controler.GetBufferState()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1158
        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
  1159
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1160
    def Undo(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1161
        if not self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1162
            self.Controler.LoadPrevious()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1163
            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
  1164
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1165
    def Redo(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1166
        if not self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1167
            self.Controler.LoadNext()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1168
            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
  1169
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1170
    def HasNoModel(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1171
        if not self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1172
            return self.Controler.GetEditedElement(self.TagName) is None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1173
        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
  1174
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1175
    # Refresh the current scaling
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1176
    def RefreshScaling(self, refresh=True):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1177
        properties = self.Controler.GetProjectProperties(self.Debug)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1178
        scaling = properties["scaling"][self.CurrentLanguage]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1179
        if scaling[0] != 0 and scaling[1] != 0:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1180
            self.Scaling = scaling
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1181
            if self.DrawGrid:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1182
                width = max(2, int(scaling[0] * self.ViewScale[0]))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1183
                height = max(2, int(scaling[1] * self.ViewScale[1]))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1184
                bitmap = wx.EmptyBitmap(width, height)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1185
                dc = wx.MemoryDC(bitmap)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1186
                dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1187
                dc.Clear()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1188
                dc.SetPen(MiterPen(wx.Colour(180, 180, 180)))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1189
                dc.DrawPoint(0, 0)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1190
                self.GridBrush = wx.BrushFromBitmap(bitmap)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1191
            else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1192
                self.GridBrush = wx.TRANSPARENT_BRUSH
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1193
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1194
            self.Scaling = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1195
            self.GridBrush = wx.TRANSPARENT_BRUSH
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1196
        page_size = properties["pageSize"]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1197
        if page_size != (0, 0):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1198
            self.PageSize = map(int, page_size)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1199
            self.PagePen = MiterPen(wx.Colour(180, 180, 180))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1200
        else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1201
            self.PageSize = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1202
            self.PagePen = wx.TRANSPARENT_PEN
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1203
        if refresh:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1204
            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
  1205
            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
  1206
1782
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
  1207
    # -------------------------------------------------------------------------------
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
  1208
    #                          Refresh functions
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1780
diff changeset
  1209
    # -------------------------------------------------------------------------------
1417
374238039643 Added a variable name text entry dialog to allow name change on drag'n'drops
Edouard Tisserant
parents: 1406
diff changeset
  1210
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1211
    def ElementNeedRefresh(self, element):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1212
        self.ElementRefreshList_lock.acquire()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1213
        self.ElementRefreshList.append(element)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1214
        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
  1215
1431
df59be5afb08 more minor cleanup
Edouard Tisserant
parents: 1417
diff changeset
  1216
    def NewDataAvailable(self, ticks):
1366
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1217
        if self.IsShown():
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1218
            refresh_rect = None
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1219
            self.ElementRefreshList_lock.acquire()
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1220
            for element in self.ElementRefreshList:
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1221
                if refresh_rect is None:
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1222
                    refresh_rect = element.GetRedrawRect()
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1223
                else:
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1224
                    refresh_rect.Union(element.GetRedrawRect())
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1225
            self.ElementRefreshList = []
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1226
            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
  1227
1366
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1228
            if refresh_rect is not None:
3756ae754713 Fixed refresh speed so that interface is not blocked when debugging
Laurent Bessard
parents: 1363
diff changeset
  1229
                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
  1230
1176
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1170
diff changeset
  1231
    def SubscribeAllDataConsumers(self):
1201
3907f10efcf4 Fixed bug Viewer not refreshed when debugging
Laurent Bessard
parents: 1176
diff changeset
  1232
        self.RefreshView()
1176
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1170
diff changeset
  1233
        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
  1234
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1235
    # Refresh Viewer elements
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1236
    def RefreshView(self, variablepanel=True, selection=None):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1237
        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
  1238
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1239
        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
  1240
            self.ToolTipElement.DestroyToolTip()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1241
            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
  1242
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1243
        self.Inhibit(True)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1244
        self.current_id = 0
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1245
        # Start by reseting Viewer
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1246
        self.Flush()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1247
        self.ResetView()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1248
        self.ResetBuffer()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1249
        instance = {}
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1250
        # List of ids of already loaded blocks
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1743
diff changeset
  1251
        instances = self.Controler.GetEditedElementInstancesInfos(self.TagName, debug=self.Debug)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1252
        # 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
  1253
        while len(instances) > 0:
c1e6c712cc35 Replaced old graphic viewer blocks loading process by xslt stylesheet
Laurent Bessard
parents: 1335
diff changeset
  1254
            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
  1255
1766
c1e5b9f19483 clean-up: fix PEP8 E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1764
diff changeset
  1256
        if selection is not None and isinstance(self.SelectedElement, Graphic_Group):
1226
93e7a8abce5e Fixed lag when selecting all elements using CTRL+A or after paste a lot of blocks
Laurent Bessard
parents: 1225
diff changeset
  1257
            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
  1258
            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
  1259
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1260
        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
  1261
1674
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
  1262
        if self.TagName.split("::")[0] == "A" and self.Debug:
85e22d514c05 show whether instance of SFC action is currently active or not in its
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1671
diff changeset
  1263
            self.AddDataConsumer("%s.Q" % self.InstancePath.upper(), self.InstanceName)
1730
64d8f52bc8c8 clean-up for PEP8: fix W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1711
diff changeset
  1264
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1265
        for wire in self.Wires:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1266
            if not wire.IsConnectedCompatible():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1267
                wire.SetValid(False)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1268
            if self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1269
                iec_path = self.GetElementIECPath(wire)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1270
                if iec_path is None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1271
                    block = wire.EndConnected.GetParentBlock()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1272
                    if isinstance(block, LD_PowerRail):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1273
                        wire.SetValue(True)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1274
                elif self.AddDataConsumer(iec_path.upper(), wire) is None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1275
                    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
  1276
                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
  1277
                    wire.SetModifier(self.GetWireModifier(wire))
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1278
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1279
        if self.Debug:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1280
            for block in self.Blocks.itervalues():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1281
                block.SpreadCurrent()
1166
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1282
                if isinstance(block, FBD_Block):
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1283
                    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
  1284
                        if len(output_connector.GetWires()) == 0:
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1285
                            iec_path = self.GetElementIECPath(output_connector)
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1286
                            if iec_path is not None:
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1287
                                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
  1288
                else:
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1289
                    iec_path = self.GetElementIECPath(block)
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1290
                    if iec_path is not None:
2ed9675be08d Added support for displaying value of unconnected block connectors in debug
Laurent Bessard
parents: 1141
diff changeset
  1291
                        self.AddDataConsumer(iec_path.upper(), block)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1292
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1293
        self.Inhibit(False)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1294
        self.RefreshVisibleElements()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1295
        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
  1296
        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
  1297
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1298
    def GetPreviousSteps(self, connectors):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1299
        steps = []
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1300
        for connector in connectors:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1301
            for wire, handle in connector.GetWires():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1302
                previous = wire.GetOtherConnected(connector).GetParentBlock()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1303
                if isinstance(previous, SFC_Step):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1304
                    steps.append(previous.GetName())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1305
                elif isinstance(previous, SFC_Divergence) and previous.GetType() in [SIMULTANEOUS_CONVERGENCE, SELECTION_DIVERGENCE]:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1306
                    connectors = previous.GetConnectors()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1307
                    steps.extend(self.GetPreviousSteps(connectors["inputs"]))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1308
        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
  1309
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1310
    def GetNextSteps(self, connectors):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1311
        steps = []
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1312
        for connector in connectors:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1313
            for wire, handle in connector.GetWires():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1314
                next = wire.GetOtherConnected(connector).GetParentBlock()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1315
                if isinstance(next, SFC_Step):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1316
                    steps.append(next.GetName())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1317
                elif isinstance(next, SFC_Jump):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1318
                    steps.append(next.GetTarget())
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1319
                elif isinstance(next, SFC_Divergence) and next.GetType() in [SIMULTANEOUS_DIVERGENCE, SELECTION_CONVERGENCE]:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1320
                    connectors = next.GetConnectors()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1321
                    steps.extend(self.GetNextSteps(connectors["outputs"]))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1322
        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
  1323
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1324
    def GetMaxSize(self):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1325
        maxx = maxy = 0
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1326
        for element in self.GetElements():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1327
            bbox = element.GetBoundingBox()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1328
            maxx = max(maxx, bbox.x + bbox.width)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1329
            maxy = max(maxy, bbox.y + bbox.height)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1330
        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
  1331
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1332
    def RefreshScrollBars(self, width_incr=0, height_incr=0):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1333
        xstart, ystart = self.GetViewStart()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1334
        window_size = self.Editor.GetClientSize()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1335
        maxx, maxy = self.GetMaxSize()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1336
        maxx = max(maxx + WINDOW_BORDER, (xstart * SCROLLBAR_UNIT + window_size[0]) / self.ViewScale[0])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1337
        maxy = max(maxy + WINDOW_BORDER, (ystart * SCROLLBAR_UNIT + window_size[1]) / self.ViewScale[1])
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1338
        if self.rubberBand.IsShown():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1339
            extent = self.rubberBand.GetCurrentExtent()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1340
            maxx = max(maxx, extent.x + extent.width)