PLCControler.py
author etisserant
Tue, 19 Aug 2008 18:06:41 +0200
changeset 233 de7ddb376150
parent 229 a5087e346baa
child 236 9f594b90bb1a
permissions -rw-r--r--
Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
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
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     5
#based on the plcopen standard. 
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
     6
#
58
39cd981ff242 Changing file headers
lbessard
parents: 57
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: 4
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: 57
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: 4
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
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
    25
from xml.dom import minidom
67
3a1b0afdaf84 Adding support for automatically generate function blocks in interface when a block is added
lbessard
parents: 63
diff changeset
    26
from types import StringType, UnicodeType
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    27
import cPickle
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    28
import os,sys,re
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
    29
from time import localtime
24
364320323b4d Adding support for date and time data types
lbessard
parents: 13
diff changeset
    30
from datetime import *
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    31
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    32
from plcopen import plcopen
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    33
from plcopen.structures import *
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    34
from graphics.GraphicCommons import *
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    35
from PLCGenerator import *
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    36
188
d64037e17075 Bug with task ticktime definition fixed
lbessard
parents: 184
diff changeset
    37
duration_model = re.compile("(?:([0-9]{1,2})h)?(?:([0-9]{1,2})m(?!s))?(?:([0-9]{1,2})s)?(?:([0-9]{1,3}(?:\.[0-9]*)?)ms)?")
24
364320323b4d Adding support for date and time data types
lbessard
parents: 13
diff changeset
    38
184
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    39
ITEMS_EDITABLE = [ITEM_PROJECT,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    40
                    ITEM_POU,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    41
                    ITEM_VARIABLE,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    42
                    ITEM_TRANSITION,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    43
                    ITEM_ACTION,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    44
                    ITEM_CONFIGURATION,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    45
                    ITEM_RESOURCE,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    46
                    ITEM_DATATYPE] = range(8)
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    47
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    48
ITEMS_UNEDITABLE=[ITEM_DATATYPES,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    49
                  ITEM_FUNCTION,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    50
                  ITEM_FUNCTIONBLOCK,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    51
                  ITEM_PROGRAM,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    52
                  ITEM_TRANSITIONS,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    53
                  ITEM_ACTIONS,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    54
                  ITEM_CONFIGURATIONS,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    55
                  ITEM_RESOURCES,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    56
                  ITEM_PROPERTIES,
d3e6484ebe85 changed the way icons are loaded for both toolbars and treectrl. Now, non editable items have different pyData.
etisserant
parents: 173
diff changeset
    57
                  ]=range(9,18)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
    58
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
    59
ScriptDirectory = os.path.split(os.path.realpath(__file__))[0]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    60
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    61
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    62
#                         Undo Buffer for PLCOpenEditor
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    63
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    64
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    65
# Length of the buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    66
UNDO_BUFFER_LENGTH = 20
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    67
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    68
"""
188
d64037e17075 Bug with task ticktime definition fixed
lbessard
parents: 184
diff changeset
    69
Class implementing a buffer of changes made on the current editing model
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    70
"""
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    71
class UndoBuffer:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    72
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    73
    # Constructor initialising buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    74
    def __init__(self, currentstate, issaved = False):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    75
        self.Buffer = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    76
        self.CurrentIndex = -1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    77
        self.MinIndex = -1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    78
        self.MaxIndex = -1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    79
        # if current state is defined
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    80
        if currentstate:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    81
            self.CurrentIndex = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    82
            self.MinIndex = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    83
            self.MaxIndex = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    84
        # Initialising buffer with currentstate at the first place
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    85
        for i in xrange(UNDO_BUFFER_LENGTH):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    86
            if i == 0:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    87
                self.Buffer.append(currentstate)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    88
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    89
                self.Buffer.append(None)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    90
        # Initialising index of state saved
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    91
        if issaved:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    92
            self.LastSave = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    93
        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    94
            self.LastSave = -1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    95
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    96
    # Add a new state in buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    97
    def Buffering(self, currentstate):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    98
        self.CurrentIndex = (self.CurrentIndex + 1) % UNDO_BUFFER_LENGTH
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
    99
        self.Buffer[self.CurrentIndex] = currentstate
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   100
        # Actualising buffer limits
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   101
        self.MaxIndex = self.CurrentIndex
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   102
        if self.MinIndex == self.CurrentIndex:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   103
            # If the removed state was the state saved, there is no state saved in the buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   104
            if self.LastSave == self.MinIndex:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   105
                self.LastSave = -1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   106
            self.MinIndex = (self.MinIndex + 1) % UNDO_BUFFER_LENGTH
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   107
        self.MinIndex = max(self.MinIndex, 0)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   108
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   109
    # Return current state of buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   110
    def Current(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   111
        return self.Buffer[self.CurrentIndex]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   112
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   113
    # Change current state to previous in buffer and return new current state
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   114
    def Previous(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   115
        if self.CurrentIndex != self.MinIndex:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   116
            self.CurrentIndex = (self.CurrentIndex - 1) % UNDO_BUFFER_LENGTH
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   117
            return self.Buffer[self.CurrentIndex]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   118
        return None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   119
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   120
    # Change current state to next in buffer and return new current state
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   121
    def Next(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   122
        if self.CurrentIndex != self.MaxIndex:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   123
            self.CurrentIndex = (self.CurrentIndex + 1) % UNDO_BUFFER_LENGTH
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   124
            return self.Buffer[self.CurrentIndex]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   125
        return None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   126
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   127
    # Return True if current state is the first in buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   128
    def IsFirst(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   129
        return self.CurrentIndex == self.MinIndex
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   130
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   131
    # Return True if current state is the last in buffer
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   132
    def IsLast(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   133
        return self.CurrentIndex == self.MaxIndex
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   134
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   135
    # Note that current state is saved
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   136
    def CurrentSaved(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   137
        self.LastSave = self.CurrentIndex
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   138
        
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   139
    # Return True if current state is saved
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   140
    def IsCurrentSaved(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   141
        return self.LastSave == self.CurrentIndex
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   142
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   143
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   144
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   145
#                           Controler for PLCOpenEditor
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   146
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   147
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   148
"""
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   149
Class which controls the operations made on the plcopen model and answers to view requests
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   150
"""
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   151
class PLCControler:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   152
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   153
    # Create a new PLCControler
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   154
    def __init__(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   155
        self.LastNewIndex = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   156
        self.Reset()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   157
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   158
    # Reset PLCControler internal variables
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   159
    def Reset(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   160
        self.Project = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   161
        self.ProjectBuffer = None
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   162
        self.Buffering = False
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   163
        self.FilePath = ""
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   164
        self.FileName = ""
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   165
        self.ProgramChunks = []
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   166
        self.PluginTypes = []
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 35
diff changeset
   167
        self.ProgramFilePath = ""
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   168
        
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   169
    def GetQualifierTypes(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   170
        return plcopen.QualifierList
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   171
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   172
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   173
#                         Project management functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   174
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   175
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   176
    # Return if a project is opened
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   177
    def HasOpenedProject(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   178
        return self.Project != None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   179
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   180
    # Create a new project by replacing the current one
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
   181
    def CreateNewProject(self, properties):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   182
        # Create the project
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   183
        self.Project = plcopen.project()
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
   184
        properties["creationDateTime"] = datetime(*localtime()[:6])
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   185
        self.Project.setfileHeader(properties)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   186
        self.Project.setcontentHeader(properties)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   187
        self.SetFilePath("")
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   188
        # Initialize the project buffer
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   189
        self.ProjectBuffer = UndoBuffer(self.Copy(self.Project), False)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   190
        self.Buffering = False
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   191
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   192
    # Return project data type names
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   193
    def GetProjectDataTypeNames(self):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   194
        if self.Project:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   195
            return [datatype.getname() for datatype in self.Project.getdataTypes()]
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   196
        return []
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   197
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   198
    # Return project pou names
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   199
    def GetProjectPouNames(self):
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
   200
        if self.Project:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   201
            return [pou.getname() for pou in self.Project.getpous()]
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
   202
        return []
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   203
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   204
    # Return project pou names
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   205
    def GetProjectConfigNames(self):
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
   206
        if self.Project:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   207
            return [config.getName() for config in self.Project.getconfigurations()]
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
   208
        return []
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   209
    
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   210
    # Return project pou variables
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   211
    def GetProjectPouVariables(self, pou_name=None):
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   212
        variables = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   213
        for pou in self.Project.getpous():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   214
            if not pou_name or pou_name == pou.getname():
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   215
                variables.extend([var["Name"] for var in self.GetPouInterfaceVars(pou)])
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   216
                for transition in pou.gettransitionList():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   217
                    variables.append(transition.getname())
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   218
                for action in pou.getactionList():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   219
                    variables.append(action.getname())
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   220
        return variables
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   221
    
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   222
    # Return if project is saved
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   223
    def ProjectIsSaved(self):
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   224
        return self.ProjectBuffer.IsCurrentSaved()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   225
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   226
    # Return file path if project is an open file
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   227
    def GetFilePath(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   228
        return self.FilePath
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   229
    
42
4a8400732001 Adding optimization on redrawing
lbessard
parents: 35
diff changeset
   230
    # Return file path if project is an open file
4a8400732001 Adding optimization on redrawing
lbessard
parents: 35
diff changeset
   231
    def GetProgramFilePath(self):
4a8400732001 Adding optimization on redrawing
lbessard
parents: 35
diff changeset
   232
        return self.ProgramFilePath
4a8400732001 Adding optimization on redrawing
lbessard
parents: 35
diff changeset
   233
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   234
    # Return file name and point out if file is up to date
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   235
    def GetFilename(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   236
        if self.ProjectBuffer.IsCurrentSaved():
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   237
            return self.FileName
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   238
        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   239
            return "~%s~"%self.FileName
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   240
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   241
    # Change file path and save file name or create a default one if file path not defined
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   242
    def SetFilePath(self, filepath):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   243
        self.FilePath = filepath
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   244
        if filepath == "":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   245
            self.LastNewIndex += 1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   246
            self.FileName = "Unnamed%d"%self.LastNewIndex
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   247
        else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   248
            self.FileName = os.path.splitext(os.path.basename(filepath))[0]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   249
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   250
    # Change project properties
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   251
    def SetProjectProperties(self, name = None, properties = None):
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   252
        if name != None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   253
            self.Project.setname(name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   254
        if properties != None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   255
            self.Project.setfileHeader(properties)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   256
            self.Project.setcontentHeader(properties)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   257
        if name != None or properties != None:
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   258
            self.BufferProject()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   259
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   260
    # Return project properties
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   261
    def GetProjectProperties(self):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   262
        properties = self.Project.getfileHeader()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   263
        properties.update(self.Project.getcontentHeader())
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   264
        return properties
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   265
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   266
    # Return project informations
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   267
    def GetProjectInfos(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   268
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   269
            infos = {"name": self.Project.getname(), "type": ITEM_PROJECT, "tagname": ""}
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   270
            datatypes = {"name": "Data Types", "type": ITEM_DATATYPES, "tagname": "", "values":[]}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   271
            for datatype in self.Project.getdataTypes():
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   272
                datatypes["values"].append({"name": datatype.getname(), "type": ITEM_DATATYPE, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   273
                    "tagname": self.ComputeDataTypeName(datatype.getname()), "values": []})
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   274
            pou_types = {"function": {"name": "Functions", "type": ITEM_FUNCTION, "tagname": "", "values":[]},
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   275
                         "functionBlock": {"name": "Function Blocks", "type": ITEM_FUNCTIONBLOCK, "tagname": "", "values":[]},
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   276
                         "program": {"name": "Programs", "type": ITEM_PROGRAM, "tagname": "", "values":[]}}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   277
            for pou in self.Project.getpous():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   278
                pou_type = pou.getpouType()
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   279
                pou_infos = {"name": pou.getname(), "type": ITEM_POU,
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   280
                             "tagname": self.ComputePouName(pou.getname())}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   281
                pou_values = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   282
                if pou.getbodyType() == "SFC":
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   283
                    transitions = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   284
                    for transition in pou.gettransitionList():
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   285
                        transitions.append({"name": transition.getname(), "type": ITEM_TRANSITION, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   286
                            "tagname": self.ComputePouTransitionName(pou.getname(), transition.getname()), 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   287
                            "values": []})
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   288
                    pou_values.append({"name": "Transitions", "type": ITEM_TRANSITIONS, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   289
                                       "tagname": "", "values": transitions})
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   290
                    actions = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   291
                    for action in pou.getactionList():
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   292
                        actions.append({"name": action.getname(), "type": ITEM_ACTION, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   293
                            "tagname": self.ComputePouActionName(pou.getname(), action.getname()), 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   294
                            "values": []})
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   295
                    pou_values.append({"name": "Actions", "type": ITEM_ACTIONS, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   296
                                       "tagname": "", "values": actions})
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   297
                if pou_type in pou_types:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   298
                    pou_infos["values"] = pou_values
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   299
                    pou_types[pou_type]["values"].append(pou_infos)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   300
            configurations = {"name": "Configurations", "type": ITEM_CONFIGURATIONS, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   301
                              "tagname": "", "values": []}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   302
            for config in self.Project.getconfigurations():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   303
                config_name = config.getname()
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   304
                config_infos = {"name": config_name, "type": ITEM_CONFIGURATION, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   305
                    "tagname": self.ComputeConfigurationName(config.getname()), 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   306
                    "values": []}
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   307
                resources = {"name": "Resources", "type": ITEM_RESOURCES, "tagname": "", "values": []}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   308
                for resource in config.getresource():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   309
                    resource_name = resource.getname()
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   310
                    resource_infos = {"name": resource_name, "type": ITEM_RESOURCE, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   311
                        "tagname": self.ComputeConfigurationResourceName(config.getname(), resource.getname()), 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   312
                        "values": []}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   313
                    resources["values"].append(resource_infos)
47
2b2f8d88e6d3 Interface changed to show pou interface at the bottom of the window
lbessard
parents: 46
diff changeset
   314
                config_infos["values"] = [resources]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   315
                configurations["values"].append(config_infos)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   316
            infos["values"] = [{"name": "Properties", "type": ITEM_PROPERTIES, "tagname": "", "values": []},
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   317
                               datatypes, pou_types["function"], pou_types["functionBlock"], 
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   318
                               pou_types["program"], configurations]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   319
            return infos
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   320
        return None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   321
173
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   322
    # Return project topology informations
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   323
    def GetProjectTopology(self):
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   324
        if self.Project:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   325
            infos = {"name": self.Project.getname(), "type": ITEM_PROJECT, "values" : []}
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   326
            for config in self.Project.getconfigurations():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   327
                config_infos = {"name" : config.getname(), "type": ITEM_CONFIGURATION, "values" : []}
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   328
                for resource in config.getresource():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   329
                    resource_infos = {"name" : resource.getname(), "type": ITEM_RESOURCE, "values": []}
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   330
                    for task in resource.gettask():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   331
                        for pou in task.getpouInstance():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   332
                            instance_infos = self.GetPouTopology(pou.getname(), pou.gettype())
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   333
                            if instance_infos is not None:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   334
                                resource_infos["values"].append(instance_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   335
                    for pou in resource.getpouInstance():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   336
                        instance_infos = self.GetPouTopology(pou.getname(), pou.gettype())
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   337
                        if instance_infos is not None:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   338
                            resource_infos["values"].append(instance_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   339
                    for varlist in resource.getglobalVars():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   340
                        for variable in varlist.getvariable():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   341
                            vartype_content = variable.gettype().getcontent()
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   342
                            if vartype_content["name"] == "derived":
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   343
                                var_infos = self.GetPouTopology(variable.getname(), vartype_content["value"].getname())
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   344
                                if var_infos is not None:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   345
                                    resource_infos["values"].append(var_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   346
                            elif vartype_content["name"] in ["string", "wstring"]:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   347
                                resource_infos["values"].append({"name" : "%s(%s)"%(variable.getname(), vartype_content["name"].upper()), 
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   348
                                                                 "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   349
                            else:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   350
                                resource_infos["values"].append({"name" : "%s(%s)"%(variable.getname(), vartype_content["name"]), 
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   351
                                                                 "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   352
                    config_infos["values"].append(resource_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   353
                for varlist in config.getglobalVars():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   354
                    for variable in varlist.getvariable():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   355
                        vartype_content = variable.gettype().getcontent()
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   356
                        if vartype_content["name"] == "derived":
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   357
                            var_infos = self.GetPouTopology(variable.getname(), vartype_content["value"].getname())
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   358
                            if var_infos is not None:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   359
                                config_infos["values"].append(var_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   360
                        elif vartype_content["name"] in ["string", "wstring"]:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   361
                            config_infos["values"].append({"name" : "%s(%s)"%(variable.getname(), vartype_content["name"].upper()), 
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   362
                                                           "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   363
                        else:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   364
                            config_infos["values"].append({"name" : "%s(%s)"%(variable.getname(), vartype_content["name"]), 
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   365
                                                           "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   366
                infos["values"].append(config_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   367
            return infos
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   368
        return None
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   369
    
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   370
    # Return pou topology informations
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   371
    def GetPouTopology(self, name, type):
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   372
        if self.Project:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   373
            pou = self.Project.getpou(type)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   374
            if pou is not None:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   375
                pou_infos = {"name" : "%s(%s)"%(name, type), "type" : ITEM_POU, "values" : []}
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   376
                if pou.interface:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   377
                    # Extract variables from every varLists
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   378
                    for type, varlist in pou.getvars():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   379
                        for variable in varlist.getvariable():
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   380
                            vartype_content = variable.gettype().getcontent()
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   381
                            if vartype_content["name"] == "derived":
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   382
                                var_infos = self.GetPouTopology(variable.getname(), vartype_content["value"].getname())
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   383
                                if var_infos is not None:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   384
                                    pou_infos["values"].append(var_infos)
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   385
                            elif vartype_content["name"] in ["string", "wstring"]:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   386
                                pou_infos["values"].append({"name" : "%s(%s)"%(variable.getname(), vartype_content["name"].upper()), 
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   387
                                                               "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   388
                            else:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   389
                                pou_infos["values"].append({"name" : "%s(%s)"%(variable.getname(), vartype_content["name"]), 
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   390
                                                               "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   391
                return pou_infos
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   392
            block_infos = self.GetBlockType(type)
173
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   393
            if block_infos is not None and block_infos["type"] != "function":
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   394
                pou_infos = {"name" : "%s(%s)"%(name, type), "type" : ITEM_POU, "values" : []}
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   395
                for varname, vartype, varmodifier in block_infos["inputs"]:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   396
                    pou_infos["values"].append({"name" : "%s(%s)"%(varname, vartype), "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   397
                for varname, vartype, varmodifier in block_infos["outputs"]:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   398
                    pou_infos["values"].append({"name" : "%s(%s)"%(varname, vartype), "type" : ITEM_VARIABLE, "values" : []})
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   399
                return pou_infos
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   400
            
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   401
            if type in TypeHierarchy:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   402
                return {"name" : "%s(%s)"%(name, type), "type" : ITEM_VARIABLE, "values" : []}
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   403
                
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
   404
        return None
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   405
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   406
    # Return if data type given by name is used by another data type or pou
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   407
    def DataTypeIsUsed(self, name):
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   408
        return self.Project.ElementIsUsed(name) or self.Project.DataTypeIsDerived(name)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   409
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   410
    # Return if pou given by name is used by another pou
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   411
    def PouIsUsed(self, name):
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   412
        return self.Project.ElementIsUsed(name)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   413
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   414
    # Return if pou given by name is directly or undirectly used by the reference pou
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   415
    def PouIsUsedBy(self, name, reference):
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   416
        return self.Project.ElementIsUsedBy(name, reference)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   417
4
2de7fd952fdd Adding File Dialog for choosing path to generated program
lbessard
parents: 2
diff changeset
   418
    def GenerateProgram(self, filepath):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   419
        if self.Project:
97
28337cd092fd Bugs on Variable and Viewer DropTarget fixed
lbessard
parents: 94
diff changeset
   420
            try:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   421
                self.ProgramChunks = GenerateCurrentProgram(self, self.Project)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   422
                program_text = "".join([item[0] for item in self.ProgramChunks])
97
28337cd092fd Bugs on Variable and Viewer DropTarget fixed
lbessard
parents: 94
diff changeset
   423
                programfile = open(filepath, "w")
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   424
                programfile.write(program_text)
97
28337cd092fd Bugs on Variable and Viewer DropTarget fixed
lbessard
parents: 94
diff changeset
   425
                programfile.close()
28337cd092fd Bugs on Variable and Viewer DropTarget fixed
lbessard
parents: 94
diff changeset
   426
                self.ProgramFilePath = filepath
171
e3d47b4bbd5d Better PLCGenerator exception filtering
etisserant
parents: 162
diff changeset
   427
                return None
e3d47b4bbd5d Better PLCGenerator exception filtering
etisserant
parents: 162
diff changeset
   428
            except PLCGenException, e:
e3d47b4bbd5d Better PLCGenerator exception filtering
etisserant
parents: 162
diff changeset
   429
                return e.message
e3d47b4bbd5d Better PLCGenerator exception filtering
etisserant
parents: 162
diff changeset
   430
        return "No project opened"
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   431
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   432
    def GetChunkInfos(self, from_location, to_location):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   433
        row = col = 1
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   434
        infos = []
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   435
        for chunk, chunk_infos in self.ProgramChunks:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   436
            lines = chunk.split("\n")
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   437
            if len(lines) > 1:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   438
                next_row = row + len(lines) - 1
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   439
                next_col = len(lines[-1]) + 1
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   440
            else:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   441
                next_col = col + len(chunk)
229
a5087e346baa Deprecated method removed and bug on chunk extract fixed
lbessard
parents: 226
diff changeset
   442
            if (next_row > from_location[0] or next_row == from_location[0] and next_col >= from_location[1]) and len(chunk_infos) > 0:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   443
                infos.append((chunk_infos, (row, col)))
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   444
            if next_row == to_location[0] and next_col > to_location[1] or next_row > to_location[0]:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   445
                return infos
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   446
            row, col = next_row, next_col
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   447
        return infos
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   448
        
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   449
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   450
#                        Project Pous management functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   451
#-------------------------------------------------------------------------------
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   452
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   453
    # Add a Data Type to Project
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   454
    def ProjectAddDataType(self, datatype_name):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   455
        # Add the pou to project
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   456
        self.Project.appenddataType(datatype_name)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   457
        self.BufferProject()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   458
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   459
    # Remove a Data Type from project
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   460
    def ProjectRemoveDataType(self, datatype_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   461
        self.Project.removedataType(datatype_name)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   462
        self.BufferProject()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   463
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   464
    # Add a Pou to Project
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   465
    def ProjectAddPou(self, pou_name, pou_type, body_type):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   466
        # Add the pou to project
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   467
        self.Project.appendpou(pou_name, pou_type, body_type)
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   468
        if pou_type == "function":
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   469
            self.SetPouInterfaceReturnType(pou_name, "BOOL")
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   470
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   471
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   472
    # Remove a Pou from project
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   473
    def ProjectRemovePou(self, pou_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   474
        self.Project.removepou(pou_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   475
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   476
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   477
    # Add a configuration to Project
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   478
    def ProjectAddConfiguration(self, config_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   479
        self.Project.addconfiguration(config_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   480
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   481
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   482
    # Remove a configuration from project
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   483
    def ProjectRemoveConfiguration(self, config_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   484
        self.Project.removeconfiguration(config_name)
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   485
        self.BufferProject()
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   486
    
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   487
    # Add a resource to a configuration of the Project
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   488
    def ProjectAddConfigurationResource(self, config_name, resource_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   489
        self.Project.addconfigurationResource(config_name, resource_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   490
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   491
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   492
    # Remove a resource from a configuration of the project
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   493
    def ProjectRemoveConfigurationResource(self, config_name, resource_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   494
        self.Project.removeconfigurationResource(config_name, resource_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   495
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   496
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   497
    # Add a Transition to a Project Pou
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   498
    def ProjectAddPouTransition(self, pou_name, transition_name, transition_type):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   499
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   500
        pou.addtransition(transition_name, transition_type)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   501
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   502
    
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   503
    # Remove a Transition from a Project Pou
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   504
    def ProjectRemovePouTransition(self, pou_name, transition_name):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   505
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   506
        pou.removetransition(transition_name)
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   507
        self.BufferProject()
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   508
    
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   509
    # Add an Action to a Project Pou
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   510
    def ProjectAddPouAction(self, pou_name, action_name, action_type):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   511
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   512
        pou.addaction(action_name, action_type)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   513
        self.BufferProject()
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   514
    
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   515
    # Remove an Action from a Project Pou
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   516
    def ProjectRemovePouAction(self, pou_name, action_name):
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   517
        # Search if the pou removed is currently opened
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   518
        for i, element in enumerate(self.ElementsOpened):
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   519
            words = element.split("::")
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   520
            if words[0] == "A" and words[1] == pou_name and words[2] == action_name:
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   521
                self.RemoveElementEditing(i)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   522
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   523
        pou.removeaction(action_name)
107
255eada20688 Lots of bug fixed
lbessard
parents: 101
diff changeset
   524
        self.BufferProject()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   525
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   526
    # Change the name of a pou
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   527
    def ChangeDataTypeName(self, old_name, new_name):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   528
        # Found the pou corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   529
        datatype = self.Project.getdataType(old_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   530
        datatype.setname(new_name)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   531
        self.Project.updateElementName(old_name, new_name)
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   532
        self.BufferProject()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   533
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   534
    # Change the name of a pou
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   535
    def ChangePouName(self, old_name, new_name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   536
        # Found the pou corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   537
        pou = self.Project.getpou(old_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   538
        pou.setname(new_name)
58
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   539
        self.Project.updateElementName(old_name, new_name)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   540
        self.Project.RefreshElementUsingTree()
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   541
        self.Project.RefreshCustomBlockTypes()
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   542
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   543
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   544
    # Change the name of a pou transition
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   545
    def ChangePouTransitionName(self, pou_name, old_name, new_name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   546
        # Found the pou transition corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   547
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   548
        transition = pou.gettransition(old_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   549
        transition.setname(new_name)
108
9aa1fdfb7cb2 A lots of bugs fixed
lbessard
parents: 107
diff changeset
   550
        pou.updateElementName(old_name, new_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   551
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   552
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   553
    # Change the name of a pou action
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   554
    def ChangePouActionName(self, pou_name, old_name, new_name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   555
        # Found the pou action corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   556
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   557
        action = pou.getaction(old_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   558
        action.setname(new_name)
108
9aa1fdfb7cb2 A lots of bugs fixed
lbessard
parents: 107
diff changeset
   559
        pou.updateElementName(old_name, new_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   560
        self.BufferProject()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   561
    
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
   562
    # Change the name of a pou variable
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   563
    def ChangePouVariableName(self, pou_name, old_name, new_name):
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   564
        # Found the pou action corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   565
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   566
        for type, varlist in pou.getvars():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   567
            for var in varlist.getvariable():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   568
                if var.getname() == old_name:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   569
                    var.setname(new_name)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   570
        self.Project.RefreshCustomBlockTypes()
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   571
        self.BufferProject()
6
c8cf918ee7ea Bug corrected and improvements
lbessard
parents: 5
diff changeset
   572
        
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   573
    # Change the name of a configuration
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   574
    def ChangeConfigurationName(self, old_name, new_name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   575
        # Found the configuration corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   576
        configuration = self.Project.getconfiguration(old_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   577
        configuration.setname(new_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   578
        self.BufferProject()
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   579
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   580
    # Change the name of a configuration resource
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   581
    def ChangeConfigurationResourceName(self, config_name, old_name, new_name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   582
        # Found the resource corresponding to old name and change its name to new name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   583
        resource = self.Project.getconfigurationResource(config_name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   584
        resource.setName(new_name)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   585
        self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   586
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   587
    # Return the type of the pou given by its name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   588
    def GetPouType(self, name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   589
        # Found the pou correponding to name and return its type
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   590
        pou = self.Project.getpou(name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   591
        return pou.getpouType()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   592
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   593
    # Return pous with SFC language
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   594
    def GetSFCPous(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   595
        list = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   596
        if self.Project:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   597
            for pou in self.Project.getpous():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   598
                if pou.getBodyType() == "SFC":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   599
                    list.append(pou.getname())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   600
        return list
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   601
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   602
    # Return the body language of the pou given by its name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   603
    def GetPouBodyType(self, name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   604
        # Found the pou correponding to name and return its body language
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   605
        pou = self.Project.getpou(name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   606
        return pou.getbodyType()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   607
    
46
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   608
    # Return the actions of a pou
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   609
    def GetPouTransitions(self, pou_name):
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   610
        transitions = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   611
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   612
        if pou.getbodyType() == "SFC":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   613
            for transition in pou.gettransitionList():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   614
                transitions.append(transition.getname())
46
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   615
        return transitions
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   616
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   617
    # Return the body language of the transition given by its name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   618
    def GetTransitionBodyType(self, pou_name, pou_transition):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   619
        # Found the pou correponding to name and return its body language
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   620
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   621
        transition = pou.gettransition(pou_transition)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   622
        return transition.getbodyType()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   623
    
46
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   624
    # Return the actions of a pou
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   625
    def GetPouActions(self, pou_name):
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   626
        actions = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   627
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   628
        if pou.getbodyType() == "SFC":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   629
            for action in pou.getactionList():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   630
                actions.append(action.getname())
46
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   631
        return actions
4379e98a30aa Bug on SFC generation fixed
lbessard
parents: 45
diff changeset
   632
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   633
    # Return the body language of the pou given by its name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   634
    def GetActionBodyType(self, pou_name, pou_action):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   635
        # Found the pou correponding to name and return its body language
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   636
        pou = self.Project.getpou(pou_name)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   637
        action = pou.getaction(pou_action)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   638
        return action.getbodyType()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   639
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   640
    # Extract varlists from a list of vars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   641
    def ExtractVarLists(self, vars):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   642
        varlist_list = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   643
        current_varlist = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   644
        current_type = None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   645
        for var in vars:
233
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   646
            next_type = (var["Class"], 
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   647
                                var["Retain"], 
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   648
                                var["Constant"], 
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   649
                                var["Location"] in ["", None] or 
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   650
                                    # When declaring globals, located 
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   651
                                    # and not located variables are 
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   652
                                    # in the same declaration block
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   653
                                    var["Class"] == "Global")
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   654
            if current_type != next_type:
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
   655
                current_type = next_type
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   656
                if var["Class"] == "Local":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   657
                    current_varlist = plcopen.interface_localVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   658
                elif var["Class"] == "Global":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   659
                    current_varlist = plcopen.interface_globalVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   660
                elif var["Class"] == "External":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   661
                    current_varlist = plcopen.interface_externalVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   662
                elif var["Class"] == "Temp":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   663
                    current_varlist = plcopen.interface_tempVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   664
                elif var["Class"] == "Input":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   665
                    current_varlist = plcopen.interface_inputVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   666
                elif var["Class"] == "Output":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   667
                    current_varlist = plcopen.interface_outputVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   668
                elif var["Class"] == "InOut":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   669
                    current_varlist = plcopen.interface_inOutVars()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   670
                else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   671
                    current_varlist = plcopen.varList()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   672
                varlist_list.append((var["Class"], current_varlist))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   673
                if var["Retain"] == "Yes":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   674
                    current_varlist.setretain(True)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   675
                if var["Constant"] == "Yes":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   676
                    current_varlist.setconstant(True)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   677
            # Create variable and change its properties
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   678
            tempvar = plcopen.varListPlain_variable()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   679
            tempvar.setname(var["Name"])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   680
            var_type = plcopen.dataType()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   681
            if var["Type"] in self.GetBaseTypes():
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   682
                if var["Type"] == "STRING":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   683
                    var_type.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()})
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   684
                elif var["Type"] == "WSTRING":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   685
                    var_type.setcontent({"name" : "wstring", "value" : plcopen.elementaryTypes_wstring()})
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   686
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   687
                    var_type.setcontent({"name" : var["Type"], "value" : None})
67
3a1b0afdaf84 Adding support for automatically generate function blocks in interface when a block is added
lbessard
parents: 63
diff changeset
   688
            else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   689
                derived_type = plcopen.derivedTypes_derived()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   690
                derived_type.setname(var["Type"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   691
                var_type.setcontent({"name" : "derived", "value" : derived_type})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   692
            tempvar.settype(var_type)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   693
            if var["Initial Value"] != "":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   694
                value = plcopen.value()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   695
                value.setvalue(var["Initial Value"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   696
                tempvar.setinitialValue(value)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   697
            if var["Location"] != "":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   698
                tempvar.setaddress(var["Location"])
53
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   699
            else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   700
                tempvar.setaddress(None)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   701
            # Add variable to varList
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   702
            current_varlist.appendvariable(tempvar)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   703
        return varlist_list
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   704
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   705
    # Replace the configuration globalvars by those given
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   706
    def SetConfigurationGlobalVars(self, name, vars):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   707
        # Found the configuration corresponding to name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   708
        configuration = self.Project.getconfiguration(name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   709
        if configuration:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   710
            # Set configuration global vars
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   711
            configuration.setglobalVars([])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   712
            for vartype, varlist in self.ExtractVarLists(vars):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   713
                configuration.globalVars.append(varlist)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   714
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   715
    # Return the configuration globalvars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   716
    def GetConfigurationGlobalVars(self, name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   717
        vars = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   718
        # Found the configuration corresponding to name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   719
        configuration = self.Project.getconfiguration(name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   720
        if configuration:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   721
            # Extract variables from every varLists
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   722
            for varlist in configuration.getglobalVars():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   723
                for var in varlist.getvariable():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   724
                    tempvar = {"Name" : var.getname(), "Class" : "Global"}
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   725
                    vartype_content = var.gettype().getcontent()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   726
                    if vartype_content["name"] == "derived":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   727
                        tempvar["Type"] = vartype_content["value"].getname()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   728
                    elif vartype_content["name"] in ["string", "wstring"]:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   729
                        tempvar["Type"] = vartype_content["name"].upper()
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   730
                    else:
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   731
                        tempvar["Type"] = vartype_content["name"]
68
66308e07402c Adding support for allowing declarations of function block into POU interface
lbessard
parents: 67
diff changeset
   732
                    tempvar["Edit"] = True
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   733
                    initial = var.getinitialValue()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   734
                    if initial:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   735
                        tempvar["Initial Value"] = initial.getvalue()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   736
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   737
                        tempvar["Initial Value"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   738
                    address = var.getaddress()
53
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   739
                    if address:
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   740
                        tempvar["Location"] = address
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   741
                    else:
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   742
                        tempvar["Location"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   743
                    if varlist.getretain():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   744
                        tempvar["Retain"] = "Yes"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   745
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   746
                        tempvar["Retain"] = "No"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   747
                    if varlist.getconstant():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   748
                        tempvar["Constant"] = "Yes"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   749
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   750
                        tempvar["Constant"] = "No"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   751
                    vars.append(tempvar)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   752
        return vars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   753
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   754
    # Replace the resource globalvars by those given
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   755
    def SetConfigurationResourceGlobalVars(self, config_name, name, vars):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   756
        # Found the resource corresponding to name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   757
        resource = self.Project.getconfigurationResource(config_name, name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   758
        # Set resource global vars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   759
        if resource:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   760
            resource.setglobalVars([])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   761
            for vartype, varlist in self.ExtractVarLists(vars):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   762
                resource.globalVars.append(varlist)
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   763
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   764
    # Return the resource globalvars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   765
    def GetConfigurationResourceGlobalVars(self, config_name, name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   766
        vars = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   767
        # Found the resource corresponding to name
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   768
        resource = self.Project.getconfigurationResource(config_name, name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   769
        if resource:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   770
            # Extract variables from every varLists
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   771
            for varlist in resource.getglobalVars():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   772
                for var in varlist.getvariable():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   773
                    tempvar = {"Name" : var.getname(), "Class" : "Global"}
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   774
                    vartype_content = var.gettype().getcontent()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   775
                    if vartype_content["name"] == "derived":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   776
                        tempvar["Type"] = vartype_content["value"].getname()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   777
                    elif vartype_content["name"] in ["string", "wstring"]:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   778
                        tempvar["Type"] = vartype_content["name"].upper()
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   779
                    else:
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   780
                        tempvar["Type"] = vartype_content["name"]
68
66308e07402c Adding support for allowing declarations of function block into POU interface
lbessard
parents: 67
diff changeset
   781
                    tempvar["Edit"] = True
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   782
                    initial = var.getinitialValue()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   783
                    if initial:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   784
                        tempvar["Initial Value"] = initial.getvalue()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   785
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   786
                        tempvar["Initial Value"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   787
                    address = var.getaddress()
53
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   788
                    if address:
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   789
                        tempvar["Location"] = address
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   790
                    else:
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   791
                        tempvar["Location"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   792
                    if varlist.getretain():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   793
                        tempvar["Retain"] = "Yes"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   794
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   795
                        tempvar["Retain"] = "No"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   796
                    if varlist.getconstant():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   797
                        tempvar["Constant"] = "Yes"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   798
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   799
                        tempvar["Constant"] = "No"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   800
                    vars.append(tempvar)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   801
        return vars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   802
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   803
    # Return the interface of the pou given by its name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   804
    def GetPouInterfaceVarsByName(self, name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   805
        # Found the pou correponding to name and return the interface
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   806
        return self.GetPouInterfaceVars(self.Project.getpou(name))
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   807
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   808
    # Return the interface for the given pou
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   809
    def GetPouInterfaceVars(self, pou):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   810
        vars = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   811
        # Verify that the pou has an interface
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   812
        if pou.interface:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   813
            # Extract variables from every varLists
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   814
            for type, varlist in pou.getvars():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   815
                for var in varlist.getvariable():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   816
                    tempvar = {"Name" : var.getname(), "Class" : type}
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   817
                    vartype_content = var.gettype().getcontent()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   818
                    if vartype_content["name"] == "derived":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   819
                        tempvar["Type"] = vartype_content["value"].getname()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   820
                        tempvar["Edit"] = not pou.hasblock(tempvar["Name"])
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   821
                    else:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   822
                        if vartype_content["name"] in ["string", "wstring"]:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   823
                            tempvar["Type"] = vartype_content["name"].upper()
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   824
                        else:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   825
                            tempvar["Type"] = vartype_content["name"]
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   826
                        tempvar["Edit"] = True
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   827
                    initial = var.getinitialValue()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   828
                    if initial:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   829
                        tempvar["Initial Value"] = initial.getvalue()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   830
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   831
                        tempvar["Initial Value"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   832
                    address = var.getaddress()
53
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   833
                    if address:
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   834
                        tempvar["Location"] = address
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   835
                    else:
4988262d03e3 *** empty log message ***
lbessard
parents: 47
diff changeset
   836
                        tempvar["Location"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   837
                    if varlist.getretain():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   838
                        tempvar["Retain"] = "Yes"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   839
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   840
                        tempvar["Retain"] = "No"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   841
                    if varlist.getconstant():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   842
                        tempvar["Constant"] = "Yes"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   843
                    else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   844
                        tempvar["Constant"] = "No"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   845
                    vars.append(tempvar)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   846
        return vars
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   847
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   848
    # Replace the Pou interface by the one given
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   849
    def SetPouInterfaceVars(self, name, vars):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   850
        # Found the pou corresponding to name and add interface if there isn't one yet
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   851
        pou = self.Project.getpou(name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   852
        if not pou.interface:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   853
            pou.interface = plcopen.pou_interface()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   854
        # Set Pou interface
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   855
        pou.setvars(self.ExtractVarLists(vars))
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   856
        self.Project.RefreshElementUsingTree()
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   857
        self.Project.RefreshCustomBlockTypes()
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
   858
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   859
    # Replace the return type of the pou given by its name (only for functions)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   860
    def SetPouInterfaceReturnType(self, name, type):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   861
        pou = self.Project.getpou(name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   862
        if not pou.interface:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   863
            pou.interface = plcopen.pou_interface()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   864
        # If there isn't any return type yet, add it
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   865
        return_type = pou.interface.getreturnType()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   866
        if not return_type:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   867
            return_type = plcopen.dataType()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   868
            pou.interface.setreturnType(return_type)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   869
        # Change return type
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   870
        if type in self.GetBaseTypes():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   871
            if type == "STRING":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   872
                return_type.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   873
            elif type == "WSTRING":
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   874
                return_type.setcontent({"name" : "wstring", "value" : plcopen.elementaryTypes_wstring()})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   875
            else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   876
                return_type.setcontent({"name" : type, "value" : None})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   877
        else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   878
            derived_type = plcopen.derivedTypes_derived()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   879
            derived_type.setname(type)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   880
            return_type.setcontent({"name" : "derived", "value" : derived_type})
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   881
        self.Project.RefreshElementUsingTree()
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   882
        self.Project.RefreshCustomBlockTypes()
58
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   883
    
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   884
    def UpdateProjectUsedPous(self, old_name, new_name):
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   885
        if self.Project:
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   886
            self.Project.updateElementName(old_name, new_name)
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   887
    
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   888
    def UpdateEditedElementUsedVariable(self, tagname, old_name, new_name):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   889
        pou = self.GetEditedElement(tagname)
58
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   890
        if pou:
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
   891
            pou.updateElementName(old_name, new_name)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   892
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   893
    # Return the return type of the pou given by its name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   894
    def GetPouInterfaceReturnTypeByName(self, name):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   895
        # Found the pou correponding to name and return the return type
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   896
        return self.GetPouInterfaceReturnType(self.Project.getpou(name))
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   897
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   898
    # Return the return type of the given pou
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   899
    def GetPouInterfaceReturnType(self, pou):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   900
        # Verify that the pou has an interface
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   901
        if pou.interface:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   902
            # Return the return type if there is one
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   903
            return_type = pou.interface.getreturnType()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   904
            if return_type:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   905
                returntype_content = return_type.getcontent()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   906
                if returntype_content["name"] == "derived":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
   907
                    return returntype_content["value"].getname()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   908
                elif returntype_content["name"] in ["string", "wstring"]:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   909
                    return returntype_content["name"].upper()
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
   910
                else:
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   911
                    return returntype_content["name"]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   912
        return None
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   913
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   914
    # Function that add a new plugin to the plugin list
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   915
    def AddPluginBlockList(self, blocklist):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   916
        self.PluginTypes.extend(blocklist)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   917
        
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   918
    # Function that clear the plugin list
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   919
    def ClearPluginTypes(self):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   920
        for i in xrange(len(self.PluginTypes)):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   921
            self.PluginTypes.pop(0)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   922
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   923
    # Function that returns the block definition associated to the block type given
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   924
    def GetBlockType(self, type, inputs = None):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   925
        for category in BlockTypes + self.PluginTypes:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   926
            for blocktype in category["list"]:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   927
                if inputs:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   928
                    block_inputs = tuple([var_type for name, var_type, modifier in blocktype["inputs"]])
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   929
                    same_inputs = inputs == block_inputs
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   930
                else:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   931
                    same_inputs = True
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   932
                if blocktype["name"] == type and same_inputs:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   933
                    return blocktype
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   934
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   935
            return self.Project.GetCustomBlockType(type, inputs)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   936
        return None
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   937
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   938
    # Return Block types checking for recursion
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   939
    def GetBlockTypes(self, tagname = ""):
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   940
        type = None
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   941
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   942
            name = ""
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   943
            words = tagname.split("::")
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   944
            if words[0] in ["P","T","A"]:
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   945
                name = words[1]
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   946
                type = self.GetPouType(name)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   947
        if type == "function":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   948
            blocktypes = []
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   949
            for category in BlockTypes + self.PluginTypes:
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   950
                cat = {"name" : category["name"], "list" : []}
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   951
                for block in category["list"]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   952
                    if block["type"] == "function":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   953
                        cat["list"].append(block)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   954
                if len(cat["list"]) > 0:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   955
                    blocktypes.append(cat)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   956
        else:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   957
            blocktypes = [category for category in BlockTypes + self.PluginTypes]
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   958
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   959
            blocktypes.append({"name" : "User-defined POUs", "list": self.Project.GetCustomBlockTypes(name)})
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   960
        return blocktypes
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   961
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   962
    # Return Function Block types checking for recursion
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   963
    def GetFunctionBlockTypes(self, tagname = ""):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   964
        blocktypes = []
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   965
        for category in BlockTypes + self.PluginTypes:
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   966
            for block in category["list"]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   967
                if block["type"] != "function":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   968
                    blocktypes.append(block["name"])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   969
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   970
            name = ""
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   971
            words = tagname.split("::")
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   972
            if words[0] in ["P","T","A"]:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   973
                name = words[1]
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   974
            blocktypes.extend(self.Project.GetCustomFunctionBlockTypes(name))
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
   975
        return blocktypes
68
66308e07402c Adding support for allowing declarations of function block into POU interface
lbessard
parents: 67
diff changeset
   976
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   977
    # Return Block types checking for recursion
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   978
    def GetBlockResource(self):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   979
        blocktypes = []
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   980
        for category in BlockTypes[:-1]:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   981
            for blocktype in category["list"]:
29
3b7e23a323a6 Adding support for configuration generation
lbessard
parents: 28
diff changeset
   982
                if blocktype["type"] == "program":
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   983
                    blocktypes.append(blocktype["name"])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   984
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   985
            blocktypes.extend(self.Project.GetCustomBlockResource())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   986
        return blocktypes
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
   987
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   988
    # Return Data Types checking for recursion
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   989
    def GetDataTypes(self, tagname = "", basetypes = True):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   990
        if basetypes:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   991
            datatypes = self.GetBaseTypes()
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   992
        else:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   993
            datatypes = []
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   994
        if self.Project:
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   995
            name = ""
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   996
            words = tagname.split("::")
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   997
            if words[0] in ["D"]:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
   998
                name = words[1]
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
   999
            datatypes.extend(self.Project.GetCustomDataTypes(name))
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1000
        return datatypes
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1001
210
17ce08b81775 Adding support for Beremiz c_ext plugin
lbessard
parents: 209
diff changeset
  1002
    # Return Base Type of given possible derived type
17ce08b81775 Adding support for Beremiz c_ext plugin
lbessard
parents: 209
diff changeset
  1003
    def GetBaseType(self, type):
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1004
        if self.Project:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1005
            return self.Project.GetBaseType(type)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1006
        return None
210
17ce08b81775 Adding support for Beremiz c_ext plugin
lbessard
parents: 209
diff changeset
  1007
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1008
    # Return Base Types
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1009
    def GetBaseTypes(self):
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1010
        return [value for value in TypeHierarchy.keys() if not value.startswith("ANY")]
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1011
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1012
    def IsOfType(self, type, reference):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1013
        if self.Project:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1014
            return self.Project.IsOfType(type, reference)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1015
        elif reference is None:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1016
            return True
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1017
        elif type == reference:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1018
            return True
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1019
        else:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1020
            if type in TypeHierarchy:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1021
                return self.IsOfType(TypeHierarchy[type], reference)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1022
        return None
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1023
    
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1024
    def IsEndType(self, type):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1025
        if type is not None:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1026
            return not type.startswith("ANY")
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1027
        return True
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1028
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1029
    def GetDataTypeRange(self, type):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1030
        if self.Project:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1031
            return self.Project.GetDataTypeRange(type)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1032
        elif type in DataTypeRange:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1033
            return DataTypeRange[type]
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1034
        return None
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1035
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1036
    # Return Subrange types
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1037
    def GetSubrangeBaseTypes(self, exclude):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1038
        if self.Project:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1039
            return self.Project.GetSubrangeBaseTypes(exclude)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1040
        return []
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1041
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1042
    # Return Enumerated Values
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1043
    def GetEnumeratedDataValues(self):
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1044
        if self.Project:
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1045
            return self.Project.GetEnumeratedDataTypeValues()
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1046
        return []
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1047
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1048
#-------------------------------------------------------------------------------
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1049
#                   Project Element tag name computation functions
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1050
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1051
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1052
    # Compute a data type name
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1053
    def ComputeDataTypeName(self, datatype):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1054
        return "D::%s" % datatype
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1055
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1056
    # Compute a pou name
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1057
    def ComputePouName(self, pou):
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1058
        return "P::%s" % pou
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1059
    
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1060
    # Compute a pou transition name
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1061
    def ComputePouTransitionName(self, pou, transition):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1062
        return "T::%s::%s" % (pou, transition)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1063
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1064
    # Compute a pou action name
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1065
    def ComputePouActionName(self, pou, action):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1066
        return "A::%s::%s" % (pou, action)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1067
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1068
    # Compute a pou  name
47
2b2f8d88e6d3 Interface changed to show pou interface at the bottom of the window
lbessard
parents: 46
diff changeset
  1069
    def ComputeConfigurationName(self, config):
2b2f8d88e6d3 Interface changed to show pou interface at the bottom of the window
lbessard
parents: 46
diff changeset
  1070
        return "C::%s" % config
2b2f8d88e6d3 Interface changed to show pou interface at the bottom of the window
lbessard
parents: 46
diff changeset
  1071
2b2f8d88e6d3 Interface changed to show pou interface at the bottom of the window
lbessard
parents: 46
diff changeset
  1072
    # Compute a pou  name
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1073
    def ComputeConfigurationResourceName(self, config, resource):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1074
        return "R::%s::%s" % (config, resource)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1075
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1076
    def GetElementType(self, tagname):
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1077
        words = tagname.split("::")
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1078
        return {"D" : ITEM_DATATYPE, "P" : ITEM_POU, 
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1079
                "T" : ITEM_TRANSITION, "A" : ITEM_ACTION,
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1080
                "C" : ITEM_CONFIGURATION, "R" : ITEM_RESOURCE}[words[0]]
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1081
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1082
#-------------------------------------------------------------------------------
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1083
#                    Project opened Data types management functions
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1084
#-------------------------------------------------------------------------------
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1085
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1086
    # Return the data type informations
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1087
    def GetDataTypeInfos(self, tagname):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1088
        words = tagname.split("::")
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1089
        if words[0] == "D":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1090
            infos = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1091
            datatype = self.Project.getdataType(words[1])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1092
            basetype_content = datatype.baseType.getcontent()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1093
            if basetype_content["value"] is None:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1094
                infos["type"] = "Directly"
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1095
                infos["base_type"] = basetype_content["name"]
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1096
            elif basetype_content["name"] == "derived":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1097
                infos["type"] = "Directly"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1098
                infos["base_type"] = basetype_content["value"].getname()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1099
            elif basetype_content["name"] in ["subrangeSigned", "subrangeUnsigned"]:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1100
                infos["type"] = "Subrange"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1101
                infos["min"] = basetype_content["value"].range.getlower()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1102
                infos["max"] = basetype_content["value"].range.getupper()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1103
                base_type = basetype_content["value"].baseType.getcontent()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1104
                if base_type["value"] is None:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1105
                    infos["base_type"] = base_type["name"]
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1106
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1107
                    infos["base_type"] = base_type["value"].getname()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1108
            elif basetype_content["name"] == "enum":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1109
                infos["type"] = "Enumerated"
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1110
                infos["values"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1111
                for value in basetype_content["value"].values.getvalue():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1112
                    infos["values"].append(value.getname())
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1113
            elif basetype_content["name"] == "array":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1114
                infos["type"] = "Array"
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1115
                infos["dimensions"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1116
                for dimension in basetype_content["value"].getdimension():
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1117
                    infos["dimensions"].append((dimension.getlower(), dimension.getupper()))
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1118
                base_type = basetype_content["value"].baseType.getcontent()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1119
                if base_type["value"] is None:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1120
                    infos["base_type"] = base_type["name"]
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1121
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1122
                    infos["base_type"] = base_type["value"].getname()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1123
            if datatype.initialValue is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1124
                infos["initial"] = str(datatype.initialValue.getvalue())
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1125
            else:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1126
                infos["initial"] = ""
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1127
            return infos
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1128
        return None
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1129
    
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1130
    # Change the data type informations
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1131
    def SetDataTypeInfos(self, tagname, infos):
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1132
        words = tagname.split("::")
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1133
        if words[0] == "D":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1134
            datatype = self.Project.getdataType(words[1])
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1135
            if infos["type"] == "Directly":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1136
                if infos["base_type"] in self.GetBaseTypes():
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1137
                    if infos["base_type"] == "STRING":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1138
                        datatype.baseType.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()})
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1139
                    elif infos["base_type"] == "WSTRING":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1140
                        datatype.baseType.setcontent({"name" : "wstring", "value" : plcopen.elementaryTypes_wstring()})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1141
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1142
                        datatype.baseType.setcontent({"name" : infos["base_type"], "value" : None})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1143
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1144
                    derived_datatype = plcopen.derivedTypes_derived()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1145
                    derived_datatype.setname(infos["base_type"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1146
                    datatype.baseType.setcontent({"name" : "derived", "value" : derived_datatype})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1147
            elif infos["type"] == "Subrange":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1148
                if infos["base_type"] in GetSubTypes("ANY_UINT"):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1149
                    subrange = plcopen.derivedTypes_subrangeUnsigned()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1150
                    datatype.baseType.setcontent({"name" : "subrangeUnsigned", "value" : subrange})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1151
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1152
                    subrange = plcopen.derivedTypes_subrangeSigned()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1153
                    datatype.baseType.setcontent({"name" : "subrangeSigned", "value" : subrange})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1154
                subrange.range.setlower(infos["min"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1155
                subrange.range.setupper(infos["max"])
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1156
                if infos["base_type"] in self.GetBaseTypes():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1157
                    subrange.baseType.setcontent({"name" : infos["base_type"], "value" : None})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1158
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1159
                    derived_datatype = plcopen.derivedTypes_derived()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1160
                    derived_datatype.setname(infos["base_type"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1161
                    subrange.baseType.setcontent({"name" : "derived", "value" : derived_datatype})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1162
            elif infos["type"] == "Enumerated":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1163
                enumerated = plcopen.derivedTypes_enum()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1164
                for i, enum_value in enumerate(infos["values"]):
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1165
                    value = plcopen.values_value()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1166
                    value.setname(enum_value)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1167
                    if i == 0:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1168
                        enumerated.values.setvalue([value])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1169
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1170
                        enumerated.values.appendvalue(value)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1171
                datatype.baseType.setcontent({"name" : "enum", "value" : enumerated})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1172
            elif infos["type"] == "Array":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1173
                array = plcopen.derivedTypes_array()
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1174
                for i, dimension in enumerate(infos["dimensions"]):
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1175
                    dimension_range = plcopen.rangeSigned()
207
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1176
                    dimension_range.setlower(dimension[0])
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1177
                    dimension_range.setupper(dimension[1])
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1178
                    if i == 0:
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1179
                        array.setdimension([dimension_range])
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1180
                    else:
b1144bb36605 Bug with array dimensions edition fixed
lbessard
parents: 197
diff changeset
  1181
                        array.appenddimension(dimension_range)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1182
                if infos["base_type"] in self.GetBaseTypes():
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1183
                    if infos["base_type"] == "STRING":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1184
                        array.baseType.setcontent({"name" : "string", "value" : plcopen.elementaryTypes_string()})
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1185
                    elif infos["base_type"] == "WSTRING":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1186
                        array.baseType.setcontent({"name" : "wstring", "value" : plcopen.wstring()})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1187
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1188
                        array.baseType.setcontent({"name" : infos["base_type"], "value" : None})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1189
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1190
                    derived_datatype = plcopen.derivedTypes_derived()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1191
                    derived_datatype.setname(infos["base_type"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1192
                    array.baseType.setcontent({"name" : "derived", "value" : derived_datatype})
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1193
                datatype.baseType.setcontent({"name" : "array", "value" : array})
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1194
            if infos["initial"] != "":
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1195
                if datatype.initialValue is None:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1196
                    datatype.initialValue = plcopen.value()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1197
                datatype.initialValue.setvalue(infos["initial"])
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1198
            else:
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1199
                datatype.initialValue = None
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1200
            self.Project.RefreshDataTypeHierarchy()
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1201
            self.BufferProject()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1202
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1203
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1204
#                       Project opened Pous management functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1205
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1206
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1207
    # Return edited element
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1208
    def GetEditedElement(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1209
        words = tagname.split("::")
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1210
        if words[0] == "D":
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1211
            return self.Project.getdataType(words[1])
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1212
        elif words[0] == "P":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1213
            return self.Project.getpou(words[1])
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1214
        elif words[0] in ['T', 'A']:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1215
            pou = self.Project.getpou(words[1])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1216
            if words[0] == 'T':
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1217
                return pou.gettransition(words[2])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1218
            elif words[0] == 'A':
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1219
                return pou.getaction(words[2])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1220
        elif words[0] == 'C':
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1221
            return self.Project.getconfiguration(words[1])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1222
        elif words[0] == 'R':
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1223
            return self.Project.getconfigurationResource(words[1], words[2])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1224
        return None
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1225
    
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1226
    # Return edited element name
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1227
    def GetEditedElementName(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1228
        words = tagname.split("::")
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1229
        if words[0] in ["P","C","D"]:
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1230
            return words[1]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1231
        else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1232
            return words[2]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1233
        return None
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1234
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1235
    # Return edited element name and type
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1236
    def GetEditedElementType(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1237
        words = tagname.split("::")
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1238
        if words[0] in ["P","T","A"]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1239
            return words[1], self.GetPouType(words[1])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1240
        return None, None
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1241
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1242
    # Return language in which edited element is written
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1243
    def GetEditedElementBodyType(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1244
        words = tagname.split("::")
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1245
        if words[0] == "P":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1246
            return self.GetPouBodyType(words[1])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1247
        elif words[0] == 'T':
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1248
            return self.GetTransitionBodyType(words[1], words[2])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1249
        elif words[0] == 'A':
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1250
            return self.GetActionBodyType(words[1], words[2])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1251
        return None
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1252
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1253
    # Return the edited element variables
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1254
    def GetEditedElementInterfaceVars(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1255
        words = tagname.split("::")
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1256
        if words[0] in ["P","T","A"]:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1257
            pou = self.Project.getpou(words[1])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1258
            return self.GetPouInterfaceVars(pou)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1259
        return []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1260
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1261
    # Return the edited element return type
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1262
    def GetEditedElementInterfaceReturnType(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1263
        words = tagname.split("::")
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1264
        if words[0] == "P":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1265
            pou = self.Project.getpou(words[1])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1266
            return self.GetPouInterfaceReturnType(pou)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1267
        elif words[0] == 'T':
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1268
            return "BOOL"
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1269
        return None
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1270
    
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1271
    # Change the edited element text
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1272
    def SetEditedElementText(self, tagname, text):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1273
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1274
        if element != None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1275
            element.settext(text)
229
a5087e346baa Deprecated method removed and bug on chunk extract fixed
lbessard
parents: 226
diff changeset
  1276
            self.Project.RefreshElementUsingTree()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1277
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1278
    # Return the edited element text
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1279
    def GetEditedElementText(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1280
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1281
        if element != None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1282
            return element.gettext()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1283
        return ""
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1284
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1285
    # Return the edited element transitions
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1286
    def GetEditedElementTransitions(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1287
        pou = self.GetEditedElement(tagname)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1288
        if pou != None and pou.getbodyType() == "SFC":
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1289
            transitions = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1290
            for transition in pou.gettransitionList():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1291
                transitions.append(transition.getname())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1292
            return transitions
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1293
        return []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1294
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1295
    # Return edited element transitions
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1296
    def GetEditedElementActions(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1297
        pou = self.GetEditedElement(tagname)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1298
        if pou != None and pou.getbodyType() == "SFC":
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1299
            actions = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1300
            for action in pou.getactionList():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1301
                actions.append(action.getname())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1302
            return actions
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1303
        return []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1304
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1305
    # Return the names of the pou elements
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1306
    def GetEditedElementVariables(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1307
        words = tagname.split("::")
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1308
        if words[0] in ["P","T","A"]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1309
            return self.GetProjectPouVariables(words[1])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1310
        return []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1311
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1312
    # Return the current pou editing informations
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1313
    def GetEditedElementInstanceInfos(self, tagname, id = None, exclude = []):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1314
        infos = {}
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1315
        instance = None
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1316
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1317
        if element is not None:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1318
            # if id is defined
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1319
            if id is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1320
                instance = element.getinstance(id)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1321
            else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1322
                instance = element.getrandomInstance(exclude)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1323
        if instance is not None:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1324
            if id is not None:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1325
                infos["id"] = id
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1326
            else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1327
                infos["id"] = instance.getlocalId() 
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1328
            infos["x"] = instance.getx()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1329
            infos["y"] = instance.gety()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1330
            infos["height"] = instance.getheight()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1331
            infos["width"] = instance.getwidth()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1332
            if isinstance(instance, plcopen.fbdObjects_block):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1333
                infos["name"] = instance.getinstanceName()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1334
                infos["type"] = instance.gettypeName()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1335
                executionOrder = instance.getexecutionOrderId()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1336
                if executionOrder is not None:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1337
                    infos["executionOrder"] = executionOrder
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1338
                else:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1339
                    infos["executionOrder"] = 0
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1340
                infos["connectors"] = {"inputs":[],"outputs":[]}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1341
                for variable in instance.inputVariables.getvariable():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1342
                    connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1343
                    connector["name"] = variable.getformalParameter()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1344
                    connector["position"] = variable.connectionPointIn.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1345
                    connector["negated"] = variable.getnegated()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1346
                    connector["edge"] = variable.getedge()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1347
                    connector["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1348
                    connections = variable.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1349
                    if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1350
                        for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1351
                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1352
                            connector["links"].append(dic)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1353
                    infos["connectors"]["inputs"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1354
                for variable in instance.outputVariables.getvariable():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1355
                    connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1356
                    connector["name"] = variable.getformalParameter()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1357
                    connector["position"] = variable.connectionPointOut.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1358
                    connector["negated"] = variable.getnegated()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1359
                    connector["edge"] = variable.getedge()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1360
                    infos["connectors"]["outputs"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1361
            elif isinstance(instance, plcopen.fbdObjects_inVariable):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1362
                infos["name"] = instance.getexpression()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1363
                infos["value_type"] = self.GetEditedElementVarValueType(tagname, infos["name"])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1364
                infos["type"] = "input"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1365
                executionOrder = instance.getexecutionOrderId()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1366
                if executionOrder is not None:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1367
                    infos["executionOrder"] = executionOrder
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1368
                else:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1369
                    infos["executionOrder"] = 0
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1370
                infos["connector"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1371
                infos["connector"]["position"] = instance.connectionPointOut.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1372
                infos["connector"]["negated"] = instance.getnegated()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1373
                infos["connector"]["edge"] = instance.getedge()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1374
            elif isinstance(instance, plcopen.fbdObjects_outVariable):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1375
                infos["name"] = instance.getexpression()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1376
                infos["value_type"] = self.GetEditedElementVarValueType(tagname, infos["name"])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1377
                infos["type"] = "output"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1378
                executionOrder = instance.getexecutionOrderId()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1379
                if executionOrder is not None:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1380
                    infos["executionOrder"] = executionOrder
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1381
                else:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1382
                    infos["executionOrder"] = 0
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1383
                infos["connector"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1384
                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1385
                infos["connector"]["negated"] = instance.getnegated()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1386
                infos["connector"]["edge"] = instance.getedge()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1387
                infos["connector"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1388
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1389
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1390
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1391
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1392
                        infos["connector"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1393
            elif isinstance(instance, plcopen.fbdObjects_inOutVariable):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1394
                infos["name"] = instance.getexpression()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1395
                infos["value_type"] = self.GetEditedElementVarValueType(tagname, infos["name"])
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1396
                infos["type"] = "inout"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1397
                executionOrder = instance.getexecutionOrderId()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1398
                if executionOrder is not None:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1399
                    infos["executionOrder"] = executionOrder
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1400
                else:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1401
                    infos["executionOrder"] = 0
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1402
                infos["connectors"] = {"input":{},"output":{}}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1403
                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1404
                infos["connectors"]["output"]["negated"] = instance.getnegatedOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1405
                infos["connectors"]["output"]["edge"] = instance.getedgeOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1406
                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1407
                infos["connectors"]["input"]["negated"] = instance.getnegatedIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1408
                infos["connectors"]["input"]["edge"] = instance.getedgeIn()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1409
                infos["connectors"]["input"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1410
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1411
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1412
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1413
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1414
                        infos["connectors"]["input"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1415
            elif isinstance(instance, plcopen.commonObjects_continuation):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1416
                infos["name"] = instance.getname()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1417
                infos["type"] = "continuation"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1418
                infos["connector"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1419
                infos["connector"]["position"] = instance.connectionPointOut.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1420
            elif isinstance(instance, plcopen.commonObjects_connector):
154
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1421
                infos["name"] = instance.getname()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1422
                infos["type"] = "connection"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1423
                infos["connector"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1424
                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1425
                infos["connector"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1426
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1427
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1428
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1429
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1430
                        infos["connector"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1431
            elif isinstance(instance, plcopen.commonObjects_comment):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1432
                infos["type"] = "comment"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1433
                infos["content"] = instance.getcontentText()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1434
            elif isinstance(instance, plcopen.ldObjects_leftPowerRail):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1435
                infos["type"] = "leftPowerRail"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1436
                infos["connectors"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1437
                for connection in instance.getconnectionPointOut():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1438
                    connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1439
                    connector["position"] = connection.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1440
                    infos["connectors"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1441
            elif isinstance(instance, plcopen.ldObjects_rightPowerRail):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1442
                infos["type"] = "rightPowerRail"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1443
                infos["connectors"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1444
                for connection in instance.getconnectionPointIn():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1445
                    connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1446
                    connector["position"] = connection.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1447
                    connector["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1448
                    connections = connection.getconnections()
144
b67a5de5a24a Adding optimization on Viewer redrawing
lbessard
parents: 141
diff changeset
  1449
                    if connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1450
                        for link in connection.getconnections():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1451
                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
144
b67a5de5a24a Adding optimization on Viewer redrawing
lbessard
parents: 141
diff changeset
  1452
                            connector["links"].append(dic)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1453
                    infos["connectors"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1454
            elif isinstance(instance, plcopen.ldObjects_contact):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1455
                infos["name"] = instance.getvariable()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1456
                infos["type"] = "contact"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1457
                executionOrder = instance.getexecutionOrderId()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1458
                if executionOrder is not None:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1459
                    infos["executionOrder"] = executionOrder
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1460
                else:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1461
                    infos["executionOrder"] = 0
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1462
                infos["negated"] = instance.getnegated()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1463
                infos["edge"] = instance.getedge()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1464
                infos["connectors"] = {"input":{},"output":{}}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1465
                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1466
                infos["connectors"]["input"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1467
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1468
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1469
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1470
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1471
                        infos["connectors"]["input"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1472
                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1473
            elif isinstance(instance, plcopen.ldObjects_coil):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1474
                infos["name"] = instance.getvariable()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1475
                infos["type"] = "coil"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1476
                executionOrder = instance.getexecutionOrderId()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1477
                if executionOrder is not None:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1478
                    infos["executionOrder"] = executionOrder
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1479
                else:
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1480
                    infos["executionOrder"] = 0
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1481
                infos["negated"] = instance.getnegated()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1482
                infos["storage"] = instance.getstorage()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1483
                infos["connectors"] = {"input":{},"output":{}}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1484
                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1485
                infos["connectors"]["input"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1486
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1487
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1488
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1489
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1490
                        infos["connectors"]["input"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1491
                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1492
            elif isinstance(instance, plcopen.sfcObjects_step):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1493
                infos["name"] = instance.getname()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1494
                infos["type"] = "step"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1495
                infos["initial"] = instance.getinitialStep()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1496
                infos["connectors"] = {}
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1497
                if instance.connectionPointIn:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1498
                    infos["connectors"]["input"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1499
                    infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1500
                    infos["connectors"]["input"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1501
                    connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1502
                    if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1503
                        for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1504
                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1505
                            infos["connectors"]["input"]["links"].append(dic)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1506
                if instance.connectionPointOut:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1507
                    infos["connectors"]["output"] = {"position" : instance.connectionPointOut.getrelPositionXY()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1508
                if instance.connectionPointOutAction:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1509
                    infos["connectors"]["action"] = {"position" : instance.connectionPointOutAction.getrelPositionXY()}
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1510
            elif isinstance(instance, plcopen.sfcObjects_transition):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1511
                infos["type"] = "transition"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1512
                condition = instance.getconditionContent()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1513
                priority = instance.getpriority()
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1514
                if priority == None:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1515
                    infos["priority"] = 0
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1516
                else:
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1517
                    infos["priority"] = priority
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1518
                infos["condition_type"] = condition["type"]
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1519
                infos["connectors"] = {"input":{},"output":{}}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1520
                infos["connectors"]["input"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1521
                infos["connectors"]["input"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1522
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1523
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1524
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1525
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1526
                        infos["connectors"]["input"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1527
                infos["connectors"]["output"]["position"] = instance.connectionPointOut.getrelPositionXY()
63
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1528
                if infos["condition_type"] == "connection":
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1529
                    infos["connectors"]["connection"] = {}
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1530
                    infos["connectors"]["connection"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1531
                    connections = instance.getconnections()
63
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1532
                    if connections:
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1533
                        for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1534
                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
63
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1535
                            infos["connectors"]["connection"]["links"].append(dic)
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1536
                    infos["condition"] = None
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1537
                else:
04a02b4b2a57 Adding support for connecting transition to LD rung and FBD network
lbessard
parents: 62
diff changeset
  1538
                    infos["condition"] = condition["value"]
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1539
            elif isinstance(instance, (plcopen.sfcObjects_selectionDivergence, plcopen.sfcObjects_simultaneousDivergence)):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1540
                if isinstance(instance, plcopen.sfcObjects_selectionDivergence):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1541
                    infos["type"] = "selectionDivergence"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1542
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1543
                    infos["type"] = "simultaneousDivergence"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1544
                infos["connectors"] = {"inputs":[],"outputs":[]}
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1545
                connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1546
                connector["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1547
                connector["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1548
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1549
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1550
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1551
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1552
                        connector["links"].append(dic)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1553
                infos["connectors"]["inputs"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1554
                for sequence in instance.getconnectionPointOut():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1555
                    connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1556
                    connector["position"] = sequence.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1557
                    infos["connectors"]["outputs"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1558
            elif isinstance(instance, (plcopen.sfcObjects_selectionConvergence, plcopen.sfcObjects_simultaneousConvergence)):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1559
                if isinstance(instance, plcopen.sfcObjects_selectionConvergence):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1560
                    infos["type"] = "selectionConvergence"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1561
                else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1562
                    infos["type"] = "simultaneousConvergence"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1563
                infos["connectors"] = {"inputs":[],"outputs":[]}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1564
                for sequence in instance.getconnectionPointIn():
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1565
                    connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1566
                    connector["position"] = sequence.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1567
                    connector["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1568
                    connections = sequence.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1569
                    if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1570
                        for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1571
                            dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1572
                            connector["links"].append(dic)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1573
                    infos["connectors"]["inputs"].append(connector)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1574
                connector = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1575
                connector["position"] = instance.connectionPointOut.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1576
                infos["connectors"]["outputs"].append(connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1577
            elif isinstance(instance, plcopen.sfcObjects_jumpStep):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1578
                infos["type"] = "jump"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1579
                infos["target"] = instance.gettargetName()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1580
                infos["connector"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1581
                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1582
                infos["connector"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1583
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1584
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1585
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1586
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1587
                        infos["connector"]["links"].append(dic)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1588
            elif isinstance(instance, plcopen.commonObjects_actionBlock):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1589
                infos["type"] = "actionBlock"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1590
                infos["actions"] = instance.getactions()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1591
                infos["connector"] = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1592
                infos["connector"]["position"] = instance.connectionPointIn.getrelPositionXY()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1593
                infos["connector"]["links"] = []
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1594
                connections = instance.connectionPointIn.getconnections()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1595
                if connections:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1596
                    for link in connections:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1597
                        dic = {"refLocalId":link.getrefLocalId(),"points":link.getpoints(),"formalParameter":link.getformalParameter()}
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1598
                        infos["connector"]["links"].append(dic)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1599
            return infos
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1600
        return False
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1601
    
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1602
    def ClearEditedElementExecutionOrder(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1603
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1604
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1605
            element.resetexecutionOrder()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1606
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1607
    def ResetEditedElementExecutionOrder(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1608
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1609
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1610
            element.compileexecutionOrder()
118
0c53d6a36013 Add support for defining execution order in FBD networks (related ST code not generated yet)
lbessard
parents: 117
diff changeset
  1611
    
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1612
    # Return the variable type of the given pou
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1613
    def GetEditedElementVarValueType(self, tagname, varname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1614
        words = tagname.split("::")
80
c798a68c5560 Lots of bugs fixed
lbessard
parents: 71
diff changeset
  1615
        if words[0] in ["P","T","A"]:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1616
            pou = self.Project.getpou(words[1])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1617
            for type, varlist in pou.getvars():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1618
                for var in varlist.getvariable():
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1619
                    if var.getname() == varname:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1620
                        vartype_content = var.gettype().getcontent()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1621
                        if vartype_content["name"] == "derived":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1622
                            return vartype_content["value"].getname()
141
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1623
                        elif vartype_content["name"] in ["string", "wstring"]:
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1624
                            return vartype_content["name"].upper()
c0242a51774c Bug with String not recognized fixed
lbessard
parents: 137
diff changeset
  1625
                        else:
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  1626
                            return vartype_content["name"]
101
3f06a178b960 Fixed crash while draging connector from pins with undefined types
etisserant
parents: 100
diff changeset
  1627
        return None
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1628
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1629
    def SetConnectionWires(self, connection, connector):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1630
        wires = connector.GetWires()
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1631
        idx = 0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1632
        for wire, handle in wires:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1633
            points = wire.GetPoints(handle != 0)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1634
            if handle == 0:
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  1635
                result = wire.GetConnectedInfos(-1)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1636
            else:
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  1637
                result = wire.GetConnectedInfos(0)
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  1638
            if result != None:
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  1639
                refLocalId, formalParameter = result
173
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
  1640
                connections = connection.getconnections()
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
  1641
                if connections is None or len(connection.getconnections()) <= idx:
3f99b76ecfe7 Adding support for topology tree
lbessard
parents: 171
diff changeset
  1642
                    connection.addconnection()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1643
                connection.setconnectionId(idx, refLocalId)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1644
                connection.setconnectionPoints(idx, points)
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  1645
                if formalParameter != "":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1646
                    connection.setconnectionParameter(idx, formalParameter)
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  1647
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1648
                    connection.setconnectionParameter(idx, None)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1649
                idx += 1
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1650
    
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1651
    def AddEditedElementPouVar(self, tagname, type, name):
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1652
        words = tagname.split("::")
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1653
        if words[0] in ['P', 'T', 'A']:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1654
            pou = self.Project.getpou(words[1])
197
8023d02d78ed Bug on adding block in a pou without previous interface fixed
lbessard
parents: 188
diff changeset
  1655
            if not pou.interface:
8023d02d78ed Bug on adding block in a pou without previous interface fixed
lbessard
parents: 188
diff changeset
  1656
                pou.interface = plcopen.pou_interface()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1657
            pou.addpouVar(type, name)
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1658
            
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1659
    def ChangeEditedElementPouVar(self, tagname, old_type, old_name, new_type, new_name):
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1660
        words = tagname.split("::")
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1661
        if words[0] in ['P', 'T', 'A']:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1662
            pou = self.Project.getpou(words[1])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1663
            pou.changepouVar(old_type, old_name, new_type, new_name)
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1664
    
154
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1665
    def RemoveEditedElementPouVar(self, tagname, type, name):
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1666
        words = tagname.split("::")
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1667
        if words[0] in ['P', 'T', 'A']:
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1668
            pou = self.Project.getpou(words[1])
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1669
            pou.removepouVar(type, name)
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1670
    
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1671
    def AddEditedElementBlock(self, tagname, id, blocktype, blockname = None):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1672
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1673
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1674
            block = plcopen.fbdObjects_block()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1675
            block.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1676
            block.settypeName(blocktype)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1677
            blocktype_infos = self.GetBlockType(blocktype)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1678
            if blocktype_infos["type"] != "function" and blockname is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1679
                block.setinstanceName(blockname)
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  1680
                self.AddEditedElementPouVar(tagname, blocktype, blockname)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1681
            element.addinstance("block", block)
229
a5087e346baa Deprecated method removed and bug on chunk extract fixed
lbessard
parents: 226
diff changeset
  1682
            self.Project.RefreshElementUsingTree()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1683
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1684
    def SetEditedElementBlockInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1685
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1686
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1687
            block = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1688
            if block is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1689
                return 
154
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1690
            old_name = block.getinstanceName()
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1691
            old_type = block.gettypeName()
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1692
            new_name = infos.get("name", old_name)
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1693
            new_type = infos.get("type", old_type)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1694
            old_typeinfos = self.GetBlockType(old_type)
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  1695
            new_typeinfos = self.GetBlockType(new_type)
233
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
  1696
            if new_type != old_type and new_typeinfos["type"] != old_typeinfos["type"]:
154
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1697
                if new_typeinfos["type"] == "function":
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1698
                    self.RemoveEditedElementPouVar(tagname, old_type, old_name)
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1699
                else:
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1700
                    self.AddEditedElementPouVar(tagname, new_type, new_name)
233
de7ddb376150 Now generated global variable declaration is done in one separate block. Also "fixed" (masked?) problem when deleting blocks with invalid type
etisserant
parents: 229
diff changeset
  1701
            elif old_name != new_name and new_typeinfos["type"] != "function":
154
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  1702
                self.ChangeEditedElementPouVar(tagname, old_type, old_name, new_type, new_name)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1703
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1704
                if param == "name":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1705
                    block.setinstanceName(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1706
                elif param == "type":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1707
                    block.settypeName(value)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1708
                elif param == "executionOrder" and block.getexecutionOrderId() != value:
162
e746ff4aa8be Bug on Element Paste fixed
lbessard
parents: 154
diff changeset
  1709
                    element.setelementExecutionOrder(block, value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1710
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1711
                    block.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1712
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1713
                    block.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1714
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1715
                    block.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1716
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1717
                    block.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1718
                elif param == "connectors":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1719
                    block.inputVariables.setvariable([])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1720
                    block.outputVariables.setvariable([])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1721
                    for connector in value["inputs"]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1722
                        variable = plcopen.inputVariables_variable()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1723
                        variable.setformalParameter(connector.GetName())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1724
                        if connector.IsNegated():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1725
                            variable.setnegated(True)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1726
                        if connector.GetEdge() != "none":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1727
                            variable.setedge(connector.GetEdge())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1728
                        position = connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1729
                        variable.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1730
                        self.SetConnectionWires(variable.connectionPointIn, connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1731
                        block.inputVariables.appendvariable(variable)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1732
                    for connector in value["outputs"]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1733
                        variable = plcopen.outputVariables_variable()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1734
                        variable.setformalParameter(connector.GetName())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1735
                        if connector.IsNegated():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1736
                            variable.setnegated(True)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1737
                        if connector.GetEdge() != "none":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1738
                            variable.setedge(connector.GetEdge())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1739
                        position = connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1740
                        variable.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1741
                        variable.connectionPointOut.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1742
                        block.outputVariables.appendvariable(variable)
229
a5087e346baa Deprecated method removed and bug on chunk extract fixed
lbessard
parents: 226
diff changeset
  1743
            self.Project.RefreshElementUsingTree()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1744
        
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1745
    def AddEditedElementVariable(self, tagname, id, type):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1746
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1747
        if element is not None:            
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1748
            if type == INPUT:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1749
                name = "inVariable"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1750
                variable = plcopen.fbdObjects_inVariable()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1751
            elif type == OUTPUT:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1752
                name = "outVariable"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1753
                variable = plcopen.fbdObjects_outVariable()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1754
            elif type == INOUT:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1755
                name = "inOutVariable"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1756
                variable = plcopen.fbdObjects_inOutVariable()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1757
            variable.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1758
            element.addinstance(name, variable)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1759
        
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1760
    def SetEditedElementVariableInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1761
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1762
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1763
            variable = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1764
            if variable is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1765
                return 
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1766
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1767
                if param == "name":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1768
                    variable.setexpression(value)    
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1769
                elif param == "executionOrder" and variable.getexecutionOrderId() != value:
162
e746ff4aa8be Bug on Element Paste fixed
lbessard
parents: 154
diff changeset
  1770
                    element.setelementExecutionOrder(variable, value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1771
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1772
                    variable.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1773
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1774
                    variable.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1775
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1776
                    variable.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1777
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1778
                    variable.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1779
                elif param == "connectors":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1780
                    if isinstance(variable, plcopen.fbdObjects_inVariable):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1781
                        if value["output"].IsNegated():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1782
                            variable.setnegated(True)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1783
                        if value["output"].GetEdge() != "none":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1784
                            variable.setedge(value["output"].GetEdge())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1785
                        position = value["output"].GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1786
                        variable.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1787
                        variable.connectionPointOut.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1788
                    elif isinstance(variable, plcopen.fbdObjects_outVariable):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1789
                        if value["input"].IsNegated():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1790
                            variable.setnegated(True)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1791
                        if value["input"].GetEdge() != "none":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1792
                            variable.setedge(value["input"].GetEdge())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1793
                        position = value["input"].GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1794
                        variable.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1795
                        variable.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1796
                        self.SetConnectionWires(variable.connectionPointIn, value["input"])
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1797
                    elif isinstance(variable, plcopen.fbdObjects_inOutVariable):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1798
                        if value["input"].IsNegated():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1799
                            variable.setnegatedIn(True)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1800
                        if value["input"].GetEdge() != "none":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1801
                            variable.setedgeIn(value["input"].GetEdge())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1802
                        if value["output"].IsNegated():
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1803
                            variable.setnegatedOut(True)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1804
                        if value["output"].GetEdge() != "none":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1805
                            variable.setedgeOut(value["output"].GetEdge())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1806
                        position = value["output"].GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1807
                        variable.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1808
                        variable.connectionPointOut.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1809
                        position = value["input"].GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1810
                        variable.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1811
                        variable.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1812
                        self.SetConnectionWires(variable.connectionPointIn, value["input"])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1813
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1814
    def AddEditedElementConnection(self, tagname, id, type):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1815
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1816
        if element is not None:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1817
            if type == CONNECTOR:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1818
                name = "connector"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1819
                connection = plcopen.commonObjects_connector()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1820
            elif type == CONTINUATION:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1821
                name = "continuation"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1822
                connection = plcopen.commonObjects_continuation()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1823
            connection.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1824
            element.addinstance(name, connection)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1825
        
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1826
    def SetEditedElementConnectionInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1827
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1828
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1829
            connection = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1830
            if connection is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1831
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1832
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1833
                if param == "name":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1834
                    connection.setname(value)    
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1835
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1836
                    connection.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1837
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1838
                    connection.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1839
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1840
                    connection.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1841
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1842
                    connection.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1843
                elif param == "connector":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1844
                    position = value.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1845
                    if isinstance(connection, plcopen.commonObjects_continuation):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1846
                        connection.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1847
                        connection.connectionPointOut.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1848
                    elif isinstance(connection, plcopen.commonObjects_connector):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1849
                        connection.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1850
                        connection.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1851
                        self.SetConnectionWires(connection.connectionPointIn, value)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1852
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1853
    def AddEditedElementComment(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1854
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1855
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1856
            comment = plcopen.commonObjects_comment()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1857
            comment.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1858
            element.addinstance("comment", comment)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1859
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1860
    def SetEditedElementCommentInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1861
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1862
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1863
            comment = element.getinstance(id)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1864
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1865
                if param == "content":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1866
                    comment.setcontentText(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1867
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1868
                    comment.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1869
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1870
                    comment.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1871
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1872
                    comment.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1873
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1874
                    comment.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1875
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1876
    def AddEditedElementPowerRail(self, tagname, id, type):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1877
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1878
        if element is not None:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1879
            if type == LEFTRAIL:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1880
                name = "leftPowerRail"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1881
                powerrail = plcopen.ldObjects_leftPowerRail()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1882
            elif type == RIGHTRAIL:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1883
                name = "rightPowerRail"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1884
                powerrail = plcopen.ldObjects_rightPowerRail()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1885
            powerrail.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1886
            element.addinstance(name, powerrail)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1887
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1888
    def SetEditedElementPowerRailInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1889
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1890
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1891
            powerrail = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1892
            if powerrail is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1893
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1894
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1895
                if param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1896
                    powerrail.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1897
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1898
                    powerrail.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1899
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1900
                    powerrail.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1901
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1902
                    powerrail.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1903
                elif param == "connectors":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1904
                    if isinstance(powerrail, plcopen.ldObjects_leftPowerRail):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1905
                        powerrail.setconnectionPointOut([])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1906
                        for connector in value:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1907
                            position = connector.GetRelPosition()
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1908
                            connection = plcopen.leftPowerRail_connectionPointOut()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1909
                            connection.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1910
                            powerrail.connectionPointOut.append(connection)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1911
                    elif isinstance(powerrail, plcopen.ldObjects_rightPowerRail):
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1912
                        powerrail.setconnectionPointIn([])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1913
                        for connector in value:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1914
                            position = connector.GetRelPosition()
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1915
                            connection = plcopen.connectionPointIn()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1916
                            connection.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1917
                            self.SetConnectionWires(connection, connector)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1918
                            powerrail.connectionPointIn.append(connection)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1919
128
d16a8df4d322 Some bugs fixed
lbessard
parents: 125
diff changeset
  1920
    def AddEditedElementContact(self, tagname, id):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1921
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1922
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1923
            contact = plcopen.ldObjects_contact()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1924
            contact.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1925
            element.addinstance("contact", contact)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1926
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1927
    def SetEditedElementContactInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1928
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1929
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1930
            contact = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1931
            if contact is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1932
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1933
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1934
                if param == "name":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1935
                    contact.setvariable(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1936
                elif param == "type":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1937
                    if value == CONTACT_NORMAL:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1938
                        contact.setnegated(False)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1939
                        contact.setedge("none")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1940
                    elif value == CONTACT_REVERSE:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1941
                        contact.setnegated(True)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1942
                        contact.setedge("none")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1943
                    elif value == CONTACT_RISING:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1944
                        contact.setnegated(False)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1945
                        contact.setedge("rising")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1946
                    elif value == CONTACT_FALLING:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1947
                        contact.setnegated(False)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1948
                        contact.setedge("falling")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1949
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1950
                    contact.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1951
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1952
                    contact.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1953
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1954
                    contact.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1955
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1956
                    contact.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1957
                elif param == "connectors":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1958
                    input_connector = value["input"]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1959
                    position = input_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1960
                    contact.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1961
                    contact.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1962
                    self.SetConnectionWires(contact.connectionPointIn, input_connector)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1963
                    output_connector = value["output"]
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  1964
                    position = output_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1965
                    contact.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1966
                    contact.connectionPointOut.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1967
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1968
    def AddEditedElementCoil(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1969
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1970
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1971
            coil = plcopen.ldObjects_coil()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1972
            coil.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1973
            element.addinstance("coil", coil)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1974
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1975
    def SetEditedElementCoilInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1976
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1977
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1978
            coil = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1979
            if coil is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  1980
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1981
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1982
                if param == "name":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1983
                    coil.setvariable(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1984
                elif param == "type":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1985
                    if value == COIL_NORMAL:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1986
                        coil.setnegated(False)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1987
                        coil.setstorage("none")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1988
                    elif value == COIL_REVERSE:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1989
                        coil.setnegated(True)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1990
                        coil.setstorage("none")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1991
                    elif value == COIL_SET:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1992
                        coil.setnegated(False)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1993
                        coil.setstorage("set")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1994
                    elif value == COIL_RESET:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1995
                        coil.setnegated(False)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1996
                        coil.setstorage("reset")
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1997
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  1998
                    coil.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  1999
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2000
                    coil.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2001
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2002
                    coil.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2003
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2004
                    coil.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2005
                elif param == "connectors":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2006
                    input_connector = value["input"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2007
                    position = input_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2008
                    coil.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2009
                    coil.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2010
                    self.SetConnectionWires(coil.connectionPointIn, input_connector)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2011
                    output_connector = value["output"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2012
                    position = output_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2013
                    coil.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2014
                    coil.connectionPointOut.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2015
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2016
    def AddEditedElementStep(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2017
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2018
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2019
            step = plcopen.sfcObjects_step()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2020
            step.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2021
            element.addinstance("step", step)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2022
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2023
    def SetEditedElementStepInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2024
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2025
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2026
            step = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2027
            if step is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2028
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2029
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2030
                if param == "name":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2031
                    step.setname(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2032
                elif param == "initial":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2033
                    step.setinitialStep(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2034
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2035
                    step.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2036
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2037
                    step.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2038
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2039
                    step.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2040
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2041
                    step.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2042
                elif param == "connectors":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2043
                    input_connector = value["input"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2044
                    if input_connector:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2045
                        position = input_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2046
                        step.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2047
                        step.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2048
                        self.SetConnectionWires(step.connectionPointIn, input_connector)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2049
                    else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2050
                        step.deleteconnectionPointIn()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2051
                    output_connector = value["output"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2052
                    if output_connector:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2053
                        position = output_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2054
                        step.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2055
                        step.connectionPointOut.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2056
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2057
                        step.deleteconnectionPointOut()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2058
                    action_connector = value["action"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2059
                    if action_connector:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2060
                        position = action_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2061
                        step.addconnectionPointOutAction()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2062
                        step.connectionPointOutAction.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2063
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2064
                        step.deleteconnectionPointOutAction()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2065
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2066
    def AddEditedElementTransition(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2067
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2068
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2069
            transition = plcopen.sfcObjects_transition()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2070
            transition.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2071
            element.addinstance("transition", transition)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2072
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2073
    def SetEditedElementTransitionInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2074
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2075
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2076
            transition = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2077
            if transition is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2078
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2079
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2080
                if param == "type" and value != "connection":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2081
                    transition.setconditionContent(value, infos["condition"])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2082
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2083
                    transition.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2084
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2085
                    transition.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2086
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2087
                    transition.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2088
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2089
                    transition.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2090
                elif param == "priority":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2091
                    if value != 0:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2092
                        transition.setpriority(value)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2093
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2094
                        transition.setpriority(None)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2095
                elif param == "connectors":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2096
                    input_connector = value["input"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2097
                    position = input_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2098
                    transition.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2099
                    transition.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2100
                    self.SetConnectionWires(transition.connectionPointIn, input_connector)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2101
                    output_connector = value["output"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2102
                    position = output_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2103
                    transition.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2104
                    transition.connectionPointOut.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2105
                    if infos.get("type", None) == "connection":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2106
                        transition.setconditionContent("connection", None)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2107
                        connection_connector = value["connection"]
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2108
                        self.SetConnectionWires(transition, connection_connector)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2109
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2110
    def AddEditedElementDivergence(self, tagname, id, type):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2111
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2112
        if element is not None:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2113
            if type == SELECTION_DIVERGENCE:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2114
                name = "selectionDivergence"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2115
                divergence = plcopen.sfcObjects_selectionDivergence()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2116
            elif type == SELECTION_CONVERGENCE:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2117
                name = "selectionConvergence"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2118
                divergence = plcopen.sfcObjects_selectionConvergence()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2119
            elif type == SIMULTANEOUS_DIVERGENCE:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2120
                name = "simultaneousDivergence"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2121
                divergence = plcopen.sfcObjects_simultaneousDivergence()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2122
            elif type == SIMULTANEOUS_CONVERGENCE:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2123
                name = "simultaneousConvergence"
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2124
                divergence = plcopen.sfcObjects_simultaneousConvergence()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2125
            divergence.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2126
            element.addinstance(name, divergence)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2127
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2128
    def SetEditedElementDivergenceInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2129
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2130
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2131
            divergence = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2132
            if divergence is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2133
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2134
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2135
                if param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2136
                    divergence.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2137
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2138
                    divergence.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2139
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2140
                    divergence.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2141
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2142
                    divergence.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2143
                elif param == "connectors":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2144
                    input_connectors = value["inputs"]
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2145
                    if isinstance(divergence, (plcopen.sfcObjects_selectionDivergence, plcopen.sfcObjects_simultaneousDivergence)):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2146
                        position = input_connectors[0].GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2147
                        divergence.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2148
                        divergence.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2149
                        self.SetConnectionWires(divergence.connectionPointIn, input_connectors[0])
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2150
                    else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2151
                        divergence.setconnectionPointIn([])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2152
                        for input_connector in input_connectors:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2153
                            position = input_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2154
                            if isinstance(divergence, plcopen.sfcObjects_selectionConvergence):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2155
                                connection = plcopen.selectionConvergence_connectionPointIn()
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2156
                            else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2157
                                connection = plcopen.connectionPointIn()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2158
                            connection.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2159
                            self.SetConnectionWires(connection, input_connector)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2160
                            divergence.appendconnectionPointIn(connection)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2161
                    output_connectors = value["outputs"]
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2162
                    if isinstance(divergence, (plcopen.sfcObjects_selectionConvergence, plcopen.sfcObjects_simultaneousConvergence)):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2163
                        position = output_connectors[0].GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2164
                        divergence.addconnectionPointOut()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2165
                        divergence.connectionPointOut.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2166
                    else:
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2167
                        divergence.setconnectionPointOut([])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2168
                        for output_connector in output_connectors:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2169
                            position = output_connector.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2170
                            if isinstance(divergence, plcopen.sfcObjects_selectionDivergence):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2171
                                connection = plcopen.selectionDivergence_connectionPointOut()
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2172
                            else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2173
                                connection = plcopen.simultaneousDivergence_connectionPointOut()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2174
                            connection.setrelPositionXY(position.x, position.y)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2175
                            divergence.appendconnectionPointOut(connection)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2176
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2177
    def AddEditedElementJump(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2178
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2179
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2180
            jump = plcopen.sfcObjects_jumpStep()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2181
            jump.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2182
            element.addinstance("jumpStep", jump)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2183
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2184
    def SetEditedElementJumpInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2185
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2186
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2187
            jump = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2188
            if jump is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2189
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2190
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2191
                if param == "target":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2192
                    jump.settargetName(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2193
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2194
                    jump.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2195
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2196
                    jump.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2197
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2198
                    jump.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2199
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2200
                    jump.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2201
                elif param == "connector":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2202
                    position = value.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2203
                    jump.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2204
                    jump.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2205
                    self.SetConnectionWires(jump.connectionPointIn, value)
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2206
 
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2207
    def AddEditedElementActionBlock(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2208
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2209
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2210
            actionBlock = plcopen.commonObjects_actionBlock()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2211
            actionBlock.setlocalId(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2212
            element.addinstance("actionBlock", actionBlock)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2213
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2214
    def SetEditedElementActionBlockInfos(self, tagname, id, infos):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2215
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2216
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2217
            actionBlock = element.getinstance(id)
208
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2218
            if actionBlock is None:
c70aefcadf66 Bugs with feedback path in View, Controler and Generator fixed
lbessard
parents: 207
diff changeset
  2219
                return
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2220
            for param, value in infos.items():
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2221
                if param == "actions":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2222
                    actionBlock.setactions(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2223
                elif param == "height":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2224
                    actionBlock.setheight(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2225
                elif param == "width":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2226
                    actionBlock.setwidth(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2227
                elif param == "x":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2228
                    actionBlock.setx(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2229
                elif param == "y":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2230
                    actionBlock.sety(value)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2231
                elif param == "connector":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2232
                    position = value.GetRelPosition()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2233
                    actionBlock.addconnectionPointIn()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2234
                    actionBlock.connectionPointIn.setrelPositionXY(position.x, position.y)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2235
                    self.SetConnectionWires(actionBlock.connectionPointIn, value)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2236
    
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2237
    def RemoveEditedElementInstance(self, tagname, id):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2238
        element = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2239
        if element is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2240
            instance = element.getinstance(id)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2241
            if isinstance(instance, plcopen.fbdObjects_block):
154
203c4acdaf27 Redrawing bugs fixed
lbessard
parents: 151
diff changeset
  2242
                self.RemoveEditedElementPouVar(tagname, instance.gettypeName(), instance.getinstanceName())
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2243
            element.removeinstance(id)
229
a5087e346baa Deprecated method removed and bug on chunk extract fixed
lbessard
parents: 226
diff changeset
  2244
            self.Project.RefreshElementUsingTree()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2245
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2246
    def GetEditedResourceVariables(self, tagname):
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2247
        varlist = []
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2248
        words = tagname.split("::")
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2249
        for var in self.GetConfigurationGlobalVars(words[1]):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2250
            if var["Type"] == "BOOL":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2251
                varlist.append(var["Name"])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2252
        for var in self.GetConfigurationResourceGlobalVars(words[1], words[2]):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2253
            if var["Type"] == "BOOL":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2254
                varlist.append(var["Name"])
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2255
        return varlist
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2256
137
fc7e0b8ed9d3 Bug on Resource Editor fixed
lbessard
parents: 128
diff changeset
  2257
    def SetEditedResourceInfos(self, tagname, tasks, instances):
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2258
        resource = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2259
        if resource is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2260
            resource.settask([])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2261
            resource.setpouInstance([])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2262
            task_list = {}
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2263
            for task in tasks:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2264
                new_task = plcopen.resource_task()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2265
                new_task.setname(task["Name"])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2266
                if task["Single"] != "":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2267
                    new_task.setsingle(task["Single"])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2268
                result = duration_model.match(task["Interval"]).groups()
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2269
                if reduce(lambda x, y: x or y != None, result):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2270
                    values = []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2271
                    for value in result[:-1]:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2272
                        if value != None:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2273
                            values.append(int(value))
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2274
                        else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2275
                            values.append(0)
209
babfecf81c33 Bug on resource task interval setting fixed
lbessard
parents: 208
diff changeset
  2276
                    if result[-1] is not None:
188
d64037e17075 Bug with task ticktime definition fixed
lbessard
parents: 184
diff changeset
  2277
                        values.append(int(float(result[-1]) * 1000))
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2278
                    new_task.setinterval(time(*values))
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2279
                new_task.setpriority(int(task["Priority"]))
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2280
                if task["Name"] != "":
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2281
                    task_list[task["Name"]] = new_task
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2282
                resource.appendtask(new_task)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2283
            for instance in instances:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2284
                new_instance = plcopen.pouInstance()
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2285
                new_instance.setname(instance["Name"])
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2286
                new_instance.settype(instance["Type"])
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2287
                if instance["Task"] != "":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2288
                    task_list[instance["Task"]].appendpouInstance(new_instance)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2289
                else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2290
                    resource.appendpouInstance(new_instance)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2291
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2292
    def GetEditedResourceInfos(self, tagname):
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2293
        resource = self.GetEditedElement(tagname)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2294
        if resource is not None:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2295
            tasks = resource.gettask()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2296
            instances = resource.getpouInstance()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2297
            tasks_data = []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2298
            instances_data = []
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2299
            for task in tasks:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2300
                new_task = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2301
                new_task["Name"] = task.getname()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2302
                single = task.getsingle()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2303
                if single:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2304
                    new_task["Single"] = single
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2305
                else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2306
                    new_task["Single"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2307
                interval = task.getinterval()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2308
                if interval:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2309
                    text = ""
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2310
                    if interval.hour != 0:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2311
                        text += "%dh"%interval.hour
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2312
                    if interval.minute != 0:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2313
                        text += "%dm"%interval.minute
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2314
                    if interval.second != 0:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2315
                        text += "%ds"%interval.second
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2316
                    if interval.microsecond != 0:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2317
                        if interval.microsecond % 1000 != 0:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2318
                            text += "%.3fms"%(float(interval.microsecond) / 1000)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2319
                        else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2320
                            text += "%dms"%(interval.microsecond / 1000)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2321
                    new_task["Interval"] = text
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2322
                else:
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2323
                    new_task["Interval"] = ""
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2324
                new_task["Priority"] = str(task.getpriority())
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2325
                tasks_data.append(new_task)
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2326
                for instance in task.getpouInstance():
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2327
                    new_instance = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2328
                    new_instance["Name"] = instance.getname()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2329
                    new_instance["Type"] = instance.gettype()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2330
                    new_instance["Task"] = task.getname()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2331
                    instances_data.append(new_instance)
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2332
            for instance in instances:
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2333
                new_instance = {}
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2334
                new_instance["Name"] = instance.getname()
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2335
                new_instance["Type"] = instance.gettype()
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2336
                new_instance["Task"] = ""
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2337
                instances_data.append(new_instance)
121
40b91ba978db Improving PLCOpenEditor for using wx2.8 AUI
lbessard
parents: 118
diff changeset
  2338
            return tasks_data, instances_data
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2339
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2340
    def OpenXMLFile(self, filepath):
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2341
        xmlfile = open(filepath, 'r')
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2342
        tree = minidom.parse(xmlfile)
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2343
        xmlfile.close()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2344
        
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2345
        self.Project = plcopen.project()
116
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2346
        for child in tree.childNodes:
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2347
            if child.nodeType == tree.ELEMENT_NODE and child.nodeName == "project":
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2348
                self.Project.loadXMLTree(child, ["xmlns", "xmlns:xhtml", "xmlns:xsi", "xsi:schemaLocation"])
116
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2349
                self.SetFilePath(filepath)
226
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  2350
                self.Project.RefreshElementUsingTree()
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  2351
                self.Project.RefreshDataTypeHierarchy()
6a2f7ddd2e50 Moving Data types and POU types informations into project model
lbessard
parents: 210
diff changeset
  2352
                self.Project.RefreshCustomBlockTypes()
116
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2353
                self.ProjectBuffer = UndoBuffer(self.Copy(self.Project), True)
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2354
                self.Buffering = False
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2355
                self.ElementsOpened = []
58b9b84e385f Adding support in xmlclass for timezone in datetime and for not paying attention to xml comments
lbessard
parents: 108
diff changeset
  2356
                self.CurrentElementEditing = None
117
bbe0697cf1ea Bug on Open Project fixed
lbessard
parents: 116
diff changeset
  2357
                return None
bbe0697cf1ea Bug on Open Project fixed
lbessard
parents: 116
diff changeset
  2358
        return "No PLC project found"
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2359
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2360
    def SaveXMLFile(self, filepath = None):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2361
        if not filepath and self.FilePath == "":
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2362
            return False
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2363
        else:
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2364
            contentheader = self.Project.getcontentHeader()
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  2365
            contentheader["modificationDateTime"] = datetime(*localtime()[:6])
151
aaa80b48bead Adding support for the new version of xmlclass
lbessard
parents: 145
diff changeset
  2366
            self.Project.setcontentHeader(contentheader)
145
4fb225afddf4 Adding scaling
lbessard
parents: 144
diff changeset
  2367
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2368
            text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2369
            extras = {"xmlns" : "http://www.plcopen.org/xml/tc6.xsd",
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2370
                      "xmlns:xhtml" : "http://www.w3.org/1999/xhtml",
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2371
                      "xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance",
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2372
                      "xsi:schemaLocation" : "http://www.plcopen.org/xml/tc6.xsd http://www.plcopen.org/xml/tc6.xsd"}
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2373
            text += self.Project.generateXMLText("project", 0, extras)
125
394d9f168258 Adding support for execution order in PLCGenerator
lbessard
parents: 121
diff changeset
  2374
            
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2375
            if filepath:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2376
                xmlfile = open(filepath,"w")
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2377
            else:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2378
                xmlfile = open(self.FilePath,"w")
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2379
            xmlfile.write(text)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2380
            xmlfile.close()
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2381
            self.ProjectBuffer.CurrentSaved()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2382
            if filepath:
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2383
                self.SetFilePath(filepath)
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2384
            return True
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2385
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2386
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2387
#                      Current Buffering Management Functions
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2388
#-------------------------------------------------------------------------------
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2389
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2390
    """
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2391
    Return a copy of the project
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2392
    """
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2393
    def Copy(self, model):
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2394
        return cPickle.loads(cPickle.dumps(model))
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2395
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2396
    def BufferProject(self):
56
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2397
        self.ProjectBuffer.Buffering(self.Copy(self.Project))
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2398
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2399
    def StartBuffering(self):
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2400
        self.ProjectBuffer.Buffering(self.Project)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2401
        self.Buffering = True
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2402
        
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2403
    def EndBuffering(self):
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2404
        if self.Buffering:
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2405
            self.Project = self.Copy(self.Project)
7187e1c00975 Adding support for Undo/Redo and Unsaved File On Close detection
lbessard
parents: 53
diff changeset
  2406
            self.Buffering = False
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2407
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2408
    def ProjectIsSaved(self):
58
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
  2409
        if self.ProjectBuffer:
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
  2410
            return self.ProjectBuffer.IsCurrentSaved()
39cd981ff242 Changing file headers
lbessard
parents: 57
diff changeset
  2411
        else:
62
1908c45f21ef Adding sizer on some Dialogs for making them resizable
lbessard
parents: 58
diff changeset
  2412
            return True
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2413
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2414
    def LoadPrevious(self):
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  2415
        self.Project = self.Copy(self.ProjectBuffer.Previous())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2416
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2417
    def LoadNext(self):
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  2418
        self.Project = self.Copy(self.ProjectBuffer.Next())
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2419
    
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2420
    def GetBufferState(self):
27
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  2421
        first = self.ProjectBuffer.IsFirst()
dae55dd9ee14 Current developping version
lbessard
parents: 24
diff changeset
  2422
        last = self.ProjectBuffer.IsLast()
0
b622defdfd98 PLCOpenEditor initial commit. 31/01/07.
etisserant
parents:
diff changeset
  2423
        return not first, not last