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