LDViewer.py
author laurent
Sun, 08 Jan 2012 19:16:58 +0100
changeset 616 8a60ffcfd70b
parent 586 9aa96a36cf33
child 650 aaa3b02d42b1
permissions -rw-r--r--
Adding support for drag'n dropping variable from global defined in configurations and resources to POU variable panel or body editor for declaring external variables
Adding support for drag'n dropping located variables from topology panel to configurations and resources variable panel for declaring global located variables
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     1
#!/usr/bin/env python
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     3
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     4
#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
58
39cd981ff242 Changing file headers
lbessard
parents: 56
diff changeset
     5
#based on the plcopen standard. 
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     6
#
58
39cd981ff242 Changing file headers
lbessard
parents: 56
diff changeset
     7
#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     8
#
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     9
#See COPYING file for copyrights details.
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    10
#
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    11
#This library is free software; you can redistribute it and/or
5
f8652b073e84 GPL->LGPL
etisserant
parents: 2
diff changeset
    12
#modify it under the terms of the GNU General Public
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    13
#License as published by the Free Software Foundation; either
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    14
#version 2.1 of the License, or (at your option) any later version.
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    15
#
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    16
#This library is distributed in the hope that it will be useful,
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    17
#but WITHOUT ANY WARRANTY; without even the implied warranty of
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    18
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
58
39cd981ff242 Changing file headers
lbessard
parents: 56
diff changeset
    19
#General Public License for more details.
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    20
#
5
f8652b073e84 GPL->LGPL
etisserant
parents: 2
diff changeset
    21
#You should have received a copy of the GNU General Public
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    22
#License along with this library; if not, write to the Free Software
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    23
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    24
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    25
import wx
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
    26
import time
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    27
from types import *
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    28
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    29
from Viewer import *
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    30
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    31
def ExtractNextBlocks(block, block_list):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    32
    current_list = [block]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    33
    while len(current_list) > 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    34
        next_list = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    35
        for current in current_list:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    36
            connectors = current.GetConnectors()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    37
            input_connectors = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    38
            if isinstance(current, LD_PowerRail) and current.GetType() == RIGHTRAIL:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    39
                input_connectors = connectors
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    40
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    41
                if "inputs" in connectors:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    42
                    input_connectors = connectors["inputs"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    43
                if "input" in connectors:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    44
                    input_connectors = [connectors["input"]]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    45
            for connector in input_connectors:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    46
                for wire, handle in connector.GetWires():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    47
                    next = wire.EndConnected.GetParentBlock()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    48
                    if not isinstance(next, LD_PowerRail) and next not in block_list:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    49
                        block_list.append(next)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    50
                        next_list.append(next)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    51
        current_list = next_list
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    52
    
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    53
def CalcBranchSize(elements, stops):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    54
    branch_size = 0
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    55
    stop_list = stops
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    56
    for stop in stops:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    57
        ExtractNextBlocks(stop, stop_list)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    58
    element_tree = {}
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    59
    for element in elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    60
        if element not in element_tree:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    61
            element_tree[element] = {"parents":["start"], "children":[], "weight":None}
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    62
            GenerateTree(element, element_tree, stop_list)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    63
        elif element_tree[element]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    64
            element_tree[element]["parents"].append("start")
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    65
    remove_stops = {"start":[], "stop":[]}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    66
    for element, values in element_tree.items():
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    67
        if "stop" in values["children"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    68
            removed = []
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    69
            for child in values["children"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    70
                if child != "stop":
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    71
##                    if child in elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    72
##                        RemoveElement(child, element_tree)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    73
##                        removed.append(child)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    74
                    if "start" in element_tree[child]["parents"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    75
                        if element not in remove_stops["stop"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    76
                            remove_stops["stop"].append(element)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    77
                        if child not in remove_stops["start"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    78
                            remove_stops["start"].append(child)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    79
            for child in removed:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    80
                values["children"].remove(child)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    81
    for element in remove_stops["start"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    82
        element_tree[element]["parents"].remove("start")
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    83
    for element in remove_stops["stop"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    84
        element_tree[element]["children"].remove("stop")
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    85
    for element, values in element_tree.items():
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    86
        if values and "stop" in values["children"]:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    87
            CalcWeight(element, element_tree)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    88
            if values["weight"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    89
                branch_size += values["weight"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    90
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    91
                return 1
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
    92
    #print branch_size
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    93
    return branch_size
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    94
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    95
def RemoveElement(remove, element_tree):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    96
    if remove in element_tree and element_tree[remove]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    97
        for child in element_tree[remove]["children"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    98
            if child != "stop":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    99
                RemoveElement(child, element_tree)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   100
        element_tree.pop(remove)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   101
##        element_tree[remove] = None
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   102
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   103
def GenerateTree(element, element_tree, stop_list):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   104
    if element in element_tree:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   105
        connectors = element.GetConnectors()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   106
        input_connectors = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   107
        if isinstance(element, LD_PowerRail) and element.GetType() == RIGHTRAIL:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   108
            input_connectors = connectors
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   109
        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   110
            if "inputs" in connectors:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   111
                input_connectors = connectors["inputs"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   112
            if "input" in connectors:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   113
                input_connectors = [connectors["input"]]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   114
        for connector in input_connectors:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   115
            for wire, handle in connector.GetWires():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   116
                next = wire.EndConnected.GetParentBlock()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   117
                if isinstance(next, LD_PowerRail) and next.GetType() == LEFTRAIL or next in stop_list:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   118
##                    for remove in element_tree[element]["children"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   119
##                        RemoveElement(remove, element_tree)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   120
##                    element_tree[element]["children"] = ["stop"]
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   121
                    element_tree[element]["children"].append("stop")
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   122
##                elif element_tree[element]["children"] == ["stop"]:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   123
##                    element_tree[next] = None
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   124
                elif next not in element_tree or element_tree[next]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   125
                    element_tree[element]["children"].append(next)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   126
                    if next in element_tree:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   127
                        element_tree[next]["parents"].append(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   128
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   129
                        element_tree[next] = {"parents":[element], "children":[], "weight":None}
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   130
                        GenerateTree(next, element_tree, stop_list)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   131
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   132
def CalcWeight(element, element_tree):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   133
    weight = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   134
    parts = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   135
    if element in element_tree:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   136
        for parent in element_tree[element]["parents"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   137
            if parent == "start":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   138
                weight += 1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   139
            elif parent in element_tree:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   140
                if not parts:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   141
                    parts = len(element_tree[parent]["children"])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   142
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   143
                    parts = min(parts, len(element_tree[parent]["children"]))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   144
                if not element_tree[parent]["weight"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   145
                    CalcWeight(parent, element_tree)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   146
                if element_tree[parent]["weight"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   147
                    weight += element_tree[parent]["weight"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   148
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   149
                    element_tree[element]["weight"] = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   150
                    return
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   151
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   152
                element_tree[element]["weight"] = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   153
                return
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   154
        if not parts:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   155
            parts = 1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   156
        element_tree[element]["weight"] = max(1, weight / parts)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   157
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   158
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   159
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   160
#                     Ladder Diagram Graphic elements Viewer class
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   161
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   162
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   163
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   164
"""
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   165
Class derived from Viewer class that implements a Viewer of Ladder Diagram
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   166
"""
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   167
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   168
class LD_Viewer(Viewer):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   169
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   170
    def __init__(self, parent, tagname, window, controler, debug = False, instancepath = ""):
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   171
        Viewer.__init__(self, parent, tagname, window, controler, debug, instancepath)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   172
        self.Rungs = []
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   173
        self.RungComments = []
112
317148fc1225 Adding support for block copy
lbessard
parents: 90
diff changeset
   174
        self.CurrentLanguage = "LD"
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   175
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   176
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   177
#                          Refresh functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   178
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   179
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   180
    def ResetView(self):
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   181
        self.Rungs = []
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   182
        self.RungComments = []
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   183
        Viewer.ResetView(self)
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   184
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 563
diff changeset
   185
    def RefreshView(self, variablepanel=True, selection=None):
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 563
diff changeset
   186
        Viewer.RefreshView(self, variablepanel, selection)
554
08c26c62f5a7 Fix some bugs in driven drawing for LD viewer
laurent
parents: 550
diff changeset
   187
        wx.CallAfter(self.Refresh)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   188
        for i, rung in enumerate(self.Rungs):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   189
            bbox = rung.GetBoundingBox()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   190
            if i < len(self.RungComments):
67
3a1b0afdaf84 Adding support for automatically generate function blocks in interface when a block is added
lbessard
parents: 64
diff changeset
   191
                if self.RungComments[i]:
3a1b0afdaf84 Adding support for automatically generate function blocks in interface when a block is added
lbessard
parents: 64
diff changeset
   192
                    pos = self.RungComments[i].GetPosition()
3a1b0afdaf84 Adding support for automatically generate function blocks in interface when a block is added
lbessard
parents: 64
diff changeset
   193
                    if pos[1] > bbox.y:
3a1b0afdaf84 Adding support for automatically generate function blocks in interface when a block is added
lbessard
parents: 64
diff changeset
   194
                        self.RungComments.insert(i, None)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   195
            else:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   196
                self.RungComments.insert(i, None)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   197
    
383
25ffba02b6a8 Improving viewer loading instances procedure to faster
laurent
parents: 382
diff changeset
   198
    def loadInstance(self, instance, ids, selection):
25ffba02b6a8 Improving viewer loading instances procedure to faster
laurent
parents: 382
diff changeset
   199
        Viewer.loadInstance(self, instance, ids, selection)
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   200
        if self.GetDrawingMode() != FREEDRAWING_MODE:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   201
            if instance["type"] == "leftPowerRail":
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   202
                element = self.FindElementById(instance["id"])
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   203
                rung = Graphic_Group(self)
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   204
                rung.SelectElement(element)
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   205
                self.Rungs.append(rung)
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   206
            elif instance["type"] == "rightPowerRail":
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   207
                rungs = []
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   208
                for connector in instance["inputs"]:
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   209
                    for link in connector["links"]:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   210
                        connected = self.FindElementById(link["refLocalId"])
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   211
                        rung = self.FindRung(connected)
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   212
                        if rung not in rungs:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   213
                            rungs.append(rung)
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   214
                if len(rungs) > 1:
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   215
                    raise ValueError, _("Ladder element with id %d is on more than one rung.")%instance["id"]
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   216
                element = self.FindElementById(instance["id"])
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   217
                element_connectors = element.GetConnectors()
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   218
                self.Rungs[rungs[0]].SelectElement(element)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   219
                for connector in element_connectors["inputs"]:
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   220
                    for wire, num in connector.GetWires():
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   221
                        self.Rungs[rungs[0]].SelectElement(wire)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   222
                wx.CallAfter(self.RefreshPosition, element)
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   223
            elif instance["type"] in ["contact", "coil"]:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   224
                rungs = []
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   225
                for link in instance["inputs"][0]["links"]:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   226
                    connected = self.FindElementById(link["refLocalId"])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   227
                    rung = self.FindRung(connected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   228
                    if rung not in rungs:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   229
                        rungs.append(rung)
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   230
                if len(rungs) > 1:
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   231
                    raise ValueError, _("Ladder element with id %d is on more than one rung.")%instance["id"]
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   232
                element = self.FindElementById(instance["id"])
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   233
                element_connectors = element.GetConnectors() 
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   234
                self.Rungs[rungs[0]].SelectElement(element)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   235
                for wire, num in element_connectors["inputs"][0].GetWires():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   236
                    self.Rungs[rungs[0]].SelectElement(wire)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   237
                wx.CallAfter(self.RefreshPosition, element)
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   238
            elif instance["type"] == "comment":
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   239
                element = self.FindElementById(instance["id"])
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   240
                pos = element.GetPosition()
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   241
                i = 0
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   242
                inserted = False
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   243
                while i < len(self.RungComments) and not inserted: 
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   244
                    ipos = self.RungComments[i].GetPosition()
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   245
                    if pos[1] < ipos[1]:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   246
                        self.RungComments.insert(i, element)
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   247
                        inserted = True
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   248
                    i += 1
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   249
                if not inserted:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   250
                    self.RungComments.append(element)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   251
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   252
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   253
#                          Search Element functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   254
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   255
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   256
    def FindRung(self, element):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   257
        for i, rung in enumerate(self.Rungs):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   258
            if rung.IsElementIn(element):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   259
                return i
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   260
        return None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   261
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   262
    def FindElement(self, event, exclude_group = False):
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   263
        if self.GetDrawingMode() == FREEDRAWING_MODE:
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   264
            return Viewer.FindElement(self, event, exclude_group)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   265
        
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   266
        dc = self.GetLogicalDC()
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   267
        pos = event.GetLogicalPosition(dc)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   268
        if self.SelectedElement and not isinstance(self.SelectedElement, (Graphic_Group, Wire)):
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   269
            if self.SelectedElement.HitTest(pos) or self.SelectedElement.TestHandle(pos) != (0, 0):
c798a68c5560 Lots of bugs fixed
lbessard
parents: 67
diff changeset
   270
                return self.SelectedElement
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   271
        elements = []
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   272
        for element in self.GetElements(sort_wires=True):
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   273
            if element.HitTest(pos) or element.TestHandle(event) != (0, 0):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   274
                elements.append(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   275
        if len(elements) == 1:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   276
            return elements[0]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   277
        elif len(elements) > 1:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   278
            group = Graphic_Group(self)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   279
            for element in elements:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   280
                if self.IsBlock(element):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   281
                    return element
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   282
                group.SelectElement(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   283
            return group
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   284
        return None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   285
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   286
    def SearchElements(self, bbox):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   287
        elements = []
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   288
        for element in self.Blocks.values() + self.Comments.values():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   289
            if element.IsInSelection(bbox):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   290
                elements.append(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   291
        return elements
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   292
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   293
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   294
#                          Mouse event functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   295
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   296
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   297
    def OnViewerLeftDown(self, event):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   298
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   299
            Viewer.OnViewerLeftDown(self, event)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   300
        elif self.Mode == MODE_SELECTION:
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   301
            element = self.FindElement(event)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   302
            if self.SelectedElement:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   303
                if not isinstance(self.SelectedElement, Graphic_Group):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   304
                    if self.SelectedElement != element:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   305
                        if self.IsWire(self.SelectedElement):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   306
                            self.SelectedElement.SetSelectedSegment(None)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   307
                        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   308
                            self.SelectedElement.SetSelected(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   309
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   310
                        self.SelectedElement = None
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   311
                elif element and isinstance(element, Graphic_Group):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   312
                    if self.SelectedElement.GetElements() != element.GetElements():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   313
                        for elt in self.SelectedElement.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   314
                            if self.IsWire(elt):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   315
                                elt.SetSelectedSegment(None)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   316
                        self.SelectedElement.SetSelected(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   317
                        self.SelectedElement = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   318
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   319
                    for elt in self.SelectedElement.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   320
                        if self.IsWire(elt):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   321
                            elt.SetSelectedSegment(None)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   322
                    self.SelectedElement.SetSelected(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   323
                    self.SelectedElement = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   324
            if element:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   325
                self.SelectedElement = element
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   326
                self.SelectedElement.OnLeftDown(event, self.GetLogicalDC(), self.Scaling)
144
b67a5de5a24a Adding optimization on Viewer redrawing
lbessard
parents: 122
diff changeset
   327
                self.SelectedElement.Refresh()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   328
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   329
                self.rubberBand.Reset()
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   330
                self.rubberBand.OnLeftDown(event, self.GetLogicalDC(), self.Scaling)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   331
        event.Skip()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   332
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   333
    def OnViewerLeftUp(self, event):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   334
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   335
            Viewer.OnViewerLeftUp(self, event)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   336
        elif self.rubberBand.IsShown():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   337
            if self.Mode == MODE_SELECTION:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   338
                elements = self.SearchElements(self.rubberBand.GetCurrentExtent())
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   339
                self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   340
                if len(elements) > 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   341
                    self.SelectedElement = Graphic_Group(self)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   342
                    self.SelectedElement.SetElements(elements)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   343
                    self.SelectedElement.SetSelected(True)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   344
        elif self.Mode == MODE_SELECTION and self.SelectedElement:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   345
            dc = self.GetLogicalDC() 
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   346
            if not isinstance(self.SelectedElement, Graphic_Group):
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   347
                if self.IsWire(self.SelectedElement):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   348
                    result = self.SelectedElement.TestSegment(event.GetLogicalPosition(dc), True)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   349
                    if result and result[1] in [EAST, WEST]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   350
                        self.SelectedElement.SetSelectedSegment(result[0])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   351
                else:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   352
                    self.SelectedElement.OnLeftUp(event, dc, self.Scaling)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   353
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   354
                for element in self.SelectedElement.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   355
                    if self.IsWire(element):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   356
                        result = element.TestSegment(event.GetLogicalPosition(dc), True)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   357
                        if result and result[1] in [EAST, WEST]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   358
                            element.SetSelectedSegment(result[0])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   359
                    else:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   360
                        element.OnLeftUp(event, dc, self.Scaling)
144
b67a5de5a24a Adding optimization on Viewer redrawing
lbessard
parents: 122
diff changeset
   361
            self.SelectedElement.Refresh()
382
42a9b03bba82 Redefine cursor switching procedure in graphic viewers
laurent
parents: 249
diff changeset
   362
            wx.CallAfter(self.SetCurrentCursor, 0)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   363
        event.Skip()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   364
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   365
    def OnViewerRightUp(self, event):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   366
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   367
            Viewer.OnViewerRightUp(self, event)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   368
        else:
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   369
            element = self.FindElement(event)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   370
            if element:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   371
                if self.SelectedElement and self.SelectedElement != element:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   372
                    self.SelectedElement.SetSelected(False)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   373
                self.SelectedElement = element
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   374
                if self.IsWire(self.SelectedElement):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   375
                    self.SelectedElement.SetSelectedSegment(0)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   376
                else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   377
                    self.SelectedElement.SetSelected(True)
563
3f92a5e18804 - Fixing editing graphic element (handles, rubberband and highlight) in graphic editor in order to make them keep the same size whatever the zoom factor applied to graphic editor
laurent
parents: 554
diff changeset
   378
                    self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
144
b67a5de5a24a Adding optimization on Viewer redrawing
lbessard
parents: 122
diff changeset
   379
                    self.SelectedElement.Refresh()
382
42a9b03bba82 Redefine cursor switching procedure in graphic viewers
laurent
parents: 249
diff changeset
   380
                wx.CallAfter(self.SetCurrentCursor, 0)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   381
        event.Skip()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   382
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   383
#-------------------------------------------------------------------------------
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   384
#                          Keyboard event functions
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   385
#-------------------------------------------------------------------------------
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   386
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   387
    def OnChar(self, event):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   388
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   389
            Viewer.OnChar(self, event)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   390
        else:
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   391
            xpos, ypos = self.GetScrollPos(wx.HORIZONTAL), self.GetScrollPos(wx.VERTICAL)
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   392
            xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL)
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   393
            ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   394
            keycode = event.GetKeyCode()
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   395
            if keycode == wx.WXK_DELETE and self.SelectedElement:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   396
                if self.IsBlock(self.SelectedElement):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   397
                    self.SelectedElement.Delete()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   398
                elif self.IsWire(self.SelectedElement):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   399
                    self.DeleteWire(self.SelectedElement)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   400
                elif isinstance(self.SelectedElement, Graphic_Group):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   401
                    all_wires = True
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   402
                    for element in self.SelectedElement.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   403
                        all_wires &= self.IsWire(element)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   404
                    if all_wires:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   405
                        self.DeleteWire(self.SelectedElement)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   406
                    else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   407
                        self.SelectedElement.Delete()
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   408
                self.RefreshBuffer()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   409
                self.RefreshScrollBars()
155
b695f7459ef6 Removing flickering on Windows
lbessard
parents: 144
diff changeset
   410
                self.Refresh(False)
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   411
            elif keycode == wx.WXK_LEFT:
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   412
                if event.ControlDown() and event.ShiftDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   413
                    self.Scroll(0, ypos)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   414
                elif event.ControlDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   415
                    self.Scroll(max(0, xpos - 1), ypos)
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   416
            elif keycode == wx.WXK_RIGHT:
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   417
                if event.ControlDown() and event.ShiftDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   418
                    self.Scroll(xmax, ypos)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   419
                elif event.ControlDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   420
                    self.Scroll(min(xpos + 1, xmax), ypos)
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   421
            elif keycode == wx.WXK_UP:
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   422
                if event.ControlDown() and event.ShiftDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   423
                    self.Scroll(xpos, 0)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   424
                elif event.ControlDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   425
                    self.Scroll(xpos, max(0, ypos - 1))
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   426
            elif keycode == wx.WXK_DOWN:
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   427
                if event.ControlDown() and event.ShiftDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   428
                    self.Scroll(xpos, ymax)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   429
                elif event.ControlDown():
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   430
                    self.Scroll(xpos, min(ypos + 1, ymax))
112
317148fc1225 Adding support for block copy
lbessard
parents: 90
diff changeset
   431
            else:
317148fc1225 Adding support for block copy
lbessard
parents: 90
diff changeset
   432
                event.Skip()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   433
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   434
#-------------------------------------------------------------------------------
510
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   435
#                  Model adding functions from Drop Target
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   436
#-------------------------------------------------------------------------------
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   437
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   438
    def AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type):
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   439
        if var_type == "BOOL":
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   440
            id = self.GetNewId()
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   441
            if var_class == INPUT:
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   442
                contact = LD_Contact(self, CONTACT_NORMAL, var_name, id)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   443
                width, height = contact.GetMinSize()
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   444
                if scaling is not None:
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   445
                    x = round(float(x) / float(scaling[0])) * scaling[0]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   446
                    y = round(float(y) / float(scaling[1])) * scaling[1]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   447
                    width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   448
                    height = round(float(height) / float(scaling[1]) + 0.5) * scaling[1]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   449
                contact.SetPosition(x, y)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   450
                contact.SetSize(width, height)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   451
                self.AddBlock(contact)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   452
                self.Controler.AddEditedElementContact(self.GetTagName(), id)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   453
                self.RefreshContactModel(contact)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   454
            else:
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   455
                coil = LD_Coil(self, COIL_NORMAL, var_name, id)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   456
                width, height = coil.GetMinSize()
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   457
                if scaling is not None:
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   458
                    x = round(float(x) / float(scaling[0])) * scaling[0]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   459
                    y = round(float(y) / float(scaling[1])) * scaling[1]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   460
                    width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   461
                    height = round(float(height) / float(scaling[1]) + 0.5) * scaling[1]
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   462
                coil.SetPosition(x, y)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   463
                coil.SetSize(width, height)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   464
                self.AddBlock(coil)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   465
                self.Controler.AddEditedElementCoil(self.GetTagName(), id)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   466
                self.RefreshCoilModel(coil)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   467
            self.RefreshBuffer()
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   468
            self.RefreshScrollBars()
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   469
            self.RefreshVisibleElements()
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   470
            self.Refresh(False)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   471
        else:
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   472
            Viewer.AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type)
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   473
e7327ea490b4 Adding support for creating contact and coil in LD Viewer instead of variable blocks when dropping a variable
laurent
parents: 426
diff changeset
   474
#-------------------------------------------------------------------------------
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   475
#                          Adding element functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   476
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   477
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   478
    def AddLadderRung(self):
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   479
        dialog = LDElementDialog(self.ParentWindow, self.Controler, "coil")
165
e464a4e4e06d Adding Font support in Dialog
lbessard
parents: 155
diff changeset
   480
        dialog.SetPreviewFont(self.GetFont())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   481
        varlist = []
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   482
        vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   483
        if vars:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   484
            for var in vars:
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   485
                if var["Class"] != "Input" and var["Type"] == "BOOL":
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   486
                    varlist.append(var["Name"])
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   487
        returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   488
        if returntype == "BOOL":
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   489
            varlist.append(self.Controler.GetEditedElementName(self.TagName))
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   490
        dialog.SetVariables(varlist)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   491
        dialog.SetValues({"name":"","type":COIL_NORMAL})
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   492
        if dialog.ShowModal() == wx.ID_OK:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   493
            values = dialog.GetValues()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   494
            startx, starty = LD_OFFSET[0], 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   495
            if len(self.Rungs) > 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   496
                bbox = self.Rungs[-1].GetBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   497
                starty = bbox.y + bbox.height
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   498
            starty += LD_OFFSET[1]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   499
            rung = Graphic_Group(self)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   500
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   501
            # Create comment
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   502
            id = self.GetNewId()
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   503
            comment = Comment(self, _("Comment"), id)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   504
            comment.SetPosition(startx, starty)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   505
            comment.SetSize(LD_COMMENT_DEFAULTSIZE[0], LD_COMMENT_DEFAULTSIZE[1])
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   506
            self.AddComment(comment)
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   507
            self.RungComments.append(comment)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   508
            self.Controler.AddEditedElementComment(self.TagName, id)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   509
            self.RefreshCommentModel(comment)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   510
            starty += LD_COMMENT_DEFAULTSIZE[1] + LD_OFFSET[1]
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   511
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   512
            # Create LeftPowerRail
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   513
            id = self.GetNewId()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   514
            leftpowerrail = LD_PowerRail(self, LEFTRAIL, id)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   515
            leftpowerrail.SetPosition(startx, starty)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   516
            leftpowerrail_connectors = leftpowerrail.GetConnectors()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   517
            self.AddBlock(leftpowerrail)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   518
            rung.SelectElement(leftpowerrail)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   519
            self.Controler.AddEditedElementPowerRail(self.TagName, id, LEFTRAIL)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   520
            self.RefreshPowerRailModel(leftpowerrail)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   521
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   522
            # Create Coil
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   523
            id = self.GetNewId()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   524
            coil = LD_Coil(self, values["type"], values["name"], id)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   525
            coil.SetPosition(startx, starty + (LD_LINE_SIZE - LD_ELEMENT_SIZE[1]) / 2)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   526
            coil_connectors = coil.GetConnectors()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   527
            self.AddBlock(coil)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   528
            rung.SelectElement(coil)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   529
            self.Controler.AddEditedElementCoil(self.TagName, id)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   530
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   531
            # Create Wire between LeftPowerRail and Coil
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   532
            wire = Wire(self)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   533
            start_connector = coil_connectors["inputs"][0]
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   534
            end_connector = leftpowerrail_connectors["outputs"][0]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   535
            start_connector.Connect((wire, 0), False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   536
            end_connector.Connect((wire, -1), False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   537
            wire.ConnectStartPoint(None, start_connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   538
            wire.ConnectEndPoint(None, end_connector)
50
4610aafc884e Bugs fixed
lbessard
parents: 45
diff changeset
   539
            self.AddWire(wire)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   540
            rung.SelectElement(wire)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   541
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   542
            # Create RightPowerRail
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   543
            id = self.GetNewId()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   544
            rightpowerrail = LD_PowerRail(self, RIGHTRAIL, id)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   545
            rightpowerrail.SetPosition(startx, starty)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   546
            rightpowerrail_connectors = rightpowerrail.GetConnectors()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   547
            self.AddBlock(rightpowerrail)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   548
            rung.SelectElement(rightpowerrail)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   549
            self.Controler.AddEditedElementPowerRail(self.TagName, id, RIGHTRAIL)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   550
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   551
            # Create Wire between LeftPowerRail and Coil
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   552
            wire = Wire(self)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   553
            start_connector = rightpowerrail_connectors["inputs"][0]
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   554
            end_connector = coil_connectors["outputs"][0]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   555
            start_connector.Connect((wire, 0), False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   556
            end_connector.Connect((wire, -1), False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   557
            wire.ConnectStartPoint(None, start_connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   558
            wire.ConnectEndPoint(None, end_connector)
50
4610aafc884e Bugs fixed
lbessard
parents: 45
diff changeset
   559
            self.AddWire(wire)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   560
            rung.SelectElement(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   561
            self.RefreshPosition(coil)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   562
            self.Rungs.append(rung)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   563
            self.RefreshBuffer()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   564
            self.RefreshScrollBars()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   565
            self.RefreshVisibleElements()
155
b695f7459ef6 Removing flickering on Windows
lbessard
parents: 144
diff changeset
   566
            self.Refresh(False)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   567
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   568
    def AddLadderContact(self):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   569
        wires = []
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   570
        if self.IsWire(self.SelectedElement):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   571
            left_element = self.SelectedElement.EndConnected
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   572
            if not isinstance(left_element.GetParentBlock(), LD_Coil):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   573
                wires.append(self.SelectedElement)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   574
        elif self.SelectedElement and isinstance(self.SelectedElement,Graphic_Group):
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   575
            if False not in [self.IsWire(element) for element in self.SelectedElement.GetElements()]:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   576
                for element in self.SelectedElement.GetElements():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   577
                    wires.append(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   578
        if len(wires) > 0:
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   579
            dialog = LDElementDialog(self.ParentWindow, self.Controler, "contact")
165
e464a4e4e06d Adding Font support in Dialog
lbessard
parents: 155
diff changeset
   580
            dialog.SetPreviewFont(self.GetFont())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   581
            varlist = []
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   582
            vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   583
            if vars:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   584
                for var in vars:
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   585
                    if var["Class"] != "Output" and var["Type"] == "BOOL":
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   586
                        varlist.append(var["Name"])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   587
            dialog.SetVariables(varlist)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   588
            dialog.SetValues({"name":"","type":CONTACT_NORMAL})
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   589
            if dialog.ShowModal() == wx.ID_OK:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   590
                values = dialog.GetValues()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   591
                points = wires[0].GetSelectedSegmentPoints()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   592
                id = self.GetNewId()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   593
                contact = LD_Contact(self, values["type"], values["name"], id)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   594
                contact.SetPosition(0, points[0].y - (LD_ELEMENT_SIZE[1] + 1) / 2)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   595
                self.AddBlock(contact)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   596
                self.Controler.AddEditedElementContact(self.TagName, id)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   597
                rungindex = self.FindRung(wires[0])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   598
                rung = self.Rungs[rungindex]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   599
                old_bbox = rung.GetBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   600
                rung.SelectElement(contact)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   601
                connectors = contact.GetConnectors()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   602
                left_elements = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   603
                right_elements = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   604
                left_index = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   605
                right_index = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   606
                for wire in wires:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   607
                    if wire.EndConnected not in left_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   608
                        left_elements.append(wire.EndConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   609
                        left_index.append(wire.EndConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   610
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   611
                        idx = left_elements.index(wire.EndConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   612
                        left_index[idx] = min(left_index[idx], wire.EndConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   613
                    if wire.StartConnected not in right_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   614
                        right_elements.append(wire.StartConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   615
                        right_index.append(wire.StartConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   616
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   617
                        idx = right_elements.index(wire.StartConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   618
                        right_index[idx] = min(right_index[idx], wire.StartConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   619
                    wire.SetSelectedSegment(None)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   620
                    wire.Clean()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   621
                    rung.SelectElement(wire)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   622
                    self.RemoveWire(wire)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   623
                wires = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   624
                right_wires = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   625
                for i, left_element in enumerate(left_elements):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   626
                    wire = Wire(self)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   627
                    wires.append(wire)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   628
                    connectors["inputs"][0].Connect((wire, 0), False)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   629
                    left_element.InsertConnect(left_index[i], (wire, -1), False)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   630
                    wire.ConnectStartPoint(None, connectors["inputs"][0])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   631
                    wire.ConnectEndPoint(None, left_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   632
                for i, right_element in enumerate(right_elements):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   633
                    wire = Wire(self)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   634
                    wires.append(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   635
                    right_wires.append(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   636
                    right_element.InsertConnect(right_index[i], (wire, 0), False)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   637
                    connectors["outputs"][0].Connect((wire, -1), False)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   638
                    wire.ConnectStartPoint(None, right_element)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   639
                    wire.ConnectEndPoint(None, connectors["outputs"][0])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   640
                right_wires.reverse()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   641
                for wire in wires:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   642
                    self.AddWire(wire)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   643
                    rung.SelectElement(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   644
                self.RefreshPosition(contact)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   645
                if len(right_wires) > 1:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   646
                    group = Graphic_Group(self)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   647
                    group.SetSelected(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   648
                    for wire in right_wires:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   649
                        wire.SetSelectedSegment(-1)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   650
                        group.SelectElement(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   651
                    self.SelectedElement = group
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   652
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   653
                    right_wires[0].SetSelectedSegment(-1)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   654
                    self.SelectedElement = right_wires[0]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   655
                rung.RefreshBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   656
                new_bbox = rung.GetBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   657
                self.RefreshRungs(new_bbox.height - old_bbox.height, rungindex + 1)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   658
                self.RefreshBuffer()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   659
                self.RefreshScrollBars()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   660
                self.RefreshVisibleElements()
155
b695f7459ef6 Removing flickering on Windows
lbessard
parents: 144
diff changeset
   661
                self.Refresh(False)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   662
        else:
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   663
            message = wx.MessageDialog(self, _("You must select the wire where a contact should be added!"), _("Error"), wx.OK|wx.ICON_ERROR)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   664
            message.ShowModal()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   665
            message.Destroy()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   666
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   667
    def AddLadderBranch(self):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   668
        blocks = []
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   669
        if self.IsBlock(self.SelectedElement):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   670
            blocks = [self.SelectedElement]
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   671
        elif isinstance(self.SelectedElement, Graphic_Group):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   672
            elements = self.SelectedElement.GetElements()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   673
            for element in elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   674
                blocks.append(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   675
        if len(blocks) > 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   676
            blocks_infos = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   677
            left_elements = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   678
            left_index = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   679
            right_elements = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   680
            right_index = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   681
            for block in blocks:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   682
                connectors = block.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   683
                block_infos = {"lefts":[],"rights":[]}
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   684
                block_infos.update(connectors)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   685
                for connector in block_infos["inputs"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   686
                    for wire, handle in connector.GetWires():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   687
                        found = False
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   688
                        for infos in blocks_infos:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   689
                            if wire.EndConnected in infos["outputs"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   690
                                for left_element in infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   691
                                    if left_element not in block_infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   692
                                        block_infos["lefts"].append(left_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   693
                                found = True
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   694
                        if not found and wire.EndConnected not in block_infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   695
                            block_infos["lefts"].append(wire.EndConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   696
                            if wire.EndConnected not in left_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   697
                                left_elements.append(wire.EndConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   698
                                left_index.append(wire.EndConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   699
                            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   700
                                index = left_elements.index(wire.EndConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   701
                                left_index[index] = max(left_index[index], wire.EndConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   702
                for connector in block_infos["outputs"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   703
                    for wire, handle in connector.GetWires():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   704
                        found = False
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   705
                        for infos in blocks_infos:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   706
                            if wire.StartConnected in infos["inputs"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   707
                                for right_element in infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   708
                                    if right_element not in block_infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   709
                                        block_infos["rights"].append(right_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   710
                                found = True
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   711
                        if not found and wire.StartConnected not in block_infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   712
                            block_infos["rights"].append(wire.StartConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   713
                            if wire.StartConnected not in right_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   714
                                right_elements.append(wire.StartConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   715
                                right_index.append(wire.StartConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   716
                            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   717
                                index = right_elements.index(wire.StartConnected)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   718
                                right_index[index] = max(right_index[index], wire.StartConnected.GetWireIndex(wire))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   719
                for connector in block_infos["inputs"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   720
                    for infos in blocks_infos:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   721
                        if connector in infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   722
                            infos["rights"].remove(connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   723
                            if connector in right_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   724
                                index = right_elements.index(connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   725
                                right_elements.pop(index)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   726
                                right_index.pop(index)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   727
                            for right_element in block_infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   728
                                if right_element not in infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   729
                                    infos["rights"].append(right_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   730
                for connector in block_infos["outputs"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   731
                    for infos in blocks_infos:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   732
                        if connector in infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   733
                            infos["lefts"].remove(connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   734
                            if connector in left_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   735
                                index = left_elements.index(connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   736
                                left_elements.pop(index)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   737
                                left_index.pop(index)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   738
                            for left_element in block_infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   739
                                if left_element not in infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   740
                                    infos["lefts"].append(left_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   741
                blocks_infos.append(block_infos)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   742
            for infos in blocks_infos:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   743
                left_elements = [element for element in infos["lefts"]]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   744
                for left_element in left_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   745
                    if isinstance(left_element.GetParentBlock(), LD_PowerRail):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   746
                        infos["lefts"].remove(left_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   747
                        if "LD_PowerRail" not in infos["lefts"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   748
                            infos["lefts"].append("LD_PowerRail")
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   749
                right_elements = [element for element in infos["rights"]]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   750
                for right_element in right_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   751
                    if isinstance(right_element.GetParentBlock(), LD_PowerRail):
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   752
                        infos["rights"].remove(right_element)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   753
                        if "LD_PowerRail" not in infos["rights"]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   754
                            infos["rights"].append("LD_PowerRail")
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   755
                infos["lefts"].sort()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   756
                infos["rights"].sort()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   757
            lefts = blocks_infos[0]["lefts"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   758
            rights = blocks_infos[0]["rights"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   759
            good = True
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   760
            for infos in blocks_infos[1:]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   761
                good &= infos["lefts"] == lefts
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   762
                good &= infos["rights"] == rights
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   763
            if good:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   764
                rungindex = self.FindRung(blocks[0])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   765
                rung = self.Rungs[rungindex]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   766
                old_bbox = rung.GetBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   767
                left_powerrail = True
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   768
                right_powerrail = True
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   769
                for element in left_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   770
                    left_powerrail &= isinstance(element.GetParentBlock(), LD_PowerRail)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   771
                for element in right_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   772
                    right_powerrail &= isinstance(element.GetParentBlock(), LD_PowerRail)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   773
                if not left_powerrail or not right_powerrail:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   774
                    wires = []
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   775
                    if left_powerrail:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   776
                        powerrail = left_elements[0].GetParentBlock()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   777
                        index = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   778
                        for left_element in left_elements: 
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   779
                            index = max(index, powerrail.GetConnectorIndex(left_element))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   780
                        powerrail.InsertConnector(index + 1)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   781
                        powerrail.RefreshModel()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   782
                        connectors = powerrail.GetConnectors()
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   783
                        right_elements.reverse()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   784
                        for i, right_element in enumerate(right_elements):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   785
                            new_wire = Wire(self)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   786
                            wires.append(new_wire)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   787
                            right_element.InsertConnect(right_index[i] + 1, (new_wire, 0), False)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   788
                            connectors["outputs"][index + 1].Connect((new_wire, -1), False)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   789
                            new_wire.ConnectStartPoint(None, right_element)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   790
                            new_wire.ConnectEndPoint(None, connectors["outputs"][index + 1])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   791
                        right_elements.reverse()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   792
                    elif right_powerrail:
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   793
                        dialog = LDElementDialog(self.ParentWindow, self.Controleur, "coil")
165
e464a4e4e06d Adding Font support in Dialog
lbessard
parents: 155
diff changeset
   794
                        dialog.SetPreviewFont(self.GetFont())
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   795
                        varlist = []
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   796
                        vars = self.Controler.GetEditedElementInterfaceVars(self.TagName, self.Debug)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   797
                        if vars:
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   798
                            for var in vars:
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   799
                                if var["Class"] != "Input" and var["Type"] == "BOOL":
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   800
                                    varlist.append(var["Name"])
249
d8425712acef Adding support for Debugging in PLCOpenEditor
lbessard
parents: 235
diff changeset
   801
                        returntype = self.Controler.GetEditedElementInterfaceReturnType(self.TagName, self.Debug)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   802
                        if returntype == "BOOL":
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   803
                            varlist.append(self.Controler.GetEditedElementName(self.TagName))
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   804
                        dialog.SetVariables(varlist)
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   805
                        dialog.SetValues({"name":"","type":COIL_NORMAL})
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
   806
                        if dialog.ShowModal() == wx.ID_OK:
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   807
                            values = dialog.GetValues()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   808
                            powerrail = right_elements[0].GetParentBlock()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   809
                            index = 0
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   810
                            for right_element in right_elements: 
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   811
                                index = max(index, powerrail.GetConnectorIndex(right_element))
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   812
                            powerrail.InsertConnector(index + 1)
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   813
                            powerrail.RefreshModel()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   814
                            connectors = powerrail.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   815
                            
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   816
                            # Create Coil
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   817
                            id = self.GetNewId()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   818
                            coil = LD_Coil(self, values["type"], values["name"], id)
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   819
                            pos = blocks[0].GetPosition()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   820
                            coil.SetPosition(pos[0], pos[1] + LD_LINE_SIZE)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   821
                            self.AddBlock(coil)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   822
                            rung.SelectElement(coil)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   823
                            self.Controler.AddEditedElementCoil(self.TagName, id)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   824
                            coil_connectors = coil.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   825
                            
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   826
                            # Create Wire between LeftPowerRail and Coil
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   827
                            wire = Wire(self)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   828
                            connectors["inputs"][index + 1].Connect((wire, 0), False)
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   829
                            coil_connectors["outputs"][0].Connect((wire, -1), False)
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   830
                            wire.ConnectStartPoint(None, connectors["inputs"][index + 1])
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   831
                            wire.ConnectEndPoint(None, coil_connectors["outputs"][0])
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   832
                            self.AddWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   833
                            rung.SelectElement(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   834
                            left_elements.reverse()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   835
                            
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   836
                            for i, left_element in enumerate(left_elements):
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   837
                                # Create Wire between LeftPowerRail and Coil
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   838
                                new_wire = Wire(self)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   839
                                wires.append(new_wire)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   840
                                coil_connectors["inputs"][0].Connect((new_wire, 0), False)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   841
                                left_element.InsertConnect(left_index[i] + 1, (new_wire, -1), False)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   842
                                new_wire.ConnectStartPoint(None, coil_connectors["inputs"][0])
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   843
                                new_wire.ConnectEndPoint(None, left_element)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   844
                            
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   845
                            self.RefreshPosition(coil)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   846
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   847
                        left_elements.reverse()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   848
                        right_elements.reverse()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   849
                        for i, left_element in enumerate(left_elements):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   850
                            for j, right_element in enumerate(right_elements):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   851
                                exist = False
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   852
                                for wire, handle in right_element.GetWires():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   853
                                    exist |= wire.EndConnected == left_element
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   854
                                if not exist:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   855
                                    new_wire = Wire(self)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   856
                                    wires.append(new_wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   857
                                    right_element.InsertConnect(right_index[j] + 1, (new_wire, 0), False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   858
                                    left_element.InsertConnect(left_index[i] + 1, (new_wire, -1), False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   859
                                    new_wire.ConnectStartPoint(None, right_element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   860
                                    new_wire.ConnectEndPoint(None, left_element)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   861
                    wires.reverse()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   862
                    for wire in wires:
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   863
                        self.AddWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   864
                        rung.SelectElement(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   865
                    right_elements.reverse()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   866
                for block in blocks:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   867
                    self.RefreshPosition(block)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   868
                for right_element in right_elements:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   869
                    self.RefreshPosition(right_element.GetParentBlock())
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   870
                self.SelectedElement.RefreshBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   871
                rung.RefreshBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   872
                new_bbox = rung.GetBoundingBox()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   873
                self.RefreshRungs(new_bbox.height - old_bbox.height, rungindex + 1)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   874
                self.RefreshBuffer()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 50
diff changeset
   875
                self.RefreshScrollBars()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   876
                self.RefreshVisibleElements()
155
b695f7459ef6 Removing flickering on Windows
lbessard
parents: 144
diff changeset
   877
                self.Refresh(False)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   878
            else:
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   879
                message = wx.MessageDialog(self, _("The group of block must be coherent!"), _("Error"), wx.OK|wx.ICON_ERROR)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   880
                message.ShowModal()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   881
                message.Destroy()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   882
        else:
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   883
            message = wx.MessageDialog(self, _("You must select the block or group of blocks around which a branch should be added!"), _("Error"), wx.OK|wx.ICON_ERROR)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   884
            message.ShowModal()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   885
            message.Destroy()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   886
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   887
    def AddLadderBlock(self):
391
07447ee3538e Adding support for internationalization
laurent
parents: 383
diff changeset
   888
        message = wx.MessageDialog(self, _("This option isn't available yet!"), _("Warning"), wx.OK|wx.ICON_EXCLAMATION)
7
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   889
        message.ShowModal()
f1691e685c49 Adding error messages on LD editor
lbessard
parents: 6
diff changeset
   890
        message.Destroy()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   891
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   892
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   893
#                          Delete element functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   894
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   895
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   896
    def DeleteContact(self, contact):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   897
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   898
            Viewer.DeleteContact(self, contact)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   899
        else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   900
            rungindex = self.FindRung(contact)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   901
            rung = self.Rungs[rungindex]
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   902
            old_bbox = rung.GetBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   903
            connectors = contact.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   904
            input_wires = [wire for wire, handle in connectors["inputs"][0].GetWires()]
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   905
            output_wires = [wire for wire, handle in connectors["outputs"][0].GetWires()]
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   906
            left_elements = [(wire.EndConnected, wire.EndConnected.GetWireIndex(wire)) for wire in input_wires]
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   907
            right_elements = [(wire.StartConnected, wire.StartConnected.GetWireIndex(wire)) for wire in output_wires]
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   908
            for wire in input_wires:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   909
                wire.Clean()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   910
                rung.SelectElement(wire)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   911
                self.RemoveWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   912
            for wire in output_wires:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   913
                wire.Clean()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   914
                rung.SelectElement(wire)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   915
                self.RemoveWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   916
            rung.SelectElement(contact)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   917
            contact.Clean()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   918
            left_elements.reverse()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   919
            right_elements.reverse()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   920
            powerrail = len(left_elements) == 1 and isinstance(left_elements[0][0].GetParentBlock(), LD_PowerRail)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   921
            for left_element, left_index in left_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   922
                for right_element, right_index in right_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   923
                    wire_removed = []
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   924
                    for wire, handle in right_element.GetWires():
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   925
                        if wire.EndConnected == left_element:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   926
                            wire_removed.append(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   927
                        elif isinstance(wire.EndConnected.GetParentBlock(), LD_PowerRail) and powerrail:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   928
                            left_powerrail = wire.EndConnected.GetParentBlock()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   929
                            index = left_powerrail.GetConnectorIndex(wire.EndConnected)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   930
                            left_powerrail.DeleteConnector(index)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   931
                            wire_removed.append(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   932
                    for wire in wire_removed:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   933
                        wire.Clean()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   934
                        self.RemoveWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   935
                        rung.SelectElement(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   936
            wires = []
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   937
            for left_element, left_index in left_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   938
                for right_element, right_index in right_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   939
                    wire = Wire(self)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   940
                    wires.append(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   941
                    right_element.InsertConnect(right_index, (wire, 0), False)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   942
                    left_element.InsertConnect(left_index, (wire, -1), False)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   943
                    wire.ConnectStartPoint(None, right_element)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   944
                    wire.ConnectEndPoint(None, left_element)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   945
            wires.reverse()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   946
            for wire in wires:
50
4610aafc884e Bugs fixed
lbessard
parents: 45
diff changeset
   947
                self.AddWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   948
                rung.SelectElement(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   949
            right_elements.reverse()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   950
            for right_element, right_index in right_elements:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   951
                self.RefreshPosition(right_element.GetParentBlock())
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   952
            self.RemoveBlock(contact)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   953
            self.Controler.RemoveEditedElementInstance(self.TagName, contact.GetId())
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   954
            rung.RefreshBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   955
            new_bbox = rung.GetBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   956
            self.RefreshRungs(new_bbox.height - old_bbox.height, rungindex + 1)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   957
            self.SelectedElement = None
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   958
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   959
    def RecursiveDeletion(self, element, rung):
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   960
        connectors = element.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   961
        input_wires = [wire for wire, handle in connectors["inputs"][0].GetWires()]
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   962
        left_elements = [wire.EndConnected for wire in input_wires]
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   963
        rung.SelectElement(element)
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   964
        element.Clean()
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   965
        for wire in input_wires:
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   966
            wire.Clean()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   967
            self.RemoveWire(wire)
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   968
            rung.SelectElement(wire)
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
   969
        self.RemoveBlock(element)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
   970
        self.Controler.RemoveEditedElementInstance(self.TagName, element.GetId())
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   971
        for left_element in left_elements:
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   972
            block = left_element.GetParentBlock()
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   973
            if len(left_element.GetWires()) == 0:
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   974
                self.RecursiveDeletion(block, rung)
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   975
            else:
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   976
                self.RefreshPosition(block)
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   977
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   978
    def DeleteCoil(self, coil):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   979
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   980
            Viewer.DeleteContact(self, coil)
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
   981
        else:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   982
            rungindex = self.FindRung(coil)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   983
            rung = self.Rungs[rungindex]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   984
            old_bbox = rung.GetBoundingBox()
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   985
            nbcoils = 0
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   986
            for element in rung.GetElements():
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   987
                if isinstance(element, LD_Coil):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   988
                    nbcoils += 1
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   989
            if nbcoils > 1:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   990
                connectors = coil.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
   991
                output_wires = [wire for wire, handle in connectors["outputs"][0].GetWires()]
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   992
                right_elements = [wire.StartConnected for wire in output_wires]
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   993
                for wire in output_wires:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   994
                    wire.Clean()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   995
                    self.Wires.remove(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   996
                    self.Elements.remove(wire)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   997
                    rung.SelectElement(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   998
                for right_element in right_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
   999
                    right_block = right_element.GetParentBlock()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1000
                    if isinstance(right_block, LD_PowerRail):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1001
                        if len(right_element.GetWires()) == 0:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1002
                            index = right_block.GetConnectorIndex(right_element)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1003
                            right_block.DeleteConnector(index)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1004
                            powerrail_connectors = right_block.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1005
                            for connector in powerrail_connectors["inputs"]:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1006
                                for wire, handle in connector.GetWires():
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1007
                                    block = wire.EndConnected.GetParentBlock()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1008
                                    endpoint = wire.EndConnected.GetPosition(False)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1009
                                    startpoint = connector.GetPosition(False)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1010
                                    block.Move(0, startpoint.y - endpoint.y)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1011
                                    self.RefreshPosition(block)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1012
                self.RecursiveDeletion(coil, rung)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1013
            else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1014
                for element in rung.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1015
                    if self.IsWire(element):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1016
                        element.Clean()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1017
                        self.RemoveWire(element)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1018
                for element in rung.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1019
                    if self.IsBlock(element):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
  1020
                        self.Controler.RemoveEditedElementInstance(self.TagName, element.GetId())
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1021
                        self.RemoveBlock(element)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 112
diff changeset
  1022
                self.Controler.RemoveEditedElementInstance(self.TagName, self.Comments[rungindex].GetId())
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1023
                self.RemoveComment(self.RungComments[rungindex])
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1024
                self.RungComments.pop(rungindex)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1025
                self.Rungs.pop(rungindex)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1026
                if rungindex < len(self.Rungs):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1027
                    next_bbox = self.Rungs[rungindex].GetBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1028
                    self.RefreshRungs(old_bbox.y - next_bbox.y, rungindex)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1029
            self.SelectedElement = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1030
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1031
    def DeleteWire(self, wire):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1032
        if self.GetDrawingMode() == FREEDRAWING_MODE:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1033
            Viewer.DeleteWire(self, wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1034
        else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1035
            wires = []
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1036
            left_elements = []
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1037
            right_elements = []
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1038
            if self.IsWire(wire):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1039
                wires = [wire]
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1040
            elif isinstance(wire, Graphic_Group):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1041
                for element in wire.GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1042
                    if self.IsWire(element):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1043
                        wires.append(element)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1044
                    else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1045
                        wires = []
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1046
                        break
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1047
            if len(wires) > 0:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1048
                rungindex = self.FindRung(wires[0])
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1049
                rung = self.Rungs[rungindex]
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1050
                old_bbox = rung.GetBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1051
                for wire in wires:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1052
                    connections = wire.GetSelectedSegmentConnections()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1053
                    left_block = wire.EndConnected.GetParentBlock()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1054
                    if wire.EndConnected not in left_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1055
                        left_elements.append(wire.EndConnected)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1056
                    if wire.StartConnected not in right_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1057
                        right_elements.append(wire.StartConnected)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1058
                    if connections == (False, False) or connections == (False, True) and isinstance(left_block, LD_PowerRail):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1059
                        wire.Clean()
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1060
                        self.RemoveWire(wire)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1061
                        rung.SelectElement(wire)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1062
                for left_element in left_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1063
                    left_block = left_element.GetParentBlock()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1064
                    if isinstance(left_block, LD_PowerRail):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1065
                        if len(left_element.GetWires()) == 0:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1066
                            index = left_block.GetConnectorIndex(left_element)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1067
                            left_block.DeleteConnector(index)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1068
                    else:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1069
                        connectors = left_block.GetConnectors()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1070
                        for connector in connectors["outputs"]:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1071
                            for wire, handle in connector.GetWires():
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1072
                                self.RefreshPosition(wire.StartConnected.GetParentBlock())
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1073
                for right_element in right_elements:
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1074
                    self.RefreshPosition(right_element.GetParentBlock())
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1075
                rung.RefreshBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1076
                new_bbox = rung.GetBoundingBox()
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1077
                self.RefreshRungs(new_bbox.height - old_bbox.height, rungindex + 1)
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1078
                self.SelectedElement = None
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1079
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1080
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1081
#                        Refresh element position functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1082
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1083
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1084
    def RefreshPosition(self, element, recursive=True):
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1085
        # If element is LeftPowerRail, no need to update position
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1086
        if isinstance(element, LD_PowerRail) and element.GetType() == LEFTRAIL:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1087
            element.RefreshModel()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1088
            return
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1089
        
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1090
        # Extract max position of the elements connected to input
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1091
        connectors = element.GetConnectors()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1092
        position = element.GetPosition()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1093
        maxx = 0
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1094
        onlyone = []
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1095
        for connector in connectors["inputs"]:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1096
            onlyone.append(len(connector.GetWires()) == 1)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1097
            for wire, handle in connector.GetWires():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1098
                onlyone[-1] &= len(wire.EndConnected.GetWires()) == 1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1099
                leftblock = wire.EndConnected.GetParentBlock()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1100
                pos = leftblock.GetPosition()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1101
                size = leftblock.GetSize()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1102
                maxx = max(maxx, pos[0] + size[0])
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1103
        
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1104
        # Refresh position of element
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1105
        if isinstance(element, LD_Coil):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1106
            interval = LD_WIRECOIL_SIZE
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1107
        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1108
            interval = LD_WIRE_SIZE
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1109
        if False in onlyone:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1110
            interval += LD_WIRE_SIZE
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1111
        movex = maxx + interval - position[0]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1112
        element.Move(movex, 0)
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1113
        position = element.GetPosition()
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1114
        
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1115
        # Extract blocks connected to inputs
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1116
        blocks = []
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1117
        for i, connector in enumerate(connectors["inputs"]):
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1118
            for j, (wire, handle) in enumerate(connector.GetWires()):
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1119
                blocks.append(wire.EndConnected.GetParentBlock())
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1120
        
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1121
        for i, connector in enumerate(connectors["inputs"]):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1122
            startpoint = connector.GetPosition(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1123
            previous_blocks = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1124
            block_list = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1125
            start_offset = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1126
            if not onlyone[i]:
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1127
                middlepoint = maxx + LD_WIRE_SIZE
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1128
            for j, (wire, handle) in enumerate(connector.GetWires()):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1129
                block = wire.EndConnected.GetParentBlock()
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1130
                if isinstance(element, LD_PowerRail):
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1131
                    pos = block.GetPosition()
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1132
                    size = leftblock.GetSize()
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1133
                    movex = position[0] - LD_WIRE_SIZE - size[0] - pos[0]
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1134
                    block.Move(movex, 0)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1135
                endpoint = wire.EndConnected.GetPosition(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1136
                if j == 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1137
                    if not onlyone[i] and wire.EndConnected.GetWireIndex(wire) > 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1138
                        start_offset = endpoint.y - startpoint.y
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1139
                    offset = start_offset
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1140
                else:
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1141
                    offset = start_offset + LD_LINE_SIZE * CalcBranchSize(previous_blocks, blocks)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1142
                if block in block_list:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1143
                    wires = wire.EndConnected.GetWires()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1144
                    endmiddlepoint = wires[0][0].StartConnected.GetPosition(False)[0] - LD_WIRE_SIZE
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
  1145
                    points = [startpoint, wx.Point(middlepoint, startpoint.y),
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
  1146
                              wx.Point(middlepoint, startpoint.y + offset),
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
  1147
                              wx.Point(endmiddlepoint, startpoint.y + offset),
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
  1148
                              wx.Point(endmiddlepoint, endpoint.y), endpoint]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1149
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1150
                    if startpoint.y + offset != endpoint.y:
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1151
                        if isinstance(element, LD_PowerRail):
554
08c26c62f5a7 Fix some bugs in driven drawing for LD viewer
laurent
parents: 550
diff changeset
  1152
                            element.MoveConnector(connector, startpoint.y - endpoint.y)
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1153
                        elif isinstance(block, LD_PowerRail):
554
08c26c62f5a7 Fix some bugs in driven drawing for LD viewer
laurent
parents: 550
diff changeset
  1154
                            block.MoveConnector(wire.EndConnected, startpoint.y - endpoint.y)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1155
                        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1156
                            block.Move(0, startpoint.y + offset - endpoint.y)
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1157
                            self.RefreshPosition(block, False)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1158
                        endpoint = wire.EndConnected.GetPosition(False)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1159
                    if not onlyone[i]:
64
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
  1160
                        points = [startpoint, wx.Point(middlepoint, startpoint.y),
dd6f693e46a1 Cleaning code for using only wxPython 2.6 class naming
lbessard
parents: 58
diff changeset
  1161
                                  wx.Point(middlepoint, endpoint.y), endpoint]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1162
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1163
                        points = [startpoint, endpoint]
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1164
                wire.SetPoints(points, False)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1165
                previous_blocks.append(block)
27
dae55dd9ee14 Current developping version
lbessard
parents: 9
diff changeset
  1166
                blocks.remove(block)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1167
                ExtractNextBlocks(block, block_list)
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1168
        
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1169
        element.RefreshModel(False)
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1170
        if recursive:
550
cfa295862d55 Fix Driven drawing in LD editor
pizza
parents: 510
diff changeset
  1171
            for connector in connectors["outputs"]:
8
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1172
                for wire, handle in connector.GetWires():
7ceec5c40d77 Adding auto-completion into ST and IL Editors
lbessard
parents: 7
diff changeset
  1173
                    self.RefreshPosition(wire.StartConnected.GetParentBlock())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1174
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1175
    def RefreshRungs(self, movey, fromidx):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1176
        if movey != 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1177
            for i in xrange(fromidx, len(self.Rungs)):
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1178
                self.RungComments[i].Move(0, movey)
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1179
                self.RungComments[i].RefreshModel()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1180
                self.Rungs[i].Move(0, movey)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1181
                for element in self.Rungs[i].GetElements():
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 28
diff changeset
  1182
                    if self.IsBlock(element):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1183
                        self.RefreshPosition(element)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1184
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1185
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1186
#                          Edit element content functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1187
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1188
28
fc23e1f415d8 Adding support for concurrent overriden standard function
lbessard
parents: 27
diff changeset
  1189
    def EditPowerRailContent(self, powerrail):
fc23e1f415d8 Adding support for concurrent overriden standard function
lbessard
parents: 27
diff changeset
  1190
        if self.GetDrawingMode() == FREEDRAWING_MODE:
fc23e1f415d8 Adding support for concurrent overriden standard function
lbessard
parents: 27
diff changeset
  1191
            Viewer.EditPowerRailContent(self, powerrail)
fc23e1f415d8 Adding support for concurrent overriden standard function
lbessard
parents: 27
diff changeset
  1192