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;roslib.load_manifest('rqt_robot_dashboard')
00034 import rospy
00035 
00036 from python_qt_binding.QtCore import QSize
00037 from python_qt_binding.QtGui import QToolBar
00038 from qt_gui.plugin import Plugin
00039 
00040 
00041 class Dashboard(Plugin):
00042     """
00043     Base class from which dashboards should inherit.
00044 
00045     :param context: the plugin context
00046     :type context: qt_gui.plugin.Plugin
00047     """
00048     def __init__(self, context):
00049         super(Dashboard, self).__init__(context)
00050         self.context = context
00051         self.setup(context)
00052 
00053         if not hasattr(self, 'name'):
00054             self.name = 'Dashboard'
00055         if not hasattr(self, 'max_icon_size'):
00056             self.max_icon_size = QSize(50, 30)
00057         self._main_widget = QToolBar()
00058         self._main_widget.setIconSize(self.max_icon_size)
00059         self._main_widget.setObjectName(self.name)
00060         self._main_widget.setWindowTitle(self.name)
00061         if context.serial_number() > 1:
00062             self._main_widget.setWindowTitle(self._main_widget.windowTitle() + (' (%d)' % context.serial_number()))
00063         widgets = self.get_widgets()
00064 
00065         self._widgets = []
00066         for v in widgets:
00067             for i in v:
00068                 try:
00069                     self._main_widget.addWidget(i)
00070                     self._widgets.append(i)
00071                 except:
00072                     raise Exception("All widgets must be a subclass of QWidget!")
00073 
00074             self._main_widget.addSeparator()
00075 
00076         
00077         context.add_toolbar(self._main_widget)
00078 
00079     def setup(self, context):
00080         """
00081         Called during ``__init__`` Subclasses should do initialization here.
00082 
00083         NOTE when overriding this method you should provide a ``self.name`` to
00084         avoid naming conflicts.
00085 
00086         :param context: The plugin context
00087         :type context: qt_gui.plugin.Plugin
00088         """
00089         pass
00090 
00091     def shutdown_plugin(self):
00092         """
00093         Called when the toolbar is closed by Qt.
00094         """
00095         for widget in self._widgets:
00096             if hasattr(widget, 'shutdown_widget'):
00097                 widget.shutdown_widget()
00098             if hasattr(widget, 'close'):
00099                 widget.close()
00100 
00101         self.shutdown_dashboard()
00102 
00103     def shutdown_dashboard(self):
00104         """
00105         Called after shutdown plugin, subclasses should do cleanup here, not in shutdown_plugin
00106         """
00107         pass
00108 
00109     def get_widgets(self):
00110         """
00111         Most of the dashboard customization should be done here.
00112         If this function is not overriden the dashboard will display nothing.
00113 
00114         :returns: List of lists containing dashboard widgets.
00115         """
00116         return []