controls/DebugVariablePanel/DebugVariablePanel.py
author Laurent Bessard
Wed, 29 May 2013 22:27:20 +0200
changeset 1193 59c196884fec
parent 1192 controls/DebugVariablePanel.py@d8783c0c7d80
child 1194 0cf48602ee24
permissions -rw-r--r--
Moved and start to rewrite DebugVariablePanel splitting it into multiple files
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     1
#!/usr/bin/env python
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     3
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     4
#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     5
#based on the plcopen standard. 
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     6
#
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     7
#Copyright (C) 2012: Edouard TISSERANT and Laurent BESSARD
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     8
#
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
     9
#See COPYING file for copyrights details.
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    10
#
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    11
#This library is free software; you can redistribute it and/or
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    12
#modify it under the terms of the GNU General Public
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    13
#License as published by the Free Software Foundation; either
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    14
#version 2.1 of the License, or (at your option) any later version.
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    15
#
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    16
#This library is distributed in the hope that it will be useful,
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    17
#but WITHOUT ANY WARRANTY; without even the implied warranty of
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    18
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    19
#General Public License for more details.
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    20
#
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    21
#You should have received a copy of the GNU General Public
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    22
#License along with this library; if not, write to the Free Software
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    23
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    24
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
    25
from types import TupleType, ListType, FloatType
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    26
from time import time as gettime
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
    27
import math
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    28
import numpy
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    29
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    30
import wx
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    31
import wx.lib.buttons
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    32
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    33
try:
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    34
    import matplotlib
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    35
    matplotlib.use('WX')
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    36
    import matplotlib.pyplot
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
    37
    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
    38
    from matplotlib.backends.backend_wxagg import _convert_agg_to_wx_bitmap
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
    39
    from matplotlib.backends.backend_agg import FigureCanvasAgg
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    40
    from mpl_toolkits.mplot3d import Axes3D
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
    41
    color_cycle = ['r', 'b', 'g', 'm', 'y', 'k']
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
    42
    cursor_color = '#800080'
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    43
    USE_MPL = True
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    44
except:
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
    45
    USE_MPL = False
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    46
1176
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1174
diff changeset
    47
from graphics.DebugDataConsumer import DebugDataConsumer
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1174
diff changeset
    48
from editors.DebugViewer import DebugViewer, REFRESH_PERIOD
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    49
from controls import CustomGrid, CustomTable
1193
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
    50
from controls.DebugVariablePanel.DebugVariableItem import DebugVariableItem
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    51
from dialogs.ForceVariableDialog import ForceVariableDialog
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    52
from util.BitmapLibrary import GetBitmap
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    53
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    54
def AppendMenu(parent, help, id, kind, text):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    55
    parent.Append(help=help, id=id, kind=kind, text=text)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    56
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    57
def GetDebugVariablesTableColnames():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    58
    _ = lambda x : x
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
    59
    return [_("Variable"), _("Value")]
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
    60
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    61
class DebugVariableTable(CustomTable):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    62
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    63
    def GetValue(self, row, col):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    64
        if row < self.GetNumberRows():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    65
            return self.GetValueByName(row, self.GetColLabelValue(col, False))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    66
        return ""
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    67
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    68
    def SetValue(self, row, col, value):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    69
        if col < len(self.colnames):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    70
            self.SetValueByName(row, self.GetColLabelValue(col, False), value)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    71
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    72
    def GetValueByName(self, row, colname):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    73
        if row < self.GetNumberRows():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    74
            if colname == "Variable":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    75
                return self.data[row].GetVariable()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    76
            elif colname == "Value":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    77
                return self.data[row].GetValue()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    78
        return ""
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    79
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    80
    def SetValueByName(self, row, colname, value):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    81
        if row < self.GetNumberRows():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    82
            if colname == "Variable":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    83
                self.data[row].SetVariable(value)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    84
            elif colname == "Value":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    85
                self.data[row].SetValue(value)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    86
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    87
    def IsForced(self, row):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    88
        if row < self.GetNumberRows():
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    89
            return self.data[row].IsForced()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    90
        return False
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    91
    
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    92
    def IsNumVariable(self, row):
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    93
        if row < self.GetNumberRows():
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    94
            return self.data[row].IsNumVariable()
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    95
        return False
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
    96
    
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    97
    def _updateColAttrs(self, grid):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    98
        """
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
    99
        wx.grid.Grid -> update the column attributes to add the
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   100
        appropriate renderer given the column name.
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   101
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   102
        Otherwise default to the default renderer.
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   103
        """
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   104
        
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   105
        for row in range(self.GetNumberRows()):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   106
            for col in range(self.GetNumberCols()):
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
   107
                colname = self.GetColLabelValue(col, False)
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   108
                if colname == "Value":
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   109
                    if self.IsForced(row):
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   110
                        grid.SetCellTextColour(row, col, wx.BLUE)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   111
                    else:
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   112
                        grid.SetCellTextColour(row, col, wx.BLACK)
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   113
                grid.SetReadOnly(row, col, True)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   114
            self.ResizeRow(grid, row)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   115
                
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   116
    def AppendItem(self, data):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   117
        self.data.append(data)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   118
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   119
    def InsertItem(self, idx, data):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   120
        self.data.insert(idx, data)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   121
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   122
    def RemoveItem(self, idx):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   123
        self.data.pop(idx)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   124
    
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   125
    def MoveItem(self, idx, new_idx):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   126
        self.data.insert(new_idx, self.data.pop(idx))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   127
        
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   128
    def GetItem(self, idx):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   129
        return self.data[idx]
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   130
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   131
class DebugVariableDropTarget(wx.TextDropTarget):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   132
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   133
    def __init__(self, parent, control=None):
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   134
        wx.TextDropTarget.__init__(self)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   135
        self.ParentWindow = parent
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   136
        self.ParentControl = control
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   137
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   138
    def __del__(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   139
        self.ParentWindow = None
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   140
        self.ParentControl = None
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   141
    
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   142
    def OnDragOver(self, x, y, d):
1008
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   143
        if not isinstance(self.ParentControl, CustomGrid):
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   144
            if self.ParentControl is not None:
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   145
                self.ParentControl.OnMouseDragging(x, y)
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   146
            else:
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   147
                self.ParentWindow.RefreshHighlight(x, y)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   148
        return wx.TextDropTarget.OnDragOver(self, x, y, d)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   149
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   150
    def OnDropText(self, x, y, data):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   151
        message = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   152
        try:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   153
            values = eval(data)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   154
        except:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   155
            message = _("Invalid value \"%s\" for debug variable")%data
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   156
            values = None
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   157
        if not isinstance(values, TupleType):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   158
            message = _("Invalid value \"%s\" for debug variable")%data
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   159
            values = None
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   160
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   161
        if message is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   162
            wx.CallAfter(self.ShowMessage, message)
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   163
        elif values is not None and values[1] == "debug":
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   164
            if isinstance(self.ParentControl, CustomGrid):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   165
                x, y = self.ParentControl.CalcUnscrolledPosition(x, y)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   166
                row = self.ParentControl.YToRow(y - self.ParentControl.GetColLabelSize())
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   167
                if row == wx.NOT_FOUND:
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   168
                    row = self.ParentWindow.Table.GetNumberRows()
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   169
                self.ParentWindow.InsertValue(values[0], row, force=True)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   170
            elif self.ParentControl is not None:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   171
                width, height = self.ParentControl.GetSize()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   172
                target_idx = self.ParentControl.GetIndex()
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
   173
                merge_type = GRAPH_PARALLEL
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   174
                if isinstance(self.ParentControl, DebugVariableGraphic):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   175
                    if self.ParentControl.Is3DCanvas():
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   176
                        if y > height / 2:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   177
                            target_idx += 1
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   178
                        if len(values) > 1 and values[2] == "move":
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   179
                            self.ParentWindow.MoveValue(values[0], target_idx)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   180
                        else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   181
                            self.ParentWindow.InsertValue(values[0], target_idx, force=True)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   182
                        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   183
                    else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   184
                        rect = self.ParentControl.GetAxesBoundingBox()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   185
                        if rect.InsideXY(x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   186
                            merge_rect = wx.Rect(rect.x, rect.y, rect.width / 2., rect.height)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   187
                            if merge_rect.InsideXY(x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   188
                                merge_type = GRAPH_ORTHOGONAL
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   189
                            wx.CallAfter(self.ParentWindow.MergeGraphs, values[0], target_idx, merge_type, force=True)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   190
                        else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   191
                            if y > height / 2:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   192
                                target_idx += 1
952
c1f901403a34 Fixed bug when drag'n dropping variables from left panel
Laurent Bessard
parents: 946
diff changeset
   193
                            if len(values) > 2 and values[2] == "move":
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   194
                                self.ParentWindow.MoveValue(values[0], target_idx)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   195
                            else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   196
                                self.ParentWindow.InsertValue(values[0], target_idx, force=True)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   197
                else:
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
   198
                    if y > height / 2:
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
   199
                        target_idx += 1
952
c1f901403a34 Fixed bug when drag'n dropping variables from left panel
Laurent Bessard
parents: 946
diff changeset
   200
                    if len(values) > 2 and values[2] == "move":
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   201
                        self.ParentWindow.MoveValue(values[0], target_idx)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   202
                    else:
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   203
                        self.ParentWindow.InsertValue(values[0], target_idx, force=True)
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   204
                    
952
c1f901403a34 Fixed bug when drag'n dropping variables from left panel
Laurent Bessard
parents: 946
diff changeset
   205
            elif len(values) > 2 and values[2] == "move":
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   206
                self.ParentWindow.MoveValue(values[0])
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   207
            else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   208
                self.ParentWindow.InsertValue(values[0], force=True)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   209
    
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   210
    def OnLeave(self):
1008
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   211
        if not isinstance(self.ParentControl, CustomGrid):
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
   212
            self.ParentWindow.ResetHighlight()
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   213
        return wx.TextDropTarget.OnLeave(self)
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
   214
    
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   215
    def ShowMessage(self, message):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   216
        dialog = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   217
        dialog.ShowModal()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   218
        dialog.Destroy()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
   219
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   220
if USE_MPL:
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
   221
    MILLISECOND = 1000000
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
   222
    SECOND = 1000 * MILLISECOND
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   223
    MINUTE = 60 * SECOND
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   224
    HOUR = 60 * MINUTE
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
   225
    DAY = 24 * HOUR
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   226
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   227
    ZOOM_VALUES = map(lambda x:("x %.1f" % x, x), [math.sqrt(2) ** i for i in xrange(8)])
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
   228
    RANGE_VALUES = \
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
   229
        [("%dms" % i, i * MILLISECOND) for i in (10, 20, 50, 100, 200, 500)] + \
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
   230
        [("%ds" % i, i * SECOND) for i in (1, 2, 5, 10, 20, 30)] + \
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
   231
        [("%dm" % i, i * MINUTE) for i in (1, 2, 5, 10, 20, 30)] + \
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
   232
        [("%dh" % i, i * HOUR) for i in (1, 2, 3, 6, 12, 24)]
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   233
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   234
    GRAPH_PARALLEL, GRAPH_ORTHOGONAL = range(2)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   235
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   236
    SCROLLBAR_UNIT = 10
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   237
    
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   238
    #CANVAS_HIGHLIGHT_TYPES
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   239
    [HIGHLIGHT_NONE,
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   240
     HIGHLIGHT_BEFORE,
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   241
     HIGHLIGHT_AFTER,
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   242
     HIGHLIGHT_LEFT,
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   243
     HIGHLIGHT_RIGHT,
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   244
     HIGHLIGHT_RESIZE] = range(6)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   245
    
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   246
    HIGHLIGHT_DROP_PEN = wx.Pen(wx.Colour(0, 128, 255))
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   247
    HIGHLIGHT_DROP_BRUSH = wx.Brush(wx.Colour(0, 128, 255, 128))
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   248
    HIGHLIGHT_RESIZE_PEN = wx.Pen(wx.Colour(200, 200, 200))
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   249
    HIGHLIGHT_RESIZE_BRUSH = wx.Brush(wx.Colour(200, 200, 200))
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   250
    
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   251
    #CANVAS_SIZE_TYPES
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   252
    [SIZE_MINI, SIZE_MIDDLE, SIZE_MAXI] = [0, 100, 200]
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   253
    
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   254
    DEFAULT_CANVAS_HEIGHT = 200.
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   255
    CANVAS_BORDER = (20., 10.)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   256
    CANVAS_PADDING = 8.5
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   257
    VALUE_LABEL_HEIGHT = 17.
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   258
    AXES_LABEL_HEIGHT = 12.75
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   259
    
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   260
    def compute_mask(x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   261
        mask = []
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   262
        for xp, yp in zip(x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   263
            if xp == yp:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   264
                mask.append(xp)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   265
            else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   266
                mask.append("*")
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   267
        return mask
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   268
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   269
    def NextTick(variables):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   270
        next_tick = None
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
   271
        for item, data in variables:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   272
            if len(data) > 0:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   273
                if next_tick is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   274
                    next_tick = data[0][0]
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   275
                else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   276
                    next_tick = min(next_tick, data[0][0])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   277
        return next_tick
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   278
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   279
    def OrthogonalData(item, start_tick, end_tick):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   280
        data = item.GetData(start_tick, end_tick)
1193
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
   281
        min_value, max_value = item.GetValueRange()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   282
        if min_value is not None and max_value is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   283
            center = (min_value + max_value) / 2.
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   284
            range = max(1.0, max_value - min_value)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   285
        else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   286
            center = 0.5
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   287
            range = 1.0
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   288
        return data, center - range * 0.55, center + range * 0.55
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   289
    
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   290
    class GraphButton():
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   291
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   292
        def __init__(self, x, y, bitmap, callback):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   293
            self.Position = wx.Point(x, y)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   294
            self.Bitmap = bitmap
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   295
            self.Shown = True
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   296
            self.Enabled = True
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   297
            self.Callback = callback
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   298
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   299
        def __del__(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   300
            self.callback = None
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   301
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   302
        def GetSize(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   303
            return self.Bitmap.GetSize()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   304
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   305
        def SetPosition(self, x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   306
            self.Position = wx.Point(x, y)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   307
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   308
        def Show(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   309
            self.Shown = True
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   310
            
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   311
        def Hide(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   312
            self.Shown = False
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   313
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   314
        def IsShown(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   315
            return self.Shown
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   316
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   317
        def Enable(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   318
            self.Enabled = True
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   319
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   320
        def Disable(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   321
            self.Enabled = False
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   322
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   323
        def IsEnabled(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   324
            return self.Enabled
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   325
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   326
        def HitTest(self, x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   327
            if self.Shown and self.Enabled:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   328
                w, h = self.Bitmap.GetSize()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   329
                rect = wx.Rect(self.Position.x, self.Position.y, w, h)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   330
                if rect.InsideXY(x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   331
                    return True
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   332
            return False
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   333
        
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   334
        def ProcessCallback(self):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   335
            if self.Callback is not None:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   336
                wx.CallAfter(self.Callback)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   337
                
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   338
        def Draw(self, dc):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   339
            if self.Shown and self.Enabled:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   340
                dc.DrawBitmap(self.Bitmap, self.Position.x, self.Position.y, True)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   341
    
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   342
    class DebugVariableViewer:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   343
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   344
        def __init__(self, window, items=[]):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   345
            self.ParentWindow = window
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   346
            self.Items = items
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   347
            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   348
            self.Highlight = HIGHLIGHT_NONE
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   349
            self.Buttons = []
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   350
        
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   351
        def __del__(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   352
            self.ParentWindow = None
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   353
        
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   354
        def GetIndex(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   355
            return self.ParentWindow.GetViewerIndex(self)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   356
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   357
        def GetItem(self, variable):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   358
            for item in self.Items:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   359
                if item.GetVariable() == variable:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   360
                    return item
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   361
            return None
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   362
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   363
        def GetItems(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   364
            return self.Items
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   365
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   366
        def GetVariables(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   367
            if len(self.Items) > 1:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   368
                variables = [item.GetVariable() for item in self.Items]
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   369
                if self.GraphType == GRAPH_ORTHOGONAL:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   370
                    return tuple(variables)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   371
                return variables
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   372
            return self.Items[0].GetVariable()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   373
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   374
        def AddItem(self, item):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   375
            self.Items.append(item)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   376
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   377
        def RemoveItem(self, item):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   378
            if item in self.Items:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   379
                self.Items.remove(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   380
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   381
        def Clear(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   382
            for item in self.Items:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   383
                self.ParentWindow.RemoveDataConsumer(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   384
            self.Items = []
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   385
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   386
        def IsEmpty(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   387
            return len(self.Items) == 0
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   388
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   389
        def UnregisterObsoleteData(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   390
            for item in self.Items[:]:
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
   391
                iec_path = item.GetVariable()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   392
                if self.ParentWindow.GetDataType(iec_path) is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   393
                    self.ParentWindow.RemoveDataConsumer(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   394
                    self.RemoveItem(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   395
                else:
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
   396
                    self.ParentWindow.AddDataConsumer(iec_path.upper(), item)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   397
                    item.RefreshVariableType()
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   398
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   399
        def ResetData(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   400
            for item in self.Items:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   401
                item.ResetData()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   402
        
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   403
        def RefreshViewer(self):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   404
            pass
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   405
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   406
        def SetHighlight(self, highlight):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   407
            if self.Highlight != highlight:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   408
                self.Highlight = highlight
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   409
                return True
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   410
            return False
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   411
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   412
        def GetButtons(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   413
            return self.Buttons
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   414
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   415
        def HandleButtons(self, x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   416
            for button in self.GetButtons():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   417
                if button.HitTest(x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   418
                    button.ProcessCallback()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   419
                    return True
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   420
            return False
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   421
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   422
        def IsOverButton(self, x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   423
            for button in self.GetButtons():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   424
                if button.HitTest(x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   425
                    return True
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   426
            return False
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   427
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   428
        def ShowButtons(self, show):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   429
            for button in self.Buttons:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   430
                if show:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   431
                    button.Show()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   432
                else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   433
                    button.Hide()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   434
            self.RefreshButtonsState()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   435
            self.ParentWindow.ForceRefresh()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   436
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   437
        def RefreshButtonsState(self, refresh_positions=False):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   438
            if self:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   439
                width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   440
                if refresh_positions:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   441
                    offset = 0
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   442
                    buttons = self.Buttons[:]
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   443
                    buttons.reverse()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   444
                    for button in buttons:
1044
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   445
                        w, h = button.GetSize()
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   446
                        button.SetPosition(width - 5 - w - offset, 5)
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   447
                        offset += w + 2
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   448
                    self.ParentWindow.ForceRefresh()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   449
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   450
        def DrawCommonElements(self, dc, buttons=None):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   451
            width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   452
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   453
            dc.SetPen(HIGHLIGHT_DROP_PEN)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   454
            dc.SetBrush(HIGHLIGHT_DROP_BRUSH)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   455
            if self.Highlight in [HIGHLIGHT_BEFORE]:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   456
                dc.DrawLine(0, 1, width - 1, 1)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   457
            elif self.Highlight in [HIGHLIGHT_AFTER]:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   458
                dc.DrawLine(0, height - 1, width - 1, height - 1)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   459
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   460
            if buttons is None:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   461
                buttons = self.Buttons
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   462
            for button in buttons:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   463
                button.Draw(dc)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   464
                
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   465
            if self.ParentWindow.IsDragging():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   466
                destBBox = self.ParentWindow.GetDraggingAxesClippingRegion(self)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   467
                srcPos = self.ParentWindow.GetDraggingAxesPosition(self)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   468
                if destBBox.width > 0 and destBBox.height > 0:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   469
                    srcPanel = self.ParentWindow.DraggingAxesPanel
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   470
                    srcBBox = srcPanel.GetAxesBoundingBox()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   471
                    
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   472
                    if destBBox.x == 0:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   473
                        srcX = srcBBox.x - srcPos.x
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   474
                    else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   475
                        srcX = srcBBox.x
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   476
                    if destBBox.y == 0:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   477
                        srcY = srcBBox.y - srcPos.y
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   478
                    else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   479
                        srcY = srcBBox.y
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   480
                    
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   481
                    srcBmp = _convert_agg_to_wx_bitmap(srcPanel.get_renderer(), None)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   482
                    srcDC = wx.MemoryDC()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   483
                    srcDC.SelectObject(srcBmp)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   484
                    
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   485
                    dc.Blit(destBBox.x, destBBox.y, 
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   486
                            int(destBBox.width), int(destBBox.height), 
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   487
                            srcDC, srcX, srcY)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   488
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   489
        def OnEnter(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   490
            self.ShowButtons(True)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   491
            event.Skip()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   492
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   493
        def OnLeave(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   494
            if self.Highlight != HIGHLIGHT_RESIZE or self.CanvasStartSize is None:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   495
                x, y = event.GetPosition()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   496
                width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   497
                if (x <= 0 or x >= width - 1 or
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   498
                    y <= 0 or y >= height - 1):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   499
                    self.ShowButtons(False)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   500
            event.Skip()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   501
        
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   502
        def OnCloseButton(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   503
            wx.CallAfter(self.ParentWindow.DeleteValue, self)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   504
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   505
        def OnForceButton(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   506
            wx.CallAfter(self.ForceValue, self.Items[0])
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   507
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   508
        def OnReleaseButton(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   509
            wx.CallAfter(self.ReleaseValue, self.Items[0])
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   510
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   511
        def OnResizeWindow(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   512
            wx.CallAfter(self.RefreshButtonsState, True)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   513
            event.Skip()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   514
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   515
        def OnMouseDragging(self, x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   516
            xw, yw = self.GetPosition()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   517
            self.ParentWindow.RefreshHighlight(x + xw, y + yw)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   518
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   519
        def OnDragging(self, x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   520
            width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   521
            if y < height / 2:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   522
                if self.ParentWindow.IsViewerFirst(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   523
                    self.SetHighlight(HIGHLIGHT_BEFORE)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   524
                else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   525
                    self.SetHighlight(HIGHLIGHT_NONE)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   526
                    self.ParentWindow.HighlightPreviousViewer(self)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   527
            else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   528
                self.SetHighlight(HIGHLIGHT_AFTER)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   529
        
988
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
   530
        def OnEraseBackground(self, event):
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
   531
            pass
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
   532
        
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   533
        def OnResize(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   534
            wx.CallAfter(self.RefreshButtonsState, True)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   535
            event.Skip()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   536
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   537
        def ForceValue(self, item):
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
   538
            iec_path = item.GetVariable()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   539
            iec_type = self.ParentWindow.GetDataType(iec_path)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   540
            if iec_type is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   541
                dialog = ForceVariableDialog(self, iec_type, str(item.GetValue()))
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   542
                if dialog.ShowModal() == wx.ID_OK:
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
   543
                    self.ParentWindow.ForceDataValue(iec_path.upper(), dialog.GetValue())
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   544
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   545
        def ReleaseValue(self, item):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   546
            iec_path = item.GetVariable().upper()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   547
            self.ParentWindow.ReleaseDataValue(iec_path)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   548
    
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   549
    
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   550
    class DebugVariableText(DebugVariableViewer, wx.Panel):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   551
        
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   552
        def __init__(self, parent, window, items=[]):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   553
            DebugVariableViewer.__init__(self, window, items)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   554
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   555
            wx.Panel.__init__(self, parent)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   556
            self.SetBackgroundColour(wx.WHITE)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   557
            self.SetDropTarget(DebugVariableDropTarget(window, self))
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   558
            self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   559
            self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   560
            self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   561
            self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   562
            self.Bind(wx.EVT_SIZE, self.OnResize)
988
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
   563
            self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   564
            self.Bind(wx.EVT_PAINT, self.OnPaint)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   565
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   566
            self.SetMinSize(wx.Size(0, 25))
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   567
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   568
            self.Buttons.append(
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   569
                GraphButton(0, 0, GetBitmap("force"), self.OnForceButton))
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   570
            self.Buttons.append(
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   571
                GraphButton(0, 0, GetBitmap("release"), self.OnReleaseButton))
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   572
            self.Buttons.append(
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   573
                GraphButton(0, 0, GetBitmap("delete_graph"), self.OnCloseButton))
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   574
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   575
            self.ShowButtons(False)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   576
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   577
        def RefreshViewer(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   578
            width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   579
            bitmap = wx.EmptyBitmap(width, height)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   580
            
946
9343740603f5 Fix bug on Windows with wxPaintDC
Laurent Bessard
parents: 945
diff changeset
   581
            dc = wx.BufferedDC(wx.ClientDC(self), bitmap)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   582
            dc.Clear()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   583
            dc.BeginDrawing()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   584
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   585
            gc = wx.GCDC(dc)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   586
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   587
            item_name = self.Items[0].GetVariable(self.ParentWindow.GetVariableNameMask())
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   588
            w, h = gc.GetTextExtent(item_name)
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   589
            gc.DrawText(item_name, 20, (height - h) / 2)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   590
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   591
            if self.Items[0].IsForced():
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   592
                gc.SetTextForeground(wx.BLUE)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   593
                self.Buttons[0].Disable()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   594
                self.Buttons[1].Enable()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   595
            else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   596
                self.Buttons[1].Disable()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   597
                self.Buttons[0].Enable()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   598
            self.RefreshButtonsState(True)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   599
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   600
            item_value = self.Items[0].GetValue()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   601
            w, h = gc.GetTextExtent(item_value)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   602
            gc.DrawText(item_value, width - 40 - w, (height - h) / 2)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   603
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   604
            self.DrawCommonElements(gc)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   605
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   606
            gc.EndDrawing()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   607
        
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   608
        def OnLeftDown(self, event):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   609
            width, height = self.GetSize()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   610
            item_name = self.Items[0].GetVariable(self.ParentWindow.GetVariableNameMask())
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   611
            w, h = self.GetTextExtent(item_name)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   612
            x, y = event.GetPosition()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   613
            rect = wx.Rect(20, (height - h) / 2, w, h)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   614
            if rect.InsideXY(x, y):
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   615
                data = wx.TextDataObject(str((self.Items[0].GetVariable(), "debug", "move")))
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   616
                dragSource = wx.DropSource(self)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   617
                dragSource.SetData(data)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   618
                dragSource.DoDragDrop()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   619
            else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   620
                event.Skip()
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
   621
        
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   622
        def OnLeftUp(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   623
            x, y = event.GetPosition()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   624
            wx.CallAfter(self.HandleButtons, x, y)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   625
            event.Skip()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   626
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   627
        def OnPaint(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   628
            self.RefreshViewer()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   629
            event.Skip()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   630
    
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   631
    class DebugVariableGraphic(DebugVariableViewer, FigureCanvas):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   632
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   633
        def __init__(self, parent, window, items, graph_type):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   634
            DebugVariableViewer.__init__(self, window, items)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   635
            
1044
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   636
            self.CanvasSize = SIZE_MINI
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   637
            self.GraphType = graph_type
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   638
            self.CursorTick = None
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   639
            self.MouseStartPos = None
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   640
            self.StartCursorTick = None
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   641
            self.CanvasStartSize = None
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   642
            self.ContextualButtons = []
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   643
            self.ContextualButtonsItem = None
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   644
            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   645
            self.Figure = matplotlib.figure.Figure(facecolor='w')
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   646
            self.Figure.subplotpars.update(top=0.95, left=0.1, bottom=0.1, right=0.95)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   647
            
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   648
            FigureCanvas.__init__(self, parent, -1, self.Figure)
1190
410b519abd66 Fixed bug keyboard events not catch by graphs when trying to move cursor on Windows
Laurent Bessard
parents: 1176
diff changeset
   649
            self.SetWindowStyle(wx.WANTS_CHARS)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   650
            self.SetBackgroundColour(wx.WHITE)
1174
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
   651
            self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   652
            self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   653
            self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
988
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
   654
            self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   655
            self.Bind(wx.EVT_SIZE, self.OnResize)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   656
            
1043
b46e45e0afc7 Fixed bug in graph panel default size in DebugVariablePanel
Laurent Bessard
parents: 1041
diff changeset
   657
            canvas_size = self.GetCanvasMinSize()
b46e45e0afc7 Fixed bug in graph panel default size in DebugVariablePanel
Laurent Bessard
parents: 1041
diff changeset
   658
            self.SetMinSize(canvas_size)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   659
            self.SetDropTarget(DebugVariableDropTarget(self.ParentWindow, self))
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   660
            self.mpl_connect('button_press_event', self.OnCanvasButtonPressed)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   661
            self.mpl_connect('motion_notify_event', self.OnCanvasMotion)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   662
            self.mpl_connect('button_release_event', self.OnCanvasButtonReleased)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   663
            self.mpl_connect('scroll_event', self.OnCanvasScroll)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   664
            
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   665
            for size, bitmap in zip([SIZE_MINI, SIZE_MIDDLE, SIZE_MAXI],
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   666
                                    ["minimize_graph", "middle_graph", "maximize_graph"]):
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   667
                self.Buttons.append(GraphButton(0, 0, GetBitmap(bitmap), self.GetOnChangeSizeButton(size)))
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   668
            self.Buttons.append(
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   669
                GraphButton(0, 0, GetBitmap("export_graph_mini"), self.OnExportGraphButton))
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   670
            self.Buttons.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   671
                GraphButton(0, 0, GetBitmap("delete_graph"), self.OnCloseButton))
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   672
            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   673
            self.ResetGraphics()
1043
b46e45e0afc7 Fixed bug in graph panel default size in DebugVariablePanel
Laurent Bessard
parents: 1041
diff changeset
   674
            self.RefreshLabelsPosition(canvas_size.height)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   675
            self.ShowButtons(False)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   676
        
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   677
        def draw(self, drawDC=None):
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   678
            FigureCanvasAgg.draw(self)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   679
    
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   680
            self.bitmap = _convert_agg_to_wx_bitmap(self.get_renderer(), None)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   681
            self.bitmap.UseAlpha() 
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   682
            width, height = self.GetSize()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   683
            bbox = self.GetAxesBoundingBox()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   684
            
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   685
            destDC = wx.MemoryDC()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   686
            destDC.SelectObject(self.bitmap)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   687
            
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   688
            destGC = wx.GCDC(destDC)
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   689
            
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   690
            destGC.BeginDrawing()
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   691
            if self.Highlight == HIGHLIGHT_RESIZE:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   692
                destGC.SetPen(HIGHLIGHT_RESIZE_PEN)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   693
                destGC.SetBrush(HIGHLIGHT_RESIZE_BRUSH)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   694
                destGC.DrawRectangle(0, height - 5, width, 5)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   695
            else:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   696
                destGC.SetPen(HIGHLIGHT_DROP_PEN)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   697
                destGC.SetBrush(HIGHLIGHT_DROP_BRUSH)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   698
                if self.Highlight == HIGHLIGHT_LEFT:
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   699
                    destGC.DrawRectangle(bbox.x, bbox.y, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   700
                                         bbox.width / 2, bbox.height)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   701
                elif self.Highlight == HIGHLIGHT_RIGHT:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   702
                    destGC.DrawRectangle(bbox.x + bbox.width / 2, bbox.y, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   703
                                         bbox.width / 2, bbox.height)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   704
            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   705
            self.DrawCommonElements(destGC, self.Buttons + self.ContextualButtons)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   706
            
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   707
            destGC.EndDrawing()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   708
            
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   709
            self._isDrawn = True
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   710
            self.gui_repaint(drawDC=drawDC)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   711
        
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   712
        def GetButtons(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   713
            return self.Buttons + self.ContextualButtons
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   714
        
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   715
        def PopupContextualButtons(self, item, rect, style=wx.RIGHT):
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   716
            if self.ContextualButtonsItem is not None and item != self.ContextualButtonsItem:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   717
                self.DismissContextualButtons()
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   718
            
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   719
            if self.ContextualButtonsItem is None:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   720
                self.ContextualButtonsItem = item
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   721
                
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   722
                if self.ContextualButtonsItem.IsForced():
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   723
                    self.ContextualButtons.append(
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   724
                        GraphButton(0, 0, GetBitmap("release"), self.OnReleaseButton))
1044
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   725
                self.ContextualButtons.append(
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   726
                    GraphButton(0, 0, GetBitmap("force"), self.OnForceButton))
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   727
                self.ContextualButtons.append(
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   728
                    GraphButton(0, 0, GetBitmap("export_graph_mini"), self.OnExportItemGraphButton))
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   729
                self.ContextualButtons.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   730
                    GraphButton(0, 0, GetBitmap("delete_graph"), self.OnRemoveItemButton))
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   731
                
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   732
                offset = 0
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   733
                buttons = self.ContextualButtons[:]
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   734
                if style in [wx.TOP, wx.LEFT]:
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   735
                     buttons.reverse()
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   736
                for button in buttons:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   737
                    w, h = button.GetSize()
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   738
                    if style in [wx.LEFT, wx.RIGHT]:
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   739
                        if style == wx.LEFT:
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   740
                            x = rect.x - w - offset
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   741
                        else:
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   742
                            x = rect.x + rect.width + offset
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   743
                        y = rect.y + (rect.height - h) / 2
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   744
                        offset += w
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   745
                    else:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   746
                        x = rect.x + (rect.width - w ) / 2
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   747
                        if style == wx.TOP:
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   748
                            y = rect.y - h - offset
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   749
                        else:
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   750
                            y = rect.y + rect.height + offset
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   751
                        offset += h
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   752
                    button.SetPosition(x, y)
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
   753
                self.ParentWindow.ForceRefresh()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   754
        
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   755
        def DismissContextualButtons(self):
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   756
            if self.ContextualButtonsItem is not None:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   757
                self.ContextualButtonsItem = None
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   758
                self.ContextualButtons = []
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
   759
                self.ParentWindow.ForceRefresh()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   760
        
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   761
        def IsOverContextualButton(self, x, y):
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   762
            for button in self.ContextualButtons:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   763
                if button.HitTest(x, y):
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   764
                    return True
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   765
            return False
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   766
        
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   767
        def SetMinSize(self, size):
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   768
            wx.Window.SetMinSize(self, size)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   769
            wx.CallAfter(self.RefreshButtonsState)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   770
        
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   771
        def GetOnChangeSizeButton(self, size):
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   772
            def OnChangeSizeButton():
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   773
                self.CanvasSize = size
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   774
                self.SetCanvasSize(200, self.CanvasSize)
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   775
            return OnChangeSizeButton
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   776
        
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   777
        def OnExportGraphButton(self):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   778
            self.ExportGraph()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   779
        
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   780
        def OnForceButton(self):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   781
            wx.CallAfter(self.ForceValue, 
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   782
                         self.ContextualButtonsItem)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   783
            self.DismissContextualButtons()
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   784
            
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   785
        def OnReleaseButton(self):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   786
            wx.CallAfter(self.ReleaseValue, 
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   787
                         self.ContextualButtonsItem)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   788
            self.DismissContextualButtons()
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   789
        
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   790
        def OnExportItemGraphButton(self):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   791
            wx.CallAfter(self.ExportGraph, 
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   792
                         self.ContextualButtonsItem)
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   793
            self.DismissContextualButtons()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   794
            
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   795
        def OnRemoveItemButton(self):            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   796
            wx.CallAfter(self.ParentWindow.DeleteValue, self, 
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   797
                         self.ContextualButtonsItem)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   798
            self.DismissContextualButtons()
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   799
        
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   800
        def RefreshLabelsPosition(self, height):
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   801
            canvas_ratio = 1. / height
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   802
            graph_ratio = 1. / ((1.0 - (CANVAS_BORDER[0] + CANVAS_BORDER[1]) * canvas_ratio) * height)
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   803
            
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   804
            self.Figure.subplotpars.update(
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   805
                top= 1.0 - CANVAS_BORDER[1] * canvas_ratio, 
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   806
                bottom= CANVAS_BORDER[0] * canvas_ratio)
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   807
            
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   808
            if self.GraphType == GRAPH_PARALLEL or self.Is3DCanvas():
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   809
                num_item = len(self.Items)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   810
                for idx in xrange(num_item):
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   811
                    if not self.Is3DCanvas():
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   812
                        self.AxesLabels[idx].set_position(
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   813
                            (0.05, 
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   814
                             1.0 - (CANVAS_PADDING + AXES_LABEL_HEIGHT * idx) * graph_ratio))
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   815
                    self.Labels[idx].set_position(
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   816
                        (0.95, 
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   817
                         CANVAS_PADDING * graph_ratio + 
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   818
                         (num_item - idx - 1) * VALUE_LABEL_HEIGHT * graph_ratio))
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   819
            else:
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   820
                self.AxesLabels[0].set_position((0.1, CANVAS_PADDING * graph_ratio))
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   821
                self.Labels[0].set_position((0.95, CANVAS_PADDING * graph_ratio))
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   822
                self.AxesLabels[1].set_position((0.05, 2 * CANVAS_PADDING * graph_ratio))
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   823
                self.Labels[1].set_position((0.05, 1.0 - CANVAS_PADDING * graph_ratio))
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   824
        
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   825
            self.Figure.subplots_adjust()
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   826
        
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   827
        def GetCanvasMinSize(self):
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   828
            return wx.Size(200, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   829
                           CANVAS_BORDER[0] + CANVAS_BORDER[1] + 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   830
                           2 * CANVAS_PADDING + VALUE_LABEL_HEIGHT * len(self.Items))
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   831
        
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   832
        def SetCanvasSize(self, width, height):
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   833
            height = max(height, self.GetCanvasMinSize()[1])
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   834
            self.SetMinSize(wx.Size(width, height))
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
   835
            self.RefreshLabelsPosition(height)
1044
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
   836
            self.RefreshButtonsState()
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   837
            self.ParentWindow.RefreshGraphicsSizer()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   838
            
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   839
        def GetAxesBoundingBox(self, absolute=False):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   840
            width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   841
            ax, ay, aw, ah = self.figure.gca().get_position().bounds
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   842
            bbox = wx.Rect(ax * width, height - (ay + ah) * height - 1,
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   843
                           aw * width + 2, ah * height + 1)
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   844
            if absolute:
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   845
                xw, yw = self.GetPosition()
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   846
                bbox.x += xw
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   847
                bbox.y += yw
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   848
            return bbox
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   849
        
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   850
        def OnCanvasButtonPressed(self, event):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   851
            width, height = self.GetSize()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   852
            x, y = event.x, height - event.y
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   853
            if not self.IsOverButton(x, y):
938
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   854
                if event.inaxes == self.Axes:
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   855
                    item_idx = None
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   856
                    for i, t in ([pair for pair in enumerate(self.AxesLabels)] + 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   857
                                 [pair for pair in enumerate(self.Labels)]):
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   858
                        (x0, y0), (x1, y1) = t.get_window_extent().get_points()
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   859
                        rect = wx.Rect(x0, height - y1, x1 - x0, y1 - y0)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   860
                        if rect.InsideXY(x, y):
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   861
                            item_idx = i
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   862
                            break
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   863
                    if item_idx is not None:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   864
                        self.ShowButtons(False)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   865
                        self.DismissContextualButtons()
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   866
                        xw, yw = self.GetPosition()
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   867
                        self.ParentWindow.StartDragNDrop(self, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   868
                            self.Items[item_idx], x + xw, y + yw, x + xw, y + yw)
938
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   869
                    elif not self.Is3DCanvas():
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   870
                        self.MouseStartPos = wx.Point(x, y)
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   871
                        if event.button == 1 and event.inaxes == self.Axes:
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   872
                            self.StartCursorTick = self.CursorTick
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   873
                            self.HandleCursorMove(event)
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   874
                        elif event.button == 2 and self.GraphType == GRAPH_PARALLEL:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   875
                            width, height = self.GetSize()
938
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   876
                            start_tick, end_tick = self.ParentWindow.GetRange()
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   877
                            self.StartCursorTick = start_tick
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   878
                
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   879
                elif event.button == 1 and event.y <= 5:
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   880
                    self.MouseStartPos = wx.Point(x, y)
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   881
                    self.CanvasStartSize = self.GetSize()
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   882
        
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   883
        def OnCanvasButtonReleased(self, event):
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   884
            if self.ParentWindow.IsDragging():
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   885
                width, height = self.GetSize()
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   886
                xw, yw = self.GetPosition()
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   887
                self.ParentWindow.StopDragNDrop(
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   888
                    self.ParentWindow.DraggingAxesPanel.Items[0].GetVariable(),
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   889
                    xw + event.x, 
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   890
                    yw + height - event.y)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   891
            else:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   892
                self.MouseStartPos = None
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   893
                self.StartCursorTick = None
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   894
                self.CanvasStartSize = None
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   895
                width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   896
                self.HandleButtons(event.x, height - event.y)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   897
                if event.y > 5 and self.SetHighlight(HIGHLIGHT_NONE):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   898
                    self.SetCursor(wx.NullCursor)
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   899
                    self.ParentWindow.ForceRefresh()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
   900
        
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
   901
        def OnCanvasMotion(self, event):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   902
            width, height = self.GetSize()
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   903
            if self.ParentWindow.IsDragging():
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   904
                xw, yw = self.GetPosition()
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   905
                self.ParentWindow.MoveDragNDrop(
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   906
                    xw + event.x, 
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
   907
                    yw + height - event.y)
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   908
            else:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   909
                if not self.Is3DCanvas():
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   910
                    if event.button == 1 and self.CanvasStartSize is None:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   911
                        if event.inaxes == self.Axes:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   912
                            if self.MouseStartPos is not None:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   913
                                self.HandleCursorMove(event)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   914
                        elif self.MouseStartPos is not None and len(self.Items) == 1:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   915
                            xw, yw = self.GetPosition()
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   916
                            self.ParentWindow.SetCursorTick(self.StartCursorTick)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   917
                            self.ParentWindow.StartDragNDrop(self, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   918
                                self.Items[0],
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   919
                                event.x + xw, height - event.y + yw, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   920
                                self.MouseStartPos.x + xw, self.MouseStartPos.y + yw)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   921
                    elif event.button == 2 and self.GraphType == GRAPH_PARALLEL:
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   922
                        start_tick, end_tick = self.ParentWindow.GetRange()
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   923
                        rect = self.GetAxesBoundingBox()
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   924
                        self.ParentWindow.SetCanvasPosition(
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   925
                            self.StartCursorTick + (self.MouseStartPos.x - event.x) *
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   926
                            (end_tick - start_tick) / rect.width)    
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   927
                
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   928
                if event.button == 1 and self.CanvasStartSize is not None:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   929
                    width, height = self.GetSize()
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   930
                    self.SetCanvasSize(width, 
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   931
                        self.CanvasStartSize.height + height - event.y - self.MouseStartPos.y)
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   932
                    
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
   933
                elif event.button in [None, "up", "down"]:
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
   934
                    if self.GraphType == GRAPH_PARALLEL:
938
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   935
                        orientation = [wx.RIGHT] * len(self.AxesLabels) + [wx.LEFT] * len(self.Labels)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   936
                    elif len(self.AxesLabels) > 0:
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   937
                        orientation = [wx.RIGHT, wx.TOP, wx.LEFT, wx.BOTTOM]
938
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   938
                    else:
ef1bfe848bf9 Fixed bug with 3D graphs in debug variable panel
Laurent Bessard
parents: 937
diff changeset
   939
                        orientation = [wx.LEFT] * len(self.Labels)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   940
                    item_idx = None
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   941
                    item_style = None
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   942
                    for (i, t), style in zip([pair for pair in enumerate(self.AxesLabels)] + 
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   943
                                             [pair for pair in enumerate(self.Labels)], 
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
   944
                                             orientation):
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   945
                        (x0, y0), (x1, y1) = t.get_window_extent().get_points()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   946
                        rect = wx.Rect(x0, height - y1, x1 - x0, y1 - y0)
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   947
                        if rect.InsideXY(event.x, height - event.y):
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   948
                            item_idx = i
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   949
                            item_style = style
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   950
                            break
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   951
                    if item_idx is not None:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   952
                        self.PopupContextualButtons(self.Items[item_idx], rect, item_style)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
   953
                        return 
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   954
                    if not self.IsOverContextualButton(event.x, height - event.y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   955
                        self.DismissContextualButtons()
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   956
                    
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   957
                    if event.y <= 5:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   958
                        if self.SetHighlight(HIGHLIGHT_RESIZE):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   959
                            self.SetCursor(wx.StockCursor(wx.CURSOR_SIZENS))
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   960
                            self.ParentWindow.ForceRefresh()
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   961
                    else:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   962
                        if self.SetHighlight(HIGHLIGHT_NONE):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   963
                            self.SetCursor(wx.NullCursor)
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   964
                            self.ParentWindow.ForceRefresh()
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   965
        
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   966
        def OnCanvasScroll(self, event):
1040
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
   967
            if event.inaxes is not None and event.guiEvent.ControlDown():
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   968
                if self.GraphType == GRAPH_ORTHOGONAL:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   969
                    start_tick, end_tick = self.ParentWindow.GetRange()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   970
                    tick = (start_tick + end_tick) / 2.
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   971
                else:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   972
                    tick = event.xdata
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   973
                self.ParentWindow.ChangeRange(int(-event.step) / 3, tick)
1040
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
   974
                self.ParentWindow.VetoScrollEvent = True
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
   975
        
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   976
        def OnDragging(self, x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   977
            width, height = self.GetSize()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   978
            bbox = self.GetAxesBoundingBox()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   979
            if bbox.InsideXY(x, y) and not self.Is3DCanvas():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   980
                rect = wx.Rect(bbox.x, bbox.y, bbox.width / 2, bbox.height)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   981
                if rect.InsideXY(x, y):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   982
                    self.SetHighlight(HIGHLIGHT_LEFT)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   983
                else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   984
                    self.SetHighlight(HIGHLIGHT_RIGHT)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   985
            elif y < height / 2:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   986
                if self.ParentWindow.IsViewerFirst(self):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   987
                    self.SetHighlight(HIGHLIGHT_BEFORE)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   988
                else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   989
                    self.SetHighlight(HIGHLIGHT_NONE)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   990
                    self.ParentWindow.HighlightPreviousViewer(self)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   991
            else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   992
                self.SetHighlight(HIGHLIGHT_AFTER)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   993
        
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   994
        def OnLeave(self, event):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   995
            if self.CanvasStartSize is None and self.SetHighlight(HIGHLIGHT_NONE):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   996
                self.SetCursor(wx.NullCursor)
937
bd6fdbb61784 Added support for changing graph size using handles like sash window
Laurent Bessard
parents: 936
diff changeset
   997
                self.ParentWindow.ForceRefresh()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
   998
            DebugVariableViewer.OnLeave(self, event)
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
   999
        
1174
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1000
        KEY_CURSOR_INCREMENT = {
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1001
            wx.WXK_LEFT: -1,
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1002
            wx.WXK_RIGHT: 1,
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1003
            wx.WXK_UP: -10,
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1004
            wx.WXK_DOWN: 10}
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1005
        def OnKeyDown(self, event):
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1006
            if self.CursorTick is not None:
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1007
                self.ParentWindow.MoveCursorTick(
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1008
                    self.KEY_CURSOR_INCREMENT.get(
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1009
                      event.GetKeyCode(), 0))
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1010
            event.Skip()
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1011
        
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1012
        def HandleCursorMove(self, event):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1013
            start_tick, end_tick = self.ParentWindow.GetRange()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1014
            cursor_tick = None
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1015
            if self.GraphType == GRAPH_ORTHOGONAL:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1016
                x_data = self.Items[0].GetData(start_tick, end_tick)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1017
                y_data = self.Items[1].GetData(start_tick, end_tick)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1018
                if len(x_data) > 0 and len(y_data) > 0:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1019
                    length = min(len(x_data), len(y_data))
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1020
                    d = numpy.sqrt((x_data[:length,1]-event.xdata) ** 2 + (y_data[:length,1]-event.ydata) ** 2)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1021
                    cursor_tick = x_data[numpy.argmin(d), 0]
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1022
            else:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1023
                data = self.Items[0].GetData(start_tick, end_tick)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1024
                if len(data) > 0:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1025
                    cursor_tick = data[numpy.argmin(numpy.abs(data[:,0] - event.xdata)), 0]
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1026
            if cursor_tick is not None:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1027
                self.ParentWindow.SetCursorTick(cursor_tick)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1028
        
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1029
        def OnAxesMotion(self, event):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1030
            if self.Is3DCanvas():
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1031
                current_time = gettime()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1032
                if current_time - self.LastMotionTime > REFRESH_PERIOD:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1033
                    self.LastMotionTime = current_time
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1034
                    Axes3D._on_move(self.Axes, event)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1035
        
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1036
        def ResetGraphics(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1037
            self.Figure.clear()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1038
            if self.Is3DCanvas():
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1039
                self.Axes = self.Figure.gca(projection='3d')
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1040
                self.Axes.set_color_cycle(['b'])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1041
                self.LastMotionTime = gettime()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1042
                setattr(self.Axes, "_on_move", self.OnAxesMotion)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1043
                self.Axes.mouse_init()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1044
                self.Axes.tick_params(axis='z', labelsize='small')
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1045
            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1046
                self.Axes = self.Figure.gca()
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1047
                self.Axes.set_color_cycle(color_cycle)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1048
            self.Axes.tick_params(axis='x', labelsize='small')
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1049
            self.Axes.tick_params(axis='y', labelsize='small')
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1050
            self.Plots = []
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1051
            self.VLine = None
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1052
            self.HLine = None
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1053
            self.Labels = []
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1054
            self.AxesLabels = []
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1055
            if not self.Is3DCanvas():
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1056
                text_func = self.Axes.text
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1057
            else:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1058
                text_func = self.Axes.text2D
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1059
            if self.GraphType == GRAPH_PARALLEL or self.Is3DCanvas():
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1060
                num_item = len(self.Items)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1061
                for idx in xrange(num_item):
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1062
                    if num_item == 1:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1063
                        color = 'k'
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1064
                    else:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1065
                        color = color_cycle[idx % len(color_cycle)]
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1066
                    if not self.Is3DCanvas():
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1067
                        self.AxesLabels.append(
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
  1068
                            text_func(0, 0, "", size='small',
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
  1069
                                      verticalalignment='top', 
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1070
                                      color=color,
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1071
                                      transform=self.Axes.transAxes))
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1072
                    self.Labels.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1073
                        text_func(0, 0, "", size='large', 
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1074
                                  horizontalalignment='right',
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1075
                                  color=color,
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1076
                                  transform=self.Axes.transAxes))
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1077
            else:
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1078
                self.AxesLabels.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1079
                    self.Axes.text(0, 0, "", size='small',
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1080
                                   transform=self.Axes.transAxes))
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1081
                self.Labels.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1082
                    self.Axes.text(0, 0, "", size='large',
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1083
                                   horizontalalignment='right',
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1084
                                   transform=self.Axes.transAxes))
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1085
                self.AxesLabels.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1086
                    self.Axes.text(0, 0, "", size='small',
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1087
                                   rotation='vertical',
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1088
                                   verticalalignment='bottom',
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1089
                                   transform=self.Axes.transAxes))
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1090
                self.Labels.append(
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1091
                    self.Axes.text(0, 0, "", size='large',
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1092
                                   rotation='vertical',
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1093
                                   verticalalignment='top',
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1094
                                   transform=self.Axes.transAxes))
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1095
            width, height = self.GetSize()
935
fc1515f27e1f Added button in graph for changing graph size to minimum
Laurent Bessard
parents: 934
diff changeset
  1096
            self.RefreshLabelsPosition(height)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1097
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1098
        def AddItem(self, item):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1099
            DebugVariableViewer.AddItem(self, item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1100
            self.ResetGraphics()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1101
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1102
        def RemoveItem(self, item):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1103
            DebugVariableViewer.RemoveItem(self, item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1104
            if not self.IsEmpty():
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1105
                if len(self.Items) == 1:
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1106
                    self.GraphType = GRAPH_PARALLEL
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1107
                self.ResetGraphics()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1108
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1109
        def UnregisterObsoleteData(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1110
            DebugVariableViewer.UnregisterObsoleteData(self)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1111
            if not self.IsEmpty():
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1112
                self.ResetGraphics()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1113
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1114
        def Is3DCanvas(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1115
            return self.GraphType == GRAPH_ORTHOGONAL and len(self.Items) == 3
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1116
        
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1117
        def SetCursorTick(self, cursor_tick):
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1118
            self.CursorTick = cursor_tick
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1119
            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1120
        def RefreshViewer(self, refresh_graphics=True):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1121
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1122
            if refresh_graphics:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1123
                start_tick, end_tick = self.ParentWindow.GetRange()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1124
                
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1125
                if self.GraphType == GRAPH_PARALLEL:    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1126
                    min_value = max_value = None
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1127
                    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1128
                    for idx, item in enumerate(self.Items):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1129
                        data = item.GetData(start_tick, end_tick)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1130
                        if data is not None:
1193
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
  1131
                            item_min_value, item_max_value = item.GetValueRange()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1132
                            if min_value is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1133
                                min_value = item_min_value
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1134
                            elif item_min_value is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1135
                                min_value = min(min_value, item_min_value)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1136
                            if max_value is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1137
                                max_value = item_max_value
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1138
                            elif item_max_value is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1139
                                max_value = max(max_value, item_max_value)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1140
                            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1141
                            if len(self.Plots) <= idx:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1142
                                self.Plots.append(
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1143
                                    self.Axes.plot(data[:, 0], data[:, 1])[0])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1144
                            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1145
                                self.Plots[idx].set_data(data[:, 0], data[:, 1])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1146
                        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1147
                    if min_value is not None and max_value is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1148
                        y_center = (min_value + max_value) / 2.
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1149
                        y_range = max(1.0, max_value - min_value)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1150
                    else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1151
                        y_center = 0.5
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1152
                        y_range = 1.0
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1153
                    x_min, x_max = start_tick, end_tick
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1154
                    y_min, y_max = y_center - y_range * 0.55, y_center + y_range * 0.55
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1155
                    
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1156
                    if self.CursorTick is not None and start_tick <= self.CursorTick <= end_tick:
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1157
                        if self.VLine is None:
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1158
                            self.VLine = self.Axes.axvline(self.CursorTick, color=cursor_color)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1159
                        else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1160
                            self.VLine.set_xdata((self.CursorTick, self.CursorTick))
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1161
                        self.VLine.set_visible(True)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1162
                    else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1163
                        if self.VLine is not None:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1164
                            self.VLine.set_visible(False)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1165
                else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1166
                    min_start_tick = reduce(max, [item.GetData()[0, 0] 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1167
                                                  for item in self.Items
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1168
                                                  if len(item.GetData()) > 0], 0)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1169
                    start_tick = max(start_tick, min_start_tick)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1170
                    end_tick = max(end_tick, min_start_tick)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1171
                    x_data, x_min, x_max = OrthogonalData(self.Items[0], start_tick, end_tick)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1172
                    y_data, y_min, y_max = OrthogonalData(self.Items[1], start_tick, end_tick)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1173
                    if self.CursorTick is not None:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1174
                        x_cursor, x_forced = self.Items[0].GetValue(self.CursorTick, raw=True)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1175
                        y_cursor, y_forced = self.Items[1].GetValue(self.CursorTick, raw=True)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1176
                    length = 0
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1177
                    if x_data is not None and y_data is not None:  
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1178
                        length = min(len(x_data), len(y_data))
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1179
                    if len(self.Items) < 3:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1180
                        if x_data is not None and y_data is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1181
                            if len(self.Plots) == 0:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1182
                                self.Plots.append(
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1183
                                    self.Axes.plot(x_data[:, 1][:length], 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1184
                                                   y_data[:, 1][:length])[0])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1185
                            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1186
                                self.Plots[0].set_data(
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1187
                                    x_data[:, 1][:length], 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1188
                                    y_data[:, 1][:length])
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1189
                        
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1190
                        if self.CursorTick is not None and start_tick <= self.CursorTick <= end_tick:
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1191
                            if self.VLine is None:
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1192
                                self.VLine = self.Axes.axvline(x_cursor, color=cursor_color)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1193
                            else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1194
                                self.VLine.set_xdata((x_cursor, x_cursor))
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1195
                            if self.HLine is None:
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1196
                                self.HLine = self.Axes.axhline(y_cursor, color=cursor_color)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1197
                            else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1198
                                self.HLine.set_ydata((y_cursor, y_cursor))
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1199
                            self.VLine.set_visible(True)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1200
                            self.HLine.set_visible(True)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1201
                        else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1202
                            if self.VLine is not None:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1203
                                self.VLine.set_visible(False)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1204
                            if self.HLine is not None:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1205
                                self.HLine.set_visible(False)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1206
                    else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1207
                        while len(self.Axes.lines) > 0:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1208
                            self.Axes.lines.pop()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1209
                        z_data, z_min, z_max = OrthogonalData(self.Items[2], start_tick, end_tick)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1210
                        if self.CursorTick is not None:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1211
                            z_cursor, z_forced = self.Items[2].GetValue(self.CursorTick, raw=True)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1212
                        if x_data is not None and y_data is not None and z_data is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1213
                            length = min(length, len(z_data))
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1214
                            self.Axes.plot(x_data[:, 1][:length],
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1215
                                           y_data[:, 1][:length],
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1216
                                           zs = z_data[:, 1][:length])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1217
                        self.Axes.set_zlim(z_min, z_max)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1218
                        if self.CursorTick is not None and start_tick <= self.CursorTick <= end_tick:
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1219
                            for kwargs in [{"xs": numpy.array([x_min, x_max])},
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1220
                                           {"ys": numpy.array([y_min, y_max])},
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1221
                                           {"zs": numpy.array([z_min, z_max])}]:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1222
                                for param, value in [("xs", numpy.array([x_cursor, x_cursor])),
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1223
                                                     ("ys", numpy.array([y_cursor, y_cursor])),
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1224
                                                     ("zs", numpy.array([z_cursor, z_cursor]))]:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1225
                                    kwargs.setdefault(param, value)
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1226
                                kwargs["color"] = cursor_color
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1227
                                self.Axes.plot(**kwargs)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1228
                    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1229
                self.Axes.set_xlim(x_min, x_max)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1230
                self.Axes.set_ylim(y_min, y_max)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1231
            
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1232
            variable_name_mask = self.ParentWindow.GetVariableNameMask()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1233
            if self.CursorTick is not None:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1234
                values, forced = apply(zip, [item.GetValue(self.CursorTick) for item in self.Items])
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1235
            else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1236
                values, forced = apply(zip, [(item.GetValue(), item.IsForced()) for item in self.Items])
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1237
            labels = [item.GetVariable(variable_name_mask) for item in self.Items]
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1238
            styles = map(lambda x: {True: 'italic', False: 'normal'}[x], forced)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1239
            if self.Is3DCanvas():
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1240
                for idx, label_func in enumerate([self.Axes.set_xlabel, 
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1241
                                                  self.Axes.set_ylabel,
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1242
                                                  self.Axes.set_zlabel]):
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1243
                    label_func(labels[idx], fontdict={'size': 'small','color': color_cycle[idx]})
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1244
            else:
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1245
                for label, text in zip(self.AxesLabels, labels):
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1246
                    label.set_text(text)
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1247
            for label, value, style in zip(self.Labels, values, styles):
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1248
                label.set_text(value)
930
4be515ac635e Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 929
diff changeset
  1249
                label.set_style(style)
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1250
            
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1251
            self.draw()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1252
    
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1253
        def ExportGraph(self, item=None):
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1254
            if item is not None:
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1255
                variables = [(item, [entry for entry in item.GetData()])]
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1256
            else:
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1257
                variables = [(item, [entry for entry in item.GetData()])
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1258
                             for item in self.Items]
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1259
            self.ParentWindow.CopyDataToClipboard(variables)
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  1260
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1261
class DebugVariablePanel(wx.Panel, DebugViewer):
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1262
    
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1263
    def __init__(self, parent, producer, window):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1264
        wx.Panel.__init__(self, parent, style=wx.SP_3D|wx.TAB_TRAVERSAL)
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1265
        
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1266
        self.ParentWindow = window
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1267
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1268
        self.HasNewData = False
1008
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
  1269
        self.Force = False
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
  1270
        
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
  1271
        if USE_MPL:
1008
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
  1272
            self.SetBackgroundColour(wx.WHITE)
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
  1273
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1274
            main_sizer = wx.BoxSizer(wx.VERTICAL)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1275
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1276
            self.Ticks = numpy.array([])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1277
            self.StartTick = 0
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1278
            self.Fixed = False
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1279
            self.CursorTick = None
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1280
            self.DraggingAxesPanel = None
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1281
            self.DraggingAxesBoundingBox = None
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1282
            self.DraggingAxesMousePos = None
1040
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  1283
            self.VetoScrollEvent = False
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1284
            self.VariableNameMask = []
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1285
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1286
            self.GraphicPanels = []
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
  1287
            
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1288
            graphics_button_sizer = wx.BoxSizer(wx.HORIZONTAL)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1289
            main_sizer.AddSizer(graphics_button_sizer, border=5, flag=wx.GROW|wx.ALL)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1290
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1291
            range_label = wx.StaticText(self, label=_('Range:'))
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1292
            graphics_button_sizer.AddWindow(range_label, flag=wx.ALIGN_CENTER_VERTICAL)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1293
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1294
            self.CanvasRange = wx.ComboBox(self, style=wx.CB_READONLY)
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1295
            self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, self.CanvasRange)
905
eaa1d3a4b52b Fix DebugVariablePanel time range position
Laurent Bessard
parents: 903
diff changeset
  1296
            graphics_button_sizer.AddWindow(self.CanvasRange, 1, 
eaa1d3a4b52b Fix DebugVariablePanel time range position
Laurent Bessard
parents: 903
diff changeset
  1297
                  border=5, flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1298
            
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
  1299
            self.CanvasRange.Clear()
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1300
            default_range_idx = 0
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1301
            for idx, (text, value) in enumerate(RANGE_VALUES):
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
  1302
                self.CanvasRange.Append(text)
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1303
                if text == "1s":
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1304
                    default_range_idx = idx
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1305
            self.CanvasRange.SetSelection(default_range_idx)
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
  1306
            
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1307
            for name, bitmap, help in [
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1308
                ("CurrentButton", "current", _("Go to current value")),
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1309
                ("ExportGraphButton", "export_graph", _("Export graph values to clipboard"))]:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1310
                button = wx.lib.buttons.GenBitmapButton(self, 
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1311
                      bitmap=GetBitmap(bitmap), 
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1312
                      size=wx.Size(28, 28), style=wx.NO_BORDER)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1313
                button.SetToolTipString(help)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1314
                setattr(self, name, button)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1315
                self.Bind(wx.EVT_BUTTON, getattr(self, "On" + name), button)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1316
                graphics_button_sizer.AddWindow(button, border=5, flag=wx.LEFT)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1317
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1318
            self.CanvasPosition = wx.ScrollBar(self, 
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1319
                  size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1320
            self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, 
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1321
                  self.OnPositionChanging, self.CanvasPosition)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1322
            self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP, 
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1323
                  self.OnPositionChanging, self.CanvasPosition)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1324
            self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEDOWN, 
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1325
                  self.OnPositionChanging, self.CanvasPosition)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1326
            self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP, 
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1327
                  self.OnPositionChanging, self.CanvasPosition)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1328
            self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, 
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1329
                  self.OnPositionChanging, self.CanvasPosition)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1330
            main_sizer.AddWindow(self.CanvasPosition, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1331
            
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1332
            self.TickSizer = wx.BoxSizer(wx.HORIZONTAL)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1333
            main_sizer.AddSizer(self.TickSizer, border=5, flag=wx.ALL|wx.GROW)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1334
            
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1335
            self.TickLabel = wx.StaticText(self)
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1336
            self.TickSizer.AddWindow(self.TickLabel, border=5, flag=wx.RIGHT)
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1337
            
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1338
            self.MaskLabel = wx.TextCtrl(self, style=wx.TE_READONLY|wx.TE_CENTER|wx.NO_BORDER)
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1339
            self.TickSizer.AddWindow(self.MaskLabel, 1, border=5, flag=wx.RIGHT|wx.GROW)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1340
            
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1341
            self.TickTimeLabel = wx.StaticText(self)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1342
            self.TickSizer.AddWindow(self.TickTimeLabel)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1343
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1344
            self.GraphicsWindow = wx.ScrolledWindow(self, style=wx.HSCROLL|wx.VSCROLL)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1345
            self.GraphicsWindow.SetBackgroundColour(wx.WHITE)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1346
            self.GraphicsWindow.SetDropTarget(DebugVariableDropTarget(self))
988
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  1347
            self.GraphicsWindow.Bind(wx.EVT_ERASE_BACKGROUND, self.OnGraphicsWindowEraseBackground)
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  1348
            self.GraphicsWindow.Bind(wx.EVT_PAINT, self.OnGraphicsWindowPaint)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1349
            self.GraphicsWindow.Bind(wx.EVT_SIZE, self.OnGraphicsWindowResize)
1040
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  1350
            self.GraphicsWindow.Bind(wx.EVT_MOUSEWHEEL, self.OnGraphicsWindowMouseWheel)
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  1351
            
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1352
            main_sizer.AddWindow(self.GraphicsWindow, 1, flag=wx.GROW)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1353
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1354
            self.GraphicsSizer = wx.BoxSizer(wx.VERTICAL)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1355
            self.GraphicsWindow.SetSizer(self.GraphicsSizer)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1356
            
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
  1357
        else:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1358
            main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1359
            main_sizer.AddGrowableCol(0)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1360
            main_sizer.AddGrowableRow(1)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1361
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1362
            button_sizer = wx.BoxSizer(wx.HORIZONTAL)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1363
            main_sizer.AddSizer(button_sizer, border=5, 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1364
                  flag=wx.ALIGN_RIGHT|wx.ALL)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1365
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1366
            for name, bitmap, help in [
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1367
                    ("DeleteButton", "remove_element", _("Remove debug variable")),
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1368
                    ("UpButton", "up", _("Move debug variable up")),
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1369
                    ("DownButton", "down", _("Move debug variable down"))]:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1370
                button = wx.lib.buttons.GenBitmapButton(self, bitmap=GetBitmap(bitmap), 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1371
                      size=wx.Size(28, 28), style=wx.NO_BORDER)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1372
                button.SetToolTipString(help)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1373
                setattr(self, name, button)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1374
                button_sizer.AddWindow(button, border=5, flag=wx.LEFT)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1375
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1376
            self.VariablesGrid = CustomGrid(self, size=wx.Size(-1, 150), style=wx.VSCROLL)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1377
            self.VariablesGrid.SetDropTarget(DebugVariableDropTarget(self, self.VariablesGrid))
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1378
            self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1379
                  self.OnVariablesGridCellRightClick)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1380
            self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, 
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1381
                  self.OnVariablesGridCellLeftClick)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1382
            main_sizer.AddWindow(self.VariablesGrid, flag=wx.GROW)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1383
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1384
            self.Table = DebugVariableTable(self, [], GetDebugVariablesTableColnames())
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1385
            self.VariablesGrid.SetTable(self.Table)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1386
            self.VariablesGrid.SetButtons({"Delete": self.DeleteButton,
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1387
                                           "Up": self.UpButton,
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1388
                                           "Down": self.DownButton})
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1389
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1390
            def _AddVariable(new_row):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1391
                return self.VariablesGrid.GetGridCursorRow()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1392
            setattr(self.VariablesGrid, "_AddRow", _AddVariable)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1393
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1394
            def _DeleteVariable(row):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1395
                item = self.Table.GetItem(row)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1396
                self.RemoveDataConsumer(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1397
                self.Table.RemoveItem(row)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1398
                self.RefreshView()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1399
            setattr(self.VariablesGrid, "_DeleteRow", _DeleteVariable)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1400
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1401
            def _MoveVariable(row, move):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1402
                new_row = max(0, min(row + move, self.Table.GetNumberRows() - 1))
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1403
                if new_row != row:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1404
                    self.Table.MoveItem(row, new_row)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1405
                    self.RefreshView()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1406
                return new_row
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1407
            setattr(self.VariablesGrid, "_MoveRow", _MoveVariable)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1408
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1409
            self.VariablesGrid.SetRowLabelSize(0)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1410
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1411
            self.GridColSizes = [200, 100]
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1412
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1413
            for col in range(self.Table.GetNumberCols()):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1414
                attr = wx.grid.GridCellAttr()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1415
                attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1416
                self.VariablesGrid.SetColAttr(col, attr)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1417
                self.VariablesGrid.SetColSize(col, self.GridColSizes[col])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1418
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1419
            self.Table.ResetView(self.VariablesGrid)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1420
            self.VariablesGrid.RefreshButtons()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1421
        
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1422
        DebugViewer.__init__(self, producer, True)
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1423
        
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1424
        self.SetSizer(main_sizer)
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1425
    
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1426
    def SetTickTime(self, ticktime=0):
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1427
        if USE_MPL:
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1428
            self.Ticktime = ticktime
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1429
            if self.Ticktime == 0:
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1430
                self.Ticktime = MILLISECOND
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1431
            self.CurrentRange = RANGE_VALUES[
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1432
                self.CanvasRange.GetSelection()][1] / self.Ticktime
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1433
    
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1434
    def SetDataProducer(self, producer):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1435
        DebugViewer.SetDataProducer(self, producer)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1436
        
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1437
        if USE_MPL:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1438
            if self.DataProducer is not None:
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1439
                self.SetTickTime(self.DataProducer.GetTicktime())
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1440
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1441
    def RefreshNewData(self, *args, **kwargs):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1442
        if self.HasNewData or self.Force:
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1443
            self.HasNewData = False
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1444
            self.RefreshView(only_values=True)
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1445
        DebugViewer.RefreshNewData(self, *args, **kwargs)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1446
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1447
    def NewDataAvailable(self, tick, *args, **kwargs):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1448
        if USE_MPL and tick is not None:
927
bd3e5b65e8be Fix bug when resetting graphs values
Laurent Bessard
parents: 925
diff changeset
  1449
            if len(self.Ticks) == 0:
bd3e5b65e8be Fix bug when resetting graphs values
Laurent Bessard
parents: 925
diff changeset
  1450
                self.StartTick = tick 
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1451
            self.Ticks = numpy.append(self.Ticks, [tick])
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1452
            if not self.Fixed or tick < self.StartTick + self.CurrentRange:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1453
                self.StartTick = max(self.StartTick, tick - self.CurrentRange)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1454
            if self.Fixed and self.Ticks[-1] - self.Ticks[0] < self.CurrentRange:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1455
                self.Force = True
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1456
        DebugViewer.NewDataAvailable(self, tick, *args, **kwargs)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1457
    
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1458
    def ForceRefresh(self):
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1459
        self.Force = True
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1460
        wx.CallAfter(self.NewDataAvailable, None, True)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1461
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1462
    def RefreshGraphicsSizer(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1463
        self.GraphicsSizer.Clear()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1464
        
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1465
        for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1466
            self.GraphicsSizer.AddWindow(panel, flag=wx.GROW)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1467
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1468
        self.GraphicsSizer.Layout()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1469
        self.RefreshGraphicsWindowScrollbars()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1470
    
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1471
    def SetCanvasPosition(self, tick):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1472
        tick = max(self.Ticks[0], min(tick, self.Ticks[-1] - self.CurrentRange))
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1473
        self.StartTick = self.Ticks[numpy.argmin(numpy.abs(self.Ticks - tick))]
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1474
        self.Fixed = True
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1475
        self.RefreshCanvasPosition()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1476
        self.ForceRefresh()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1477
    
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1478
    def SetCursorTick(self, cursor_tick):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1479
        self.CursorTick = cursor_tick
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1480
        self.Fixed = True
1084
baa09a1c7b15 Fixed bug in DebugVariablePanel, cursor not reset when graphs were reset
Laurent Bessard
parents: 1044
diff changeset
  1481
        self.UpdateCursorTick() 
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1482
    
1174
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1483
    def MoveCursorTick(self, move):
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1484
        if self.CursorTick is not None:
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1485
            cursor_tick = max(self.Ticks[0], 
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1486
                          min(self.CursorTick + move, 
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1487
                              self.Ticks[-1]))
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1488
            cursor_tick_idx = numpy.argmin(numpy.abs(self.Ticks - cursor_tick))
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1489
            if self.Ticks[cursor_tick_idx] == self.CursorTick:
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1490
                cursor_tick_idx = max(0, 
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1491
                                  min(cursor_tick_idx + abs(move) / move, 
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1492
                                      len(self.Ticks) - 1))
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1493
            self.CursorTick = self.Ticks[cursor_tick_idx]
1174
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1494
            self.StartTick = max(self.Ticks[
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1495
                                numpy.argmin(numpy.abs(self.Ticks - 
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1496
                                        self.CursorTick + self.CurrentRange))],
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1497
                             min(self.StartTick, self.CursorTick))
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1498
            self.RefreshCanvasPosition()
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1499
            self.UpdateCursorTick() 
9cc1a3fa9619 Add support for moving cursor in Debug Graphs using arrow keys
Laurent Bessard
parents: 1102
diff changeset
  1500
            
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1501
    def ResetCursorTick(self):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1502
        self.CursorTick = None
1084
baa09a1c7b15 Fixed bug in DebugVariablePanel, cursor not reset when graphs were reset
Laurent Bessard
parents: 1044
diff changeset
  1503
        self.UpdateCursorTick()
baa09a1c7b15 Fixed bug in DebugVariablePanel, cursor not reset when graphs were reset
Laurent Bessard
parents: 1044
diff changeset
  1504
    
baa09a1c7b15 Fixed bug in DebugVariablePanel, cursor not reset when graphs were reset
Laurent Bessard
parents: 1044
diff changeset
  1505
    def UpdateCursorTick(self):
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1506
        for panel in self.GraphicPanels:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1507
            if isinstance(panel, DebugVariableGraphic):
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1508
                panel.SetCursorTick(self.CursorTick)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1509
        self.ForceRefresh()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1510
    
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1511
    def StartDragNDrop(self, panel, item, x_mouse, y_mouse, x_mouse_start, y_mouse_start):
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1512
        if len(panel.GetItems()) > 1:
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1513
            self.DraggingAxesPanel = DebugVariableGraphic(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1514
            self.DraggingAxesPanel.SetCursorTick(self.CursorTick)
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1515
            width, height = panel.GetSize()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1516
            self.DraggingAxesPanel.SetSize(wx.Size(width, height))
1044
41bd726aa23c Fixed bugs in DebugVariablePanel
Laurent Bessard
parents: 1043
diff changeset
  1517
            self.DraggingAxesPanel.ResetGraphics()
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1518
            self.DraggingAxesPanel.SetPosition(wx.Point(0, -height))
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1519
        else:
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1520
            self.DraggingAxesPanel = panel
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1521
        self.DraggingAxesBoundingBox = panel.GetAxesBoundingBox(absolute=True)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1522
        self.DraggingAxesMousePos = wx.Point(
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1523
            x_mouse_start - self.DraggingAxesBoundingBox.x, 
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1524
            y_mouse_start - self.DraggingAxesBoundingBox.y)
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1525
        self.MoveDragNDrop(x_mouse, y_mouse)
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1526
        
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1527
    def MoveDragNDrop(self, x_mouse, y_mouse):
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1528
        self.DraggingAxesBoundingBox.x = x_mouse - self.DraggingAxesMousePos.x
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1529
        self.DraggingAxesBoundingBox.y = y_mouse - self.DraggingAxesMousePos.y
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1530
        self.RefreshHighlight(x_mouse, y_mouse)
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1531
    
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1532
    def RefreshHighlight(self, x_mouse, y_mouse):
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1533
        for idx, panel in enumerate(self.GraphicPanels):
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1534
            x, y = panel.GetPosition()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1535
            width, height = panel.GetSize()
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1536
            rect = wx.Rect(x, y, width, height)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1537
            if (rect.InsideXY(x_mouse, y_mouse) or 
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1538
                idx == 0 and y_mouse < 0 or
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1539
                idx == len(self.GraphicPanels) - 1 and y_mouse > panel.GetPosition()[1]):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1540
                panel.OnDragging(x_mouse - x, y_mouse - y)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1541
            else:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1542
                panel.SetHighlight(HIGHLIGHT_NONE)
962
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1543
        if wx.Platform == "__WXMSW__":
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1544
            self.RefreshView()
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1545
        else:
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1546
            self.ForceRefresh()
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1547
    
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1548
    def ResetHighlight(self):
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1549
        for panel in self.GraphicPanels:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1550
            panel.SetHighlight(HIGHLIGHT_NONE)
962
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1551
        if wx.Platform == "__WXMSW__":
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1552
            self.RefreshView()
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1553
        else:
c0dcbbdb0bb1 Fix bug on Windows when drag'n dropping variable to DebugVariablePanel, panel not refreshed
Laurent Bessard
parents: 952
diff changeset
  1554
            self.ForceRefresh()
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1555
    
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1556
    def IsDragging(self):
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1557
        return self.DraggingAxesPanel is not None
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1558
    
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1559
    def GetDraggingAxesClippingRegion(self, panel):
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1560
        x, y = panel.GetPosition()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1561
        width, height = panel.GetSize()
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1562
        bbox = wx.Rect(x, y, width, height)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1563
        bbox = bbox.Intersect(self.DraggingAxesBoundingBox)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1564
        bbox.x -= x
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1565
        bbox.y -= y
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1566
        return bbox
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1567
    
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1568
    def GetDraggingAxesPosition(self, panel):
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1569
        x, y = panel.GetPosition()
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1570
        return wx.Point(self.DraggingAxesBoundingBox.x - x,
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1571
                        self.DraggingAxesBoundingBox.y - y)
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1572
    
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1573
    def StopDragNDrop(self, variable, x_mouse, y_mouse):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1574
        if self.DraggingAxesPanel not in self.GraphicPanels:
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1575
            self.DraggingAxesPanel.Destroy()
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1576
        self.DraggingAxesPanel = None
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1577
        self.DraggingAxesBoundingBox = None
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1578
        self.DraggingAxesMousePos = None
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1579
        for idx, panel in enumerate(self.GraphicPanels):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1580
            panel.SetHighlight(HIGHLIGHT_NONE)
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1581
            xw, yw = panel.GetPosition()
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1582
            width, height = panel.GetSize()
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1583
            bbox = wx.Rect(xw, yw, width, height)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1584
            if bbox.InsideXY(x_mouse, y_mouse):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1585
                panel.ShowButtons(True)
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1586
                merge_type = GRAPH_PARALLEL
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1587
                if isinstance(panel, DebugVariableText) or panel.Is3DCanvas():
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1588
                    if y_mouse > yw + height / 2:
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1589
                        idx += 1
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1590
                    wx.CallAfter(self.MoveValue, variable, idx)
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1591
                else:
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1592
                    rect = panel.GetAxesBoundingBox(True)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1593
                    if rect.InsideXY(x_mouse, y_mouse):
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1594
                        merge_rect = wx.Rect(rect.x, rect.y, rect.width / 2., rect.height)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1595
                        if merge_rect.InsideXY(x_mouse, y_mouse):
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1596
                            merge_type = GRAPH_ORTHOGONAL
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1597
                        wx.CallAfter(self.MergeGraphs, variable, idx, merge_type, force=True)
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1598
                    else:
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1599
                        if y_mouse > yw + height / 2:
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1600
                            idx += 1
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1601
                        wx.CallAfter(self.MoveValue, variable, idx)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1602
                self.ForceRefresh()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1603
                return 
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1604
        width, height = self.GraphicsWindow.GetVirtualSize()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1605
        rect = wx.Rect(0, 0, width, height)
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1606
        if rect.InsideXY(x_mouse, y_mouse):
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1607
            wx.CallAfter(self.MoveValue, variable, len(self.GraphicPanels))
925
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1608
        self.ForceRefresh()
5f9dd88a605b Added support for drag'n drop variable from one graph to another with visible graph
Laurent Bessard
parents: 924
diff changeset
  1609
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1610
    def RefreshView(self, only_values=False):
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1611
        if USE_MPL:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1612
            self.RefreshCanvasPosition()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1613
            
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1614
            width, height = self.GraphicsWindow.GetVirtualSize()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1615
            bitmap = wx.EmptyBitmap(width, height)
946
9343740603f5 Fix bug on Windows with wxPaintDC
Laurent Bessard
parents: 945
diff changeset
  1616
            dc = wx.BufferedDC(wx.ClientDC(self.GraphicsWindow), bitmap)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1617
            dc.Clear()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1618
            dc.BeginDrawing()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1619
            if self.DraggingAxesPanel is not None:
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1620
                destBBox = self.DraggingAxesBoundingBox
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1621
                srcBBox = self.DraggingAxesPanel.GetAxesBoundingBox()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1622
                
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1623
                srcBmp = _convert_agg_to_wx_bitmap(self.DraggingAxesPanel.get_renderer(), None)
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1624
                srcDC = wx.MemoryDC()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1625
                srcDC.SelectObject(srcBmp)
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1626
                    
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1627
                dc.Blit(destBBox.x, destBBox.y, 
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1628
                        int(destBBox.width), int(destBBox.height), 
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1629
                        srcDC, srcBBox.x, srcBBox.y)
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1630
            dc.EndDrawing()
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1631
            
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1632
            if not self.Fixed or self.Force:
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1633
                self.Force = False
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1634
                refresh_graphics = True
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1635
            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1636
                refresh_graphics = False
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1637
            
929
c562031146e4 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 928
diff changeset
  1638
            if self.DraggingAxesPanel is not None and self.DraggingAxesPanel not in self.GraphicPanels:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1639
                self.DraggingAxesPanel.RefreshViewer(refresh_graphics)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1640
            for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1641
                if isinstance(panel, DebugVariableGraphic):
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1642
                    panel.RefreshViewer(refresh_graphics)
907
591cb3d96980 Fixed performance issue with matplotlib in DebugVariablePanel and hide 3D graphics when not needed
Laurent Bessard
parents: 905
diff changeset
  1643
                else:
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1644
                    panel.RefreshViewer()
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1645
            
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1646
            if self.CursorTick is not None:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1647
                tick = self.CursorTick
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1648
            elif len(self.Ticks) > 0:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1649
                tick = self.Ticks[-1]
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1650
            else:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1651
                tick = None
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1652
            if tick is not None:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1653
                self.TickLabel.SetLabel("Tick: %d" % tick)
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1654
                tick_duration = int(tick * self.Ticktime)
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1655
                not_null = False
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1656
                duration = ""
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1657
                for value, format in [(tick_duration / DAY, "%dd"),
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1658
                                      ((tick_duration % DAY) / HOUR, "%dh"),
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1659
                                      ((tick_duration % HOUR) / MINUTE, "%dm"),
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1660
                                      ((tick_duration % MINUTE) / SECOND, "%ds")]:
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1661
                    
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1662
                    if value > 0 or not_null:
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1663
                        duration += format % value
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1664
                        not_null = True
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1665
                
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1666
                duration += "%gms" % (float(tick_duration % SECOND) / MILLISECOND) 
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1667
                self.TickTimeLabel.SetLabel("t: %s" % duration)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1668
            else:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1669
                self.TickLabel.SetLabel("")
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1670
                self.TickTimeLabel.SetLabel("")
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1671
            self.TickSizer.Layout()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1672
        else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1673
            self.Freeze()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1674
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1675
            if only_values:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1676
                for col in xrange(self.Table.GetNumberCols()):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1677
                    if self.Table.GetColLabelValue(col, False) == "Value":
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1678
                        for row in xrange(self.Table.GetNumberRows()):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1679
                            self.VariablesGrid.SetCellValue(row, col, str(self.Table.GetValueByName(row, "Value")))
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1680
            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1681
                self.Table.ResetView(self.VariablesGrid)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1682
            self.VariablesGrid.RefreshButtons()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1683
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1684
            self.Thaw()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1685
        
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1686
    def UnregisterObsoleteData(self):
1176
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1174
diff changeset
  1687
        self.SubscribeAllDataConsumers()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1688
        if USE_MPL:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1689
            if self.DataProducer is not None:
1192
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1690
                if self.DataProducer is not None:
d8783c0c7d80 Fixed bugs in DebugVariablePanel with ticktime modifications
Laurent Bessard
parents: 1191
diff changeset
  1691
                    self.SetTickTime(self.DataProducer.GetTicktime())
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1692
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1693
            for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1694
                panel.UnregisterObsoleteData()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1695
                if panel.IsEmpty():
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1696
                    if panel.HasCapture():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1697
                        panel.ReleaseMouse()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1698
                    self.GraphicPanels.remove(panel)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1699
                    panel.Destroy()
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1700
            
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1701
            self.ResetVariableNameMask()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1702
            self.RefreshGraphicsSizer()
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1703
            self.ForceRefresh()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1704
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1705
        else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1706
            items = [(idx, item) for idx, item in enumerate(self.Table.GetData())]
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1707
            items.reverse()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1708
            for idx, item in items:
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
  1709
                iec_path = item.GetVariable()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1710
                if self.GetDataType(iec_path) is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1711
                    self.RemoveDataConsumer(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1712
                    self.Table.RemoveItem(idx)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1713
                else:
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
  1714
                    self.AddDataConsumer(iec_path.upper(), item)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1715
                    item.RefreshVariableType()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1716
            self.Freeze()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1717
            self.Table.ResetView(self.VariablesGrid)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1718
            self.VariablesGrid.RefreshButtons()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1719
            self.Thaw()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1720
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1721
    def ResetView(self):
1176
f4b434672204 Moved and rewrote DebugViewer and DebusDataConsumer classes
Laurent Bessard
parents: 1174
diff changeset
  1722
        self.UnsubscribeAllDataConsumers()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1723
        if USE_MPL:
927
bd3e5b65e8be Fix bug when resetting graphs values
Laurent Bessard
parents: 925
diff changeset
  1724
            self.Fixed = False
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1725
            for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1726
                panel.Destroy()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1727
            self.GraphicPanels = []
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1728
            self.ResetVariableNameMask()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1729
            self.RefreshGraphicsSizer()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1730
        else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1731
            self.Table.Empty()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1732
            self.Freeze()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1733
            self.Table.ResetView(self.VariablesGrid)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1734
            self.VariablesGrid.RefreshButtons()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1735
            self.Thaw()
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1736
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1737
    def RefreshCanvasPosition(self):
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1738
        if len(self.Ticks) > 0:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1739
            pos = int(self.StartTick - self.Ticks[0])
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1740
            range = int(self.Ticks[-1] - self.Ticks[0])
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1741
        else:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1742
            pos = 0
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1743
            range = 0
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1744
        self.CanvasPosition.SetScrollbar(pos, self.CurrentRange, range, self.CurrentRange)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1745
    
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1746
    def GetForceVariableMenuFunction(self, iec_path, item):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1747
        iec_type = self.GetDataType(iec_path)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1748
        def ForceVariableFunction(event):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1749
            if iec_type is not None:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1750
                dialog = ForceVariableDialog(self, iec_type, str(item.GetValue()))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1751
                if dialog.ShowModal() == wx.ID_OK:
1102
cd4a996ddaa7 Fixed bug with debugging global variables
Laurent Bessard
parents: 1089
diff changeset
  1752
                    self.ForceDataValue(iec_path.upper(), dialog.GetValue())
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1753
        return ForceVariableFunction
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1754
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1755
    def GetReleaseVariableMenuFunction(self, iec_path):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1756
        def ReleaseVariableFunction(event):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1757
            self.ReleaseDataValue(iec_path)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1758
        return ReleaseVariableFunction
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1759
    
892
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1760
    def OnVariablesGridCellLeftClick(self, event):
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1761
        if event.GetCol() == 0:
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1762
            row = event.GetRow()
898
6b2958f04f30 Adding drag'n drop of debug variable from DebugVariable grid and PouInstance variable list
Laurent Bessard
parents: 895
diff changeset
  1763
            data = wx.TextDataObject(str((self.Table.GetValueByName(row, "Variable"), "debug")))
892
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1764
            dragSource = wx.DropSource(self.VariablesGrid)
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1765
            dragSource.SetData(data)
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1766
            dragSource.DoDragDrop()
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1767
        event.Skip()
771581a6b0be Fix bug with representation of string variable value in DebugVariablePanel
Laurent Bessard
parents: 888
diff changeset
  1768
    
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1769
    def OnVariablesGridCellRightClick(self, event):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1770
        row, col = event.GetRow(), event.GetCol()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1771
        if self.Table.GetColLabelValue(col, False) == "Value":
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1772
            iec_path = self.Table.GetValueByName(row, "Variable").upper()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1773
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1774
            menu = wx.Menu(title='')
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1775
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1776
            new_id = wx.NewId()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1777
            AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Force value"))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1778
            self.Bind(wx.EVT_MENU, self.GetForceVariableMenuFunction(iec_path.upper(), self.Table.GetItem(row)), id=new_id)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1779
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1780
            new_id = wx.NewId()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1781
            AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Release value"))
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1782
            self.Bind(wx.EVT_MENU, self.GetReleaseVariableMenuFunction(iec_path.upper()), id=new_id)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1783
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1784
            if self.Table.IsForced(row):
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1785
                menu.Enable(new_id, True)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1786
            else:
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1787
                menu.Enable(new_id, False)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1788
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1789
            self.PopupMenu(menu)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1790
            
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1791
            menu.Destroy()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1792
        event.Skip()
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1793
    
932
ebe63100b6d7 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 931
diff changeset
  1794
    def ChangeRange(self, dir, tick=None):
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1795
        current_range = self.CurrentRange
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1796
        current_range_idx = self.CanvasRange.GetSelection()
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
  1797
        new_range_idx = max(0, min(current_range_idx + dir, len(RANGE_VALUES) - 1))
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1798
        if new_range_idx != current_range_idx:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1799
            self.CanvasRange.SetSelection(new_range_idx)
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
  1800
            self.CurrentRange = RANGE_VALUES[new_range_idx][1] / self.Ticktime
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1801
            if len(self.Ticks) > 0:
932
ebe63100b6d7 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 931
diff changeset
  1802
                if tick is None:
ebe63100b6d7 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 931
diff changeset
  1803
                    tick = self.StartTick + self.CurrentRange / 2.
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1804
                new_start_tick = tick - (tick - self.StartTick) * self.CurrentRange / current_range 
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1805
                self.StartTick = self.Ticks[numpy.argmin(numpy.abs(self.Ticks - new_start_tick))]
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1806
                self.Fixed = self.StartTick < self.Ticks[-1] - self.CurrentRange
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1807
            self.ForceRefresh()
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1808
    
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1809
    def RefreshRange(self):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1810
        if len(self.Ticks) > 0:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1811
            if self.Fixed and self.Ticks[-1] - self.Ticks[0] < self.CurrentRange:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1812
                self.Fixed = False
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1813
            if self.Fixed:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1814
                self.StartTick = min(self.StartTick, self.Ticks[-1] - self.CurrentRange)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1815
            else:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1816
                self.StartTick = max(self.Ticks[0], self.Ticks[-1] - self.CurrentRange)
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1817
        self.ForceRefresh()
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1818
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1819
    def OnRangeChanged(self, event):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1820
        try:
1191
5237f87e035f Fixed values in DebugVariablePanel range selection ComboBox
Laurent Bessard
parents: 1190
diff changeset
  1821
            self.CurrentRange = RANGE_VALUES[self.CanvasRange.GetSelection()][1] / self.Ticktime
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1822
        except ValueError, e:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1823
            self.CanvasRange.SetValue(str(self.CurrentRange))
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1824
        wx.CallAfter(self.RefreshRange)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1825
        event.Skip()
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1826
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1827
    def OnCurrentButton(self, event):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1828
        if len(self.Ticks) > 0:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1829
            self.StartTick = max(self.Ticks[0], self.Ticks[-1] - self.CurrentRange)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1830
            self.Fixed = False
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1831
            self.ResetCursorTick()
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1832
        event.Skip()
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1833
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1834
    def CopyDataToClipboard(self, variables):
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1835
        text = "tick;%s;\n" % ";".join([item.GetVariable() for item, data in variables])
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1836
        next_tick = NextTick(variables)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1837
        while next_tick is not None:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1838
            values = []
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1839
            for item, data in variables:
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1840
                if len(data) > 0:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1841
                    if next_tick == data[0][0]:
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1842
                        var_type = item.GetVariableType()
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1843
                        if var_type in ["STRING", "WSTRING"]:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1844
                            value = item.GetRawValue(int(data.pop(0)[2]))
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1845
                            if var_type == "STRING":
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1846
                                values.append("'%s'" % value)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1847
                            else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1848
                                values.append('"%s"' % value)
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1849
                        else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1850
                            values.append("%.3f" % data.pop(0)[1])
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1851
                    else:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1852
                        values.append("")
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1853
                else:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1854
                    values.append("")
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1855
            text += "%d;%s;\n" % (next_tick, ";".join(values))
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1856
            next_tick = NextTick(variables)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1857
        self.ParentWindow.SetCopyBuffer(text)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1858
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1859
    def OnExportGraphButton(self, event):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1860
        variables = []
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1861
        if USE_MPL:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1862
            items = []
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1863
            for panel in self.GraphicPanels:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1864
                items.extend(panel.GetItems())
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1865
        else:
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1866
            items = self.Table.GetData()
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1867
        for item in items:
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1868
            if item.IsNumVariable():
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1869
                variables.append((item, [entry for entry in item.GetData()]))
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1870
        wx.CallAfter(self.CopyDataToClipboard, variables)
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1871
        event.Skip()
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1872
    
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1873
    def OnPositionChanging(self, event):
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1874
        if len(self.Ticks) > 0:
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1875
            self.StartTick = self.Ticks[0] + event.GetPosition()
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1876
            self.Fixed = True
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1877
            self.ForceRefresh()
902
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1878
        event.Skip()
ffa8ee5ee2fe Adding support for defining a time range for DebugVariablePanel graphics and navigating across the recording.
Laurent Bessard
parents: 898
diff changeset
  1879
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1880
    def GetRange(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1881
        return self.StartTick, self.StartTick + self.CurrentRange
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1882
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1883
    def GetViewerIndex(self, viewer):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1884
        if viewer in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1885
            return self.GraphicPanels.index(viewer)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1886
        return None
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1887
    
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1888
    def IsViewerFirst(self, viewer):
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1889
        return viewer == self.GraphicPanels[0]
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1890
    
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1891
    def IsViewerLast(self, viewer):
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1892
        return viewer == self.GraphicPanels[-1]
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1893
    
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1894
    def HighlightPreviousViewer(self, viewer):
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1895
        if self.IsViewerFirst(viewer):
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1896
            return
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1897
        idx = self.GetViewerIndex(viewer)
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1898
        if idx is None:
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1899
            return
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1900
        self.GraphicPanels[idx-1].SetHighlight(HIGHLIGHT_AFTER)
934
fc00c11feff5 Fixed highlights for dropping graphs between the others
Laurent Bessard
parents: 932
diff changeset
  1901
    
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1902
    def ResetVariableNameMask(self):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1903
        items = []
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1904
        for panel in self.GraphicPanels:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1905
            items.extend(panel.GetItems())
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1906
        if len(items) > 1:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1907
            self.VariableNameMask = reduce(compute_mask,
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1908
                [item.GetVariable().split('.') for item in items])
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1909
        elif len(items) > 0:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1910
            self.VariableNameMask = items[0].GetVariable().split('.')[:-1] + ['*']
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1911
        else:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1912
            self.VariableNameMask = []
931
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1913
        self.MaskLabel.ChangeValue(".".join(self.VariableNameMask))
da4970f6c46c Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 930
diff changeset
  1914
        self.MaskLabel.SetInsertionPoint(self.MaskLabel.GetLastPosition())
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1915
            
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1916
    def GetVariableNameMask(self):
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1917
        return self.VariableNameMask
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1918
    
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1919
    def InsertValue(self, iec_path, idx = None, force=False):
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1920
        if USE_MPL:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1921
            for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1922
                if panel.GetItem(iec_path) is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1923
                    return
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1924
            if idx is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1925
                idx = len(self.GraphicPanels)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1926
        else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1927
            for item in self.Table.GetData():
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1928
                if iec_path == item.GetVariable():
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1929
                    return
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1930
            if idx is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1931
                idx = self.Table.GetNumberRows()
1193
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
  1932
        item = DebugVariableItem(self, iec_path, USE_MPL)
814
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1933
        result = self.AddDataConsumer(iec_path.upper(), item)
5743cbdff669 Integration of PLCOpenEditor into Beremiz
Laurent Bessard
parents:
diff changeset
  1934
        if result is not None or force:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1935
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1936
            if USE_MPL:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1937
                if item.IsNumVariable():
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1938
                    panel = DebugVariableGraphic(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1939
                    if self.CursorTick is not None:
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1940
                        panel.SetCursorTick(self.CursorTick)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1941
                else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1942
                    panel = DebugVariableText(self.GraphicsWindow, self, [item])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1943
                if idx is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1944
                    self.GraphicPanels.insert(idx, panel)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1945
                else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1946
                    self.GraphicPanels.append(panel)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1947
                self.ResetVariableNameMask()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1948
                self.RefreshGraphicsSizer()
1008
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
  1949
                self.ForceRefresh()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1950
            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1951
                self.Table.InsertItem(idx, item)
1008
1e5d285864f6 Fixed bugs in DebugVariablePanel when matplotlib not installed
Laurent Bessard
parents: 988
diff changeset
  1952
                self.RefreshView()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1953
    
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1954
    def MoveValue(self, iec_path, idx = None):
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1955
        if idx is None:
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1956
            idx = len(self.GraphicPanels)
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1957
        source_panel = None
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1958
        item = None
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1959
        for panel in self.GraphicPanels:
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1960
            item = panel.GetItem(iec_path)
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1961
            if item is not None:
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1962
                source_panel = panel
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1963
                break
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1964
        if source_panel is not None:
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1965
            source_panel.RemoveItem(item)
1041
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  1966
            source_size = source_panel.GetSize()
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1967
            if source_panel.IsEmpty():
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1968
                if source_panel.HasCapture():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  1969
                    source_panel.ReleaseMouse()
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1970
                self.GraphicPanels.remove(source_panel)
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1971
                source_panel.Destroy()
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1972
            
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1973
            if item.IsNumVariable():
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1974
                panel = DebugVariableGraphic(self.GraphicsWindow, self, [item], GRAPH_PARALLEL)
1041
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  1975
                panel.SetCanvasSize(source_size.width, source_size.height)
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1976
                if self.CursorTick is not None:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1977
                    panel.SetCursorTick(self.CursorTick)
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1978
            else:
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1979
                panel = DebugVariableText(self.GraphicsWindow, self, [item])
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1980
            self.GraphicPanels.insert(idx, panel)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  1981
            self.ResetVariableNameMask()
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1982
            self.RefreshGraphicsSizer()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  1983
            self.ForceRefresh()
919
4a36e38e51d3 Fix bug in DebugVariablePanel when manipulating graph layout and adding drag'n drop graph from parallel graphs and moving graphs order
Laurent Bessard
parents: 916
diff changeset
  1984
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1985
    def MergeGraphs(self, source, target_idx, merge_type, force=False):
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1986
        source_item = None
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1987
        source_panel = None
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1988
        for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1989
            source_item = panel.GetItem(source)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1990
            if source_item is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1991
                source_panel = panel
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  1992
                break
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1993
        if source_item is None:
1193
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
  1994
            item = DebugVariableItem(self, source, USE_MPL)
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1995
            if item.IsNumVariable():
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1996
                result = self.AddDataConsumer(source.upper(), item)
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1997
                if result is not None or force:
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  1998
                    source_item = item
945
c1159acb0886 Added support for drag'n dropping non-numeric variables
Laurent Bessard
parents: 943
diff changeset
  1999
        if source_item is not None and source_item.IsNumVariable():
1041
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2000
            if source_panel is not None:
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2001
                source_size = source_panel.GetSize()
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2002
            else:
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2003
                source_size = None
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2004
            target_panel = self.GraphicPanels[target_idx]
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2005
            graph_type = target_panel.GraphType
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2006
            if target_panel != source_panel:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2007
                if (merge_type == GRAPH_PARALLEL and graph_type != merge_type or
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  2008
                    merge_type == GRAPH_ORTHOGONAL and 
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2009
                    (graph_type == GRAPH_PARALLEL and len(target_panel.Items) > 1 or
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2010
                     graph_type == GRAPH_ORTHOGONAL and len(target_panel.Items) >= 3)):
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  2011
                    return
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  2012
                
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2013
                if source_panel is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2014
                    source_panel.RemoveItem(source_item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2015
                    if source_panel.IsEmpty():
943
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  2016
                        if source_panel.HasCapture():
da7f80e04a54 Fixed panels displaying non-numeric variables in DebugVariablePanel
Laurent Bessard
parents: 938
diff changeset
  2017
                            source_panel.ReleaseMouse()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2018
                        self.GraphicPanels.remove(source_panel)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2019
                        source_panel.Destroy()
936
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  2020
            elif (merge_type != graph_type and len(target_panel.Items) == 2):
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  2021
                target_panel.RemoveItem(source_item)
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  2022
            else:
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  2023
                target_panel = None
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  2024
                
364d178df2d3 Added button for exporting individual graph values to clipboard
Laurent Bessard
parents: 935
diff changeset
  2025
            if target_panel is not None:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2026
                target_panel.AddItem(source_item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2027
                target_panel.GraphType = merge_type
1041
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2028
                size = target_panel.GetSize()
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2029
                if merge_type == GRAPH_ORTHOGONAL:
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2030
                    target_panel.SetCanvasSize(size.width, size.width)
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2031
                elif source_size is not None:
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2032
                    target_panel.SetCanvasSize(size.width, size.height + source_size.height)
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2033
                else:
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2034
                    target_panel.SetCanvasSize(size.width, size.height)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2035
                target_panel.ResetGraphics()
909
852af7c6f0ef Adding support for change DebugVariablePanel 2D graphs layout using drag'n drop
Laurent Bessard
parents: 907
diff changeset
  2036
                
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  2037
                self.ResetVariableNameMask()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2038
                self.RefreshGraphicsSizer()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  2039
                self.ForceRefresh()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2040
    
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2041
    def DeleteValue(self, source_panel, item=None):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2042
        source_idx = self.GetViewerIndex(source_panel)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2043
        if source_idx is not None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2044
            
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2045
            if item is None:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2046
                source_panel.Clear()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2047
                source_panel.Destroy()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2048
                self.GraphicPanels.remove(source_panel)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  2049
                self.ResetVariableNameMask()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2050
                self.RefreshGraphicsSizer()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2051
            else:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2052
                source_panel.RemoveItem(item)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2053
                if source_panel.IsEmpty():
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2054
                    source_panel.Destroy()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2055
                    self.GraphicPanels.remove(source_panel)
928
a94e7fea7051 Improved matplotlib graphic debug panel implementation
Laurent Bessard
parents: 927
diff changeset
  2056
                    self.ResetVariableNameMask()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2057
                    self.RefreshGraphicsSizer()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  2058
            self.ForceRefresh()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2059
    
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
  2060
    def ResetGraphicsValues(self):
888
baf5dbfd28f4 Adding support for disabling 2D and 3D graphics in DebugVariablePanel when matplotlib is not installed
Laurent Bessard
parents: 887
diff changeset
  2061
        if USE_MPL:
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2062
            self.Ticks = numpy.array([])
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2063
            self.StartTick = 0
927
bd3e5b65e8be Fix bug when resetting graphs values
Laurent Bessard
parents: 925
diff changeset
  2064
            self.Fixed = False
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2065
            for panel in self.GraphicPanels:
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2066
                panel.ResetData()
1084
baa09a1c7b15 Fixed bug in DebugVariablePanel, cursor not reset when graphs were reset
Laurent Bessard
parents: 1044
diff changeset
  2067
            self.ResetCursorTick()
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2068
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2069
    def RefreshGraphicsWindowScrollbars(self):
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2070
        xstart, ystart = self.GraphicsWindow.GetViewStart()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2071
        window_size = self.GraphicsWindow.GetClientSize()
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2072
        vwidth, vheight = self.GraphicsSizer.GetMinSize()
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
  2073
        posx = max(0, min(xstart, (vwidth - window_size[0]) / SCROLLBAR_UNIT))
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
  2074
        posy = max(0, min(ystart, (vheight - window_size[1]) / SCROLLBAR_UNIT))
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2075
        self.GraphicsWindow.Scroll(posx, posy)
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2076
        self.GraphicsWindow.SetScrollbars(SCROLLBAR_UNIT, SCROLLBAR_UNIT, 
887
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
  2077
                vwidth / SCROLLBAR_UNIT, vheight / SCROLLBAR_UNIT, posx, posy)
d3c6c4ab8b28 Adding support for displaying graphs of debugged numeric variables in 2D and 3D in DebugVariablePanel
Laurent Bessard
parents: 878
diff changeset
  2078
    
988
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2079
    def OnGraphicsWindowEraseBackground(self, event):
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2080
        pass
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2081
    
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2082
    def OnGraphicsWindowPaint(self, event):
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2083
        self.RefreshView()
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2084
        event.Skip()
30e7571c10d0 Reduced flicker on LogViewer and DebugGraphPanel on Windows
Laurent Bessard
parents: 980
diff changeset
  2085
    
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2086
    def OnGraphicsWindowResize(self, event):
1041
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2087
        size = self.GetSize()
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2088
        for panel in self.GraphicPanels:
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2089
            panel_size = panel.GetSize()
1193
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
  2090
            if (isinstance(panel, DebugVariableGraphic) and 
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
  2091
                panel.GraphType == GRAPH_ORTHOGONAL and 
59c196884fec Moved and start to rewrite DebugVariablePanel splitting it into multiple files
Laurent Bessard
parents: 1192
diff changeset
  2092
                panel_size.width == panel_size.height):
1041
736ec395399a Fixed graph panel size when modifying DebugVariablePanel layout
Laurent Bessard
parents: 1040
diff changeset
  2093
                panel.SetCanvasSize(size.width, size.width)
916
697d8b77d716 Improved matplotlib graphic debug panel implementation, adding force, release, split and delete graph buttons, replacing data grid by adding panel displaying non-numeric data between graphs
Laurent Bessard
parents: 912
diff changeset
  2094
        self.RefreshGraphicsWindowScrollbars()
924
5f2cc382be8c Added support for displaying string variables variations in a graph and cursor on graphs
Laurent Bessard
parents: 919
diff changeset
  2095
        event.Skip()
1040
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  2096
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  2097
    def OnGraphicsWindowMouseWheel(self, event):
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  2098
        if self.VetoScrollEvent:
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  2099
            self.VetoScrollEvent = False
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  2100
        else:
af8a1aee3584 Fixed MouseWheel behavior in DebugVariablePanel, change graph range only if CTRL is pressed
Laurent Bessard
parents: 1008
diff changeset
  2101
            event.Skip()