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
00034
00035 PKG = 'robot_monitor'
00036 import roslib; roslib.load_manifest(PKG)
00037 import rospy
00038
00039 import wxversion
00040 WXVER = '2.8'
00041 if wxversion.checkInstalled(WXVER):
00042 wxversion.select(WXVER)
00043 else:
00044 print >> sys.stderr, 'This application requires wxPython version %s' % WXVER
00045 sys.exit(1)
00046 import wx
00047
00048 from rxbag import TopicMessageView
00049
00050 import robot_monitor_panel
00051
00052 class RobotMonitorView(TopicMessageView):
00053 name = 'Robot Monitor'
00054
00055 def __init__(self, timeline, parent):
00056 TopicMessageView.__init__(self, timeline, parent)
00057
00058 self.monitor_panel = robot_monitor_panel.RobotMonitorPanel(self.parent, rxbag=True)
00059 self.monitor_panel.SetPosition((1, 0))
00060
00061 def message_viewed(self, bag, msg_details):
00062 TopicMessageView.message_viewed(self, bag, msg_details)
00063
00064 if msg_details:
00065 topic, msg, t = msg_details
00066
00067 wx.CallAfter(self.monitor_panel.new_message, msg)
00068
00069 def message_cleared(self):
00070 TopicMessageView.message_cleared(self)
00071
00072 wx.CallAfter(self.monitor_panel.reset_monitor)
00073
00074 def close(self):
00075 pass
00076
00077
00078 def on_size(self, event):
00079 size = self.parent.GetClientSize()
00080
00081 self.resize(*size)
00082 self.monitor_panel.SetSize((size[0], size[1]))
00083
00084 def on_right_down(self, event):
00085 self.parent.PopupMenu(RuntimeMonitorPopupMenu(self.parent, self), event.GetPosition())
00086
00087 class RobotMonitorPopupMenu(wx.Menu):
00088 def __init__(self, parent, robot_view):
00089 wx.Menu.__init__(self)
00090
00091 self.robot_view = robot_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.robot_view.reset_monitor(), id=clear_item.GetId())