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 import roslib
00034 roslib.load_manifest('pr2_dashboard')
00035
00036 import rospy
00037 from diagnostic_msgs.msg import DiagnosticStatus
00038
00039 import threading
00040 import wx
00041 import robot_monitor
00042 from robot_monitor.robot_monitor_panel import RobotMonitorPanel
00043
00044 class DiagnosticsFrame(wx.Frame):
00045 def __init__(self, parent, id, title):
00046 wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(400, 600))
00047 wx.Frame.Hide(self)
00048
00049 self.Bind(wx.EVT_CLOSE, self.on_close)
00050
00051 self._diagnostics_panel = None
00052 self._is_stale = True
00053 self._top_level_state = -1
00054
00055 self._diagnostics_toplevel_state_sub = rospy.Subscriber('diagnostics_toplevel_state', DiagnosticStatus, self.dashboard_callback)
00056 self._stall_timer = None
00057
00058 def on_close(self, evt):
00059 self.Hide()
00060
00061 def Show(self):
00062 self._diagnostics_panel = RobotMonitorPanel(self)
00063 self._diagnostics_panel.SetSize(self.GetClientSize())
00064 wx.Frame.Show(self)
00065
00066 def Hide(self):
00067 wx.Frame.Hide(self)
00068 if self._diagnostics_panel is not None:
00069 self._diagnostics_panel.Close()
00070 self._diagnostics_panel.Destroy()
00071 self._diagnostics_panel = None
00072
00073 def dashboard_callback(self, msg):
00074 self._is_stale = False
00075 if self._stall_timer is not None:
00076 self._stall_timer.cancel()
00077
00078 self._stall_timer = threading.Timer(10, self._stalled)
00079
00080 self._top_level_state = msg.level
00081
00082 def _stalled(self, event):
00083 self._stall_timer = None
00084 self._is_stale = True
00085
00086 def get_top_level_state(self):
00087 if (self._is_stale):
00088 return 3
00089
00090 return self._top_level_state