Go to the documentation of this file.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())