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 from python_qt_binding.QtCore import QSize, Qt
00034 from python_qt_binding.QtWidgets import QToolBar, QGroupBox, QHBoxLayout
00035 from qt_gui.plugin import Plugin
00036
00037
00038 class Dashboard(Plugin):
00039 """
00040 Base class from which dashboards should inherit.
00041
00042 :param context: the plugin context
00043 :type context: qt_gui.plugin.Plugin
00044 """
00045 def __init__(self, context):
00046 super(Dashboard, self).__init__(context)
00047 self.context = context
00048 self.setup(context)
00049
00050 if not hasattr(self, 'name'):
00051 self.name = 'Dashboard'
00052 if not hasattr(self, 'max_icon_size'):
00053 self.max_icon_size = QSize(50, 30)
00054 self._main_widget = QToolBar()
00055 self._main_widget.setIconSize(self.max_icon_size)
00056 self._main_widget.setObjectName(self.name)
00057 self._main_widget.setWindowTitle(self.name)
00058 if context.serial_number() > 1:
00059 self._main_widget.setWindowTitle(self._main_widget.windowTitle() + (' (%d)' % context.serial_number()))
00060
00061
00062 self.add_widgets()
00063
00064
00065 context.add_toolbar(self._main_widget)
00066
00067 def setup(self, context):
00068 """
00069 Called during ``__init__`` Subclasses should do initialization here.
00070
00071 NOTE when overriding this method you should provide a ``self.name`` to
00072 avoid naming conflicts.
00073
00074 :param context: The plugin context
00075 :type context: qt_gui.plugin.Plugin
00076 """
00077 pass
00078
00079 def shutdown_plugin(self):
00080 """
00081 Called when the toolbar is closed by Qt.
00082 """
00083 for widget in self._widgets:
00084 if hasattr(widget, 'shutdown_widget'):
00085 widget.shutdown_widget()
00086 if hasattr(widget, 'close'):
00087 widget.close()
00088
00089 self.shutdown_dashboard()
00090
00091 def shutdown_dashboard(self):
00092 """
00093 Called after shutdown plugin, subclasses should do cleanup here, not in shutdown_plugin
00094 """
00095 pass
00096
00097 def get_widgets(self):
00098 """
00099 Most of the dashboard customization should be done here.
00100 If this function is not overriden the dashboard will display nothing.
00101
00102 :returns: List of lists containing dashboard widgets, or list of lists
00103 containing a string followed by a list of dashboard widgets.
00104 """
00105 return []
00106
00107 def add_widgets(self):
00108 """
00109 Add groups of widgets to _main_widget. Supports group labels.
00110
00111 This method can be reimplemented in order to customize appearances.
00112 """
00113 widgets = self.get_widgets()
00114 self._widgets = []
00115 for group in widgets:
00116
00117 if isinstance(group[0], str):
00118 grouplabel, v = group
00119 box = QGroupBox(grouplabel)
00120 box.setContentsMargins(0, 18, 0, 0)
00121
00122 if len(group[1]) == 1:
00123 box.setAlignment(Qt.AlignHCenter)
00124 else:
00125 box = QGroupBox()
00126 box.setContentsMargins(0, 0, 0, 0)
00127 v = group
00128
00129 layout = QHBoxLayout()
00130 layout.setSpacing(0)
00131 layout.setContentsMargins(0, 0, 0, 0)
00132 for i in v:
00133 try:
00134 try:
00135 i.setIconSize(self.max_icon_size)
00136 except AttributeError as e:
00137
00138 pass
00139 layout.addWidget(i)
00140 self._widgets.append(i)
00141 except:
00142 raise Exception("All widgets must be a subclass of QWidget!")
00143
00144 layout.activate()
00145 box.setLayout(layout)
00146 self._main_widget.addWidget(box)
00147 self._main_widget.addSeparator()