LPCBeremiz.py
author Lolitech
Thu, 03 Jun 2010 17:21:40 +0200
changeset 547 5748d695beee
parent 543 3dec6ff88620
child 549 5dd92bd6e6e5
permissions -rw-r--r--
Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     1
#!/usr/bin/env python
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
503
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
     3
import shutil
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     4
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     5
__version__ = "$Revision$"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     6
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     7
import os, sys, getopt, wx, tempfile
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     8
from types import TupleType, StringType, UnicodeType
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
     9
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    10
CWD = os.path.split(os.path.realpath(__file__))[0]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    11
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    12
def Bpath(*args):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    13
    return os.path.join(CWD,*args)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    14
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    15
if __name__ == '__main__':
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    16
    def usage():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    17
        print "\nUsage of LPCBeremiz.py :"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    18
        print "\n   %s [Projectpath] [Buildpath]\n"%sys.argv[0]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    19
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    20
    try:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    21
        opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    22
    except getopt.GetoptError:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    23
        # print help information and exit:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    24
        usage()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    25
        sys.exit(2)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    26
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    27
    for o, a in opts:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    28
        if o in ("-h", "--help"):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    29
            usage()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    30
            sys.exit()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    31
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    32
    if len(args) > 2:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    33
        usage()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    34
        sys.exit()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    35
    elif len(args) == 1:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    36
        projectOpen = args[0]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    37
        buildpath = None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    38
    elif len(args) == 2:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    39
        projectOpen = args[0]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    40
        buildpath = args[1]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    41
    else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    42
        projectOpen = None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    43
        buildpath = None
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
    44
    
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
    45
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
    46
app = wx.PySimpleApp()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
    47
app.SetAppName('beremiz')
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
    48
wx.InitAllImageHandlers()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    49
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    50
# Import module for internationalization
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    51
import gettext
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    52
import __builtin__
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    53
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    54
if __name__ == '__main__':
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    55
    __builtin__.__dict__['_'] = wx.GetTranslation#unicode_translation
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    56
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    57
from Beremiz import *
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
    58
from plugger import PluginsRoot, PlugTemplate, opjimg, connectors
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    59
from plcopen.structures import LOCATIONDATATYPES
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    60
from PLCControler import LOCATION_PLUGIN, LOCATION_MODULE, LOCATION_GROUP,\
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    61
                         LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
    62
from PLCOpenEditor import IDEFrame, ProjectDialog
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    63
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    64
#-------------------------------------------------------------------------------
512
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    65
#                          CANFESTIVAL PLUGIN HACK
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    66
#-------------------------------------------------------------------------------
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    67
from plugins.canfestival import canfestival
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    68
class LPC_canfestival_config:
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    69
    def getCFLAGS(self, *args):
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    70
        return ""
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    71
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    72
    def getLDFLAGS(self, *args):
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    73
        return ""
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    74
        
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    75
canfestival.local_canfestival_config = LPC_canfestival_config() 
36aeab46f27d Improved CanFEstival support for LPC - now build and link plugin generated files
edouard
parents: 510
diff changeset
    76
#-------------------------------------------------------------------------------
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    77
#                              LPCModule Class
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    78
#-------------------------------------------------------------------------------
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    79
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    80
LOCATION_TYPES = {"I": LOCATION_VAR_INPUT,
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    81
                  "Q": LOCATION_VAR_OUTPUT,
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    82
                  "M": LOCATION_VAR_MEMORY}
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    83
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    84
LOCATION_DIRS = dict([(dir, size) for size, dir in LOCATION_TYPES.iteritems()])
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    85
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    86
LOCATION_SIZES = {}
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    87
for size, types in LOCATIONDATATYPES.iteritems():
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    88
    for type in types:
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    89
        LOCATION_SIZES[type] = size
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
    90
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    91
def _GetModuleChildren(module):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    92
    children = []
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    93
    for child in module["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    94
        if child["type"] == LOCATION_GROUP:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    95
            children.extend(child["children"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    96
        else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    97
            children.append(child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    98
    return children
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
    99
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   100
def _GetLastModuleGroup(module):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   101
    group = module
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   102
    for child in module["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   103
        if child["type"] == LOCATION_GROUP:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   104
            group = child
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   105
    return group["children"]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   106
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   107
def _GetModuleBySomething(module, something, toks):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   108
    for child in _GetModuleChildren(module):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   109
        if child.get(something) == toks[0]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   110
            if len(toks) > 1:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   111
                return _GetModuleBySomething(child, something, toks[1:])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   112
            return child
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   113
    return None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   114
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
   115
def _GetModuleVariable(module, location, direction):
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   116
    for child in _GetModuleChildren(module):
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
   117
        if child["location"] == location and child["type"] == LOCATION_TYPES[direction]:
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   118
            return child
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   119
    return None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   120
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   121
def _RemoveModuleChild(module, child):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   122
    if child in module["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   123
        module["children"].remove(child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   124
    else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   125
        for group in module["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   126
            if group["type"] == LOCATION_GROUP and child in group["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   127
                group["children"].remove(child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   128
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   129
BUS_TEXT = """/* Code generated by LPCBus plugin */
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   130
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   131
/* LPCBus plugin includes */
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   132
#include "app_glue.h"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   133
#ifdef _WINDOWS_H
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   134
  #include "iec_types.h"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   135
#else
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   136
  #include "iec_std_lib.h"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   137
#endif
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   138
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   139
%(declare_code)s
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   140
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   141
/* LPCBus plugin user variables definition */
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   142
%(var_decl)s
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   143
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   144
/* LPCBus plugin functions */
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   145
int __init_%(location_str)s(int argc,char **argv)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   146
{
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   147
  return 0;
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   148
}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   149
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   150
void __cleanup_%(location_str)s(void)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   151
{
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   152
}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   153
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   154
void __retrieve_%(location_str)s(void)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   155
{
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   156
  %(retrieve_code)s
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   157
}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   158
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   159
void __publish_%(location_str)s(void)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   160
{
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   161
  %(publish_code)s
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   162
}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   163
"""
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   164
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   165
class LPCBus(object):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   166
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   167
    def __init__(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   168
        self.VariableLocationTree = []
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   169
        self.ResetUsedLocations()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   170
        self.Icon = None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   171
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   172
    def __getitem__(self, key):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   173
        if key == "children":
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   174
            return self.VariableLocationTree
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   175
        raise KeyError, "Only 'children' key is available"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   176
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   177
    def SetIcon(self, icon):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   178
        self.Icon = icon
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   179
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   180
    def _GetChildBySomething(self, something, toks):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   181
        return _GetModuleBySomething({"children" : self.VariableLocationTree}, something, toks)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   182
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   183
    def GetBaseTypes(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   184
        return self.GetPlugRoot().GetBaseTypes()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   185
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   186
    def GetSizeOfType(self, type):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   187
        return LOCATION_SIZES[self.GetPlugRoot().GetBaseType(type)]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   188
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   189
    def _GetVariableLocationTree(self, current_location, infos):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   190
        if infos["type"] == LOCATION_MODULE:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   191
            location = current_location + (infos["IEC_Channel"],)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   192
            return {"name": infos["name"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   193
                    "type": infos["type"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   194
                    "location": ".".join(map(str, location + ("x",))), 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   195
                    "icon": infos["icon"], 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   196
                    "children": [self._GetVariableLocationTree(location, child) for child in infos["children"]]}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   197
        elif infos["type"] == LOCATION_GROUP:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   198
            return {"name": infos["name"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   199
                    "type": infos["type"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   200
                    "location": "", 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   201
                    "icon": infos["icon"], 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   202
                    "children": [self._GetVariableLocationTree(current_location, child) for child in infos["children"]]}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   203
        else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   204
            size = self.GetSizeOfType(infos["IEC_type"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   205
            location = "%" + LOCATION_DIRS[infos["type"]] + size + ".".join(map(str, current_location + infos["location"]))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   206
            return {"name": infos["name"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   207
                    "type": infos["type"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   208
                    "size": size,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   209
                    "IEC_type": infos["IEC_type"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   210
                    "location": location,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   211
                    "description": infos["description"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   212
                    "children": []}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   213
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   214
    def GetVariableLocationTree(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   215
        return {"name": self.BaseParams.getName(),
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   216
                "type": LOCATION_PLUGIN,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   217
                "location": self.GetFullIEC_Channel(),
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   218
                "icon": self.Icon, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   219
                "children": [self._GetVariableLocationTree(self.GetCurrentLocation(), child) 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   220
                             for child in self.VariableLocationTree]}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   221
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   222
    def PlugTestModified(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   223
        return False
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   224
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   225
    def PlugMakeDir(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   226
        pass
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   227
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   228
    def PlugRequestSave(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   229
        return None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   230
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   231
    def ResetUsedLocations(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   232
        self.UsedLocations = {}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   233
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   234
    def _AddUsedLocation(self, parent, location):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   235
        num = location.pop(0)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   236
        if not parent.has_key(num):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   237
            parent[num] = {"used": False, "children": {}}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   238
        if len(location) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   239
            self._AddUsedLocation(parent[num]["children"], location)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   240
        else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   241
            parent[num]["used"] = True
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   242
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   243
    def AddUsedLocation(self, location):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   244
        if len(location) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   245
            self._AddUsedLocation(self.UsedLocations, list(location))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   246
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   247
    def _CheckLocationConflicts(self, parent, location):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   248
        num = location.pop(0)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   249
        if not parent.has_key(num):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   250
            return False
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   251
        if len(location) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   252
            if parent[num]["used"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   253
                return True
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   254
            return self._CheckLocationConflicts(parent[num]["children"], location)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   255
        elif len(parent[num]["children"]) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   256
            return True
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   257
        return False
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   258
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   259
    def CheckLocationConflicts(self, location):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   260
        if len(location) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   261
            return self._CheckLocationConflicts(self.UsedLocations, list(location))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   262
        return False
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   263
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   264
    def PlugGenerate_C(self, buildpath, locations):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   265
        """
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   266
        Generate C code
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   267
        @param current_location: Tupple containing plugin IEC location : %I0.0.4.5 => (0,0,4,5)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   268
        @param locations: List of complete variables locations \
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   269
            [{"IEC_TYPE" : the IEC type (i.e. "INT", "STRING", ...)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   270
            "NAME" : name of the variable (generally "__IW0_1_2" style)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   271
            "DIR" : direction "Q","I" or "M"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   272
            "SIZE" : size "X", "B", "W", "D", "L"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   273
            "LOC" : tuple of interger for IEC location (0,1,2,...)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   274
            }, ...]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   275
        @return: [(C_file_name, CFLAGS),...] , LDFLAGS_TO_APPEND
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   276
        """
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   277
        current_location = self.GetCurrentLocation()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   278
        # define a unique name for the generated C file
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   279
        location_str = "_".join(map(str, current_location))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   280
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   281
        code_str = {"location_str": location_str,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   282
                    "var_decl": "",
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   283
                    "declare_code": "",
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   284
                    "retrieve_code": "",
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   285
                    "publish_code": "",
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   286
                   }
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   287
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   288
        # Adding variables
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   289
        vars = []
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   290
        self.ResetUsedLocations()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   291
        for location in locations:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   292
            loc = location["LOC"][len(current_location):]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   293
            group = next = self
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   294
            i = 0
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   295
            while next is not None and i < len(loc):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   296
                next = self._GetChildBySomething("IEC_Channel", loc[:i + 1])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   297
                if next is not None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   298
                    i += 1
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   299
                    group = next
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   300
            var_loc = loc[i:]
530
862d9adcd904 Bug when trying to generate LPCBus code fixed
laurent
parents: 526
diff changeset
   301
            for variable in _GetModuleChildren(group):
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   302
                if variable["location"] == var_loc:
543
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   303
#                    if location["DIR"] != LOCATION_DIRS[variable["type"]]:
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   304
#                        raise Exception, "Direction conflict in variable definition"
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   305
#                    if location["IEC_TYPE"] != variable["IEC_type"]:
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   306
#                        raise Exception, "Type conflict in variable definition"
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   307
                    if location["DIR"] == "Q":
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   308
                        if self.CheckLocationConflicts(location["LOC"]):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   309
                            raise Exception, "BYTE and BIT from the same BYTE can't be used together"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   310
                        self.AddUsedLocation(location["LOC"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   311
                    vars.append({"location": location["NAME"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   312
                                 "Type": variable["IEC_type"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   313
                                 "Declare": variable["declare"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   314
                                 "Retrieve": variable["retrieve"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   315
                                 "Publish": variable["publish"],
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   316
                                })
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   317
                    break
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   318
        base_types = self.GetPlugRoot().GetBaseTypes()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   319
        for var in vars:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   320
            prefix = ""
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   321
            if var["Type"] in base_types:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   322
                prefix = "IEC_"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   323
            code_str["var_decl"] += "%s%s beremiz%s;\n"%(prefix, var["Type"], var["location"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   324
            code_str["var_decl"] += "%s%s *%s = &beremiz%s;\n"%(prefix, var["Type"], var["location"], var["location"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   325
            if var["Declare"] != "":
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   326
                code_str["declare_code"] += var["Declare"] + "\n"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   327
            if var["Retrieve"] != "":
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   328
                code_str["retrieve_code"] += var["Retrieve"] % ("*" + var["location"]) + "\n"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   329
            if var["Publish"] != "":
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   330
                code_str["publish_code"] += var["Publish"] % ("*" + var["location"]) + "\n"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   331
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   332
        Gen_Module_path = os.path.join(buildpath, "Module_%s.c"%location_str)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   333
        module = open(Gen_Module_path,'w')
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   334
        module.write(BUS_TEXT % code_str)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   335
        module.close()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   336
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   337
        matiec_flags = '"-I%s"'%os.path.abspath(self.GetPlugRoot().GetIECLibPath())
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   338
        return [(Gen_Module_path, matiec_flags)],"",True
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   339
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   340
#-------------------------------------------------------------------------------
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   341
#                              LPCPluginsRoot Class
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   342
#-------------------------------------------------------------------------------
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   343
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   344
def mycopytree(src, dst):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   345
    """
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   346
    Copy content of a directory to an other, omit hidden files
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   347
    @param src: source directory
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   348
    @param dst: destination directory
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   349
    """
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   350
    for i in os.listdir(src):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   351
        if not i.startswith('.'):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   352
            srcpath = os.path.join(src,i)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   353
            dstpath = os.path.join(dst,i)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   354
            if os.path.isdir(srcpath):
503
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   355
                if os.path.exists(dstpath):
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   356
                    shutil.rmtree(dstpath)
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   357
                os.makedirs(dstpath)
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   358
                mycopytree(srcpath, dstpath)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   359
            elif os.path.isfile(srcpath):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   360
                shutil.copy2(srcpath, dstpath)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   361
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   362
[SIMULATION_MODE, TRANSFER_MODE] = range(2)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   363
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   364
class LPCPluginsRoot(PluginsRoot):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   365
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   366
    PluginMethods = [
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   367
        {"bitmap" : opjimg("Debug"),
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   368
         "name" : _("Simulate"),
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   369
         "tooltip" : _("Simulate PLC"),
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   370
         "method" : "_Simulate"},
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   371
        {"bitmap" : opjimg("Run"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   372
         "name" : _("Run"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   373
         "shown" : False,
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   374
         "tooltip" : _("Start PLC"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   375
         "method" : "_Run"},
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   376
        {"bitmap" : opjimg("Stop"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   377
         "name" : _("Stop"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   378
         "shown" : False,
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   379
         "tooltip" : _("Stop Running PLC"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   380
         "method" : "_Stop"},
541
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   381
        {"bitmap" : opjimg("Build"),
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   382
         "name" : _("Build"),
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   383
         "tooltip" : _("Build project into build folder"),
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   384
         "method" : "_build"},
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   385
        {"bitmap" : opjimg("Transfer"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   386
         "name" : _("Transfer"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   387
         "shown" : False,
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   388
         "tooltip" : _("Transfer PLC"),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   389
         "method" : "_Transfer"},
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   390
    ]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   391
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   392
    def __init__(self, frame, logger):
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   393
        PluginsRoot.__init__(self, frame, logger)
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   394
        
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   395
        self.PlugChildsTypes += [("LPCBus", LPCBus, "LPC bus")]
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   396
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   397
        self.OnlineMode = "OFF"
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   398
        self.LPCConnector = False
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   399
        
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   400
        self.CurrentMode = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   401
        self.previous_mode = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   402
        
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   403
        self.SimulationBuildPath = None
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   404
        
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   405
        self.AbortTransferTimer = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   406
        
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   407
    def GetProjectName(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   408
        return self.Project.getname()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   409
510
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   410
    def GetDefaultTargetName(self):
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   411
        if self.CurrentMode == SIMULATION_MODE:
510
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   412
            return PluginsRoot.GetDefaultTargetName(self)
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   413
        else:
510
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   414
            return "LPC"
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   415
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   416
    def GetTarget(self):
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   417
        target = PluginsRoot.GetTarget(self)
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   418
        if self.CurrentMode != SIMULATION_MODE:
510
8038c08b9874 Getting default target when no target defined fixed
laurent
parents: 503
diff changeset
   419
            target.getcontent()["value"].setBuildPath(self.BuildPath)
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   420
        return target
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   421
    
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   422
    def _getBuildPath(self):
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   423
        if self.CurrentMode == SIMULATION_MODE:
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   424
            if self.SimulationBuildPath is None:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   425
                self.SimulationBuildPath = os.path.join(tempfile.mkdtemp(), os.path.basename(self.ProjectPath), "build")
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   426
            return self.SimulationBuildPath
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   427
        else:
494
9e4263099427 Bug when opening with not empty buildpath parameter fixed
laurent
parents: 492
diff changeset
   428
            return PluginsRoot._getBuildPath(self)
503
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   429
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   430
    def _build(self):
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   431
        if self.BuildPath is not None:
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   432
            mycopytree(self.OrigBuildPath, self.BuildPath)
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   433
        PluginsRoot._build(self)
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   434
    
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   435
    def SetProjectName(self, name):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   436
        return self.Project.setname(name)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   437
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   438
    def SetOnlineMode(self, mode, path=None):
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   439
        if self.OnlineMode != mode.upper():
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   440
            self.OnlineMode = mode.upper()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   441
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   442
            if self.OnlineMode != "OFF":
543
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   443
                uri = "LPC://%s/%s" % (self.OnlineMode,path)
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   444
                try:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   445
                    self.LPCConnector = connectors.ConnectorFactory(uri, self)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   446
                except Exception, msg:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   447
                    self.logger.write_error(_("Exception while connecting %s!\n")%uri)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   448
                    self.logger.write_error(traceback.format_exc())
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   449
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   450
                # Did connection success ?
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   451
                if self.LPCConnector is None:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   452
                    # Oups.
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   453
                    self.logger.write_error(_("Connection failed to %s!\n")%uri)
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   454
                
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   455
            else:
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   456
                self.LPCConnector = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   457
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   458
            self.ApplyOnlineMode()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   459
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   460
    def ApplyOnlineMode(self):
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   461
        if self.CurrentMode != SIMULATION_MODE:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   462
            self.KillDebugThread()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   463
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   464
            self._connector = self.LPCConnector
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   465
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   466
            # Init with actual PLC status and print it
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   467
            self.UpdateMethodsFromPLCStatus()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   468
                
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   469
            if self.LPCConnector is not None and self.OnlineMode == "APPLICATION":
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   470
                
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   471
                self.CompareLocalAndRemotePLC()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   472
                            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   473
                if self.previous_plcstate is not None:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   474
                    status = _(self.previous_plcstate)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   475
                else:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   476
                    status = ""
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   477
                self.logger.write(_("PLC is %s\n")%status)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   478
                
543
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   479
                if self.StatusTimer and not self.StatusTimer.IsRunning():
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   480
                    # Start the status Timer
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   481
                    self.StatusTimer.Start(milliseconds=500, oneShot=False)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   482
                
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   483
                if self.previous_plcstate=="Started":
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   484
                    if self.DebugAvailable() and self.GetIECProgramsAndVariables():
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   485
                        self.logger.write(_("Debug connect matching running PLC\n"))
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   486
                        self._connect_debug()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   487
                    else:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   488
                        self.logger.write_warning(_("Debug do not match PLC - stop/transfert/start to re-enable\n"))
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   489
            
543
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   490
            elif self.StatusTimer and self.StatusTimer.IsRunning():
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   491
                self.StatusTimer.Stop()
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   492
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   493
            if self.CurrentMode == TRANSFER_MODE:
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   494
                
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   495
                if self.OnlineMode == "BOOTLOADER":
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   496
                    self.BeginTransfer()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   497
                
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   498
                elif self.OnlineMode == "APPLICATION":
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   499
                    self.CurrentMode = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   500
                    self.AbortTransferTimer.Stop()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   501
                    self.AbortTransferTimer = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   502
                    
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   503
                    self.logger.write(_("PLC transferred successfully\n"))
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   504
    
444
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   505
    # Update a PLCOpenEditor Pou variable name
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   506
    def UpdateProjectVariableName(self, old_name, new_name):
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   507
        self.Project.updateElementName(old_name, new_name)
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   508
        self.BufferProject()
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   509
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   510
    def RemoveProjectVariableByAddress(self, address):
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   511
        self.Project.removeVariableByAddress(address)
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   512
        self.BufferProject()
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   513
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   514
    def RemoveProjectVariableByFilter(self, leading):
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   515
        self.Project.removeVariableByFilter(leading)
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   516
        self.BufferProject()
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
   517
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   518
    def LoadProject(self, ProjectPath, BuildPath=None):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   519
        """
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   520
        Load a project contained in a folder
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   521
        @param ProjectPath: path of the project folder
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   522
        """
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   523
        if os.path.basename(ProjectPath) == "":
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   524
            ProjectPath = os.path.dirname(ProjectPath)
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   525
        
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   526
        # Verify that project contains a PLCOpen program
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   527
        plc_file = os.path.join(ProjectPath, "plc.xml")
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   528
        if os.path.isfile(plc_file):
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   529
            # Load PLCOpen file
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   530
            result = self.OpenXMLFile(plc_file)
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   531
            if result:
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   532
                return result
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   533
        else:
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   534
            self.CreateNewProject({"companyName": "",
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   535
                                   "productName": "",
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   536
                                   "productVersion": "",
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   537
                                   "projectName": "",
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   538
                                   "pageSize": (0, 0),
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   539
                                   "scaling": {}})
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   540
        
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   541
        # Change XSD into class members
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   542
        self._AddParamsMembers()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   543
        self.PluggedChilds = {}
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   544
        
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   545
        # Keep track of the root plugin (i.e. project path)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   546
        self.ProjectPath = ProjectPath
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   547
        
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   548
        self.BuildPath = self._getBuildPath()
503
4c0cd5e54e1b LPC build and protocol tweaks
edouard
parents: 501
diff changeset
   549
        self.OrigBuildPath = BuildPath
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   550
        if BuildPath is not None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   551
            mycopytree(BuildPath, self.BuildPath)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   552
        
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   553
        # If dir have already be made, and file exist
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   554
        if os.path.isdir(self.PlugPath()) and os.path.isfile(self.PluginXmlFilePath()):
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   555
            #Load the plugin.xml file into parameters members
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   556
            result = self.LoadXMLParams()
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   557
            if result:
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   558
                return result
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   559
            #Load and init all the childs
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   560
            self.LoadChilds()
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   561
        
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   562
        if self.PlugTestModified():
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   563
            self.SaveProject()
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   564
        
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   565
        if wx.GetApp() is None:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   566
            self.RefreshPluginsBlockLists()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   567
        else:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   568
            wx.CallAfter(self.RefreshPluginsBlockLists)
478
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   569
029688dad14d Replacing target_Makefile by target_LPC
laurent
parents: 472
diff changeset
   570
        return None
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   571
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   572
    ############# Real PLC object access #############
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   573
    def UpdateMethodsFromPLCStatus(self):
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   574
        # Get PLC state : Running or Stopped
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   575
        # TODO : use explicit status instead of boolean
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   576
        if self.OnlineMode == "OFF":
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   577
            status = "Disconnected"
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   578
        elif self.OnlineMode == "BOOTLOADER":
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   579
            status = "Connected"
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   580
        else:
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   581
            if self._connector is not None:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   582
                status = self._connector.GetPLCstatus()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   583
            else:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   584
                status = "Disconnected"
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   585
        if self.previous_plcstate != status or self.previous_mode != self.CurrentMode:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   586
            simulating = self.CurrentMode == SIMULATION_MODE
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   587
            for args in {
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   588
                     "Started" :     [("_Simulate", False),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   589
                                      ("_Run", False),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   590
                                      ("_Stop", True),
541
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   591
                                      ("_build", False),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   592
                                      ("_Transfer", False)],
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   593
                     "Stopped" :     [("_Simulate", True),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   594
                                      ("_Run", True),
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   595
                                      ("_Stop", False),
541
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   596
                                      ("_build", False),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   597
                                      ("_Transfer", False)],
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   598
                     "Connected" :   [("_Simulate", not simulating),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   599
                                      ("_Run", False),
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   600
                                      ("_Stop", simulating),
541
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   601
                                      ("_build", False),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   602
                                      ("_Transfer", True)],
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   603
                     "Disconnected" :[("_Simulate", not simulating),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   604
                                      ("_Run", False),
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   605
                                      ("_Stop", simulating),
541
4d9ca788205e Adding compile button when unconnected
laurent
parents: 539
diff changeset
   606
                                      ("_build", True),
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   607
                                      ("_Transfer", False)],
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   608
                   }.get(status,[]):
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   609
                self.ShowMethod(*args)
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   610
            self.previous_plcstate = status
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   611
            self.previous_mode = self.CurrentMode
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   612
            return True
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   613
        return False
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
   614
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   615
    def Generate_plc_declare_locations(self):
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   616
        """
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   617
        Declare used locations in order to simulatePLC in a black box
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   618
        """
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   619
        return """#include "iec_types_all.h"
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   620
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   621
#define __LOCATED_VAR(type, name, ...) \
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   622
type beremiz_##name;\
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   623
type *name = &beremiz_##name;
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   624
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   625
#include "LOCATED_VARIABLES.h"
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   626
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   627
#undef __LOCATED_VAR
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   628
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   629
"""
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   630
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   631
    def _Simulate(self):
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   632
        """
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   633
        Method called by user to Simulate PLC
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   634
        """
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   635
        self.CurrentMode = SIMULATION_MODE
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   636
        
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   637
        uri = "LOCAL://"
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   638
        try:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   639
            self._connector = connectors.ConnectorFactory(uri, self)
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   640
        except Exception, msg:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   641
            self.logger.write_error(_("Exception while connecting %s!\n")%uri)
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   642
            self.logger.write_error(traceback.format_exc())
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   643
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   644
        # Did connection success ?
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   645
        if self._connector is None:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   646
            # Oups.
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   647
            self.logger.write_error(_("Connection failed to %s!\n")%uri)
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   648
            self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   649
            return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   650
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   651
        buildpath = self._getBuildPath()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   652
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   653
        # Eventually create build dir
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   654
        if not os.path.exists(buildpath):
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   655
            os.makedirs(buildpath)
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   656
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   657
        # Generate SoftPLC IEC code
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   658
        IECGenRes = self._Generate_SoftPLC()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   659
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   660
         # If IEC code gen fail, bail out.
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   661
        if not IECGenRes:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   662
            self.logger.write_error(_("IEC-61131-3 code generation failed !\n"))
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   663
            self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   664
            return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   665
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   666
        # Reset variable and program list that are parsed from
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   667
        # CSV file generated by IEC2C compiler.
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   668
        self.ResetIECProgramsAndVariables()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   669
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   670
        gen_result = self.PlugGenerate_C(buildpath, self.PLCGeneratedLocatedVars)
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   671
        PlugCFilesAndCFLAGS, PlugLDFLAGS, DoCalls = gen_result[:3]
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   672
        # if some files have been generated put them in the list with their location
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   673
        if PlugCFilesAndCFLAGS:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   674
            self.LocationCFilesAndCFLAGS = [(self.GetCurrentLocation(), PlugCFilesAndCFLAGS, DoCalls)]
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   675
        else:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   676
            self.LocationCFilesAndCFLAGS = []
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   677
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   678
        # plugin asks for some LDFLAGS
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   679
        if PlugLDFLAGS:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   680
            # LDFLAGS can be either string
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   681
            if type(PlugLDFLAGS)==type(str()):
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   682
                self.LDFLAGS=[PlugLDFLAGS]
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   683
            #or list of strings
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   684
            elif type(PlugLDFLAGS)==type(list()):
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   685
                self.LDFLAGS=PlugLDFLAGS[:]
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   686
        else:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   687
            self.LDFLAGS=[]
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   688
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   689
        # Template based part of C code generation
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   690
        # files are stacked at the beginning, as files of plugin tree root
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   691
        for generator, filename, name in [
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   692
           # debugger code
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   693
           (self.Generate_plc_debugger, "plc_debugger.c", "Debugger"),
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   694
           # init/cleanup/retrieve/publish, run and align code
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   695
           (self.Generate_plc_common_main,"plc_common_main.c","Common runtime"),
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   696
           # declare located variables for simulate in a black box
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   697
           (self.Generate_plc_declare_locations,"plc_declare_locations.c","Declare Locations")]:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   698
            try:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   699
                # Do generate
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   700
                code = generator()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   701
                if code is None:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   702
                     raise
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   703
                code_path = os.path.join(buildpath,filename)
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   704
                open(code_path, "w").write(code)
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   705
                # Insert this file as first file to be compiled at root plugin
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   706
                self.LocationCFilesAndCFLAGS[0][1].insert(0,(code_path, self.plcCFLAGS))
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   707
            except Exception, exc:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   708
                self.logger.write_error(name+_(" generation failed !\n"))
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   709
                self.logger.write_error(traceback.format_exc())
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   710
                self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   711
                return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   712
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   713
        # Get simulation builder
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   714
        builder = self.GetBuilder()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   715
        if builder is None:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   716
            self.logger.write_error(_("Fatal : cannot get builder.\n"))
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   717
            self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   718
            return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   719
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   720
        # Build
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   721
        try:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   722
            if not builder.build() :
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   723
                self.logger.write_error(_("C Build failed.\n"))
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   724
                self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   725
                return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   726
        except Exception, exc:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   727
            self.logger.write_error(_("C Build crashed !\n"))
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   728
            self.logger.write_error(traceback.format_exc())
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   729
            self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   730
            return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   731
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   732
        data = builder.GetBinaryCode()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   733
        if data is not None :
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   734
            if self._connector.NewPLC(builder.GetBinaryCodeMD5(), data, []):
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   735
                if self.AppFrame is not None:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   736
                    self.AppFrame.CloseDebugTabs()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   737
                    self.AppFrame.RefreshInstancesTree()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   738
                self.UnsubscribeAllDebugIECVariable()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   739
                self.ProgramTransferred()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   740
                self.logger.write(_("Transfer completed successfully.\n"))
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   741
            else:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   742
                self.logger.write_error(_("Transfer failed\n"))
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   743
                self.StopSimulation()
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   744
                return False
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   745
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   746
        self._Run()
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   747
                
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   748
        if not self.StatusTimer.IsRunning():
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   749
            # Start the status Timer
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   750
            self.StatusTimer.Start(milliseconds=500, oneShot=False)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   751
    
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   752
    def StopSimulation(self):
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   753
        self.CurrentMode = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   754
        self.ApplyOnlineMode()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   755
    
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   756
    def _Stop(self):
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   757
        PluginsRoot._Stop(self)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   758
        
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   759
        if self.CurrentMode == SIMULATION_MODE:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   760
            self.StopSimulation()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   761
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   762
    def _Transfer(self):
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   763
        if self.CurrentMode is None and self.OnlineMode != "OFF":
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   764
            self.CurrentMode = TRANSFER_MODE
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   765
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   766
            PluginsRoot._build(self)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   767
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   768
            ID_ABORTTRANSFERTIMER = wx.NewId()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   769
            self.AbortTransferTimer = wx.Timer(self.AppFrame, ID_ABORTTRANSFERTIMER)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   770
            self.AppFrame.Bind(wx.EVT_TIMER, self.AbortTransfer, self.AbortTransferTimer)  
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   771
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   772
            if self.OnlineMode == "BOOTLOADER":
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   773
                self.BeginTransfer()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   774
            
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   775
            else:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   776
                self.logger.write(_("Resetting PLC\n"))
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   777
                
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   778
                self.LPCConnector.ResetPLC()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   779
                self.AbortTransferTimer.Start(milliseconds=5000, oneShot=True)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   780
    
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   781
    def BeginTransfer(self):
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   782
        self.logger.write(_("Start PLC transfer\n"))
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   783
        
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   784
        self.AbortTransferTimer.Stop()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   785
        PluginsRoot._Transfer(self)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   786
        self.AbortTransferTimer.Start(milliseconds=5000, oneShot=True)
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   787
    
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   788
    def AbortTransfer(self, event):
543
3dec6ff88620 Disabled boring standard conformance checks, fixed possible race condition with StatusTimer, fixed warning message in AbortTransfer
Lolitech
parents: 541
diff changeset
   789
        self.logger.write_warning(_("Timeout waiting PLC to recover\n"))
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   790
        
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   791
        self.CurrentMode = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   792
        self.AbortTransferTimer.Stop()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   793
        self.AbortTransferTimer = None
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   794
        event.Skip()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   795
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   796
#-------------------------------------------------------------------------------
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   797
#                              LPCBeremiz Class
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   798
#-------------------------------------------------------------------------------
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   799
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   800
class LPCBeremiz(Beremiz):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   801
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   802
    def _init_coll_FileMenu_Items(self, parent):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   803
        AppendMenu(parent, help='', id=wx.ID_SAVE,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   804
              kind=wx.ITEM_NORMAL, text=_(u'Save\tCTRL+S'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   805
        AppendMenu(parent, help='', id=wx.ID_CLOSE,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   806
              kind=wx.ITEM_NORMAL, text=_(u'Close Tab\tCTRL+W'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   807
        parent.AppendSeparator()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   808
        AppendMenu(parent, help='', id=wx.ID_PAGE_SETUP,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   809
              kind=wx.ITEM_NORMAL, text=_(u'Page Setup'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   810
        AppendMenu(parent, help='', id=wx.ID_PREVIEW,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   811
              kind=wx.ITEM_NORMAL, text=_(u'Preview'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   812
        AppendMenu(parent, help='', id=wx.ID_PRINT,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   813
              kind=wx.ITEM_NORMAL, text=_(u'Print'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   814
        parent.AppendSeparator()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   815
        AppendMenu(parent, help='', id=wx.ID_PROPERTIES,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   816
              kind=wx.ITEM_NORMAL, text=_(u'Properties'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   817
        parent.AppendSeparator()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   818
        AppendMenu(parent, help='', id=wx.ID_EXIT,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   819
              kind=wx.ITEM_NORMAL, text=_(u'Quit\tCTRL+Q'))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   820
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   821
        self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   822
        self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=wx.ID_CLOSE)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   823
        self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   824
        self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   825
        self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   826
        self.Bind(wx.EVT_MENU, self.OnPropertiesMenu, id=wx.ID_PROPERTIES)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   827
        self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   828
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   829
    def _init_ctrls(self, prnt):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   830
        IDEFrame._init_ctrls(self, prnt)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   831
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   832
        self.Bind(wx.EVT_MENU, self.OnOpenWidgetInspector, id=ID_BEREMIZINSPECTOR)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   833
        accel = wx.AcceleratorTable([wx.AcceleratorEntry(wx.ACCEL_CTRL|wx.ACCEL_ALT, ord('I'), ID_BEREMIZINSPECTOR)])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   834
        self.SetAcceleratorTable(accel)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   835
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   836
        self.PLCConfig = wx.ScrolledWindow(id=ID_BEREMIZPLCCONFIG,
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   837
              name='PLCConfig', parent=self.LeftNoteBook, pos=wx.Point(0, 0),
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   838
              size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER|wx.HSCROLL|wx.VSCROLL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   839
        self.PLCConfig.SetBackgroundColour(wx.WHITE)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   840
        self.PLCConfig.Bind(wx.EVT_LEFT_DOWN, self.OnPanelLeftDown)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   841
        self.PLCConfig.Bind(wx.EVT_SIZE, self.OnMoveWindow)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   842
        self.LeftNoteBook.InsertPage(0, self.PLCConfig, _("Topology"), True)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   843
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   844
        self.LogConsole = wx.TextCtrl(id=ID_BEREMIZLOGCONSOLE, value='',
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   845
                  name='LogConsole', parent=self.BottomNoteBook, pos=wx.Point(0, 0),
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   846
                  size=wx.Size(0, 0), style=wx.TE_MULTILINE|wx.TE_RICH2)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   847
        self.LogConsole.Bind(wx.EVT_LEFT_DCLICK, self.OnLogConsoleDClick)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   848
        self.BottomNoteBook.AddPage(self.LogConsole, _("Log Console"))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   849
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   850
        self._init_beremiz_sizers()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   851
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   852
    def OnCloseFrame(self, event):
519
3a5faff52e5c Adding message to standard output to signal when LPCBeremiz is closed
laurent
parents: 517
diff changeset
   853
        global frame
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   854
        
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   855
        frame.Hide()
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   856
        
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   857
        self.PluginRoot.ResetAppFrame(lpcberemiz_cmd.Log)
492
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   858
        if self.PluginRoot.OnlineMode == 0:
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   859
            self.PluginRoot._connector = None
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   860
        
0852c4682179 Adding support for simulation in LPCBeremiz
laurent
parents: 487
diff changeset
   861
        self.PluginRoot.KillDebugThread()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   862
        self.KillLocalRuntime()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   863
        
519
3a5faff52e5c Adding message to standard output to signal when LPCBeremiz is closed
laurent
parents: 517
diff changeset
   864
        print "Closed"
526
68375ccdf968 Added flush when printing to standard output.
tkragelj
parents: 521
diff changeset
   865
        sys.stdout.flush()
519
3a5faff52e5c Adding message to standard output to signal when LPCBeremiz is closed
laurent
parents: 517
diff changeset
   866
        
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
   867
        event.Veto()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   868
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   869
    def ShowProperties(self):
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   870
        old_values = self.Controler.GetProjectProperties()
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   871
        dialog = ProjectDialog(self ,False)
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   872
        dialog.SetValues(old_values)
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   873
        if dialog.ShowModal() == wx.ID_OK:
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   874
            new_values = dialog.GetValues()
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   875
            new_values["creationDateTime"] = old_values["creationDateTime"]
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   876
            if new_values != old_values:
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   877
                self.Controler.SetProjectProperties(None, new_values)
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   878
                self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, 
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   879
                              TYPESTREE, INSTANCESTREE, SCALING)
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   880
        dialog.Destroy()
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   881
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   882
    def RefreshFileMenu(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   883
        if self.PluginRoot is not None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   884
            selected = self.TabsOpened.GetSelection()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   885
            if selected >= 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   886
                graphic_viewer = isinstance(self.TabsOpened.GetPage(selected), Viewer)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   887
            else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   888
                graphic_viewer = False
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   889
            if self.TabsOpened.GetPageCount() > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   890
                self.FileMenu.Enable(wx.ID_CLOSE, True)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   891
                if graphic_viewer:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   892
                    self.FileMenu.Enable(wx.ID_PREVIEW, True)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   893
                    self.FileMenu.Enable(wx.ID_PRINT, True)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   894
                else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   895
                    self.FileMenu.Enable(wx.ID_PREVIEW, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   896
                    self.FileMenu.Enable(wx.ID_PRINT, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   897
            else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   898
                self.FileMenu.Enable(wx.ID_CLOSE, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   899
                self.FileMenu.Enable(wx.ID_PREVIEW, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   900
                self.FileMenu.Enable(wx.ID_PRINT, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   901
            self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
   902
            self.FileMenu.Enable(wx.ID_SAVE, self.PluginRoot.PlugTestModified())
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   903
            self.FileMenu.Enable(wx.ID_PROPERTIES, True)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   904
        else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   905
            self.FileMenu.Enable(wx.ID_CLOSE, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   906
            self.FileMenu.Enable(wx.ID_PAGE_SETUP, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   907
            self.FileMenu.Enable(wx.ID_PREVIEW, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   908
            self.FileMenu.Enable(wx.ID_PRINT, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   909
            self.FileMenu.Enable(wx.ID_SAVE, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   910
            self.FileMenu.Enable(wx.ID_PROPERTIES, False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   911
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   912
    def RefreshPLCParams(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   913
        self.Freeze()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   914
        self.ClearSizer(self.PLCParamsSizer)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   915
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   916
        if self.PluginRoot is not None:    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   917
            plcwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   918
            if self.PluginRoot.PlugTestModified():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   919
                bkgdclr = CHANGED_TITLE_COLOUR
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   920
            else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   921
                bkgdclr = TITLE_COLOUR
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   922
                
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   923
            if self.PluginRoot not in self.PluginInfos:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   924
                self.PluginInfos[self.PluginRoot] = {"right_visible" : False}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   925
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   926
            plcwindow.SetBackgroundColour(TITLE_COLOUR)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   927
            plcwindow.Bind(wx.EVT_LEFT_DOWN, self.OnPanelLeftDown)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   928
            self.PLCParamsSizer.AddWindow(plcwindow, 0, border=0, flag=wx.GROW)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   929
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   930
            plcwindowsizer = wx.BoxSizer(wx.HORIZONTAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   931
            plcwindow.SetSizer(plcwindowsizer)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   932
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   933
            st = wx.StaticText(plcwindow, -1)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   934
            st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   935
            st.SetLabel(self.PluginRoot.GetProjectName())
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   936
            plcwindowsizer.AddWindow(st, 0, border=5, flag=wx.ALL|wx.ALIGN_CENTER)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   937
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   938
            plcwindowmainsizer = wx.BoxSizer(wx.VERTICAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   939
            plcwindowsizer.AddSizer(plcwindowmainsizer, 0, border=5, flag=wx.ALL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   940
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   941
            plcwindowbuttonsizer = wx.BoxSizer(wx.HORIZONTAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   942
            plcwindowmainsizer.AddSizer(plcwindowbuttonsizer, 0, border=0, flag=wx.ALIGN_CENTER)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   943
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   944
            msizer = self.GenerateMethodButtonSizer(self.PluginRoot, plcwindow, not self.PluginInfos[self.PluginRoot]["right_visible"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   945
            plcwindowbuttonsizer.AddSizer(msizer, 0, border=0, flag=wx.GROW)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   946
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   947
        self.PLCConfigMainSizer.Layout()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   948
        self.RefreshScrollBars()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   949
        self.Thaw()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   950
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   951
    def GenerateTreeBranch(self, plugin):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   952
        leftwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   953
        if plugin.PlugTestModified():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   954
            bkgdclr=CHANGED_WINDOW_COLOUR
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   955
        else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   956
            bkgdclr=WINDOW_COLOUR
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   957
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   958
        leftwindow.SetBackgroundColour(bkgdclr)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   959
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   960
        if plugin not in self.PluginInfos:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   961
            self.PluginInfos[plugin] = {"expanded" : False, "left_visible" : False, "right_visible" : False}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   962
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   963
        self.PluginInfos[plugin]["children"] = plugin.IECSortedChilds()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   964
        plugin_infos = plugin.GetVariableLocationTree()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   965
        plugin_locations = []
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   966
        if len(self.PluginInfos[plugin]["children"]) == 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   967
            plugin_locations = plugin_infos["children"]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   968
            if not self.PluginInfos[plugin].has_key("locations_infos"):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   969
                self.PluginInfos[plugin]["locations_infos"] = {"root": {"expanded" : False}}
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   970
                
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   971
            self.PluginInfos[plugin]["locations_infos"]["root"]["children"] = []
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   972
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   973
        self.PluginTreeSizer.AddWindow(leftwindow, 0, border=0, flag=wx.GROW)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   974
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   975
        leftwindowsizer = wx.BoxSizer(wx.HORIZONTAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   976
        leftwindow.SetSizer(leftwindowsizer)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   977
                
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   978
        st = wx.StaticText(leftwindow, -1)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   979
        st.SetFont(wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   980
        st.SetLabel(plugin.GetFullIEC_Channel())
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   981
        leftwindowsizer.AddWindow(st, 0, border=5, flag=wx.RIGHT)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   982
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   983
        expandbutton_id = wx.NewId()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   984
        expandbutton = wx.lib.buttons.GenBitmapToggleButton(id=expandbutton_id, bitmap=wx.Bitmap(Bpath( 'images', 'plus.png')),
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   985
              name='ExpandButton', parent=leftwindow, pos=wx.Point(0, 0),
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   986
              size=wx.Size(13, 13), style=wx.NO_BORDER)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   987
        expandbutton.labelDelta = 0
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   988
        expandbutton.SetBezelWidth(0)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   989
        expandbutton.SetUseFocusIndicator(False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   990
        expandbutton.SetBitmapSelected(wx.Bitmap(Bpath( 'images', 'minus.png')))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   991
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   992
        if len(self.PluginInfos[plugin]["children"]) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   993
            expandbutton.SetToggle(self.PluginInfos[plugin]["expanded"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   994
            def togglebutton(event):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   995
                if expandbutton.GetToggle():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   996
                    self.ExpandPlugin(plugin)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   997
                else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   998
                    self.CollapsePlugin(plugin)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
   999
                self.PluginInfos[plugin]["expanded"] = expandbutton.GetToggle()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1000
                self.PLCConfigMainSizer.Layout()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1001
                self.RefreshScrollBars()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1002
                event.Skip()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1003
            expandbutton.Bind(wx.EVT_BUTTON, togglebutton, id=expandbutton_id)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1004
        elif len(plugin_locations) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1005
            locations_infos = self.PluginInfos[plugin]["locations_infos"]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1006
            expandbutton.SetToggle(locations_infos["root"]["expanded"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1007
            def togglebutton(event):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1008
                if expandbutton.GetToggle():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1009
                    self.ExpandLocation(locations_infos, "root")
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1010
                else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1011
                    self.CollapseLocation(locations_infos, "root")
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1012
                self.PluginInfos[plugin]["expanded"] = expandbutton.GetToggle()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1013
                locations_infos["root"]["expanded"] = expandbutton.GetToggle()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1014
                self.PLCConfigMainSizer.Layout()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1015
                self.RefreshScrollBars()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1016
                event.Skip()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1017
            expandbutton.Bind(wx.EVT_BUTTON, togglebutton, id=expandbutton_id)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1018
        else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1019
            expandbutton.Enable(False)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1020
        leftwindowsizer.AddWindow(expandbutton, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1021
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1022
        sb = wx.StaticBitmap(leftwindow, -1)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1023
        icon = plugin_infos.get("icon", None)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1024
        if icon is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1025
            icon = os.path.join(base_folder, "plcopeneditor", 'Images', '%s.png' % self.LOCATION_BITMAP[plugin_infos["type"]])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1026
        sb.SetBitmap(wx.Bitmap(icon))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1027
        leftwindowsizer.AddWindow(sb, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1028
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1029
        st_id = wx.NewId()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1030
        st = wx.StaticText(leftwindow, st_id, size=wx.DefaultSize, style=wx.NO_BORDER)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1031
        st.SetFont(wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL, wx.BOLD, faceName = faces["helv"]))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1032
        st.SetLabel(plugin.MandatoryParams[1].getName())
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1033
        leftwindowsizer.AddWindow(st, 0, border=5, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1034
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1035
        rightwindow = wx.Panel(self.PLCConfig, -1, size=wx.Size(-1, -1))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1036
        rightwindow.SetBackgroundColour(bkgdclr)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1037
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1038
        self.PluginTreeSizer.AddWindow(rightwindow, 0, border=0, flag=wx.GROW)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1039
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1040
        self.PluginInfos[plugin]["left"] = leftwindow
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1041
        self.PluginInfos[plugin]["right"] = rightwindow
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1042
        for child in self.PluginInfos[plugin]["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1043
            self.GenerateTreeBranch(child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1044
            if not self.PluginInfos[child]["expanded"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1045
                self.CollapsePlugin(child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1046
        if len(plugin_locations) > 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1047
            locations_infos = self.PluginInfos[plugin]["locations_infos"]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1048
            for location in plugin_locations:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1049
                locations_infos["root"]["children"].append("root.%s" % location["name"])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1050
                self.GenerateLocationTreeBranch(locations_infos, "root", location)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1051
            if not locations_infos["root"]["expanded"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1052
                self.CollapseLocation(locations_infos, "root")
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1053
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1054
class StdoutPseudoFile:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1055
    """ Base class for file like objects to facilitate StdOut for the Shell."""
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1056
    def write(self, s, style = None):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1057
        if s != '':
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1058
            print s
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1059
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1060
    def write_warning(self, s):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1061
        self.write(s)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1062
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1063
    def write_error(self, s):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1064
        self.write(s)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1065
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1066
    def flush(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1067
        pass
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1068
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1069
    def isatty(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1070
        return false
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1071
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1072
if __name__ == '__main__':
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1073
    
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1074
    from threading import Thread, Timer, Semaphore
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1075
    import cmd
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1076
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1077
    wx_eval_lock = Semaphore(0)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1078
    eval_res = None
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1079
    def wx_evaluator(callable, *args, **kwargs):
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1080
        global eval_res
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1081
        eval_res = None
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1082
        try:
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1083
            eval_res=callable(*args,**kwargs)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1084
        finally:
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1085
            wx_eval_lock.release()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1086
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1087
    def evaluator(callable, *args, **kwargs):
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1088
        global eval_res
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1089
        wx.CallAfter(wx_evaluator,callable,*args,**kwargs)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1090
        wx_eval_lock.acquire()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1091
        return eval_res
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1092
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1093
    # Command log for debug, for viewing from wxInspector
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1094
    __builtins__.cmdlog = []
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1095
    cmdlogf=open("bmzcmdlog.txt","w")
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1096
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1097
    class LPCBeremiz_Cmd(cmd.Cmd):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1098
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1099
        prompt = ""
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1100
        RefreshTimer = None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1101
        
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1102
        def __init__(self, PluginRoot, Log):
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1103
            cmd.Cmd.__init__(self)
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1104
            self.Log = Log
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1105
            self.PluginRoot = PluginRoot
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1106
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1107
        def RestartTimer(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1108
            if self.RefreshTimer is not None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1109
                self.RefreshTimer.cancel()
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1110
            self.RefreshTimer = Timer(0.1, wx.CallAfter, args = [self.Refresh])
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1111
            self.RefreshTimer.start()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1112
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1113
        def Exit(self):
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1114
            global frame, app
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1115
            self.Close()
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1116
            app.ExitMainLoop()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1117
            return True
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1118
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1119
        def do_EOF(self, line):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1120
            return self.Exit()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1121
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1122
        def Show(self):
445
1b1dc8ad2498 Bug when asking two consecutive times 'Show' fixed
berem
parents: 444
diff changeset
  1123
            global frame
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1124
            if frame is not None:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1125
                self.PluginRoot.SetAppFrame(frame, frame.Log)
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1126
                frame.Show()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1127
                frame.Raise()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1128
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1129
        def Refresh(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1130
            global frame
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1131
            if frame is not None:
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1132
                frame._Refresh(TITLE, INSTANCESTREE, FILEMENU, EDITMENU)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1133
                frame.RefreshEditor()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1134
                frame.RefreshAll()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1135
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1136
        def Close(self):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1137
            global frame
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1138
            
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1139
            self.PluginRoot.ResetAppFrame(self.Log)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1140
            if frame is not None:
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1141
                frame.Hide()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1142
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1143
        def Compile(self):
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1144
            self.PluginRoot._build()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1145
        
500
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1146
        def SetProjectProperties(self, projectname, productname, productversion, companyname):
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1147
            properties = self.PluginRoot.GetProjectProperties()
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1148
            properties["projectName"] = projectname
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1149
            properties["productName"] = productname
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1150
            properties["productVersion"] = productversion
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1151
            properties["companyName"] = companyname
af7c28de4cc7 Adding support for defining mandatory parameters and creating blank xml file when there is nothing in the folder in LPCBeremiz
laurent
parents: 494
diff changeset
  1152
            self.PluginRoot.SetProjectProperties(properties=properties)
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1153
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1154
        
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
  1155
        def SetOnlineMode(self, mode, path=None):
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1156
            self.PluginRoot.SetOnlineMode(mode, path)
487
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
  1157
            self.RestartTimer()
1df4a28d3586 Adding support for receiving PLC state from LPCComposer
laurent
parents: 478
diff changeset
  1158
        
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1159
        def AddBus(self, iec_channel, name, icon=None):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1160
            for child in self.PluginRoot.IterChilds():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1161
                if child.BaseParams.getName() == name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1162
                    return "Error: A bus named %s already exists" % name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1163
                elif child.BaseParams.getIEC_Channel() == iec_channel:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1164
                    return "Error: A bus with IEC_channel %d already exists" % iec_channel
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1165
            bus = self.PluginRoot.PlugAddChild(name, "LPCBus", iec_channel)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1166
            if bus is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1167
                return "Error: Unable to create bus"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1168
            bus.SetIcon(icon)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1169
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1170
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1171
        def RenameBus(self, iec_channel, name):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1172
            bus = self.PluginRoot.GetChildByIECLocation((iec_channel,))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1173
            if bus is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1174
                return "Error: No bus found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1175
            for child in self.PluginRoot.IterChilds():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1176
                if child != bus and child.BaseParams.getName() == name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1177
                    return "Error: A bus named %s already exists" % name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1178
            bus.BaseParams.setName(name)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1179
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1180
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1181
        def ChangeBusIECChannel(self, old_iec_channel, new_iec_channel):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1182
            bus = self.PluginRoot.GetChildByIECLocation((old_iec_channel,))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1183
            if bus is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1184
                return "Error: No bus found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1185
            for child in self.PluginRoot.IterChilds():
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1186
                if child != bus and child.BaseParams.getIEC_Channel() == new_iec_channel:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1187
                    return "Error: A bus with IEC_channel %d already exists" % new_iec_channel
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1188
            if wx.GetApp() is None:
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1189
                self.PluginRoot.UpdateProjectVariableLocation(str(old_iec_channel), 
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1190
                                                              str(new_iec_channel))
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1191
            else:
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1192
                self.PluginRoot.UpdateProjectVariableLocation(
539
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1193
                             str(old_iec_channel), 
6ff2c1d34640 Modifying LPCBeremiz to launch silently a frame and show or hide it on demand.
laurent
parents: 530
diff changeset
  1194
                             str(new_iec_channel))
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1195
            bus.BaseParams.setIEC_Channel(new_iec_channel)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1196
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1197
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1198
        def RemoveBus(self, iec_channel):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1199
            bus = self.PluginRoot.GetChildByIECLocation((iec_channel,))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1200
            if bus is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1201
                return "Error: No bus found"
444
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1202
            self.PluginRoot.RemoveProjectVariableByFilter(str(iec_channel))
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1203
            self.PluginRoot.PluggedChilds["LPCBus"].remove(bus)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1204
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1205
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1206
        def AddModule(self, parent, iec_channel, name, icon=None):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1207
            module = self.PluginRoot.GetChildByIECLocation(parent)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1208
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1209
                return "Error: No parent found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1210
            for child in _GetModuleChildren(module):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1211
                if child["name"] == name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1212
                    return "Error: A module named %s already exists" % name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1213
                elif child["IEC_Channel"] == iec_channel:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1214
                    return "Error: A module with IEC_channel %d already exists" % iec_channel 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1215
            _GetLastModuleGroup(module).append({"name": name, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1216
                                                "type": LOCATION_MODULE, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1217
                                                "IEC_Channel": iec_channel, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1218
                                                "icon": icon, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1219
                                                "children": []})
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1220
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1221
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1222
        def RenameModule(self, iec_location, name):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1223
            module = self.PluginRoot.GetChildByIECLocation(iec_location)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1224
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1225
                return "Error: No module found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1226
            parent = self.PluginRoot.GetChildByIECLocation(iec_location[:-1])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1227
            if parent is self.PluginRoot:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1228
                return "Error: No module found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1229
            if module["name"] != name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1230
                for child in _GetModuleChildren(parent):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1231
                    if child["name"] == name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1232
                        return "Error: A module named %s already exists" % name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1233
                module["name"] = name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1234
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1235
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1236
        def ChangeModuleIECChannel(self, old_iec_location, new_iec_channel):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1237
            module = self.PluginRoot.GetChildByIECLocation(old_iec_location)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1238
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1239
                return "Error: No module found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1240
            parent = self.PluginRoot.GetChildByIECLocation(old_iec_location[:-1])
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1241
            if parent is self.PluginRoot:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1242
                return "Error: No module found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1243
            if module["IEC_Channel"] != new_iec_channel:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1244
                for child in _GetModuleChildren(parent):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1245
                    if child["IEC_Channel"] == new_iec_channel:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1246
                        return "Error: A module with IEC_channel %d already exists" % new_iec_channel
444
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1247
            self.PluginRoot.UpdateProjectVariableLocation(".".join(map(str, old_iec_location)), ".".join(map(str, old_iec_location[:1] + (new_iec_channel,))))
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1248
            module["IEC_Channel"] = new_iec_channel
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1249
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1250
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1251
        def RemoveModule(self, parent, iec_channel):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1252
            module = self.PluginRoot.GetChildByIECLocation(parent)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1253
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1254
                return "Error: No parent found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1255
            child = _GetModuleBySomething(module, "IEC_Channel", (iec_channel,))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1256
            if child is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1257
                return "Error: No module found"
444
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1258
            self.PluginRoot.RemoveProjectVariableByFilter(".".join(map(str, parent + (iec_channel,))))
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1259
            _RemoveModuleChild(module, child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1260
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1261
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1262
        def StartGroup(self, parent, name, icon=None):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1263
            module = self.PluginRoot.GetChildByIECLocation(parent)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1264
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1265
                return "Error: No parent found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1266
            for child in module["children"]:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1267
                if child["type"] == LOCATION_GROUP and child["name"] == name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1268
                    return "Error: A group named %s already exists" % name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1269
            module["children"].append({"name": name, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1270
                                      "type": LOCATION_GROUP, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1271
                                      "icon": icon, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1272
                                      "children": []})
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1273
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1274
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1275
        def AddVariable(self, parent, location, name, direction, type, dcode, rcode, pcode, description=""):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1276
            module = self.PluginRoot.GetChildByIECLocation(parent)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1277
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1278
                return "Error: No parent found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1279
            for child in _GetModuleChildren(module):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1280
                if child["name"] == name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1281
                    return "Error: A variable named %s already exists" % name
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
  1282
                if child["location"] == location and child["type"] == LOCATION_TYPES[direction]:
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1283
                    return "Error: A variable with location %s already exists" % ".".join(map(str, location))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1284
            _GetLastModuleGroup(module).append({"name": name, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1285
                                                "location": location, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1286
                                                "type": LOCATION_TYPES[direction], 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1287
                                                "IEC_type": type, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1288
                                                "description": description, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1289
                                                "declare": dcode, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1290
                                                "retrieve": rcode, 
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1291
                                                "publish": pcode})
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1292
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1293
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1294
        def ChangeVariableParams(self, parent, location, new_name, new_direction, new_type, new_dcode, new_rcode, new_pcode, new_description=None):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1295
            module = self.PluginRoot.GetChildByIECLocation(parent)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1296
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1297
                return "Error: No parent found"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1298
            variable = None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1299
            for child in _GetModuleChildren(module):
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
  1300
                if child["location"] == location and child["type"] == LOCATION_TYPES[new_direction]:
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1301
                    variable = child
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1302
                elif child["name"] == new_name:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1303
                    return "Error: A variable named %s already exists" % new_name
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1304
            if variable is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1305
                return "Error: No variable found"
444
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1306
            if variable["name"] != new_name:
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1307
                self.PluginRoot.UpdateProjectVariableName(variable["name"], new_name)
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1308
                variable["name"] = new_name
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1309
            variable["type"] = LOCATION_TYPES[new_direction]
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1310
            variable["IEC_type"] = new_type
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1311
            variable["declare"] = new_dcode
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1312
            variable["retrieve"] = new_rcode
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1313
            variable["publish"] = new_pcode
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1314
            if new_description is not None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1315
                variable["description"] = new_description
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1316
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1317
    
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
  1318
        def RemoveVariable(self, parent, location, direction):
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1319
            module = self.PluginRoot.GetChildByIECLocation(parent)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1320
            if module is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1321
                return "Error: No parent found"
472
80eb3bde98e3 Adding support for defining input and output with the same location in LPCBeremiz
laurent
parents: 445
diff changeset
  1322
            child = _GetModuleVariable(module, location, direction)
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1323
            if child is None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1324
                return "Error: No variable found"
444
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1325
            size = LOCATION_SIZES[self.PluginRoot.GetBaseType(child["IEC_type"])]
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1326
            address = "%" + LOCATION_DIRS[child["type"]] + size + ".".join(map(str, parent + location))
8eb1186fc9cf Adding support for updating or removing located variables by their address or leading address numbers when changing or removing VariableTree element
laurent
parents: 442
diff changeset
  1327
            self.PluginRoot.RemoveProjectVariableByAddress(address)
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1328
            _RemoveModuleChild(module, child)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1329
            self.RestartTimer()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1330
        
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1331
    def location(loc):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1332
        return tuple(map(int, loc.split(".")))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1333
    
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1334
    def GetCmdFunction(function, arg_types, opt=0):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1335
        arg_number = len(arg_types)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1336
        def CmdFunction(self, line):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1337
            args_toks = line.split('"')
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1338
            if len(args_toks) % 2 == 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1339
                print "Error: Invalid command"
526
68375ccdf968 Added flush when printing to standard output.
tkragelj
parents: 521
diff changeset
  1340
                sys.stdout.flush()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1341
                return
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1342
            args = []
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1343
            for num, arg in enumerate(args_toks):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1344
                if num % 2 == 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1345
                    stripped = arg.strip()
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1346
                    if stripped:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1347
                        args.extend(stripped.split(" "))
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1348
                else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1349
                    args.append(arg)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1350
            number = None
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1351
            extra = ""
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1352
            if opt == 0 and len(args) != arg_number:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1353
                number = arg_number
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1354
            elif len(args) > arg_number:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1355
                number = arg_number
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1356
                extra = " at most"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1357
            elif len(args) < arg_number - opt:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1358
                number = arg_number - opt
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1359
                extra = " at least"
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1360
            if number is not None:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1361
                if number == 0:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1362
                    print "Error: No argument%s expected" % extra
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1363
                elif number == 1:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1364
                    print "Error: 1 argument%s expected" % extra
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1365
                else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1366
                    print "Error: %d arguments%s expected" % (number, extra)
526
68375ccdf968 Added flush when printing to standard output.
tkragelj
parents: 521
diff changeset
  1367
                sys.stdout.flush()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1368
                return
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1369
            for num, arg in enumerate(args):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1370
                try:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1371
                    args[num] = arg_types[num](arg)
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1372
                except:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1373
                    print "Error: Invalid value for argument %d" % (num + 1)
526
68375ccdf968 Added flush when printing to standard output.
tkragelj
parents: 521
diff changeset
  1374
                    sys.stdout.flush()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1375
                    return
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1376
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1377
            cmdlogf.write(str((function,line))+'\n')
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1378
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1379
            func = getattr(self, function)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1380
            res = evaluator(func,*args)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1381
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1382
            # Keep log for debug
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1383
            cmdlogf.write("--->"+str(res)+'\n')
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1384
            cmdlog.append((function,line,res))
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1385
            if len(cmdlog) > 100: #prevent debug log to grow too much
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1386
                cmdlog.pop(0) 
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1387
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1388
            if isinstance(res, (StringType, UnicodeType)):
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1389
                print res
526
68375ccdf968 Added flush when printing to standard output.
tkragelj
parents: 521
diff changeset
  1390
                sys.stdout.flush()
442
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1391
                return False
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1392
            else:
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1393
                return res
f971de6d274f Adding Beremiz LPCComposer specific file
laurent
parents:
diff changeset
  1394
        return CmdFunction
547
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1395
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1396
    def CmdThreadProc(PluginRoot, Log):
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1397
        for function, (arg_types, opt) in {"Exit": ([], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1398
                                           "Show": ([], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1399
                                           "Refresh": ([], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1400
                                           "Close": ([], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1401
                                           "Compile": ([], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1402
                                           "SetProjectProperties": ([str, str, str, str], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1403
                                           "SetOnlineMode": ([str, str], 1),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1404
                                           "AddBus": ([int, str, str], 1),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1405
                                           "RenameBus": ([int, str], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1406
                                           "ChangeBusIECChannel": ([int, int], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1407
                                           "RemoveBus": ([int], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1408
                                           "AddModule": ([location, int, str, str], 1), 
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1409
                                           "RenameModule": ([location, str], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1410
                                           "ChangeModuleIECChannel": ([location, int], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1411
                                           "RemoveModule": ([location, int], 0),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1412
                                           "StartGroup": ([location, str, str], 1),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1413
                                           "AddVariable": ([location, location, str, str, str, str, str, str, str], 1),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1414
                                           "ChangeVariableParams": ([location, location, str, str, str, str, str, str, str], 1),
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1415
                                           "RemoveVariable": ([location, location], 0)}.iteritems():
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1416
            
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1417
            setattr(LPCBeremiz_Cmd, "do_%s" % function, GetCmdFunction(function, arg_types, opt))
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1418
        lpcberemiz_cmd = LPCBeremiz_Cmd(PluginRoot, Log)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1419
        lpcberemiz_cmd.cmdloop()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1420
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1421
    Log = StdoutPseudoFile()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1422
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1423
    PluginRoot = LPCPluginsRoot(None, Log)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1424
    if projectOpen is not None and os.path.isdir(projectOpen):
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1425
        result = PluginRoot.LoadProject(projectOpen, buildpath)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1426
        if result:
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1427
            print "Error: Invalid project directory", result
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1428
    else:
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1429
        print "Error: No such file or directory"
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1430
    
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1431
    cmd_thread=Thread(target=CmdThreadProc, args=[PluginRoot, Log])
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1432
    cmd_thread.start()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1433
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1434
    # Install a exception handle for bug reports
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1435
    AddExceptHook(os.getcwd(),__version__)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1436
    
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1437
    frame = LPCBeremiz(None, plugin_root=PluginRoot, debug=True)
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1438
    
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1439
    app.MainLoop()
5748d695beee Reorganization of threading for command line and wx main loops. Commands are now cleanly serialized through calls to wx.CallAfter. wx mainloop now runs on main thread.
Lolitech
parents: 543
diff changeset
  1440