00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 PKG = 'runtime_monitor'
00034 import roslib; roslib.load_manifest(PKG)
00035 import rospy
00036
00037 import wxversion
00038 WXVER = '2.8'
00039 if wxversion.checkInstalled(WXVER):
00040 wxversion.select(WXVER)
00041 else:
00042 print >> sys.stderr, 'This application requires wxPython version %s' % WXVER
00043 sys.exit(1)
00044 import wx
00045
00046 from rxbag import TopicMessageView
00047
00048 import monitor_panel
00049
00050 class RuntimeMonitorView(TopicMessageView):
00051 name = 'Runtime Monitor'
00052
00053 def __init__(self, timeline, parent):
00054 TopicMessageView.__init__(self, timeline, parent)
00055
00056 self.monitor_panel = monitor_panel.MonitorPanel(self.parent, rxbag=True)
00057 self.monitor_panel.SetPosition((1, 0))
00058
00059 def message_viewed(self, bag, msg_details):
00060 TopicMessageView.message_viewed(self, bag, msg_details)
00061
00062 if msg_details:
00063 topic, msg, t = msg_details
00064
00065 self.monitor_panel.add_rxbag_msg(msg, t)
00066
00067 def message_cleared(self):
00068 TopicMessageView.message_cleared(self)
00069
00070 wx.CallAfter(self.monitor_panel.reset_monitor)
00071
00072 def close(self):
00073 pass
00074
00075 def on_size(self, event):
00076 size = self.parent.GetClientSize()
00077
00078 self.resize(*size)
00079 self.monitor_panel.SetSize((size[0], size[1]))
00080
00081 def on_right_down(self, event):
00082 self.parent.PopupMenu(RuntimeMonitorPopupMenu(self.parent, self), event.GetPosition())
00083
00084 def clear_monitor(self):
00085 self.monitor_panel.reset_monitor()
00086
00087 class RuntimeMonitorPopupMenu(wx.Menu):
00088 def __init__(self, parent, runtime_view):
00089 wx.Menu.__init__(self)
00090
00091 self.runtime_view = runtime_view
00092
00093 clear_item = wx.MenuItem(self, wx.NewId(), 'Clear Monitor')
00094 self.AppendItem(clear_item)
00095 self.Bind(wx.EVT_MENU, lambda e: self.runtime_view.clear_monitor(), id=clear_item.GetId())