BeremizIDE.py
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Thu, 01 Jun 2017 14:37:14 +0300
changeset 1686 85fdcc04da25
parent 1684 1447424a7029
child 1692 9cb4d1392baf
permissions -rwxr-xr-x
disallow setting IEC location addresses for TIME, DATE, DT and TOD variables

Size of these types is not defined and depends on the implementation
(IEC 61131-3 2.3.1).
1662
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/env python
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     3
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     4
# This file is part of Beremiz, a Integrated Development Environment for
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     5
# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     6
#
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     7
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     8
# Copyright (C) 2016: Andrey Skvortsov <andrej.skvortzov@gmail.com>
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
     9
#
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    10
# See COPYING file for copyrights details.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    11
#
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    12
# This program is free software; you can redistribute it and/or
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    13
# modify it under the terms of the GNU General Public License
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    14
# as published by the Free Software Foundation; either version 2
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    15
# of the License, or (at your option) any later version.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    16
#
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    17
# This program is distributed in the hope that it will be useful,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    18
# but WITHOUT ANY WARRANTY; without even the implied warranty of
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    19
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    20
# GNU General Public License for more details.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    21
#
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    22
# You should have received a copy of the GNU General Public License
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    23
# along with this program; if not, write to the Free Software
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    24
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    25
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    26
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    27
import os, sys
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    28
import tempfile
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    29
import shutil
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    30
import random
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    31
import time
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    32
import version
1680
6db967480b7d make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1662
diff changeset
    33
import util.paths as paths
1662
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    34
from types import ListType
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    35
1680
6db967480b7d make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1662
diff changeset
    36
beremiz_dir = paths.AbsDir(__file__)
1662
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    37
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    38
def Bpath(*args):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    39
    return os.path.join(beremiz_dir,*args)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    40
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    41
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    42
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    43
import wx.lib.buttons, wx.lib.statbmp, wx.stc
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    44
import cPickle
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    45
import types, time, re, platform, time, traceback, commands
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    46
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    47
from docutil import OpenHtmlFrame
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    48
from editors.EditorPanel import EditorPanel
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    49
from editors.Viewer import Viewer
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    50
from editors.TextViewer import TextViewer
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    51
from editors.ResourceEditor import ConfigurationEditor, ResourceEditor
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    52
from editors.DataTypeEditor import DataTypeEditor
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    53
from util.MiniTextControler import MiniTextControler
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    54
from util.ProcessLogger import ProcessLogger
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    55
from controls.LogViewer import LogViewer
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    56
from controls.CustomStyledTextCtrl import CustomStyledTextCtrl
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    57
from controls import EnhancedStatusBar as esb
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    58
from dialogs.AboutDialog import ShowAboutDialog
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    59
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    60
from PLCControler import LOCATION_CONFNODE, LOCATION_MODULE, LOCATION_GROUP, LOCATION_VAR_INPUT, LOCATION_VAR_OUTPUT, LOCATION_VAR_MEMORY, ITEM_PROJECT, ITEM_RESOURCE
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    61
from ProjectController import ProjectController, GetAddMenuItems, MATIEC_ERROR_MODEL, ITEM_CONFNODE
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    62
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    63
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    64
MAX_RECENT_PROJECTS = 9
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    65
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    66
if wx.Platform == '__WXMSW__':
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    67
    faces = {
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    68
        'mono' : 'Courier New',
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    69
        'size' : 8,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    70
    }
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    71
else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    72
    faces = {
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    73
        'mono' : 'Courier',
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    74
        'size' : 10,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    75
    }
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    76
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    77
from threading import Lock,Timer,currentThread
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    78
MainThread = currentThread().ident
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    79
REFRESH_PERIOD = 0.1
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    80
from time import time as gettime
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    81
class LogPseudoFile:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    82
    """ Base class for file like objects to facilitate StdOut for the Shell."""
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    83
    def __init__(self, output, risecall):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    84
        self.red_white = 1
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    85
        self.red_yellow = 2
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    86
        self.black_white = wx.stc.STC_STYLE_DEFAULT
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    87
        self.output = output
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    88
        self.risecall = risecall
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    89
        # to prevent rapid fire on rising log panel
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    90
        self.rising_timer = 0
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    91
        self.lock = Lock()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    92
        self.YieldLock = Lock()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    93
        self.RefreshLock = Lock()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    94
        self.TimerAccessLock = Lock()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    95
        self.stack = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    96
        self.LastRefreshTime = gettime()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    97
        self.LastRefreshTimer = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    98
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
    99
    def write(self, s, style = None):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   100
        if self.lock.acquire():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   101
            self.stack.append((s,style))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   102
            self.lock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   103
            current_time = gettime()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   104
            self.TimerAccessLock.acquire()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   105
            if self.LastRefreshTimer:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   106
                self.LastRefreshTimer.cancel()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   107
                self.LastRefreshTimer=None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   108
            self.TimerAccessLock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   109
            if current_time - self.LastRefreshTime > REFRESH_PERIOD and self.RefreshLock.acquire(False):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   110
                self._should_write()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   111
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   112
                self.TimerAccessLock.acquire()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   113
                self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   114
                self.LastRefreshTimer.start()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   115
                self.TimerAccessLock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   116
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   117
    def _timer_expired(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   118
        if self.RefreshLock.acquire(False):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   119
            self._should_write()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   120
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   121
            self.TimerAccessLock.acquire()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   122
            self.LastRefreshTimer = Timer(REFRESH_PERIOD, self._timer_expired)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   123
            self.LastRefreshTimer.start()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   124
            self.TimerAccessLock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   125
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   126
    def _should_write(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   127
        wx.CallAfter(self._write)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   128
        if MainThread == currentThread().ident:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   129
            app = wx.GetApp()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   130
            if app is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   131
                if self.YieldLock.acquire(0):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   132
                    app.Yield()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   133
                    self.YieldLock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   134
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   135
    def _write(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   136
        if self.output :
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   137
            self.output.Freeze()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   138
            self.lock.acquire()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   139
            for s, style in self.stack:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   140
                if style is None : style=self.black_white
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   141
                if style != self.black_white:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   142
                    self.output.StartStyling(self.output.GetLength(), 0xff)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   143
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   144
                # Temporary deactivate read only mode on StyledTextCtrl for
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   145
                # adding text. It seems that text modifications, even
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   146
                # programmatically, are disabled in StyledTextCtrl when read
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   147
                # only is active
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   148
                start_pos = self.output.GetLength()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   149
                self.output.SetReadOnly(False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   150
                self.output.AppendText(s)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   151
                self.output.SetReadOnly(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   152
                text_len = self.output.GetLength() - start_pos
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   153
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   154
                if style != self.black_white:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   155
                    self.output.SetStyling(text_len, style)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   156
            self.stack = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   157
            self.lock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   158
            self.output.Thaw()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   159
            self.LastRefreshTime = gettime()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   160
            try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   161
                self.RefreshLock.release()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   162
            except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   163
                pass
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   164
            newtime = time.time()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   165
            if newtime - self.rising_timer > 1:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   166
                self.risecall(self.output)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   167
            self.rising_timer = newtime
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   168
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   169
    def write_warning(self, s):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   170
        self.write(s,self.red_white)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   171
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   172
    def write_error(self, s):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   173
        self.write(s,self.red_yellow)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   174
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   175
    def writeyield(self, s):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   176
        self.write(s)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   177
        wx.GetApp().Yield()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   178
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   179
    def flush(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   180
        # Temporary deactivate read only mode on StyledTextCtrl for clearing
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   181
        # text. It seems that text modifications, even programmatically, are
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   182
        # disabled in StyledTextCtrl when read only is active
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   183
        self.output.SetReadOnly(False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   184
        self.output.SetText("")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   185
        self.output.SetReadOnly(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   186
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   187
    def isatty(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   188
        return False
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   189
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   190
ID_FILEMENURECENTPROJECTS = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   191
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   192
from IDEFrame import TITLE,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   193
                     EDITORTOOLBAR,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   194
                     FILEMENU,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   195
                     EDITMENU,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   196
                     DISPLAYMENU,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   197
                     PROJECTTREE,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   198
                     POUINSTANCEVARIABLESPANEL,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   199
                     LIBRARYTREE,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   200
                     SCALING,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   201
                     PAGETITLES,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   202
                     IDEFrame, AppendMenu,\
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   203
                     EncodeFileSystemPath, DecodeFileSystemPath
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   204
from util.BitmapLibrary import GetBitmap
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   205
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   206
class Beremiz(IDEFrame):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   207
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   208
    def _init_utils(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   209
        self.ConfNodeMenu = wx.Menu(title='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   210
        self.RecentProjectsMenu = wx.Menu(title='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   211
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   212
        IDEFrame._init_utils(self)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   213
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   214
    def _init_coll_FileMenu_Items(self, parent):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   215
        AppendMenu(parent, help='', id=wx.ID_NEW,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   216
              kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   217
        AppendMenu(parent, help='', id=wx.ID_OPEN,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   218
              kind=wx.ITEM_NORMAL, text=_(u'Open') + '\tCTRL+O')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   219
        parent.AppendMenu(ID_FILEMENURECENTPROJECTS, _("&Recent Projects"), self.RecentProjectsMenu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   220
        parent.AppendSeparator()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   221
        AppendMenu(parent, help='', id=wx.ID_SAVE,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   222
              kind=wx.ITEM_NORMAL, text=_(u'Save') + '\tCTRL+S')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   223
        AppendMenu(parent, help='', id=wx.ID_SAVEAS,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   224
              kind=wx.ITEM_NORMAL, text=_(u'Save as') + '\tCTRL+SHIFT+S')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   225
        AppendMenu(parent, help='', id=wx.ID_CLOSE,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   226
              kind=wx.ITEM_NORMAL, text=_(u'Close Tab') + '\tCTRL+W')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   227
        AppendMenu(parent, help='', id=wx.ID_CLOSE_ALL,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   228
              kind=wx.ITEM_NORMAL, text=_(u'Close Project') + '\tCTRL+SHIFT+W')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   229
        parent.AppendSeparator()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   230
        AppendMenu(parent, help='', id=wx.ID_PAGE_SETUP,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   231
              kind=wx.ITEM_NORMAL, text=_(u'Page Setup') + '\tCTRL+ALT+P')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   232
        AppendMenu(parent, help='', id=wx.ID_PREVIEW,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   233
              kind=wx.ITEM_NORMAL, text=_(u'Preview') + '\tCTRL+SHIFT+P')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   234
        AppendMenu(parent, help='', id=wx.ID_PRINT,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   235
              kind=wx.ITEM_NORMAL, text=_(u'Print') + '\tCTRL+P')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   236
        parent.AppendSeparator()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   237
        AppendMenu(parent, help='', id=wx.ID_EXIT,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   238
              kind=wx.ITEM_NORMAL, text=_(u'Quit') + '\tCTRL+Q')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   239
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   240
        self.Bind(wx.EVT_MENU, self.OnNewProjectMenu, id=wx.ID_NEW)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   241
        self.Bind(wx.EVT_MENU, self.OnOpenProjectMenu, id=wx.ID_OPEN)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   242
        self.Bind(wx.EVT_MENU, self.OnSaveProjectMenu, id=wx.ID_SAVE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   243
        self.Bind(wx.EVT_MENU, self.OnSaveProjectAsMenu, id=wx.ID_SAVEAS)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   244
        self.Bind(wx.EVT_MENU, self.OnCloseTabMenu, id=wx.ID_CLOSE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   245
        self.Bind(wx.EVT_MENU, self.OnCloseProjectMenu, id=wx.ID_CLOSE_ALL)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   246
        self.Bind(wx.EVT_MENU, self.OnPageSetupMenu, id=wx.ID_PAGE_SETUP)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   247
        self.Bind(wx.EVT_MENU, self.OnPreviewMenu, id=wx.ID_PREVIEW)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   248
        self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   249
        self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   250
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   251
        self.AddToMenuToolBar([(wx.ID_NEW, "new", _(u'New'), None),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   252
                               (wx.ID_OPEN, "open", _(u'Open'), None),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   253
                               (wx.ID_SAVE, "save", _(u'Save'), None),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   254
                               (wx.ID_SAVEAS, "saveas", _(u'Save As...'), None),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   255
                               (wx.ID_PRINT, "print", _(u'Print'), None)])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   256
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   257
    def _RecursiveAddMenuItems(self, menu, items):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   258
        for name, text, help, children in items:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   259
            new_id = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   260
            if len(children) > 0:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   261
                new_menu = wx.Menu(title='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   262
                menu.AppendMenu(new_id, text, new_menu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   263
                self._RecursiveAddMenuItems(new_menu, children)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   264
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   265
                AppendMenu(menu, help=help, id=new_id,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   266
                       kind=wx.ITEM_NORMAL, text=text)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   267
                self.Bind(wx.EVT_MENU, self.GetAddConfNodeFunction(name),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   268
                          id=new_id)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   269
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   270
    def _init_coll_AddMenu_Items(self, parent):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   271
        IDEFrame._init_coll_AddMenu_Items(self, parent, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   272
        self._RecursiveAddMenuItems(parent, GetAddMenuItems())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   273
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   274
    def _init_coll_HelpMenu_Items(self, parent):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   275
        parent.Append(help='', id=wx.ID_ABOUT,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   276
              kind=wx.ITEM_NORMAL, text=_(u'About'))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   277
        self.Bind(wx.EVT_MENU, self.OnAboutMenu, id=wx.ID_ABOUT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   278
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   279
    def _init_coll_ConnectionStatusBar_Fields(self, parent):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   280
        parent.SetFieldsCount(3)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   281
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   282
        parent.SetStatusText(number=0, text='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   283
        parent.SetStatusText(number=1, text='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   284
        parent.SetStatusText(number=2, text='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   285
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   286
        parent.SetStatusWidths([-1, 300, 200])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   287
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   288
    def _init_ctrls(self, prnt):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   289
        IDEFrame._init_ctrls(self, prnt)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   290
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   291
        self.EditMenuSize = self.EditMenu.GetMenuItemCount()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   292
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   293
        inspectorID = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   294
        self.Bind(wx.EVT_MENU, self.OnOpenWidgetInspector, id=inspectorID)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   295
        accels = [wx.AcceleratorEntry(wx.ACCEL_CTRL|wx.ACCEL_ALT, ord('I'), inspectorID)]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   296
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   297
        keyID = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   298
        self.Bind(wx.EVT_MENU, self.SwitchFullScrMode, id=keyID)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   299
        accels += [wx.AcceleratorEntry(wx.ACCEL_NORMAL, wx.WXK_F12, keyID)]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   300
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   301
        for method,shortcut in [("Stop",     wx.WXK_F4),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   302
                                ("Run",      wx.WXK_F5),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   303
                                ("Transfer", wx.WXK_F6),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   304
                                ("Connect",  wx.WXK_F7),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   305
                                ("Build",    wx.WXK_F11)]:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   306
            def OnMethodGen(obj,meth):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   307
                def OnMethod(evt):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   308
                    if obj.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   309
                       obj.CTR.CallMethod('_'+meth)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   310
                    wx.CallAfter(self.RefreshStatusToolBar)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   311
                return OnMethod
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   312
            newid = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   313
            self.Bind(wx.EVT_MENU, OnMethodGen(self,method), id=newid)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   314
            accels += [wx.AcceleratorEntry(wx.ACCEL_NORMAL, shortcut,newid)]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   315
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   316
        self.SetAcceleratorTable(wx.AcceleratorTable(accels))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   317
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   318
        self.LogConsole = CustomStyledTextCtrl(
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   319
                  name='LogConsole', parent=self.BottomNoteBook, pos=wx.Point(0, 0),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   320
                  size=wx.Size(0, 0))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   321
        self.LogConsole.Bind(wx.EVT_SET_FOCUS, self.OnLogConsoleFocusChanged)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   322
        self.LogConsole.Bind(wx.EVT_KILL_FOCUS, self.OnLogConsoleFocusChanged)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   323
        self.LogConsole.Bind(wx.stc.EVT_STC_UPDATEUI, self.OnLogConsoleUpdateUI)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   324
        self.LogConsole.SetReadOnly(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   325
        self.LogConsole.SetWrapMode(wx.stc.STC_WRAP_CHAR)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   326
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   327
        # Define Log Console styles
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   328
        self.LogConsole.StyleSetSpec(wx.stc.STC_STYLE_DEFAULT, "face:%(mono)s,size:%(size)d" % faces)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   329
        self.LogConsole.StyleClearAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   330
        self.LogConsole.StyleSetSpec(1, "face:%(mono)s,fore:#FF0000,size:%(size)d" % faces)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   331
        self.LogConsole.StyleSetSpec(2, "face:%(mono)s,fore:#FF0000,back:#FFFF00,size:%(size)d" % faces)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   332
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   333
        # Define Log Console markers
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   334
        self.LogConsole.SetMarginSensitive(1, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   335
        self.LogConsole.SetMarginType(1, wx.stc.STC_MARGIN_SYMBOL)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   336
        self.LogConsole.MarkerDefine(0, wx.stc.STC_MARK_CIRCLE, "BLACK", "RED")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   337
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   338
        self.LogConsole.SetModEventMask(wx.stc.STC_MOD_INSERTTEXT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   339
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   340
        self.LogConsole.Bind(wx.stc.EVT_STC_MARGINCLICK, self.OnLogConsoleMarginClick)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   341
        self.LogConsole.Bind(wx.stc.EVT_STC_MODIFIED, self.OnLogConsoleModified)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   342
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   343
        self.MainTabs["LogConsole"] = (self.LogConsole, _("Console"))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   344
        self.BottomNoteBook.AddPage(*self.MainTabs["LogConsole"])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   345
        #self.BottomNoteBook.Split(self.BottomNoteBook.GetPageIndex(self.LogConsole), wx.RIGHT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   346
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   347
        self.LogViewer = LogViewer(self.BottomNoteBook, self)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   348
        self.MainTabs["LogViewer"] = (self.LogViewer, _("PLC Log"))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   349
        self.BottomNoteBook.AddPage(*self.MainTabs["LogViewer"])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   350
        #self.BottomNoteBook.Split(self.BottomNoteBook.GetPageIndex(self.LogViewer), wx.RIGHT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   351
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   352
        StatusToolBar = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   353
                wx.TB_FLAT | wx.TB_NODIVIDER | wx.NO_BORDER)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   354
        StatusToolBar.SetToolBitmapSize(wx.Size(25, 25))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   355
        StatusToolBar.Realize()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   356
        self.Panes["StatusToolBar"] = StatusToolBar
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   357
        self.AUIManager.AddPane(StatusToolBar, wx.aui.AuiPaneInfo().
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   358
                  Name("StatusToolBar").Caption(_("Status ToolBar")).
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   359
                  ToolbarPane().Top().Position(1).
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   360
                  LeftDockable(False).RightDockable(False))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   361
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   362
        self.AUIManager.Update()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   363
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   364
        self.ConnectionStatusBar = esb.EnhancedStatusBar(self, style=wx.ST_SIZEGRIP)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   365
        self._init_coll_ConnectionStatusBar_Fields(self.ConnectionStatusBar)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   366
        self.ProgressStatusBar = wx.Gauge(self.ConnectionStatusBar, -1, range = 100)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   367
        self.ConnectionStatusBar.AddWidget(self.ProgressStatusBar, esb.ESB_EXACT_FIT, esb.ESB_EXACT_FIT, 2)        
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   368
        self.ProgressStatusBar.Hide()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   369
        self.SetStatusBar(self.ConnectionStatusBar)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   370
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   371
    def __init_execute_path(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   372
        if os.name == 'nt':
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   373
            # on windows, desktop shortcut launches Beremiz.py
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   374
            # with working dir set to mingw/bin.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   375
            # then we prefix CWD to PATH in order to ensure that
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   376
            # commands invoked by build process by default are
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   377
            # found here.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   378
            os.environ["PATH"] = os.getcwd()+';'+os.environ["PATH"]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   379
        
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   380
        
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   381
    def __init__(self, parent, projectOpen=None, buildpath=None, ctr=None, debug=True):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   382
        # Add beremiz's icon in top left corner of the frame
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   383
        self.icon = wx.Icon(Bpath("images", "brz.ico"), wx.BITMAP_TYPE_ICO)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   384
        self.__init_execute_path()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   385
        
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   386
        IDEFrame.__init__(self, parent, debug)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   387
        self.Log = LogPseudoFile(self.LogConsole,self.SelectTab)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   388
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   389
        self.local_runtime = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   390
        self.runtime_port = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   391
        self.local_runtime_tmpdir = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   392
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   393
        self.LastPanelSelected = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   394
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   395
        # Define Tree item icon list
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   396
        self.LocationImageList = wx.ImageList(16, 16)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   397
        self.LocationImageDict = {}
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   398
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   399
        # Icons for location items
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   400
        for imgname, itemtype in [
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   401
            ("CONFIGURATION", LOCATION_CONFNODE),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   402
            ("RESOURCE",      LOCATION_MODULE),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   403
            ("PROGRAM",       LOCATION_GROUP),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   404
            ("VAR_INPUT",     LOCATION_VAR_INPUT),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   405
            ("VAR_OUTPUT",    LOCATION_VAR_OUTPUT),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   406
            ("VAR_LOCAL",     LOCATION_VAR_MEMORY)]:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   407
            self.LocationImageDict[itemtype] = self.LocationImageList.Add(GetBitmap(imgname))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   408
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   409
        # Icons for other items
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   410
        for imgname, itemtype in [
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   411
            ("Extension", ITEM_CONFNODE)]:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   412
            self.TreeImageDict[itemtype] = self.TreeImageList.Add(GetBitmap(imgname))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   413
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   414
        if projectOpen is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   415
            projectOpen = DecodeFileSystemPath(projectOpen, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   416
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   417
        if projectOpen is not None and os.path.isdir(projectOpen):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   418
            self.CTR = ProjectController(self, self.Log)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   419
            self.Controler = self.CTR
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   420
            result, err = self.CTR.LoadProject(projectOpen, buildpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   421
            if not result:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   422
                self.LibraryPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   423
                self.ProjectTree.Enable(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   424
                self.PouInstanceVariablesPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   425
                self.RefreshConfigRecentProjects(os.path.abspath(projectOpen))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   426
                self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   427
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   428
                self.ResetView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   429
                self.ShowErrorMessage(result)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   430
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   431
            self.CTR = ctr
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   432
            self.Controler = ctr
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   433
            if ctr is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   434
                self.LibraryPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   435
                self.ProjectTree.Enable(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   436
                self.PouInstanceVariablesPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   437
                self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   438
        if self.EnableDebug:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   439
            self.DebugVariablePanel.SetDataProducer(self.CTR)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   440
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   441
        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   442
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   443
        self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   444
        self.RefreshAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   445
        self.LogConsole.SetFocus()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   446
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   447
    def RefreshTitle(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   448
        name = _("Beremiz")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   449
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   450
            projectname = self.CTR.GetProjectName()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   451
            if self.CTR.ProjectTestModified():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   452
                projectname = "~%s~" % projectname
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   453
            self.SetTitle("%s - %s" % (name, projectname))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   454
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   455
            self.SetTitle(name)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   456
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   457
    def StartLocalRuntime(self, taskbaricon = True):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   458
        if (self.local_runtime is None) or (self.local_runtime.exitcode is not None):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   459
            # create temporary directory for runtime working directory
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   460
            self.local_runtime_tmpdir = tempfile.mkdtemp()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   461
            # choose an arbitrary random port for runtime
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   462
            self.runtime_port = int(random.random() * 1000) + 61131
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   463
            # launch local runtime
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   464
            self.local_runtime = ProcessLogger(self.Log,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   465
                "\"%s\" \"%s\" -p %s -i localhost %s %s"%(
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   466
                    sys.executable,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   467
                    Bpath("Beremiz_service.py"),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   468
                    self.runtime_port,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   469
                    {False : "-x 0", True :"-x 1"}[taskbaricon],
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   470
                    self.local_runtime_tmpdir),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   471
                no_gui=False,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   472
                timeout=500, keyword = self.local_runtime_tmpdir,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   473
                cwd = self.local_runtime_tmpdir)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   474
            self.local_runtime.spin()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   475
        return self.runtime_port
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   476
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   477
    def KillLocalRuntime(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   478
        if self.local_runtime is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   479
            # shutdown local runtime
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   480
            self.local_runtime.kill(gently=False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   481
            # clear temp dir
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   482
            shutil.rmtree(self.local_runtime_tmpdir)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   483
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   484
            self.local_runtime = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   485
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   486
    def OnOpenWidgetInspector(self, evt):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   487
        # Activate the widget inspection tool
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   488
        from wx.lib.inspection import InspectionTool
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   489
        if not InspectionTool().initialized:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   490
            InspectionTool().Init()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   491
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   492
        # Find a widget to be selected in the tree.  Use either the
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   493
        # one under the cursor, if any, or this frame.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   494
        wnd = wx.FindWindowAtPointer()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   495
        if not wnd:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   496
            wnd = self
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   497
        InspectionTool().Show(wnd, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   498
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   499
    def OnLogConsoleFocusChanged(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   500
        self.RefreshEditMenu()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   501
        event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   502
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   503
    def OnLogConsoleUpdateUI(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   504
        self.SetCopyBuffer(self.LogConsole.GetSelectedText(), True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   505
        event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   506
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   507
    def OnLogConsoleMarginClick(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   508
        line_idx = self.LogConsole.LineFromPosition(event.GetPosition())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   509
        wx.CallAfter(self.SearchLineForError, self.LogConsole.GetLine(line_idx))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   510
        event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   511
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   512
    def OnLogConsoleModified(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   513
        line_idx = self.LogConsole.LineFromPosition(event.GetPosition())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   514
        line = self.LogConsole.GetLine(line_idx)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   515
        if line:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   516
            result = MATIEC_ERROR_MODEL.match(line)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   517
            if result is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   518
                self.LogConsole.MarkerAdd(line_idx, 0)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   519
        event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   520
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   521
    def SearchLineForError(self, line):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   522
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   523
            result = MATIEC_ERROR_MODEL.match(line)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   524
            if result is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   525
                first_line, first_column, last_line, last_column, error = result.groups()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   526
                infos = self.CTR.ShowError(self.Log,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   527
                                                  (int(first_line), int(first_column)),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   528
                                                  (int(last_line), int(last_column)))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   529
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   530
    ## Function displaying an Error dialog in PLCOpenEditor.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   531
    #  @return False if closing cancelled.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   532
    def CheckSaveBeforeClosing(self, title=_("Close Project")):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   533
        if self.CTR.ProjectTestModified():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   534
            dialog = wx.MessageDialog(self,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   535
                                      _("There are changes, do you want to save?"),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   536
                                      title,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   537
                                      wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   538
            answer = dialog.ShowModal()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   539
            dialog.Destroy()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   540
            if answer == wx.ID_YES:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   541
                self.CTR.SaveProject()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   542
            elif answer == wx.ID_CANCEL:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   543
                return False
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   544
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   545
        for idx in xrange(self.TabsOpened.GetPageCount()):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   546
            window = self.TabsOpened.GetPage(idx)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   547
            if not window.CheckSaveBeforeClosing():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   548
                return False
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   549
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   550
        return True
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   551
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   552
    def GetTabInfos(self, tab):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   553
        if (isinstance(tab, EditorPanel) and
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   554
            not isinstance(tab, (Viewer,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   555
                                 TextViewer,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   556
                                 ResourceEditor,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   557
                                 ConfigurationEditor,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   558
                                 DataTypeEditor))):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   559
            return ("confnode", tab.Controler.CTNFullName(), tab.GetTagName())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   560
        elif (isinstance(tab, TextViewer) and
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   561
              (tab.Controler is None or isinstance(tab.Controler, MiniTextControler))):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   562
            return ("confnode", None, tab.GetInstancePath())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   563
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   564
            return IDEFrame.GetTabInfos(self, tab)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   565
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   566
    def LoadTab(self, notebook, page_infos):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   567
        if page_infos[0] == "confnode":
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   568
            if page_infos[1] is None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   569
                confnode = self.CTR
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   570
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   571
                confnode = self.CTR.GetChildByName(page_infos[1])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   572
            return notebook.GetPageIndex(confnode._OpenView(*page_infos[2:]))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   573
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   574
            return IDEFrame.LoadTab(self, notebook, page_infos)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   575
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   576
    # Strange hack required by WAMP connector, using twisted.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   577
    # Twisted reactor needs to be stopped only before quit,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   578
    # since it cannot be restarted
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   579
    ToDoBeforeQuit = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   580
    def AddToDoBeforeQuit(self, Thing):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   581
        self.ToDoBeforeQuit.append(Thing)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   582
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   583
    def OnCloseFrame(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   584
        for evt_type in [wx.EVT_SET_FOCUS,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   585
                         wx.EVT_KILL_FOCUS,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   586
                         wx.stc.EVT_STC_UPDATEUI]:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   587
            self.LogConsole.Unbind(evt_type)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   588
        if self.CTR is None or self.CheckSaveBeforeClosing(_("Close Application")):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   589
            if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   590
                self.CTR.KillDebugThread()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   591
            self.KillLocalRuntime()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   592
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   593
            self.SaveLastState()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   594
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   595
            for Thing in self.ToDoBeforeQuit :
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   596
                Thing()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   597
            self.ToDoBeforeQuit = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   598
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   599
            event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   600
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   601
            event.Veto()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   602
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   603
    def RefreshFileMenu(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   604
        self.RefreshRecentProjectsMenu()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   605
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   606
        MenuToolBar = self.Panes["MenuToolBar"]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   607
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   608
            selected = self.TabsOpened.GetSelection()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   609
            if selected >= 0:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   610
                window = self.TabsOpened.GetPage(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   611
                viewer_is_modified = window.IsModified()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   612
                is_viewer = isinstance(window, Viewer)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   613
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   614
                viewer_is_modified = is_viewer = False
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   615
            if self.TabsOpened.GetPageCount() > 0:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   616
                self.FileMenu.Enable(wx.ID_CLOSE, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   617
                if is_viewer:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   618
                    self.FileMenu.Enable(wx.ID_PREVIEW, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   619
                    self.FileMenu.Enable(wx.ID_PRINT, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   620
                    MenuToolBar.EnableTool(wx.ID_PRINT, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   621
                else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   622
                    self.FileMenu.Enable(wx.ID_PREVIEW, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   623
                    self.FileMenu.Enable(wx.ID_PRINT, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   624
                    MenuToolBar.EnableTool(wx.ID_PRINT, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   625
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   626
                self.FileMenu.Enable(wx.ID_CLOSE, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   627
                self.FileMenu.Enable(wx.ID_PREVIEW, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   628
                self.FileMenu.Enable(wx.ID_PRINT, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   629
                MenuToolBar.EnableTool(wx.ID_PRINT, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   630
            self.FileMenu.Enable(wx.ID_PAGE_SETUP, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   631
            project_modified = self.CTR.ProjectTestModified() or viewer_is_modified
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   632
            self.FileMenu.Enable(wx.ID_SAVE, project_modified)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   633
            MenuToolBar.EnableTool(wx.ID_SAVE, project_modified)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   634
            self.FileMenu.Enable(wx.ID_SAVEAS, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   635
            MenuToolBar.EnableTool(wx.ID_SAVEAS, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   636
            self.FileMenu.Enable(wx.ID_CLOSE_ALL, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   637
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   638
            self.FileMenu.Enable(wx.ID_CLOSE, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   639
            self.FileMenu.Enable(wx.ID_PAGE_SETUP, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   640
            self.FileMenu.Enable(wx.ID_PREVIEW, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   641
            self.FileMenu.Enable(wx.ID_PRINT, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   642
            MenuToolBar.EnableTool(wx.ID_PRINT, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   643
            self.FileMenu.Enable(wx.ID_SAVE, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   644
            MenuToolBar.EnableTool(wx.ID_SAVE, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   645
            self.FileMenu.Enable(wx.ID_SAVEAS, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   646
            MenuToolBar.EnableTool(wx.ID_SAVEAS, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   647
            self.FileMenu.Enable(wx.ID_CLOSE_ALL, False)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   648
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   649
    def RefreshRecentProjectsMenu(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   650
        try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   651
            recent_projects = map(DecodeFileSystemPath,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   652
                                  self.GetConfigEntry("RecentProjects", []))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   653
        except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   654
            recent_projects = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   655
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   656
        while self.RecentProjectsMenu.GetMenuItemCount() > len(recent_projects):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   657
            item = self.RecentProjectsMenu.FindItemByPosition(0)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   658
            self.RecentProjectsMenu.RemoveItem(item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   659
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   660
        self.FileMenu.Enable(ID_FILEMENURECENTPROJECTS, len(recent_projects) > 0)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   661
        for idx, projectpath in enumerate(recent_projects):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   662
            text = u'&%d: %s' % (idx + 1, projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   663
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   664
            if idx < self.RecentProjectsMenu.GetMenuItemCount():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   665
                item = self.RecentProjectsMenu.FindItemByPosition(idx)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   666
                id = item.GetId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   667
                item.SetItemLabel(text)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   668
                self.Disconnect(id, id, wx.EVT_BUTTON._getEvtType())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   669
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   670
                id = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   671
                AppendMenu(self.RecentProjectsMenu, help='', id=id,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   672
                           kind=wx.ITEM_NORMAL, text=text)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   673
            self.Bind(wx.EVT_MENU, self.GenerateOpenRecentProjectFunction(projectpath), id=id)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   674
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   675
    def GenerateOpenRecentProjectFunction(self, projectpath):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   676
        def OpenRecentProject(event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   677
            if self.CTR is not None and not self.CheckSaveBeforeClosing():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   678
                return
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   679
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   680
            self.OpenProject(projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   681
        return OpenRecentProject
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   682
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   683
    def GenerateMenuRecursive(self, items, menu):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   684
        for kind, infos in items:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   685
            if isinstance(kind, ListType):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   686
                text, id = infos
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   687
                submenu = wx.Menu('')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   688
                self.GenerateMenuRecursive(kind, submenu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   689
                menu.AppendMenu(id, text, submenu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   690
            elif kind == wx.ITEM_SEPARATOR:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   691
                menu.AppendSeparator()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   692
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   693
                text, id, help, callback = infos
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   694
                AppendMenu(menu, help='', id=id, kind=kind, text=text)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   695
                if callback is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   696
                    self.Bind(wx.EVT_MENU, callback, id=id)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   697
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   698
    def RefreshEditorToolBar(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   699
        IDEFrame.RefreshEditorToolBar(self)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   700
        self.AUIManager.GetPane("EditorToolBar").Position(2)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   701
        self.AUIManager.GetPane("StatusToolBar").Position(1)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   702
        self.AUIManager.Update()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   703
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   704
    def RefreshStatusToolBar(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   705
        StatusToolBar = self.Panes["StatusToolBar"]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   706
        StatusToolBar.ClearTools()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   707
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   708
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   709
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   710
            for confnode_method in self.CTR.StatusMethods:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   711
                if "method" in confnode_method and confnode_method.get("shown",True):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   712
                    id = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   713
                    StatusToolBar.AddSimpleTool(id,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   714
                        GetBitmap(confnode_method.get("bitmap", "Unknown")),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   715
                        confnode_method["tooltip"])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   716
                    self.Bind(wx.EVT_MENU, self.GetMenuCallBackFunction(confnode_method["method"]), id=id)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   717
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   718
            StatusToolBar.Realize()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   719
            self.AUIManager.GetPane("StatusToolBar").BestSize(StatusToolBar.GetBestSize()).Show()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   720
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   721
            self.AUIManager.GetPane("StatusToolBar").Hide()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   722
        self.AUIManager.GetPane("EditorToolBar").Position(2)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   723
        self.AUIManager.GetPane("StatusToolBar").Position(1)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   724
        self.AUIManager.Update()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   725
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   726
    def RefreshEditMenu(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   727
        IDEFrame.RefreshEditMenu(self)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   728
        if self.FindFocus() == self.LogConsole:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   729
            self.EditMenu.Enable(wx.ID_COPY, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   730
            self.Panes["MenuToolBar"].EnableTool(wx.ID_COPY, True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   731
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   732
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   733
            selected = self.TabsOpened.GetSelection()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   734
            if selected >= 0:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   735
                panel = self.TabsOpened.GetPage(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   736
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   737
                panel = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   738
            if panel != self.LastPanelSelected:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   739
                for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   740
                    item = self.EditMenu.FindItemByPosition(self.EditMenuSize)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   741
                    if item is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   742
                        if item.IsSeparator():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   743
                            self.EditMenu.RemoveItem(item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   744
                        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   745
                            self.EditMenu.Delete(item.GetId())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   746
                self.LastPanelSelected = panel
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   747
                if panel is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   748
                    items = panel.GetConfNodeMenuItems()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   749
                else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   750
                    items = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   751
                if len(items) > 0:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   752
                    self.EditMenu.AppendSeparator()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   753
                    self.GenerateMenuRecursive(items, self.EditMenu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   754
            if panel is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   755
                panel.RefreshConfNodeMenu(self.EditMenu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   756
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   757
            for i in xrange(self.EditMenuSize, self.EditMenu.GetMenuItemCount()):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   758
                item = self.EditMenu.FindItemByPosition(i)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   759
                if item is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   760
                    if item.IsSeparator():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   761
                        self.EditMenu.RemoveItem(item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   762
                    else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   763
                        self.EditMenu.Delete(item.GetId())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   764
            self.LastPanelSelected = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   765
        self.MenuBar.UpdateMenus()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   766
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   767
    def RefreshAll(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   768
        self.RefreshStatusToolBar()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   769
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   770
    def GetMenuCallBackFunction(self, method):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   771
        """ Generate the callbackfunc for a given CTR method"""
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   772
        def OnMenu(event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   773
            # Disable button to prevent re-entrant call
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   774
            event.GetEventObject().Disable()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   775
            # Call
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   776
            getattr(self.CTR, method)()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   777
            # Re-enable button
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   778
            event.GetEventObject().Enable()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   779
        return OnMenu
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   780
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   781
    def GetConfigEntry(self, entry_name, default):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   782
        return cPickle.loads(str(self.Config.Read(entry_name, cPickle.dumps(default))))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   783
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   784
    def ResetConnectionStatusBar(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   785
        for field in xrange(self.ConnectionStatusBar.GetFieldsCount()):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   786
            self.ConnectionStatusBar.SetStatusText('', field)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   787
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   788
    def ResetView(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   789
        IDEFrame.ResetView(self)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   790
        self.ConfNodeInfos = {}
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   791
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   792
            self.CTR.CloseProject()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   793
        self.CTR = None
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   794
        self.Log.flush()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   795
        if self.EnableDebug:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   796
            self.DebugVariablePanel.SetDataProducer(None)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   797
            self.ResetConnectionStatusBar()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   798
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   799
    def RefreshConfigRecentProjects(self, projectpath, err=False):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   800
        try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   801
            recent_projects = map(DecodeFileSystemPath,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   802
                                  self.GetConfigEntry("RecentProjects", []))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   803
        except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   804
            recent_projects = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   805
        if projectpath in recent_projects:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   806
            recent_projects.remove(projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   807
        if not err:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   808
            recent_projects.insert(0, projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   809
        self.Config.Write("RecentProjects", cPickle.dumps(
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   810
            map(EncodeFileSystemPath, recent_projects[:MAX_RECENT_PROJECTS])))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   811
        self.Config.Flush()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   812
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   813
    def ResetPerspective(self):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   814
        IDEFrame.ResetPerspective(self)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   815
        self.RefreshStatusToolBar()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   816
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   817
    def OnNewProjectMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   818
        if self.CTR is not None and not self.CheckSaveBeforeClosing():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   819
            return
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   820
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   821
        try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   822
            defaultpath = DecodeFileSystemPath(self.Config.Read("lastopenedfolder"))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   823
        except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   824
            defaultpath = os.path.expanduser("~")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   825
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   826
        dialog = wx.DirDialog(self , _("Choose a project"), defaultpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   827
        if dialog.ShowModal() == wx.ID_OK:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   828
            projectpath = dialog.GetPath()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   829
            self.Config.Write("lastopenedfolder",
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   830
                              EncodeFileSystemPath(os.path.dirname(projectpath)))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   831
            self.Config.Flush()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   832
            self.ResetView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   833
            ctr = ProjectController(self, self.Log)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   834
            result = ctr.NewProject(projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   835
            if not result:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   836
                self.CTR = ctr
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   837
                self.Controler = self.CTR
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   838
                self.LibraryPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   839
                self.ProjectTree.Enable(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   840
                self.PouInstanceVariablesPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   841
                self.RefreshConfigRecentProjects(projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   842
                if self.EnableDebug:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   843
                    self.DebugVariablePanel.SetDataProducer(self.CTR)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   844
                self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   845
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   846
                self.ResetView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   847
                self.ShowErrorMessage(result)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   848
            self.RefreshAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   849
            self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   850
        dialog.Destroy()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   851
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   852
    def OnOpenProjectMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   853
        if self.CTR is not None and not self.CheckSaveBeforeClosing():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   854
            return
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   855
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   856
        try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   857
            defaultpath = DecodeFileSystemPath(self.Config.Read("lastopenedfolder"))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   858
        except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   859
            defaultpath = os.path.expanduser("~")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   860
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   861
        dialog = wx.DirDialog(self , _("Choose a project"), defaultpath, style=wx.DEFAULT_DIALOG_STYLE|
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   862
                                                                               wx.RESIZE_BORDER)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   863
        if dialog.ShowModal() == wx.ID_OK:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   864
            self.OpenProject(dialog.GetPath())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   865
        dialog.Destroy()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   866
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   867
    def OpenProject(self, projectpath):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   868
        if os.path.isdir(projectpath):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   869
            self.Config.Write("lastopenedfolder",
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   870
                              EncodeFileSystemPath(os.path.dirname(projectpath)))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   871
            self.Config.Flush()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   872
            self.ResetView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   873
            self.CTR = ProjectController(self, self.Log)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   874
            self.Controler = self.CTR
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   875
            result, err = self.CTR.LoadProject(projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   876
            if not result:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   877
                self.LibraryPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   878
                self.ProjectTree.Enable(True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   879
                self.PouInstanceVariablesPanel.SetController(self.Controler)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   880
                if self.EnableDebug:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   881
                    self.DebugVariablePanel.SetDataProducer(self.CTR)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   882
                self._Refresh(PROJECTTREE, POUINSTANCEVARIABLESPANEL, LIBRARYTREE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   883
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   884
                self.ResetView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   885
                self.ShowErrorMessage(result)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   886
            self.RefreshAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   887
            self.SearchResultPanel.ResetSearchResults()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   888
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   889
            self.ShowErrorMessage(_("\"%s\" folder is not a valid Beremiz project\n") % projectpath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   890
            err = True
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   891
        self.RefreshConfigRecentProjects(projectpath, err)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   892
        self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   893
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   894
    def OnCloseProjectMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   895
        if self.CTR is not None and not self.CheckSaveBeforeClosing():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   896
            return
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   897
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   898
        self.ResetView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   899
        self._Refresh(TITLE, EDITORTOOLBAR, FILEMENU, EDITMENU)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   900
        self.RefreshAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   901
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   902
    def OnSaveProjectMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   903
        selected = self.TabsOpened.GetSelection()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   904
        if selected != -1:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   905
            window = self.TabsOpened.GetPage(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   906
            window.Save()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   907
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   908
            self.CTR.SaveProject()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   909
            self.RefreshAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   910
            self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   911
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   912
    def OnSaveProjectAsMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   913
        selected = self.TabsOpened.GetSelection()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   914
        if selected != -1:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   915
            window = self.TabsOpened.GetPage(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   916
            window.SaveAs()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   917
        if self.CTR is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   918
            self.CTR.SaveProjectAs()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   919
            self.RefreshAll()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   920
            self.RefreshConfigRecentProjects(self.CTR.ProjectPath)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   921
            self._Refresh(TITLE, FILEMENU, EDITMENU, PAGETITLES)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   922
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   923
    def OnQuitMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   924
        self.Close()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   925
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   926
    def OnAboutMenu(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   927
        info = version.GetAboutDialogInfo()        
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   928
        ShowAboutDialog(self, info)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   929
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   930
    def OnProjectTreeItemBeginEdit(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   931
        selected = event.GetItem()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   932
        if self.ProjectTree.GetPyData(selected)["type"] == ITEM_CONFNODE:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   933
            event.Veto()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   934
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   935
            IDEFrame.OnProjectTreeItemBeginEdit(self, event)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   936
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   937
    def OnProjectTreeRightUp(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   938
        item = event.GetItem()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   939
        item_infos = self.ProjectTree.GetPyData(item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   940
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   941
        if item_infos["type"] == ITEM_CONFNODE:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   942
            confnode_menu = wx.Menu(title='')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   943
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   944
            confnode = item_infos["confnode"]
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   945
            if confnode is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   946
                menu_items = confnode.GetContextualMenuItems()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   947
                if menu_items is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   948
                    for text, help, callback in menu_items:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   949
                        new_id = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   950
                        confnode_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=text)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   951
                        self.Bind(wx.EVT_MENU, callback, id=new_id)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   952
                else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   953
                    for name, XSDClass, help in confnode.CTNChildrenTypes:
1684
1447424a7029 remove child node from add child node menu, if max count of the same type nodes reached
Surkov Sergey <surkovsv93@gmail.com>
parents: 1680
diff changeset
   954
                        if not hasattr(XSDClass, 'CTNMaxCount') or not confnode.Children.get(name) \
1447424a7029 remove child node from add child node menu, if max count of the same type nodes reached
Surkov Sergey <surkovsv93@gmail.com>
parents: 1680
diff changeset
   955
                                or len(confnode.Children[name]) < XSDClass.CTNMaxCount:
1447424a7029 remove child node from add child node menu, if max count of the same type nodes reached
Surkov Sergey <surkovsv93@gmail.com>
parents: 1680
diff changeset
   956
                            new_id = wx.NewId()
1447424a7029 remove child node from add child node menu, if max count of the same type nodes reached
Surkov Sergey <surkovsv93@gmail.com>
parents: 1680
diff changeset
   957
                            confnode_menu.Append(help=help, id=new_id, kind=wx.ITEM_NORMAL, text=_("Add") + " " + name)
1447424a7029 remove child node from add child node menu, if max count of the same type nodes reached
Surkov Sergey <surkovsv93@gmail.com>
parents: 1680
diff changeset
   958
                            self.Bind(wx.EVT_MENU, self.GetAddConfNodeFunction(name, confnode), id=new_id)
1662
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   959
            new_id = wx.NewId()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   960
            AppendMenu(confnode_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Delete"))
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   961
            self.Bind(wx.EVT_MENU, self.GetDeleteMenuFunction(confnode), id=new_id)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   962
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   963
            self.PopupMenu(confnode_menu)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   964
            confnode_menu.Destroy()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   965
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   966
            event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   967
        elif item_infos["type"] == ITEM_RESOURCE:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   968
            # prevent last resource to be delted
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   969
            parent = self.ProjectTree.GetItemParent(item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   970
            parent_name = self.ProjectTree.GetItemText(parent)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   971
            if parent_name == _("Resources"):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   972
                IDEFrame.OnProjectTreeRightUp(self, event)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   973
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   974
            IDEFrame.OnProjectTreeRightUp(self, event)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   975
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   976
    def OnProjectTreeItemActivated(self, event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   977
        selected = event.GetItem()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   978
        name = self.ProjectTree.GetItemText(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   979
        item_infos = self.ProjectTree.GetPyData(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   980
        if item_infos["type"] == ITEM_CONFNODE:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   981
            item_infos["confnode"]._OpenView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   982
            event.Skip()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   983
        elif item_infos["type"] == ITEM_PROJECT:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   984
            self.CTR._OpenView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   985
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   986
            IDEFrame.OnProjectTreeItemActivated(self, event)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   987
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   988
    def ProjectTreeItemSelect(self, select_item):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   989
        if select_item is not None and select_item.IsOk():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   990
            name = self.ProjectTree.GetItemText(select_item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   991
            item_infos = self.ProjectTree.GetPyData(select_item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   992
            if item_infos["type"] == ITEM_CONFNODE:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   993
                item_infos["confnode"]._OpenView(onlyopened=True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   994
            elif item_infos["type"] == ITEM_PROJECT:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   995
                self.CTR._OpenView(onlyopened=True)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   996
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   997
                IDEFrame.ProjectTreeItemSelect(self, select_item)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   998
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
   999
    def SelectProjectTreeItem(self, tagname):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1000
        if self.ProjectTree is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1001
            root = self.ProjectTree.GetRootItem()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1002
            if root.IsOk():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1003
                words = tagname.split("::")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1004
                if len(words) == 1:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1005
                    if tagname == "Project":
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1006
                        self.SelectedItem = root
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1007
                        self.ProjectTree.SelectItem(root)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1008
                        self.ResetSelectedItem()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1009
                    else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1010
                        return self.RecursiveProjectTreeItemSelection(root,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1011
                              [(word, ITEM_CONFNODE) for word in tagname.split(".")])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1012
                elif words[0] == "R":
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1013
                    return self.RecursiveProjectTreeItemSelection(root, [(words[2], ITEM_RESOURCE)])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1014
                elif not os.path.exists(words[0]):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1015
                    IDEFrame.SelectProjectTreeItem(self, tagname)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1016
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1017
    def GetAddConfNodeFunction(self, name, confnode=None):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1018
        def AddConfNodeMenuFunction(event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1019
            wx.CallAfter(self.AddConfNode, name, confnode)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1020
        return AddConfNodeMenuFunction
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1021
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1022
    def GetDeleteMenuFunction(self, confnode):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1023
        def DeleteMenuFunction(event):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1024
            wx.CallAfter(self.DeleteConfNode, confnode)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1025
        return DeleteMenuFunction
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1026
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1027
    def AddConfNode(self, ConfNodeType, confnode=None):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1028
        if self.CTR.CheckProjectPathPerm():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1029
            ConfNodeName = "%s_0" % ConfNodeType
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1030
            if confnode is not None:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1031
                confnode.CTNAddChild(ConfNodeName, ConfNodeType)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1032
            else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1033
                self.CTR.CTNAddChild(ConfNodeName, ConfNodeType)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1034
            self._Refresh(TITLE, FILEMENU, PROJECTTREE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1035
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1036
    def DeleteConfNode(self, confnode):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1037
        if self.CTR.CheckProjectPathPerm():
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1038
            dialog = wx.MessageDialog(self,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1039
                _("Really delete node '%s'?") % confnode.CTNName(),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1040
                _("Remove %s node") % confnode.CTNType,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1041
                wx.YES_NO|wx.NO_DEFAULT)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1042
            if dialog.ShowModal() == wx.ID_YES:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1043
                confnode.CTNRemove()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1044
                del confnode
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1045
                self._Refresh(TITLE, FILEMENU, PROJECTTREE)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1046
            dialog.Destroy()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1047
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1048
#-------------------------------------------------------------------------------
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1049
#                        Highlights showing functions
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1050
#-------------------------------------------------------------------------------
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1051
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1052
    def ShowHighlight(self, infos, start, end, highlight_type):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1053
        config_name = self.Controler.GetProjectMainConfigurationName()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1054
        if config_name is not None and infos[0] == self.Controler.ComputeConfigurationName(config_name):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1055
            self.CTR._OpenView()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1056
            selected = self.TabsOpened.GetSelection()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1057
            if selected != -1:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1058
                viewer = self.TabsOpened.GetPage(selected)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1059
                viewer.AddHighlight(infos[1:], start, end, highlight_type)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1060
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1061
            IDEFrame.ShowHighlight(self, infos, start, end, highlight_type)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1062
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1063
#-------------------------------------------------------------------------------
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1064
#                               Exception Handler
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1065
#-------------------------------------------------------------------------------
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1066
import threading, traceback
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1067
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1068
Max_Traceback_List_Size = 20
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1069
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1070
def Display_Exception_Dialog(e_type, e_value, e_tb, bug_report_path):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1071
    trcbck_lst = []
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1072
    for i,line in enumerate(traceback.extract_tb(e_tb)):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1073
        trcbck = " " + str(i+1) + ". "
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1074
        if line[0].find(os.getcwd()) == -1:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1075
            trcbck += "file : " + str(line[0]) + ",   "
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1076
        else:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1077
            trcbck += "file : " + str(line[0][len(os.getcwd()):]) + ",   "
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1078
        trcbck += "line : " + str(line[1]) + ",   " + "function : " + str(line[2])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1079
        trcbck_lst.append(trcbck)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1080
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1081
    # Allow clicking....
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1082
    cap = wx.Window_GetCapture()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1083
    if cap:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1084
        cap.ReleaseMouse()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1085
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1086
    dlg = wx.SingleChoiceDialog(None,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1087
        _("""
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1088
An unhandled exception (bug) occured. Bug report saved at :
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1089
(%s)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1090
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1091
Please be kind enough to send this file to:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1092
beremiz-devel@lists.sourceforge.net
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1093
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1094
You should now restart program.
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1095
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1096
Traceback:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1097
""") % bug_report_path +
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1098
        repr(e_type) + " : " + repr(e_value),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1099
        _("Error"),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1100
        trcbck_lst)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1101
    try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1102
        res = (dlg.ShowModal() == wx.ID_OK)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1103
    finally:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1104
        dlg.Destroy()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1105
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1106
    return res
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1107
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1108
def get_last_traceback(tb):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1109
    while tb.tb_next:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1110
        tb = tb.tb_next
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1111
    return tb
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1112
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1113
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1114
def format_namespace(d, indent='    '):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1115
    return '\n'.join(['%s%s: %s' % (indent, k, repr(v)[:10000]) for k, v in d.iteritems()])
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1116
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1117
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1118
ignored_exceptions = [] # a problem with a line in a module is only reported once per session
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1119
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1120
def AddExceptHook(path, app_version='[No version]'):#, ignored_exceptions=[]):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1121
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1122
    def save_bug_report(e_type, e_value, e_traceback, bug_report_path,date):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1123
        info = {
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1124
            'app-title': wx.GetApp().GetAppName(),  # app_title
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1125
            'app-version': app_version,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1126
            'wx-version': wx.VERSION_STRING,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1127
            'wx-platform': wx.Platform,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1128
            'python-version': platform.python_version(),  # sys.version.split()[0],
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1129
            'platform': platform.platform(),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1130
            'e-type': e_type,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1131
            'e-value': e_value,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1132
            'date': date,
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1133
            'cwd': os.getcwd(),
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1134
        }
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1135
        if e_traceback:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1136
            info['traceback'] = ''.join(traceback.format_tb(e_traceback)) + '%s: %s' % (e_type, e_value)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1137
            last_tb = get_last_traceback(e_traceback)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1138
            exception_locals = last_tb.tb_frame.f_locals  # the locals at the level of the stack trace where the exception actually occurred
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1139
            info['locals'] = format_namespace(exception_locals)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1140
            if 'self' in exception_locals:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1141
                try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1142
                    info['self'] = format_namespace(exception_locals['self'].__dict__)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1143
                except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1144
                    pass
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1145
        if not os.path.exists(path):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1146
            os.mkdir(path)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1147
        output = open(bug_report_path, 'w')
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1148
        lst = info.keys()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1149
        lst.sort()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1150
        for a in lst:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1151
            output.write(a + ":\n" + str(info[a]) + "\n\n")
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1152
        output.close()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1153
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1154
    def handle_exception(e_type, e_value, e_traceback):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1155
        traceback.print_exception(e_type, e_value, e_traceback) # this is very helpful when there's an exception in the rest of this func
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1156
        last_tb = get_last_traceback(e_traceback)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1157
        ex = (last_tb.tb_frame.f_code.co_filename, last_tb.tb_frame.f_lineno)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1158
        if ex not in ignored_exceptions:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1159
            ignored_exceptions.append(ex)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1160
            date = time.ctime()
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1161
            bug_report_path = path + os.sep + "bug_report_" + date.replace(':', '-').replace(' ', '_') + ".txt"
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1162
            save_bug_report(e_type, e_value, e_traceback, bug_report_path, date)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1163
            Display_Exception_Dialog(e_type, e_value, e_traceback, bug_report_path)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1164
    #sys.excepthook = lambda *args: wx.CallAfter(handle_exception, *args)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1165
    sys.excepthook = handle_exception
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1166
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1167
    init_old = threading.Thread.__init__
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1168
    def init(self, *args, **kwargs):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1169
        init_old(self, *args, **kwargs)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1170
        run_old = self.run
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1171
        def run_with_except_hook(*args, **kw):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1172
            try:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1173
                run_old(*args, **kw)
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1174
            except (KeyboardInterrupt, SystemExit):
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1175
                raise
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1176
            except:
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1177
                sys.excepthook(*sys.exc_info())
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1178
        self.run = run_with_except_hook
8816f7316d9c rename Beremiz.py to BeremizIDE.py
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents:
diff changeset
  1179
    threading.Thread.__init__ = init