def build_context_menu(self, builder): if self.model.context.is_online_master(): # If no new data points are coming in, setting the history size wouldn't do # anything. # TODO: is_online_master() should really be something like # SinglePointModel.ever_updates(). num_history_box = QtWidgets.QSpinBox() num_history_box.setMinimum(1) num_history_box.setMaximum(2**16) num_history_box.setValue(self._history_length) num_history_box.valueChanged.connect(self.set_history_length) container = QtWidgets.QWidget() layout = QtWidgets.QHBoxLayout() container.setLayout(layout) label = QtWidgets.QLabel("N: ") layout.addWidget(label) layout.addWidget(num_history_box) action = builder.append_widget_action() action.setDefaultWidget(container) builder.ensure_separator() super().build_context_menu(builder)
def __init__(self, root: Root, context: Context): super().__init__() self.root = root self.root.model_changed.connect(self._update_plot) self.context = context self.context.title_changed.connect(self._set_window_title) self.layout = QtWidgets.QVBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.layout) # TODO: Use context info/… to identify plot to user in message. self.message_label = QtWidgets.QLabel("No data.") self.widget_stack = QtWidgets.QStackedWidget() self.widget_stack.addWidget(self.message_label) self.layout.addWidget(self.widget_stack) self.plot_container = None
def __init__(self, model: Model): super().__init__() self._alternate_plots = OrderedDict() self.model = model self.layout = QtWidgets.QVBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.layout) self.widget_stack = QtWidgets.QStackedWidget() self.message_label = QtWidgets.QLabel( "Waiting for channel metadata for scan…") self.widget_stack.addWidget(self.message_label) self.layout.addWidget(self.widget_stack) if isinstance(self.model, SinglePointModel): self.plot = Rolling1DPlotWidget(self.model, self._get_alternate_names) self.model.channel_schemata_changed.connect( self._create_subscan_roots) else: try: self.plot = _make_dimensional_plot(self.model, self._get_alternate_names) except NotImplementedError as err: self._show_error(str(err)) return self.widget_stack.addWidget(self.plot) self._alternate_plots["main plot"] = self.plot self.plot.error.connect(self._show_error) self.plot.ready.connect(lambda: self._show(self.plot)) self.plot.alternate_plot_requested.connect(self._show_alternate_plot) # All subscan roots, to keep the objects alive. self._subscan_roots = None