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