GraphicViewer.py
author laurent
Tue, 27 Mar 2012 23:59:35 +0200
changeset 661 7891872e6fd7
parent 660 30c0371ac086
child 665 6a376615142e
permissions -rw-r--r--
Fix bug in debugger when transfer without having build before and and opening debug view before running PLC
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     1
#!/usr/bin/env python
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     3
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     4
#This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     5
#based on the plcopen standard. 
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     6
#
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     7
#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     8
#
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
     9
#See COPYING file for copyrights details.
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    10
#
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    11
#This library is free software; you can redistribute it and/or
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    12
#modify it under the terms of the GNU General Public
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    13
#License as published by the Free Software Foundation; either
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    14
#version 2.1 of the License, or (at your option) any later version.
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    15
#
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    16
#This library is distributed in the hope that it will be useful,
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    17
#but WITHOUT ANY WARRANTY; without even the implied warranty of
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    18
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    19
#General Public License for more details.
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    20
#
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    21
#You should have received a copy of the GNU General Public
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    22
#License along with this library; if not, write to the Free Software
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    23
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    24
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    25
import wx
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    26
import wx.lib.plot as plot
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
    27
import numpy
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    28
import math
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    29
from graphics.GraphicCommons import DebugViewer, MODE_SELECTION, MODE_MOTION
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
    30
from controls import EditorPanel
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    31
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    32
colours = ['blue', 'red', 'green', 'yellow', 'orange', 'purple', 'brown', 'cyan',
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    33
           'pink', 'grey']
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    34
markers = ['circle', 'dot', 'square', 'triangle', 'triangle_down', 'cross', 'plus', 'circle']
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    35
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    36
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    37
#-------------------------------------------------------------------------------
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    38
#                       Debug Variable Graphic Viewer class
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    39
#-------------------------------------------------------------------------------
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    40
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
    41
SECOND = 1000000000
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
    42
MINUTE = 60 * SECOND
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
    43
HOUR = 60 * MINUTE
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
    44
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    45
ZOOM_VALUES = map(lambda x:("x %.1f" % x, x), [math.sqrt(2) ** i for i in xrange(8)])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    46
RANGE_VALUES = map(lambda x: (str(x), x), [25 * 2 ** i for i in xrange(6)])
640
c32c169b8f63 Fixing segmentation fault in CustomEditableListBox on Windows when clicking on an header button while a value is being edited
laurent
parents: 632
diff changeset
    47
TIME_RANGE_VALUES = [("%ds" % i, i * SECOND) for i in (1, 2, 5, 10, 20, 30)] + \
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
    48
                    [("%dm" % i, i * MINUTE) for i in (1, 2, 5, 10, 20, 30)] + \
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
    49
                    [("%dh" % i, i * HOUR) for i in (1, 2, 3, 6, 12, 24)]
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    50
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    51
[ID_GRAPHICVIEWER, ID_GRAPHICVIEWERCANVAS, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    52
 ID_GRAPHICVIEWERCANVASRANGE, ID_GRAPHICVIEWERCANVASZOOM, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    53
 ID_GRAPHICVIEWERCANVASPOSITION, ID_GRAPHICVIEWERRESETBUTTON, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    54
 ID_GRAPHICVIEWERCURRENTBUTTON, ID_GRAPHICVIEWERSTATICTEXT1, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    55
 ID_GRAPHICVIEWERSTATICTEXT2, ID_GRAPHICVIEWERSTATICTEXT3, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    56
] = [wx.NewId() for _init_ctrls in range(10)]
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    57
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
    58
class GraphicViewer(EditorPanel, DebugViewer):
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    59
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    60
    def _init_coll_MainGridSizer_Items(self, parent):
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    61
        # generated method, don't edit
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    62
        parent.AddWindow(self.Canvas, 0, border=0, flag=wx.GROW)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    63
        parent.AddSizer(self.RangeSizer, 0, border=0, flag=wx.GROW)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    64
    
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    65
    def _init_coll_MainGridSizer_Growables(self, parent):
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    66
        # generated method, don't edit
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    67
        parent.AddGrowableCol(0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    68
        parent.AddGrowableRow(0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    69
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    70
    def _init_coll_RangeSizer_Items(self, parent):
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    71
        # generated method, don't edit
391
07447ee3538e Adding support for internationalization
laurent
parents: 374
diff changeset
    72
        parent.AddWindow(self.staticbox1, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    73
        parent.AddWindow(self.CanvasRange, 0, border=5, flag=wx.ALL)
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    74
        parent.AddWindow(self.staticbox3, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    75
        parent.AddWindow(self.CanvasZoom, 0, border=5, flag=wx.ALL)
391
07447ee3538e Adding support for internationalization
laurent
parents: 374
diff changeset
    76
        parent.AddWindow(self.staticText2, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    77
        parent.AddWindow(self.CanvasPosition, 0, border=5, flag=wx.GROW|wx.ALL)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    78
        parent.AddWindow(self.ResetButton, 0, border=5, flag=wx.ALL)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    79
        parent.AddWindow(self.CurrentButton, 0, border=5, flag=wx.ALL)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    80
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    81
    def _init_coll_RangeSizer_Growables(self, parent):
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    82
        # generated method, don't edit
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    83
        parent.AddGrowableCol(3)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    84
        parent.AddGrowableRow(0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    85
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    86
    def _init_sizers(self):
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    87
        # generated method, don't edit
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    88
        self.MainGridSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
    89
        self.RangeSizer = wx.FlexGridSizer(cols=8, hgap=0, rows=1, vgap=0)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    90
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    91
        self._init_coll_MainGridSizer_Items(self.MainGridSizer)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    92
        self._init_coll_MainGridSizer_Growables(self.MainGridSizer)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    93
        self._init_coll_RangeSizer_Items(self.RangeSizer)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    94
        self._init_coll_RangeSizer_Growables(self.RangeSizer)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
    95
        
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
    96
        self.Editor.SetSizer(self.MainGridSizer)
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
    97
    
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
    98
    def _init_Editor(self, prnt):
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
    99
        self.Editor = wx.Panel(prnt, ID_GRAPHICVIEWER, wx.DefaultPosition, 
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   100
                 wx.DefaultSize, 0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   101
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   102
        self.Canvas = plot.PlotCanvas(id=ID_GRAPHICVIEWERCANVAS, 
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   103
              name='Canvas', parent=self.Editor, pos=wx.Point(0, 0),
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   104
              size=wx.Size(0, 0), style=0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   105
        def _axisInterval(spec, lower, upper):
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   106
            if spec == 'border':
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   107
                if lower == upper:
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   108
                    return lower - 0.5, upper + 0.5
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   109
                else:
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   110
                    border = (upper - lower) * 0.05
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   111
                    return lower - border, upper + border
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   112
            else:
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   113
                return plot.PlotCanvas._axisInterval(self.Canvas, spec, lower, upper)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   114
        self.Canvas._axisInterval = _axisInterval
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   115
        self.Canvas.SetYSpec('border')
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   116
        self.Canvas.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnCanvasLeftDown)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   117
        self.Canvas.canvas.Bind(wx.EVT_LEFT_UP, self.OnCanvasLeftUp)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   118
        self.Canvas.canvas.Bind(wx.EVT_MOTION, self.OnCanvasMotion)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   119
        self.Canvas.canvas.Bind(wx.EVT_MOUSEWHEEL, self.OnCanvasMouseWheel)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   120
        
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   121
        self.staticbox1 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT1,
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   122
              label=_('Range:'), name='staticText1', parent=self.Editor,
391
07447ee3538e Adding support for internationalization
laurent
parents: 374
diff changeset
   123
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   124
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   125
        self.CanvasRange = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASRANGE,
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   126
              name='CanvasRange', parent=self.Editor, pos=wx.Point(0, 0),
640
c32c169b8f63 Fixing segmentation fault in CustomEditableListBox on Windows when clicking on an header button while a value is being edited
laurent
parents: 632
diff changeset
   127
              size=wx.Size(100, 28), style=wx.CB_READONLY)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   128
        self.Bind(wx.EVT_COMBOBOX, self.OnRangeChanged, id=ID_GRAPHICVIEWERCANVASRANGE)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   129
        
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   130
        self.staticbox3 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT3,
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   131
              label=_('Zoom:'), name='staticText3', parent=self.Editor,
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   132
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   133
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   134
        self.CanvasZoom = wx.ComboBox(id=ID_GRAPHICVIEWERCANVASZOOM,
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   135
              name='CanvasZoom', parent=self.Editor, pos=wx.Point(0, 0),
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   136
              size=wx.Size(70, 28), style=wx.CB_READONLY)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   137
        self.Bind(wx.EVT_COMBOBOX, self.OnZoomChanged, id=ID_GRAPHICVIEWERCANVASZOOM)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   138
        
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   139
        self.staticText2 = wx.StaticText(id=ID_GRAPHICVIEWERSTATICTEXT2,
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   140
              label=_('Position:'), name='staticText2', parent=self.Editor,
391
07447ee3538e Adding support for internationalization
laurent
parents: 374
diff changeset
   141
              pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   142
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   143
        self.CanvasPosition = wx.ScrollBar(id=ID_GRAPHICVIEWERCANVASPOSITION,
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   144
              name='Position', parent=self.Editor, pos=wx.Point(0, 0),
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   145
              size=wx.Size(0, 16), style=wx.SB_HORIZONTAL)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   146
        self.CanvasPosition.SetScrollbar(0, 10, 100, 10)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   147
        self.CanvasPosition.Bind(wx.EVT_SCROLL_THUMBTRACK, self.OnPositionChanging, 
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   148
              id = ID_GRAPHICVIEWERCANVASPOSITION)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   149
        self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEUP, self.OnPositionChanging, 
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   150
              id = ID_GRAPHICVIEWERCANVASPOSITION)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   151
        self.CanvasPosition.Bind(wx.EVT_SCROLL_LINEDOWN, self.OnPositionChanging, 
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   152
              id = ID_GRAPHICVIEWERCANVASPOSITION)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   153
        self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEUP, self.OnPositionChanging, 
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   154
              id = ID_GRAPHICVIEWERCANVASPOSITION)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   155
        self.CanvasPosition.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnPositionChanging, 
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   156
              id = ID_GRAPHICVIEWERCANVASPOSITION)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   157
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   158
        self.ResetButton = wx.Button(id=ID_GRAPHICVIEWERRESETBUTTON, label='Reset',
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   159
              name='ResetButton', parent=self.Editor, pos=wx.Point(0, 0),
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   160
              size=wx.Size(72, 24), style=0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   161
        self.Bind(wx.EVT_BUTTON, self.OnResetButton, id=ID_GRAPHICVIEWERRESETBUTTON)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   162
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   163
        self.CurrentButton = wx.Button(id=ID_GRAPHICVIEWERCURRENTBUTTON, label='Current',
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   164
              name='CurrentButton', parent=self.Editor, pos=wx.Point(0, 0),
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   165
              size=wx.Size(72, 24), style=0)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   166
        self.Bind(wx.EVT_BUTTON, self.OnCurrentButton, id=ID_GRAPHICVIEWERCURRENTBUTTON)
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   167
        
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   168
        self._init_sizers()
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   169
415
d3d8f8f0b678 controler (PLCControler) and debug data producer (PluginsRoot) are no longer the same thing
b.taylor@willowglen.ca
parents: 374
diff changeset
   170
    def __init__(self, parent, window, producer, instancepath = ""):
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   171
        EditorPanel.__init__(self, parent, "", window, None)
415
d3d8f8f0b678 controler (PLCControler) and debug data producer (PluginsRoot) are no longer the same thing
b.taylor@willowglen.ca
parents: 374
diff changeset
   172
        DebugViewer.__init__(self, producer, True, False)
361
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   173
        
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   174
        self.InstancePath = instancepath
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
   175
        self.RangeValues = None
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   176
        self.CursorIdx = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   177
        self.LastCursor = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   178
        self.CurrentMousePos = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   179
        self.CurrentMotionValue = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   180
        self.Dragging = False
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   181
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   182
        # Initialize Viewer mode to Selection mode
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   183
        self.Mode = MODE_SELECTION
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
   184
        
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   185
        self.Datas = []
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   186
        self.StartTick = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   187
        self.EndTick = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   188
        self.StartIdx = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   189
        self.EndIdx = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   190
        self.MinValue = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   191
        self.MaxValue = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   192
        self.YCenter = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   193
        self.CurrentZoom = 1
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   194
        self.Fixed = False
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
   195
        self.Ticktime = self.DataProducer.GetTicktime()
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
   196
        self.RefreshCanvasRange()
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   197
        
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   198
        for zoom_txt, zoom in ZOOM_VALUES:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   199
            self.CanvasZoom.Append(zoom_txt)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   200
        self.CanvasZoom.SetSelection(0)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   201
        
361
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   202
        self.AddDataConsumer(self.InstancePath.upper(), self)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   203
    
338
87e5015330ae Adding support for ToolTip on wire when debugging
lbessard
parents: 331
diff changeset
   204
    def __del__(self):
361
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   205
        DebugViewer.__del__(self)
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   206
        self.RemoveDataConsumer(self)
338
87e5015330ae Adding support for ToolTip on wire when debugging
lbessard
parents: 331
diff changeset
   207
    
586
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   208
    def GetTitle(self):
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   209
        if len(self.InstancePath) > 15:
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   210
            return "..." + self.InstancePath[-12:]
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   211
        return self.InstancePath
9aa96a36cf33 Moving variable panel from bottom notebook panel to POU editor panel
laurent
parents: 504
diff changeset
   212
    
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   213
    # Changes Viewer mode
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   214
    def SetMode(self, mode):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   215
        if self.Mode != mode or mode == MODE_SELECTION:    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   216
            if self.Mode == MODE_MOTION:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   217
                wx.CallAfter(self.Canvas.canvas.SetCursor, wx.NullCursor)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   218
            self.Mode = mode
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   219
        if self.Mode == MODE_MOTION:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   220
            wx.CallAfter(self.Canvas.canvas.SetCursor, wx.StockCursor(wx.CURSOR_HAND))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   221
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   222
    def ResetView(self, register=False):
338
87e5015330ae Adding support for ToolTip on wire when debugging
lbessard
parents: 331
diff changeset
   223
        self.Datas = []
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   224
        self.StartTick = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   225
        self.EndTick = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   226
        self.StartIdx = 0
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   227
        self.EndIdx = 0
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   228
        self.Fixed = False
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
   229
        self.Ticktime = self.DataProducer.GetTicktime()
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   230
        if register:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   231
            self.AddDataConsumer(self.InstancePath.upper(), self)
632
3ea55a5db68e Adding support for choosing graph range in duration instead of tick number when Common_Ticktime is available
laurent
parents: 586
diff changeset
   232
        self.RefreshCanvasRange()
338
87e5015330ae Adding support for ToolTip on wire when debugging
lbessard
parents: 331
diff changeset
   233
        self.RefreshView()
87e5015330ae Adding support for ToolTip on wire when debugging
lbessard
parents: 331
diff changeset
   234
    
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   235
    def RefreshNewData(self, *args, **kwargs):
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   236
        self.RefreshView(*args, **kwargs)
374
16a0a6cb1644 Bug on GraphicViewer with latest modifications fixed
greg
parents: 361
diff changeset
   237
        DebugViewer.RefreshNewData(self)
361
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   238
    
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   239
    def GetNearestData(self, tick, adjust):
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   240
        ticks = numpy.array(zip(*self.Datas)[0])
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   241
        new_cursor = numpy.argmin(abs(ticks - tick))
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   242
        if adjust == -1 and ticks[new_cursor] > tick and new_cursor > 0:
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   243
            new_cursor -= 1
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   244
        elif adjust == 1 and ticks[new_cursor] < tick and new_cursor < len(self.Datas):
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   245
            new_cursor += 1
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   246
        return new_cursor
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   247
    
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   248
    def GetBounds(self):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   249
        if self.StartIdx is None or self.EndIdx is None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   250
            self.StartIdx = self.GetNearestData(self.StartTick, -1)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   251
            self.EndIdx = self.GetNearestData(self.EndTick, 1)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   252
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   253
    def ResetBounds(self):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   254
        self.StartIdx = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   255
        self.EndIdx = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   256
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   257
    def RefreshCanvasRange(self):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   258
        if self.Ticktime == 0 and self.RangeValues != RANGE_VALUES:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   259
            self.RangeValues = RANGE_VALUES
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   260
            self.CanvasRange.Clear()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   261
            for text, value in RANGE_VALUES:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   262
                self.CanvasRange.Append(text)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   263
            self.CanvasRange.SetStringSelection(RANGE_VALUES[0][0])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   264
            self.CurrentRange = RANGE_VALUES[0][1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   265
        elif self.RangeValues != TIME_RANGE_VALUES:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   266
            self.RangeValues = TIME_RANGE_VALUES
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   267
            self.CanvasRange.Clear()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   268
            for text, value in TIME_RANGE_VALUES:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   269
                self.CanvasRange.Append(text)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   270
            self.CanvasRange.SetStringSelection(TIME_RANGE_VALUES[0][0])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   271
            self.CurrentRange = TIME_RANGE_VALUES[0][1] / self.Ticktime
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   272
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   273
    def RefreshView(self, force=True):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   274
        self.Freeze()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   275
        if force or not self.Fixed:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   276
            if (self.MinValue is not None and 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   277
                self.MaxValue is not None and 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   278
                self.MinValue != self.MaxValue):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   279
                Yrange = float(self.MaxValue - self.MinValue) / self.CurrentZoom
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   280
            else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   281
                Yrange = 2. / self.CurrentZoom
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   282
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   283
            if not self.Fixed and len(self.Datas) > 0:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   284
                self.YCenter = max(self.Datas[-1][1] - Yrange / 2, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   285
                               min(self.YCenter, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   286
                                   self.Datas[-1][1] + Yrange / 2))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   287
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   288
            var_name = self.InstancePath.split(".")[-1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   289
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   290
            self.GetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   291
            self.VariableGraphic = plot.PolyLine(self.Datas[self.StartIdx:self.EndIdx + 1], 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   292
                                                 legend=var_name, colour=colours[0])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   293
            self.GraphicsObject = plot.PlotGraphics([self.VariableGraphic], _("%s Graphics") % var_name, _("Tick"), _("Values"))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   294
            datas_length = len(self.Datas)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   295
            if datas_length > 1:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   296
                start = self.Datas[self.StartIdx][0]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   297
            else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   298
                start = 0.
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   299
            self.Canvas.Draw(self.GraphicsObject, 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   300
                             xAxis=(start, start + self.CurrentRange),
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   301
                             yAxis=(self.YCenter - Yrange * 1.1 / 2, self.YCenter + Yrange * 1.1 / 2))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   302
        self.RefreshScrollBar()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   303
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   304
        # Reset and draw cursor 
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   305
        self.ResetLastCursor()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   306
        self.RefreshCursor()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   307
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   308
        self.Thaw()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   309
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   310
    def GetInstancePath(self):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   311
        return self.InstancePath
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   312
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   313
    def IsViewing(self, tagname):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   314
        return self.InstancePath == tagname
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   315
    
504
f88e0ebd8fe4 Forced variable now supported in GraphicViewer
edouard
parents: 431
diff changeset
   316
    def NewValue(self, tick, value, forced=False):
361
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   317
        self.Datas.append((float(tick), {True:1., False:0.}.get(value, float(value))))
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   318
        if self.MinValue is None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   319
            self.MinValue = value
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   320
        else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   321
            self.MinValue = min(self.MinValue, value)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   322
        if self.MaxValue is None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   323
            self.MaxValue = value
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   324
        else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   325
            self.MaxValue = max(self.MaxValue, value)
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   326
        if not self.Fixed:
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   327
            self.GetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   328
            while int(self.Datas[self.StartIdx][0]) < tick - self.CurrentRange:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   329
                self.StartIdx += 1
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   330
            self.EndIdx += 1
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   331
            self.StartTick = self.Datas[self.StartIdx][0]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   332
            self.EndTick = self.StartTick + self.CurrentRange
361
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   333
        self.NewDataAvailable()
62570186dad4 Adding support for synchronize refreshing with tick and limit it to a defined period
greg
parents: 344
diff changeset
   334
    
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   335
    def RefreshScrollBar(self):
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   336
        if len(self.Datas) > 0:
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   337
            self.GetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   338
            pos = int(self.Datas[self.StartIdx][0] - self.Datas[0][0])
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   339
            range = int(self.Datas[-1][0] - self.Datas[0][0])
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   340
        else:
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   341
            pos = 0
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   342
            range = 0
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   343
        self.CanvasPosition.SetScrollbar(pos, self.CurrentRange, range, self.CurrentRange)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   344
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   345
    def RefreshRange(self):
648
95d165193770 Fix bug in GraphicViewer when changing range while no data received
laurent
parents: 642
diff changeset
   346
        if len(self.Datas) > 0:
95d165193770 Fix bug in GraphicViewer when changing range while no data received
laurent
parents: 642
diff changeset
   347
            if self.Fixed and self.Datas[-1][0] - self.Datas[0][0] < self.CurrentRange:
95d165193770 Fix bug in GraphicViewer when changing range while no data received
laurent
parents: 642
diff changeset
   348
                self.Fixed = False
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   349
            self.ResetBounds()
648
95d165193770 Fix bug in GraphicViewer when changing range while no data received
laurent
parents: 642
diff changeset
   350
            if self.Fixed:
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   351
                self.StartTick = min(self.StartTick, self.Datas[-1][0] - self.CurrentRange)
648
95d165193770 Fix bug in GraphicViewer when changing range while no data received
laurent
parents: 642
diff changeset
   352
            else:
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   353
                self.StartTick = max(self.Datas[0][0], self.EndTick - self.CurrentRange - 1)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   354
            self.EndTick = self.StartTick + self.CurrentRange
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   355
        self.NewDataAvailable(True)
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   356
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   357
    def OnRangeChanged(self, event):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   358
        try:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   359
            if self.Ticktime == 0:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   360
                self.CurrentRange = self.RangeValues[self.CanvasRange.GetSelection()][1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   361
            else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   362
                self.CurrentRange = self.RangeValues[self.CanvasRange.GetSelection()][1] / self.Ticktime
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   363
        except ValueError, e:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   364
            self.CanvasRange.SetValue(str(self.CurrentRange))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   365
        wx.CallAfter(self.RefreshRange)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   366
        event.Skip()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   367
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   368
    def OnZoomChanged(self, event):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   369
        self.CurrentZoom = ZOOM_VALUES[self.CanvasZoom.GetSelection()][1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   370
        wx.CallAfter(self.NewDataAvailable, True)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   371
        event.Skip()
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   372
    
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   373
    def OnPositionChanging(self, event):
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   374
        self.ResetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   375
        self.StartTick = self.Datas[0][0] + event.GetPosition()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   376
        self.EndTick = self.StartTick + self.CurrentRange
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   377
        self.Fixed = True
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   378
        self.NewDataAvailable(True)
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   379
        event.Skip()
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   380
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   381
    def OnResetButton(self, event):
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   382
        self.Fixed = False
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   383
        self.ResetView()
301
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   384
        event.Skip()
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   385
b5e564608b9e Adding support for Graphic for variable in Debug mode
lbessard
parents:
diff changeset
   386
    def OnCurrentButton(self, event):
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   387
        self.ResetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   388
        self.StartTick = max(self.Datas[0][0], self.Datas[-1][0] - self.CurrentRange)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   389
        self.EndTick = self.StartTick + self.CurrentRange
642
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   390
        self.Fixed = False
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   391
        self.NewDataAvailable(True)
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   392
        event.Skip()
f2325ebd67f4 Fixed wrong time scale in debug graph display when some samples are missed
laurent
parents: 640
diff changeset
   393
660
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   394
    def OnCanvasLeftDown(self, event):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   395
        self.Fixed = True
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   396
        self.Canvas.canvas.CaptureMouse()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   397
        if self.Mode == MODE_SELECTION:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   398
            self.Dragging = True
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   399
            pos = self.Canvas.PositionScreenToUser(event.GetPosition())
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   400
            self.CursorIdx = self.GetNearestData(pos[0], -1)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   401
            self.RefreshCursor()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   402
        elif self.Mode == MODE_MOTION:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   403
            self.GetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   404
            self.CurrentMousePos = event.GetPosition()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   405
            self.CurrentMotionValue = self.Datas[self.StartIdx][0]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   406
        event.Skip()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   407
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   408
    def OnCanvasLeftUp(self, event):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   409
        self.Dragging = False
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   410
        if self.Mode == MODE_MOTION:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   411
            self.CurrentMousePos = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   412
            self.CurrentMotionValue = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   413
        if self.Canvas.canvas.HasCapture():
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   414
            self.Canvas.canvas.ReleaseMouse()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   415
        event.Skip()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   416
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   417
    def OnCanvasMotion(self, event):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   418
        if self.Mode == MODE_SELECTION and self.Dragging:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   419
            pos = self.Canvas.PositionScreenToUser(event.GetPosition())
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   420
            graphics, xAxis, yAxis = self.Canvas.last_draw
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   421
            self.CursorIdx = self.GetNearestData(max(xAxis[0], min(pos[0], xAxis[1])), -1)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   422
            self.RefreshCursor()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   423
        elif self.CurrentMousePos is not None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   424
            oldpos = self.Canvas.PositionScreenToUser(self.CurrentMousePos)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   425
            newpos = self.Canvas.PositionScreenToUser(event.GetPosition())
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   426
            self.CurrentMotionValue += oldpos[0] - newpos[0]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   427
            self.YCenter += oldpos[1] - newpos[1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   428
            self.ResetBounds()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   429
            self.StartTick = self.CurrentMotionValue
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   430
            self.EndTick = self.StartTick + self.CurrentRange
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   431
            self.CurrentMousePos = event.GetPosition()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   432
            self.NewDataAvailable(True)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   433
        event.Skip()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   434
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   435
    def OnCanvasMouseWheel(self, event):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   436
        if self.CurrentMousePos is None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   437
            rotation = event.GetWheelRotation() / event.GetWheelDelta()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   438
            if event.ShiftDown():
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   439
                current = self.CanvasRange.GetSelection()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   440
                new = max(0, min(current - rotation, len(self.RangeValues) - 1))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   441
                if new != current:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   442
                    if self.Ticktime == 0:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   443
                        self.CurrentRange = self.RangeValues[new][1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   444
                    else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   445
                        self.CurrentRange = self.RangeValues[new][1] / self.Ticktime
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   446
                    self.CanvasRange.SetStringSelection(self.RangeValues[new][0])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   447
                    wx.CallAfter(self.RefreshRange)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   448
            else:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   449
                current = self.CanvasZoom.GetSelection()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   450
                new = max(0, min(current - rotation, len(ZOOM_VALUES) - 1))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   451
                if new != current:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   452
                    self.CurrentZoom = ZOOM_VALUES[new][1]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   453
                    self.CanvasZoom.SetStringSelection(ZOOM_VALUES[new][0])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   454
                    wx.CallAfter(self.NewDataAvailable, True)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   455
        event.Skip()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   456
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   457
    ## Reset the last cursor
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   458
    def ResetLastCursor(self):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   459
        self.LastCursor = None
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   460
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   461
    ## Draw the cursor on graphic
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   462
    #  @param dc The draw canvas
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   463
    #  @param cursor The cursor parameters
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   464
    def DrawCursor(self, dc, cursor, value):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   465
        if self.StartTick <= cursor <= self.EndTick:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   466
            # Prepare temporary dc for drawing
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   467
            width = self.Canvas._Buffer.GetWidth()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   468
            height = self.Canvas._Buffer.GetHeight()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   469
            tmp_Buffer = wx.EmptyBitmap(width, height)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   470
            dcs = wx.MemoryDC()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   471
            dcs.SelectObject(tmp_Buffer)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   472
            dcs.Clear()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   473
            dcs.BeginDrawing()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   474
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   475
            dcs.SetPen(wx.Pen(wx.RED))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   476
            dcs.SetBrush(wx.Brush(wx.RED, wx.SOLID))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   477
            dcs.SetFont(self.Canvas._getFont(self.Canvas._fontSizeAxis))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   478
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   479
            # Calculate clipping region
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   480
            graphics, xAxis, yAxis = self.Canvas.last_draw
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   481
            p1 = numpy.array([xAxis[0], yAxis[0]])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   482
            p2 = numpy.array([xAxis[1], yAxis[1]])
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   483
            cx, cy, cwidth, cheight = self.Canvas._point2ClientCoord(p1, p2)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   484
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   485
            px, py = self.Canvas.PositionUserToScreen((float(cursor), 0.))
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   486
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   487
            # Draw line cross drawing for diaplaying time cursor
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   488
            dcs.DrawLine(px, cy + 1, px, cy + cheight - 1)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   489
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   490
            text = "X:%d\nY:%f"%(cursor, value)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   491
            w, h = dcs.GetTextExtent(text)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   492
            # Draw time cursor date
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   493
            dcs.DrawText(text, min(px + 3, cx + cwidth - w), cy + 3)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   494
            
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   495
            dcs.EndDrawing()
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   496
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   497
            #this will erase if called twice
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   498
            dc.Blit(0, 0, width, height, dcs, 0, 0, wx.EQUIV)  #(NOT src) XOR dst
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   499
    
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   500
    ## Refresh the variable cursor.
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   501
    #  @param dc The draw canvas
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   502
    def RefreshCursor(self, dc=None):
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   503
        if dc is None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   504
            dc = wx.BufferedDC(wx.ClientDC(self.Canvas.canvas), self.Canvas._Buffer)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   505
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   506
        # Erase previous time cursor if drawn
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   507
        if self.LastCursor is not None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   508
            self.DrawCursor(dc, *self.LastCursor)
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   509
        
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   510
        # Draw new time cursor
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   511
        if self.CursorIdx is not None:
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   512
            self.LastCursor = self.Datas[self.CursorIdx]
30c0371ac086 Adding zoom and navigation in GraphicViewer and ToolBar containing basic menu items
laurent
parents: 648
diff changeset
   513
            self.DrawCursor(dc, *self.LastCursor)