Beremiz_service.py
author greg
Mon, 18 May 2009 07:47:24 +0200
changeset 344 25b7b7f854bc
parent 343 fe2d1936b546
child 361 331d698e1118
permissions -rw-r--r--
Wait the debug thread has terminated before freeing PLC to avoid random segmentation fault.

Store working directory to globals copy, in order to be used in runtime.py.
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     1
#!/usr/bin/env python
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     2
# -*- coding: utf-8 -*-
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     3
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     4
#This file is part of Beremiz, a Integrated Development Environment for
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     5
#programming IEC 61131-3 automates supporting plcopen standard and CanFestival. 
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     6
#
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     7
#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     8
#
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
     9
#See COPYING file for copyrights details.
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    10
#
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    11
#This library is free software; you can redistribute it and/or
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    12
#modify it under the terms of the GNU General Public
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    13
#License as published by the Free Software Foundation; either
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    14
#version 2.1 of the License, or (at your option) any later version.
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    15
#
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    16
#This library is distributed in the hope that it will be useful,
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    17
#but WITHOUT ANY WARRANTY; without even the implied warranty of
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    18
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    19
#General Public License for more details.
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    20
#
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    21
#You should have received a copy of the GNU General Public
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    22
#License along with this library; if not, write to the Free Software
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    23
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    24
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    25
import os, sys, getopt
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    26
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    27
def usage():
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    28
    print """
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    29
Usage of Beremiz PLC execution service :\n
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    30
%s {[-n name] [-i ip] [-p port] [-x enabletaskbar] [-a autostart]|-h|--help} working_dir
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    31
           -n        - zeroconf service name
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    32
           -i        - ip of interface to bind to (x.x.x.x)
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    33
           -p        - port number
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    34
           -h        - print this help text and quit
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    35
           -a        - autostart PLC (0:disable 1:enable)
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    36
           -x        - enable/disable wxTaskbarIcon (0:disable 1:enable)
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    37
           
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    38
           working_dir - directory where are stored PLC files
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    39
"""%sys.argv[0]
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    40
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    41
try:
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    42
    opts, argv = getopt.getopt(sys.argv[1:], "i:p:n:x:a:h")
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    43
except getopt.GetoptError, err:
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    44
    # print help information and exit:
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    45
    print str(err) # will print something like "option -a not recognized"
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    46
    usage()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    47
    sys.exit(2)
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    48
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    49
# default values
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    50
ip = ""
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    51
port = 3000
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    52
name = os.environ[{
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    53
     "linux2":"USER",
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    54
     "win32":"USERNAME",
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    55
     }.get(sys.platform, "USER")]
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    56
autostart = False
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    57
enablewx = True
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    58
havewx = False
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    59
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    60
for o, a in opts:
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    61
    if o == "-h":
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    62
        usage()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    63
        sys.exit()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    64
    elif o == "-i":
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    65
        if len(a.split(".")) == 4 or a == "localhost":
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    66
            ip = a
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    67
    elif o == "-p":
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    68
        # port: port that the service runs on
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    69
        port = int(a)
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    70
    elif o == "-n":
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    71
        name = a
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    72
    elif o == "-x":
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    73
        enablewx = int(a)
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    74
    elif o == "-a":
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    75
        autostart = int(a)
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    76
    else:
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    77
        usage()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    78
        sys.exit()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    79
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
    80
if len(argv) > 1:
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    81
    usage()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    82
    sys.exit()
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
    83
elif len(argv) == 1:
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
    84
    WorkingDir = argv[0]
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
    85
elif len(argv) == 0:
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    86
    WorkingDir = os.getcwd()
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
    87
    argv=[WorkingDir]
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
    88
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    89
if enablewx:
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    90
    try:
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    91
        import wx, re
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
    92
        from threading import Thread, currentThread
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    93
        from types import *
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    94
        havewx = True
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    95
    except:
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    96
        havewx = False
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    97
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
    98
    if havewx:
294
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
    99
        try:
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   100
            from wx.lib.embeddedimage import PyEmbeddedImage
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   101
        except:
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   102
            import cStringIO
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   103
            import base64
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   104
            
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   105
            class PyEmbeddedImage:
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   106
                def __init__(self, image_string):
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   107
                    stream = cStringIO.StringIO(base64.b64decode(image_string))
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   108
                    self.Image = wx.ImageFromStream(stream)
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   109
                def GetImage(self):
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   110
                    return self.Image
39b3d4a2195b Fix problem with embeddedimage module not present in wx versions older than 2.8.8.0
lbessard
parents: 290
diff changeset
   111
        
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   112
        defaulticon = PyEmbeddedImage(
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   113
        "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAABc5J"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   114
        "REFUSIl9lW1MW9cZx3/n2vf6BQO2MZiXGBISILCVUEUlitYpjaKpXZJ1XZZ2kzJVY9r6IeLD"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   115
        "pGTaNG3KtGmNNGlbpW3VFhRp0l6aZCllpVUqtVNJtBFKE5QXLxCjpCYEY7DBr9hcm3vPPgQY"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   116
        "IQmPdKR7/vd5/v/n5dxzhZSSNeYBOoGDQGcoFPINDAyUDQ0NOUdGRmyGYSiBQGCpoaGhuGnT"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   117
        "psShQ4f6WltbewEBVAK3gCBgrjJKKZFSKlLKeillt5Ty40gkMnnw4MFFQG60ysrKZHd3dyoe"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   118
        "j//bNM0Le/fuPd/e3r5lmRMpJWK5ghrgFeBIT09P4/Hjx73pdFo47HaaNlfRutnJru0OKsoE"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   119
        "E3GVqaSNa6EUw1dvIKWkoqKCrVu3FoeHh9WamppfRiKRn6wUYAUcwE7g2e7u7vrTp09XGIZB"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   120
        "W1Mdv3qtmoBPrG0hHVsMhKLj6nqOqOWn/Pjnv2dgYIC5uTl1uSM71/pbgUbg6bNnz/rPnDnj"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   121
        "dzoddO0P8Oo+jY2suDDD1Zv9DA1dfghXVbVBCFEqpcwAKEDTxMSE58SJE8+oqsq3nq/l1X0a"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   122
        "QihYtNLHLqRET03wuYp7fO9r26mpKlsVUBSl0W63V6/shZTyyIEDB344Njb21JYaG7/5bgkA"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   123
        "Dm8zTS/+7bHZLy0mSN+7yNztt8nPjYHFwfvXDf1P70zZ0ok0LS0tZy9fvvxNAGswGFQnJyef"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   124
        "KnM5+NHLzuUDsrFZ7R68zS/hrGon1PcNMPI0BIzs9tcCNvNfDqxW64uqqvqKxWJc6e3trVVV"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   125
        "leaAk6ryJ5N/9tH3GXv7Je7/5xermN3diMPXCkDfgrkg3UU0txWLxeLw+/1fB1BGR0frbTYb"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   126
        "TXWWDbNeysUoZKbIRIZBPviOzKU8ejLMHyPFcMprrweQ7iUAXC7XPiGEak2lUk02m42mWn1D"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   127
        "gfrnTiKNIrbyzSAUjEKWCx+/Mf+HyELBrLBvBhAIKDdgGsrLy+sAv1UIUa1pGv7yxQ0FbGX1"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   128
        "D+0LQmHW7fVavE5Mo/gAFCCcoOs6NpvNA7gVRVGCmqYRz1hXg7NFU39rjshawjcuvs4P+o/y"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   129
        "24uvE1+I4VCdfGfXUb76+VdWfQQCkbJSKBQoFApJTdMsCvApQDSlAjCTN7I/y5CNllpq1wqE"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   130
        "YmPciIzwwdi7BKevreK7Gp5dfbYoFoozJrquo+v6rMViWbQCV4QQzGTsQJY3kzIhvFpgfYte"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   131
        "7jhCMp9kk7uep+ueWcWj6f8Xqioq8ck0xcIS6XT6vpRy3gqMqKpqRBfKLLNF1ZRV6YBiPDrw"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   132
        "vduefwTL6hl6b74FgFVR0T4rJTU3jcvlymcymal8Ph+z9vf3p7u6uv5y/vz5bw994ld2fmUH"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   133
        "7nYFRVG4Gb3Guv8FpmmQzCcIJ+5w8c5HRFL3UYRC+ZKX633j6LpObW3tDcMwrsODq4Jbt27V"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   134
        "HT58+N7o6KgCYHfY2f2lXfi+6CJbnsAwjUeyXzFFKLgdHqb+mmL8xh22bduWmJycfHN2dvbX"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   135
        "uVwuoQC0tbXlKisrYytBi/lFZsKzOErtTyQWCOxWO36ljvl/FLk+dJOSkhJTUZR35+fn+3K5"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   136
        "XAIeXNcASz6fbxzwrxDYVQdqpARvs498IYchDUxpogiBVVFxqE7U/5Zx4c8fEo/FKS0tlR0d"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   137
        "HZ8ODg6+l06nr6zwrAp4PJ6Qpmlf2L9/fywYDFaOXB0RI1dHaGpuoq29Fa1Uxe62YeZMInei"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   138
        "jAY/IRqNAtDZ2blUV1fXPzg4+F5VVdU/H6p0eYjqsWPHvnz37t0XwuHw7d27d4eTyeTvLl26"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   139
        "FJiamnpim6qrq9mzZ094fHz875FI5J3p6ekr631WBARgaWlpCezYsePeuXPnzFAo5Dp58uS+"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   140
        "dDp91GKxNBYKBW82m3Vomqa7XK7pbDYbnJmZuR2LxYL5fP79WCyWeeys1h/D9e97enqsp06d"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   141
        "8mWzWU+xWPTkcjmXaZpxwzDCsVhsbqNggP8BMJOU3UUUf+0AAAAASUVORK5CYII=")
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   142
        
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   143
        #----------------------------------------------------------------------
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   144
        starticon = PyEmbeddedImage(
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   145
        "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAABbpJ"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   146
        "REFUSIl9lltsFNcdxn9nZnbHs15fd23j9TXYC0UCKzEhMQ+oIS2g1kQ1pbFStX0opFWsovSh"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   147
        "rUqp2pS2ioTUolaKFOGHqGkiJcKRuDhOaZRiZCsCXyBgCBBfMfbu+oa9s17wzuzl9MH24mDD"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   148
        "XzoPc/6fft+c72jOGSGlZEVlAU8D9cB20zQ9HR0duRcvXszq7e01EomEUlFREa+srLR8Pl+g"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   149
        "sbHx3zk5ORcAFfACA8Bt4CFUSomUUkgpS6SUB6SUH5umOXLgwIEHqqrKJfGao7S0VB49ejRo"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   150
        "2/YnUsrT+/fvb66pqSldYiKlRCytoBB4Gfjx6dOnq5qamjwTExOKqqqU+QrYUJFN7QY32Qbc"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   151
        "vSeYCGtcux1i5M5dAPx+P1VVVQvnzp0ziouLfx8MBt9cXoAGZABbgZ1HjhwpO378eEEymaSi"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   152
        "tIBjPy9lU5nKoyWExF2yjy+mN3HsH+/Q3d3NwMCAsZTI9pVaDXgK2Hr27Nn85ubmEpdh8IMX"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   153
        "ffxirwshVrGXHBQSC/dIRvoZGuz/WkvTtHIhhCGlXABQgI2Tk5P5hw8f3uZwOGj8VjGHXnoC"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   154
        "HJCpJFbkLtr8FXbX+XC79HRPVVW/qqre9LtIKX/S0NDwy76+vq1lhTr/fM2NAmTk+fHv/dea"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   155
        "BlZkDHP0PHODH2NHg1gykw8/X7Dfb7vjTNgJqqurT3R1db0GoF2/fl0fGhqqdWca/K7RhZLO"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   156
        "WSBU55oGGXlVZORVkeV7nsFPDqKL+9TWJCI3n9rojX2mYhjGj4QQv5FSziunTp0qdjqd4hvl"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   157
        "Lnz5j49lrPMNhv7zM6b63knPuQpryMj3A9A2L++nvDaZXheqqrrXrVu3D0C5detWudPpxO/T"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   158
        "Hk8HYnOD3J+8yr3bH6XnZNImHg3xfsgenfHo5QAyJwFAdnb2HiGEppmmWa3rOhtKrCcalNT9"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   159
        "llTSwvBsXISn4nRdbJ5/czRsWvlGhQAEYtFg0kl2dnYZUKgB5U6nk5L82BMNXIU1X3uOWFH5"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   160
        "eWIuy/YYWcjU4qQAxQ22bWMYhgfIU1RV/UrXdWaiDyOyUiLROktoJfDtC8fZfWQbb//v75ix"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   161
        "MDlGnvjVC3+gflNDWiMQKPMalmVh2/a8w+HQFKAHIBR2ABCOS+uN6cTMoFstXmlwZbSba7tv"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   162
        "8hfzT7z+7k+ZnZ0BoK5yR1qjCBV7MoVt29i2PaWqqq0BvUIIQqYORHlrKj6R9BoVj0b04oY9"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   163
        "nEt+yvz3Y5yR/+Xap3XsDb/EtvV1aY1DdTA7HsW2bCKRyLiUclYBelRVldNWAfPSm4oV5ZQJ"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   164
        "Vn/G9Zv2oWt6Ous7e4K81XiC1wNNBO6OIWKgB7Mwp000TYuFw+GxWCw2qbS2tk7k5uae/eDD"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   165
        "Fn594p6SFyxRCjKLUBWF8fBoegTNMVLLm/kwdMyGGON/nePLklv0dl/Cii3gdrtvAzdg8aig"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   166
        "vb296uDBgwMjIyMCwFvoZXv9NvRnIKqHSckUyQdJrtfexPqm5LGVAuNdVaofcCVywfpexLYD"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   167
        "CsDOnTvnioqKzGXdzNQMV9tvkJEyUITyeOAjpYyAc9gxYc/GWyK2HYDF4xog6fV6h1i8FwCo"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   168
        "LK/EncwhkWGxEH9AXLMXM2H1CpQBifI3yeapZ+70d43+cSo4+95yL23g8XiGFUWp3bVrV/Ty"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   169
        "5ctZnR2ddHZ08uxzz1K9eT1GRhJls1gFlsfieK+WpJ5e/3z7pcuXzmia1rJSs3xlOg8dOvTD"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   170
        "8fHx7wQCgb4tW7bMm6b55/Pnz+eGw+FFGJDT5iT1XRWlfxHMZ06+/Vz9dCAQeG9kZKR1x44d"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   171
        "nSdPnkyuZSAArbq6eqOiKAP9/f3xlpaWgra2tlei0eiryWSyKGKa2TcaL+muwcxU5aDf9Gi+"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   172
        "L0Oh0BehUOiaZVlnAoHAzFr7Ih75bVnVb2pqcvf09Phi0ei6+/rUC6lw1k0p5bSUctThcIwP"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   173
        "Dw/HnwT4P6CDl+TMvD0JAAAAAElFTkSuQmCC")
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   174
        
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   175
        #----------------------------------------------------------------------
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   176
        stopicon = PyEmbeddedImage(
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   177
        "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAABPRJ"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   178
        "REFUSImdlllsVGUUx3/f/e4sd5iZLjNt6XSFdtgkjWFRePABDaCBGgjamIg81CU0aoxbRHww"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   179
        "+EDkhWjEB5rYGEMUxQTCJg8EoQ2BbgrFCNJWltplgC63naEzd+bO50NLLVAq4STfwz3nfP/f"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   180
        "PSf3O98VSikmmQ94HFgDLDdNM1BfX5955swZX0tLi5FKpbSSkpJkaWlpIhQKdVdVVX2XkZFx"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   181
        "EpBAEGgHLgH/iSqlUEoJpVSBUqpaKXXYNM0r1dXVt6WUajx5ylVYWKi2bdvWY1nWUaXUgQ0b"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   182
        "NtRWVFQUjmuilEKMV5ALvAhsPHDgQFlNTU2gr69Pk1JSFMphTomfRXO8+A243i/oG9I5f6mX"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   183
        "K1evAxAOhykrKxs9duyYkZ+f/0lPT8/2OwXogBtYDKzYunVr0c6dO3Ns26akMIcdbxQyv0hy"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   184
        "rwmh8Bas5/eb89nxRR1NTU20t7cb4x1ZPjlXB2YBiw8ePJhdW1tb4DEMXng6xJtrPQhxn/Y4"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   185
        "QSM12o89fJnOjst3hXRdLxZCGEqpUQANmBuJRLK3bNmy1OFwUPVMPm9VTiMOqLRNYvg6+shv"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   186
        "rFoWwutxTcSklGEpZXDiXZRSr6xbt+6dtra2xUW5Lr7c7EUD3Flhwmu/nRKQGO7CvHaCwY7D"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   187
        "WNEeEmoGe0+PWnuOXHWmrBTl5eW7GxsbNwPoFy5ccHV2di7yzjD4uMqDNtFngZDOKQHurDLc"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   188
        "WWX4Qk/ScfRVXCLGoorU8J+z5gbjxyWGYbwshPhQKTWi7d+/P9/pdIp5xR5C2Q9uS1fDp3T+"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   189
        "8jo32uomfJ7cCtzZYQCOjKhYOmgxI+hBSumdOXPmegDt4sWLxU6nk3BIf7A6EB/sIBY5R/+l"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   190
        "nyd8yrZIRnvZ02tduxVwFQOojBQAfr9/tRBC103TLHe5XMwpSEwLKFj2EWk7gRGYOyaeTtJ4"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   191
        "pnZk+7UhM5FtlAhAIMYAESd+v78IyNWBYqfTSUF2fFqAJ7firufhRFSdTg36rIDhQ6XHnAI0"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   192
        "L1iWhWEYASBLl1L+JaWcfSuqk+u3AUikRer4ADffg/w7gt80fs35r34k3BYh2xNAarooAJ4d"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   193
        "vsHgaP8EWMR17GiaVo8r0+Fw6DrQDDzXO+RgQSjBUFIlPh+wB0vLZD6TrLWrkWRXB29fGAK6"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   194
        "pql1rNXVmrCklJYGtAgh6DXHDsuuG8k+O9M5895tq+atpSwwZ9o2TjZlWTGl1IAGNEsp1c1E"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   195
        "DiMqmI7nZRQJ7j/G6xZWMS/vsYcGkEzG4vF4RDt06FBfZmbmwR/27uOD3f1aVk+BljMjD6lp"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   196
        "/DN07a4VTYw8tL4rrQZgbNixadOm90+dOvX82cZmcbaxmWBukOVrlvJudw1R1xDp8a+kuPM6"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   197
        "Gx8S4LXtCIwNO1asWDGYl5dn3gneunGLc7/+gTttoAntQRrTmgMmpimAHQwGOycnlBaX4rUz"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   198
        "8LszMRweXLr7kWB35oMdCAT+1jRt0cqVK6Otra2+hvoGGuobWPLEEsoXzkbPkLhvR4CBRwJY"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   199
        "Xq/3SGVlZbq7u7utsrJyxDTNz06cOJHZ0tRCS1MLAKuRwNQT9v8AyV27dn1fXl7eqmlae11d"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   200
        "XXLfvn0/+Xy+l6LR6Gu2befFYjFfzrk2FzeHp7mK7jdxz2/LffGamhpvc3NzyLKsbFd3z1PG"
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   201
        "aHyBTKdjum0POGzbFAp7qo0xVOtJZdf/C/wRDnL5FYGSAAAAAElFTkSuQmCC")
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   202
        
343
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   203
        class ParamsEntryDialog(wx.TextEntryDialog):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   204
            if wx.VERSION < (2, 6, 0):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   205
                def Bind(self, event, function, id = None):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   206
                    if id is not None:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   207
                        event(self, id, function)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   208
                    else:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   209
                        event(self, function)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   210
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   211
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   212
            def __init__(self, parent, message, caption = "Please enter text", defaultValue = "", 
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   213
                               style = wx.OK|wx.CANCEL|wx.CENTRE, pos = wx.DefaultPosition):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   214
                wx.TextEntryDialog.__init__(self, parent, message, caption, defaultValue, style, pos)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   215
                
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   216
                self.Tests = []
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   217
                if wx.VERSION >= (2, 8, 0):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   218
                    self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   219
                elif wx.VERSION >= (2, 6, 0):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   220
                    self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetAffirmativeButton().GetId())
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   221
                else:
343
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   222
                    self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetChildren()[0].GetSizer().GetChildren()[0].GetWindow().GetId())
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   223
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   224
            def OnOK(self, event):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   225
                value = self.GetValue()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   226
                texts = {"value" : value}
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   227
                for function, message in self.Tests:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   228
                    if not function(value):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   229
                        message = wx.MessageDialog(self, message%texts, "Error", wx.OK|wx.ICON_ERROR)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   230
                        message.ShowModal()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   231
                        message.Destroy()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   232
                        return
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   233
                self.EndModal(wx.ID_OK)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   234
                event.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   235
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   236
            def GetValue(self):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   237
                return self.GetSizer().GetItem(1).GetWindow().GetValue()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   238
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   239
            def SetTests(self, tests):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   240
                self.Tests = tests
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   241
        
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   242
        class BeremizTaskBarIcon(wx.TaskBarIcon):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   243
            TBMENU_START = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   244
            TBMENU_STOP = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   245
            TBMENU_CHANGE_NAME = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   246
            TBMENU_CHANGE_PORT = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   247
            TBMENU_CHANGE_INTERFACE = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   248
            TBMENU_LIVE_SHELL = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   249
            TBMENU_WXINSPECTOR = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   250
            TBMENU_CHANGE_WD = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   251
            TBMENU_QUIT = wx.NewId()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   252
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   253
            def __init__(self, pyroserver):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   254
                wx.TaskBarIcon.__init__(self)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   255
                self.pyroserver = pyroserver
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   256
                # Set the image
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   257
                self.UpdateIcon(None)
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   258
                
343
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   259
                # bind some events
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   260
                self.Bind(wx.EVT_MENU, self.OnTaskBarStartPLC, id=self.TBMENU_START)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   261
                self.Bind(wx.EVT_MENU, self.OnTaskBarStopPLC, id=self.TBMENU_STOP)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   262
                self.Bind(wx.EVT_MENU, self.OnTaskBarChangeName, id=self.TBMENU_CHANGE_NAME)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   263
                self.Bind(wx.EVT_MENU, self.OnTaskBarChangeInterface, id=self.TBMENU_CHANGE_INTERFACE)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   264
                self.Bind(wx.EVT_MENU, self.OnTaskBarLiveShell, id=self.TBMENU_LIVE_SHELL)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   265
                self.Bind(wx.EVT_MENU, self.OnTaskBarWXInspector, id=self.TBMENU_WXINSPECTOR)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   266
                self.Bind(wx.EVT_MENU, self.OnTaskBarChangePort, id=self.TBMENU_CHANGE_PORT)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   267
                self.Bind(wx.EVT_MENU, self.OnTaskBarChangeWorkingDir, id=self.TBMENU_CHANGE_WD)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   268
                self.Bind(wx.EVT_MENU, self.OnTaskBarQuit, id=self.TBMENU_QUIT)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   269
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   270
            def CreatePopupMenu(self):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   271
                """
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   272
                This method is called by the base class when it needs to popup
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   273
                the menu for the default EVT_RIGHT_DOWN event.  Just create
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   274
                the menu how you want it and return it from this function,
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   275
                the base class takes care of the rest.
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   276
                """
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   277
                menu = wx.Menu()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   278
                menu.Append(self.TBMENU_START, "Start PLC")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   279
                menu.Append(self.TBMENU_STOP, "Stop PLC")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   280
                menu.Append(self.TBMENU_CHANGE_NAME, "Change Name")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   281
                menu.Append(self.TBMENU_CHANGE_INTERFACE, "Change IP of interface to bind")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   282
                menu.Append(self.TBMENU_LIVE_SHELL, "Launch a live Python shell")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   283
                menu.Append(self.TBMENU_WXINSPECTOR, "Launch WX GUI inspector")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   284
                menu.Append(self.TBMENU_CHANGE_PORT, "Change Port Number")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   285
                menu.AppendSeparator()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   286
                menu.Append(self.TBMENU_CHANGE_WD, "Change working directory")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   287
                menu.Append(self.TBMENU_QUIT, "Quit")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   288
                return menu
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   289
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   290
            def MakeIcon(self, img):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   291
                """
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   292
                The various platforms have different requirements for the
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   293
                icon size...
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   294
                """
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   295
                if "wxMSW" in wx.PlatformInfo:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   296
                    img = img.Scale(16, 16)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   297
                elif "wxGTK" in wx.PlatformInfo:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   298
                    img = img.Scale(22, 22)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   299
                # wxMac can be any size upto 128x128, so leave the source img alone....
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   300
                icon = wx.IconFromBitmap(img.ConvertToBitmap() )
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   301
                return icon
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   302
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   303
            def OnTaskBarStartPLC(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   304
                if self.pyroserver.plcobj is not None: 
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   305
                    self.pyroserver.plcobj.StartPLC()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   306
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   307
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   308
            def OnTaskBarStopPLC(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   309
                if self.pyroserver.plcobj is not None:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   310
                    self.pyroserver.plcobj.StopPLC()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   311
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   312
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   313
            def OnTaskBarChangeInterface(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   314
                dlg = ParamsEntryDialog(None, "Enter the ip of the interface to bind", defaultValue=self.pyroserver.ip)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   315
                dlg.SetTests([(re.compile('\d{1,3}(?:\.\d{1,3}){3}$').match, "Ip is not valid!"),
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   316
                               ( lambda ip :len([x for x in ip.split(".") if 0 <= int(x) <= 255]) == 4, "Ip is not valid!")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   317
                               ])
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   318
                if dlg.ShowModal() == wx.ID_OK:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   319
                    self.pyroserver.ip = dlg.GetValue()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   320
                    self.pyroserver.Stop()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   321
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   322
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   323
            def OnTaskBarChangePort(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   324
                dlg = ParamsEntryDialog(None, "Enter a port number ", defaultValue=str(self.pyroserver.port))
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   325
                dlg.SetTests([(UnicodeType.isdigit, "Port number must be an integer!"), (lambda port : 0 <= int(port) <= 65535 , "Port number must be 0 <= port <= 65535!")])
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   326
                if dlg.ShowModal() == wx.ID_OK:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   327
                    self.pyroserver.port = int(dlg.GetValue())
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   328
                    self.pyroserver.Stop()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   329
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   330
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   331
            def OnTaskBarChangeWorkingDir(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   332
                dlg = wx.DirDialog(None, "Choose a working directory ", self.pyroserver.workdir, wx.DD_NEW_DIR_BUTTON)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   333
                if dlg.ShowModal() == wx.ID_OK:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   334
                    self.pyroserver.workdir = dlg.GetPath()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   335
                    self.pyroserver.Stop()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   336
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   337
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   338
            def OnTaskBarChangeName(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   339
                dlg = ParamsEntryDialog(None, "Enter a name ", defaultValue=self.pyroserver.name)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   340
                dlg.SetTests([(lambda name : len(name) is not 0 , "Name must not be null!")])
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   341
                if dlg.ShowModal() == wx.ID_OK:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   342
                    self.pyroserver.name = dlg.GetValue()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   343
                    self.pyroserver.Restart()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   344
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   345
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   346
            def OnTaskBarLiveShell(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   347
                if self.pyroserver.plcobj is not None and self.pyroserver.plcobj.python_threads_vars is not None:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   348
                    from wx import py
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   349
                    #frame = py.shell.ShellFrame(locals=self.pyroserver.plcobj.python_threads_vars)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   350
                    frame = py.crust.CrustFrame(locals=self.pyroserver.plcobj.python_threads_vars)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   351
                    frame.Show()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   352
                else:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   353
                    wx.MessageBox("No runnning PLC","Error")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   354
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   355
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   356
            def OnTaskBarWXInspector(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   357
                # Activate the widget inspection tool
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   358
                from wx.lib.inspection import InspectionTool
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   359
                if not InspectionTool().initialized:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   360
                    InspectionTool().Init(locals=self.pyroserver.plcobj.python_threads_vars)
271
ea7928fd07da add the possibility to enable or disable wxTaskbarIcon for Beremiz_service
greg
parents: 269
diff changeset
   361
                
343
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   362
                # Find a widget to be selected in the tree.  Use either the
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   363
                # one under the cursor, if any, or this frame.
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   364
                wnd = wx.FindWindowAtPointer()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   365
                if not wnd:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   366
                    wnd = wx.GetApp()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   367
                InspectionTool().Show(wnd, True)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   368
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   369
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   370
            def OnTaskBarQuit(self, evt):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   371
                self.pyroserver.Quit()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   372
                self.RemoveIcon()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   373
                wx.CallAfter(wx.GetApp().Exit)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   374
                evt.Skip()
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   375
            
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   376
            def UpdateIcon(self, plcstatus):
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   377
                if plcstatus is "Started" :
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   378
                    currenticon = self.MakeIcon(starticon.GetImage())
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   379
                elif plcstatus is "Stopped":
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   380
                    currenticon = self.MakeIcon(stopicon.GetImage())
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   381
                else:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   382
                    currenticon = self.MakeIcon(defaulticon.GetImage())
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   383
                self.SetIcon(currenticon, "Beremiz Service")
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   384
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   385
from runtime import PLCObject, PLCprint, ServicePublisher
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   386
import Pyro.core as pyro
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   387
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   388
if not os.path.isdir(WorkingDir):
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   389
    os.mkdir(WorkingDir)
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   390
319
bdd82ac65f5d Fixed non-wx runtime python evaluation stuff.
etisserant
parents: 303
diff changeset
   391
def default_evaluator(callable, *args, **kwargs):
bdd82ac65f5d Fixed non-wx runtime python evaluation stuff.
etisserant
parents: 303
diff changeset
   392
    return callable(*args,**kwargs)
bdd82ac65f5d Fixed non-wx runtime python evaluation stuff.
etisserant
parents: 303
diff changeset
   393
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   394
class Server():
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   395
    def __init__(self, name, ip, port, workdir, argv, autostart=False, statuschange=None, evaluator=default_evaluator):
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   396
        self.continueloop = True
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   397
        self.daemon = None
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   398
        self.name = name
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   399
        self.ip = ip
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   400
        self.port = port
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   401
        self.workdir = workdir
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   402
        self.argv = argv
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   403
        self.plcobj = None
263
0bc32427a459 fix bug in beremiz_service with the MainLoop
greg
parents: 262
diff changeset
   404
        self.servicepublisher = None
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   405
        self.autostart = autostart
269
d29c5f71574f add a TaskBarIcon to configure beremiz_service and display plc states (started, stopped)
greg
parents: 263
diff changeset
   406
        self.statuschange = statuschange
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   407
        self.evaluator = evaluator
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   408
    
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   409
    def Loop(self):
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   410
        while self.continueloop:
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   411
            self.Start()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   412
        
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   413
    def Restart(self):
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   414
        self.Stop()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   415
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   416
    def Quit(self):
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   417
        self.continueloop = False
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   418
        self.Stop()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   419
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   420
    def Start(self):
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   421
        pyro.initServer()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   422
        self.daemon=pyro.Daemon(host=self.ip, port=self.port)
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   423
        self.plcobj = PLCObject(self.workdir, self.daemon, self.argv, self.statuschange, self.evaluator)
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   424
        uri = self.daemon.connect(self.plcobj,"PLCObject")
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   425
    
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   426
        print "The daemon runs on port :",self.port
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   427
        print "The object's uri is :",uri
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   428
        print "The working directory :",self.workdir
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   429
        
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   430
        # Configure and publish service
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   431
        # Not publish service if localhost in address params
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   432
        if self.ip != "localhost" and self.ip != "127.0.0.1":    
263
0bc32427a459 fix bug in beremiz_service with the MainLoop
greg
parents: 262
diff changeset
   433
            print "Publish service on local network"
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   434
            self.servicepublisher = ServicePublisher.ServicePublisher()
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   435
            self.servicepublisher.RegisterService(self.name, self.ip, self.port)
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   436
        
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   437
        if self.autostart:
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   438
            self.plcobj.StartPLC()
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   439
        
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   440
        sys.stdout.flush()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   441
        
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   442
        self.daemon.requestLoop()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   443
    
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   444
    def Stop(self):
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   445
        self.plcobj.StopPLC()
263
0bc32427a459 fix bug in beremiz_service with the MainLoop
greg
parents: 262
diff changeset
   446
        if self.servicepublisher is not None:
0bc32427a459 fix bug in beremiz_service with the MainLoop
greg
parents: 262
diff changeset
   447
            self.servicepublisher.UnRegisterService()
0bc32427a459 fix bug in beremiz_service with the MainLoop
greg
parents: 262
diff changeset
   448
            del self.servicepublisher
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   449
        self.daemon.shutdown(True)
269
d29c5f71574f add a TaskBarIcon to configure beremiz_service and display plc states (started, stopped)
greg
parents: 263
diff changeset
   450
        
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   451
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   452
if havewx:
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   453
    from threading import Semaphore
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   454
    wx_eval_lock = Semaphore(0)
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   455
    app=wx.App(redirect=False)
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   456
    mythread = currentThread()
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   457
    
269
d29c5f71574f add a TaskBarIcon to configure beremiz_service and display plc states (started, stopped)
greg
parents: 263
diff changeset
   458
    def statuschange(status):
d29c5f71574f add a TaskBarIcon to configure beremiz_service and display plc states (started, stopped)
greg
parents: 263
diff changeset
   459
        wx.CallAfter(taskbar_instance.UpdateIcon,status)
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   460
        
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   461
    eval_res = None
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   462
    def wx_evaluator(callable, *args, **kwargs):
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   463
        global eval_res
343
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   464
        try:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   465
            eval_res=callable(*args,**kwargs)
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   466
        except Exception,e:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   467
            PLCprint("#EXCEPTION : "+str(e))
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   468
        finally:
fe2d1936b546 Add try/except in wx_evaluator to get and print exception when command failed and unlock in all cases to not block the python thread
greg
parents: 330
diff changeset
   469
            wx_eval_lock.release()
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   470
        
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   471
    def evaluator(callable, *args, **kwargs):
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   472
        # call directly the callable function if call from the wx mainloop (avoid dead lock) 
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   473
        if(mythread == currentThread()):
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   474
            callable(*args,**kwargs)
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   475
        else:
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   476
            wx.CallAfter(wx_evaluator,callable,*args,**kwargs)
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   477
            wx_eval_lock.acquire()
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   478
        return eval_res
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   479
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   480
    pyroserver = Server(name, ip, port, WorkingDir, argv, autostart, statuschange, evaluator)
301
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   481
    taskbar_instance = BeremizTaskBarIcon(pyroserver)
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   482
    
87c925eaaa3a Added support for wxglade GUIs.
etisserant
parents: 294
diff changeset
   483
    pyro_thread=Thread(target=pyroserver.Loop)
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   484
    pyro_thread.start()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   485
    app.MainLoop()
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   486
else:
330
fdf81615ed04 add autostart plc feature for beremiz_service (bug fixed)
greg
parents: 319
diff changeset
   487
    pyroserver = Server(name, ip, port, WorkingDir, argv, autostart)
262
141a7145c099 add taskbaricon to beremiz_service.
greg
parents: 217
diff changeset
   488
    pyroserver.Loop()