Beremiz.py
author Edouard Tisserant <edouard.tisserant@gmail.com>
Tue, 22 Mar 2022 14:50:46 +0100
branchwxPython4
changeset 3442 29dbdb09da2e
parent 3423 84afcc0ebadd
child 3444 91b2c014494e
permissions -rwxr-xr-x
Tests: fix project edit test sikuli IDE test.

Background click based on bitmap matching doesn't work.
Grid dots are not good match candidates.
Rendering probably affected by virtual display's bpp or rasterizer approximations.
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/env python
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     3
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     4
# This file is part of Beremiz, a Integrated Development Environment for
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     5
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     6
#
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     7
# Copyright (C) 2016 - 2017: Andrey Skvortsov <andrej.skvortzov@gmail.com>
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     8
#
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     9
# See COPYING file for copyrights details.
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    10
#
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    11
# This program is free software; you can redistribute it and/or
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    12
# modify it under the terms of the GNU General Public License
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    13
# as published by the Free Software Foundation; either version 2
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    14
# of the License, or (at your option) any later version.
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    15
#
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    16
# This program is distributed in the hope that it will be useful,
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    17
# but WITHOUT ANY WARRANTY; without even the implied warranty of
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    19
# GNU General Public License for more details.
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    20
#
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    21
# You should have received a copy of the GNU General Public License
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    22
# along with this program; if not, write to the Free Software
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    23
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    24
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    25
1881
091005ec69c4 fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1874
diff changeset
    26
from __future__ import absolute_import
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    27
from __future__ import print_function
1732
94ffe74e6895 clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
    28
import os
94ffe74e6895 clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
    29
import sys
94ffe74e6895 clean-up: fix PEP8 E401 multiple imports on one line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1730
diff changeset
    30
import getopt
2443
75a274023970 python3 support: pylint, W1606 # (execfile-builtin) execfile built-in referenced
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1977
diff changeset
    31
from past.builtins import execfile
1872
866fb3ab8778 fix pylint error "(undefined-variable) Undefined variable 'X'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1847
diff changeset
    32
866fb3ab8778 fix pylint error "(undefined-variable) Undefined variable 'X'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1847
diff changeset
    33
import wx
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
    34
from wx.lib.agw.advancedsplash import AdvancedSplash, AS_NOTIMEOUT, AS_CENTER_ON_SCREEN
1872
866fb3ab8778 fix pylint error "(undefined-variable) Undefined variable 'X'"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1847
diff changeset
    35
1680
6db967480b7d make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1666
diff changeset
    36
import util.paths as paths
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    37
1953
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
    38
1831
56b48961cc68 fix (old-style-class) Old-style class defined error for most parts of
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1826
diff changeset
    39
class BeremizIDELauncher(object):
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    40
    def __init__(self):
1796
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
    41
        self.app = None
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
    42
        self.frame = None
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    43
        self.updateinfo_url = None
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    44
        self.extensions = []
1680
6db967480b7d make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1666
diff changeset
    45
        self.app_dir = paths.AbsDir(__file__)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    46
        self.projectOpen = None
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    47
        self.buildpath = None
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    48
        self.splash = None
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    49
        self.splashPath = self.Bpath("images", "splash.png")
1935
f2b0d849ea77 Prevent compiling XSLT on each call of GetInstanceList. To be continued. More optimization needed here. 100x would be fine...
Edouard Tisserant
parents: 1926
diff changeset
    50
        self.modules = ["BeremizIDE"]
1926
d430a67c8462 Launcher : add a debug attribute, instead of BMZ_DBG, so that customization can use it.
Edouard Tisserant
parents: 1924
diff changeset
    51
        self.debug = os.path.exists("BEREMIZ_DEBUG")
1960
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
    52
        self.handle_exception = None
3423
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
    53
        self.logf = None
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    54
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    55
    def Bpath(self, *args):
1740
b789b695b5c6 clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1739
diff changeset
    56
        return os.path.join(self.app_dir, *args)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    57
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    58
    def Usage(self):
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    59
        print("Usage:")
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    60
        print("%s [Options] [Projectpath] [Buildpath]" % sys.argv[0])
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    61
        print("")
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    62
        print("Supported options:")
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    63
        print("-h --help                    Print this help")
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    64
        print("-u --updatecheck URL         Retrieve update information by checking URL")
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    65
        print("-e --extend PathToExtension  Extend IDE functionality by loading at start additional extensions")
3423
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
    66
        print("-l --log path                write content of console tab to given file")
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    67
        print("")
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1805
diff changeset
    68
        print("")
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    69
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    70
    def SetCmdOptions(self):
3423
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
    71
        self.shortCmdOpts = "hu:e:l:"
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
    72
        self.longCmdOpts = ["help", "updatecheck=", "extend=", "log="]
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    73
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    74
    def ProcessOption(self, o, a):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    75
        if o in ("-h", "--help"):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    76
            self.Usage()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    77
            sys.exit()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    78
        if o in ("-u", "--updatecheck"):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    79
            self.updateinfo_url = a
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    80
        if o in ("-e", "--extend"):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    81
            self.extensions.append(a)
3423
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
    82
        if o in ("-l", "--log"):
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
    83
            self.logf = open(a, 'a')
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    84
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    85
    def ProcessCommandLineArgs(self):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    86
        self.SetCmdOptions()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    87
        try:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    88
            opts, args = getopt.getopt(sys.argv[1:], self.shortCmdOpts, self.longCmdOpts)
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    89
        except getopt.GetoptError:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    90
            # print help information and exit:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    91
            self.Usage()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    92
            sys.exit(2)
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    93
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    94
        for o, a in opts:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    95
            self.ProcessOption(o, a)
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    96
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    97
        if len(args) > 2:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    98
            self.Usage()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    99
            sys.exit()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   100
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   101
        elif len(args) == 1:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   102
            self.projectOpen = args[0]
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   103
            self.buildpath = None
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   104
        elif len(args) == 2:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   105
            self.projectOpen = args[0]
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   106
            self.buildpath = args[1]
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   107
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   108
    def CreateApplication(self):
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   109
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   110
        BeremizAppType = wx.App if wx.VERSION >= (3, 0, 0) else wx.PySimpleApp
1953
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
   111
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   112
        class BeremizApp(BeremizAppType):
1953
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
   113
            def OnInit(_self):  # pylint: disable=no-self-argument
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   114
                self.ShowSplashScreen()
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   115
                return True
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   116
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   117
        self.app = BeremizApp(redirect=self.debug)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   118
        self.app.SetAppName('beremiz')
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   119
        if wx.VERSION < (3, 0, 0):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   120
            wx.InitAllImageHandlers()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   121
1947
7c2cd9d33070 Hook Beremiz Launcher AppStart to AdvancedSplash OnPaint event in order to ensure image is beeing displayed before loading.
Edouard Tisserant
parents: 1941
diff changeset
   122
    def ShowSplashScreen(self):
7c2cd9d33070 Hook Beremiz Launcher AppStart to AdvancedSplash OnPaint event in order to ensure image is beeing displayed before loading.
Edouard Tisserant
parents: 1941
diff changeset
   123
        class Splash(AdvancedSplash):
1976
5d72971a36a3 Fixed bug that was creating many frames at starup on Windows
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1960
diff changeset
   124
            Painted = False
1977
9b3655ed2e24 PEP-8...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1976
diff changeset
   125
1953
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
   126
            def OnPaint(_self, event):  # pylint: disable=no-self-argument
1947
7c2cd9d33070 Hook Beremiz Launcher AppStart to AdvancedSplash OnPaint event in order to ensure image is beeing displayed before loading.
Edouard Tisserant
parents: 1941
diff changeset
   127
                AdvancedSplash.OnPaint(_self, event)
1976
5d72971a36a3 Fixed bug that was creating many frames at starup on Windows
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1960
diff changeset
   128
                if not _self.Painted:  # trigger app start only once
5d72971a36a3 Fixed bug that was creating many frames at starup on Windows
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1960
diff changeset
   129
                    _self.Painted = True
5d72971a36a3 Fixed bug that was creating many frames at starup on Windows
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1960
diff changeset
   130
                    wx.CallAfter(self.AppStart)
1947
7c2cd9d33070 Hook Beremiz Launcher AppStart to AdvancedSplash OnPaint event in order to ensure image is beeing displayed before loading.
Edouard Tisserant
parents: 1941
diff changeset
   131
        bmp = wx.Image(self.splashPath).ConvertToBitmap()
1953
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
   132
        self.splash = Splash(None,
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
   133
                             bitmap=bmp,
1947
7c2cd9d33070 Hook Beremiz Launcher AppStart to AdvancedSplash OnPaint event in order to ensure image is beeing displayed before loading.
Edouard Tisserant
parents: 1941
diff changeset
   134
                             agwStyle=AS_NOTIMEOUT | AS_CENTER_ON_SCREEN)
7c2cd9d33070 Hook Beremiz Launcher AppStart to AdvancedSplash OnPaint event in order to ensure image is beeing displayed before loading.
Edouard Tisserant
parents: 1941
diff changeset
   135
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   136
    def BackgroundInitialization(self):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   137
        self.InitI18n()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   138
        self.CheckUpdates()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   139
        self.LoadExtensions()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   140
        self.ImportModules()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   141
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   142
    def InitI18n(self):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   143
        from util.misc import InstallLocalRessources
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   144
        InstallLocalRessources(self.app_dir)
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   145
1921
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   146
    def globals(self):
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   147
        """
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   148
        allows customizations to specify what globals
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   149
        are passed to extensions
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   150
        """
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   151
        return globals()
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   152
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   153
    def LoadExtensions(self):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   154
        for extfilename in self.extensions:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   155
            from util.TranslationCatalogs import AddCatalog
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   156
            from util.BitmapLibrary import AddBitmapFolder
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   157
            extension_folder = os.path.split(os.path.realpath(extfilename))[0]
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   158
            sys.path.append(extension_folder)
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   159
            AddCatalog(os.path.join(extension_folder, "locale"))
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   160
            AddBitmapFolder(os.path.join(extension_folder, "images"))
1921
cf54939e6b0c Launcher: allows customizations to specify what globals passed to extensions
Edouard Tisserant
parents: 1915
diff changeset
   161
            execfile(extfilename, self.globals())
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   162
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   163
    def CheckUpdates(self):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   164
        if self.updateinfo_url is not None:
1874
a347459df3a4 fix displaying result of update check during Beremiz startup
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1872
diff changeset
   165
            self.updateinfo = _("Fetching %s") % self.updateinfo_url
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   166
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   167
            def updateinfoproc():
1739
ec153828ded2 clean-up: fix PEP8 E203 whitespace before ':' and whitespace before ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1736
diff changeset
   168
                try:
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   169
                    import urllib2
1874
a347459df3a4 fix displaying result of update check during Beremiz startup
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1872
diff changeset
   170
                    self.updateinfo = urllib2.urlopen(self.updateinfo_url, None).read()
1780
c52d1460cea8 clean-up: fix PEP8 E722 do not use bare except'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1752
diff changeset
   171
                except Exception:
1874
a347459df3a4 fix displaying result of update check during Beremiz startup
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1872
diff changeset
   172
                    self.updateinfo = _("update info unavailable.")
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   173
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   174
            from threading import Thread
1874
a347459df3a4 fix displaying result of update check during Beremiz startup
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1872
diff changeset
   175
            self.splash.SetText(text=self.updateinfo)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   176
            updateinfoThread = Thread(target=updateinfoproc)
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   177
            updateinfoThread.start()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   178
            updateinfoThread.join(2)
1874
a347459df3a4 fix displaying result of update check during Beremiz startup
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1872
diff changeset
   179
            self.splash.SetText(text=self.updateinfo)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   180
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   181
    def ImportModules(self):
1924
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   182
        for modname in self.modules:
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   183
            mod = __import__(modname)
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   184
            setattr(self, modname, mod)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   185
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   186
    def InstallExceptionHandler(self):
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   187
        import version
1792
4d1de8b0183f unify exception handling of Beremiz and PLCOpenEditor
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1790
diff changeset
   188
        import util.ExceptionHandler
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   189
        self.handle_exception = util.ExceptionHandler.AddExceptHook(version.app_version)
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   190
1924
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   191
    def CreateUI(self):
3423
84afcc0ebadd IDE: Add -l or --log command line parameter to give a file where all content witten to console window will be appended. File can be /dev/stdout.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2570
diff changeset
   192
        self.frame = self.BeremizIDE.Beremiz(None, self.projectOpen, self.buildpath, logf=self.logf)
1924
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   193
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   194
    def CloseSplash(self):
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   195
        if self.splash:
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   196
            self.splash.Close()
1924
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   197
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   198
    def ShowUI(self):
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   199
        self.frame.Show()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   200
1796
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   201
    def PreStart(self):
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   202
        self.ProcessCommandLineArgs()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   203
        self.CreateApplication()
1953
5736d25bb393 PEP8 and PyLint conformance: whitespaces and stuff
Edouard Tisserant
parents: 1947
diff changeset
   204
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   205
    def AppStart(self):
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   206
        try:
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   207
            self.BackgroundInitialization()
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   208
            self.CreateUI()
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   209
            self.CloseSplash()
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   210
            self.ShowUI()
1960
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
   211
        except (KeyboardInterrupt, SystemExit):
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
   212
            raise
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   213
        except Exception:
1960
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
   214
            if self.handle_exception is not None:
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
   215
                self.handle_exception(*sys.exc_info(), exit=True)
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
   216
            else:
372ec456664c Prevent catching exception if exception handling was not enabled (or disabled by test test app).
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1953
diff changeset
   217
                raise
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   218
1796
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   219
    def MainLoop(self):
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   220
        self.app.MainLoop()
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   221
1924
fc67b02d44e0 More changes in Launcher. Modules to be loaded in the background are given in a list, and assigned as object attributes. Also splitted CreateUI into CloseSplashScreen and CreatueUI.
Edouard Tisserant
parents: 1922
diff changeset
   222
    def Start(self):
1796
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   223
        self.PreStart()
1941
cde74a39df51 Fixed Exception dialog disapearing after a view second when exception occurs during app startup.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 1935
diff changeset
   224
        self.InstallExceptionHandler()
1796
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   225
        self.MainLoop()
4f7a0c40a7c3 add couple Beremiz application tests
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1792
diff changeset
   226
1749
d73b64672238 clean-up: fix PEP8 E305 expected 2 blank lines after class or function definition
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1741
diff changeset
   227
1663
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   228
if __name__ == '__main__':
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   229
    beremiz = BeremizIDELauncher()
81f6781f7fec rename BeremizIDELauncher.py to Beremiz.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   230
    beremiz.Start()