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 import os
00032 import roslib
00033 roslib.load_manifest('rqt_gui_py')
00034 import rospy
00035 
00036 from qt_gui.composite_plugin_provider import CompositePluginProvider
00037 
00038 from python_qt_binding.QtCore import qDebug, qWarning
00039 
00040 try:
00041     from rqt_gui.rospkg_plugin_provider import RospkgPluginProvider
00042     ActualRosPluginProvider = RospkgPluginProvider
00043 except ImportError:
00044     from rqt_gui.roslib_plugin_provider import RoslibPluginProvider
00045     ActualRosPluginProvider = RoslibPluginProvider
00046 
00047 
00048 class RosPyPluginProvider(CompositePluginProvider):
00049 
00050     def __init__(self):
00051         super(RosPyPluginProvider, self).__init__([ActualRosPluginProvider('rqt_gui', 'rqt_gui_py::Plugin')])
00052         self.setObjectName('RosPyPluginProvider')
00053         self._node_initialized = False
00054 
00055     def discover(self):
00056         descriptors = super(RosPyPluginProvider, self).discover()
00057 
00058         if not self._master_found():
00059             qWarning('RosPyPluginProvider.discover() could not find ROS master, all rospy-based plugins are disabled')
00060             
00061             for descriptor in descriptors:
00062                 descriptor.attributes()['not_available'] = 'no ROS master found (roscore needs to be started before the GUI)'
00063 
00064         return descriptors
00065 
00066     def load(self, plugin_id, plugin_context):
00067         self._init_node()
00068         return super(RosPyPluginProvider, self).load(plugin_id, plugin_context)
00069 
00070     def _master_found(self):
00071         try:
00072             rospy.get_master().getSystemState()
00073             return True
00074         except Exception:
00075             return False
00076 
00077     def _init_node(self):
00078         
00079         if not self._node_initialized:
00080             name = 'rqt_gui_py_node_%d' % os.getpid()
00081             qDebug('RosPyPluginProvider._init_node() initialize ROS node "%s"' % name)
00082             rospy.init_node(name, disable_signals=True)
00083             self._node_initialized = True