def define_browser_menu(self, item):
        experiment = self.manager.experiments.with_browser_item(item)
        menu = QtGui.QMenu(self)

        # Change Color
        action_change_color = QtGui.QAction(menu)
        action_change_color.setText("Change Color")
        action_change_color.triggered.connect(
            lambda: self.change_color(experiment))
        menu.addAction(action_change_color)

        # Remove
        action_remove = QtGui.QAction(menu)
        action_remove.setText("Remove Graph")
        if self.manager.is_running():
            if self.manager.running_experiment(
            ) == experiment:  # Experiment running
                action_remove.setEnabled(False)
        action_remove.triggered.connect(
            lambda: self.remove_experiment(experiment))
        menu.addAction(action_remove)

        # Use parameters
        action_use = QtGui.QAction(menu)
        action_use.setText("Use These Parameters")
        action_use.triggered.connect(lambda: self.set_parameters(experiment))
        menu.addAction(action_use)
        menu_dict = {
            "menu": menu,
            "color": action_change_color,
            "remove": action_remove,
            "use": action_use
        }
        return menu_dict
    def define_browser_menu(self, item):
        menu_dict = super().define_browser_menu(item)
        menu = menu_dict['menu']
        experiment = self.manager.experiments.with_browser_item(item)

        action_open_pulse = QtGui.QAction(menu)
        action_open_pulse.setText("Use Settings in Pulse GUI")
        if self.manager.is_running():
            if self.manager.running_experiment(
            ) == experiment:  # Experiment running
                action_open_pulse.setEnabled(False)
        action_open_pulse.triggered.connect(
            lambda: self.open_pulse_gui(experiment))
        menu.addAction(action_open_pulse)
        menu_dict['pulse'] = action_open_pulse

        action_open_fit = QtGui.QAction(menu)
        action_open_fit.setText("Use Settings in Fit GUI")
        if self.manager.is_running():
            if self.manager.running_experiment(
            ) == experiment:  # Experiment running
                action_open_fit.setEnabled(False)
        action_open_fit.triggered.connect(
            lambda: self.open_fit_gui(experiment))
        menu.addAction(action_open_fit)
        menu_dict['fit'] = action_open_fit

        return menu_dict
    def _setup_ui(self):
        main_menu = self.menuBar()
        file_menu = main_menu.addMenu('Options')

        load_configuration = QtGui.QAction("Load Configuration", self)
        load_configuration.triggered.connect(self.load_config)
        file_menu.addAction(load_configuration)

        save_as_default = QtGui.QAction("Save Current Settings as Default",
                                        self)
        save_as_default.triggered.connect(self.save_as_default)
        file_menu.addAction(save_as_default)

        if self.HAS_DAQ:
            instrument_control = QtGui.QAction("Instrument Control", self)
            instrument_control.triggered.connect(self.open_instrument_control)
            file_menu.addAction(instrument_control)

        self.log_widget = LogWidget()
        self.log.addHandler(
            self.log_widget.handler)  # needs to be in Qt context?
        log.info("ManagedWindow connected to logging")

        self.queue_button = QtGui.QPushButton('Queue', self)
        self.queue_button.clicked.connect(self.queue)

        self.abort_button = QtGui.QPushButton('Abort', self)
        self.abort_button.setEnabled(False)
        self.abort_button.clicked.connect(self.abort)

        self.abort_all_button = QtGui.QPushButton('Abort All', self)
        self.abort_all_button.setEnabled(False)
        self.abort_all_button.clicked.connect(self.abort_all)

        self.plot_widget = []
        self.plot = []
        for index, plot_widget in enumerate(self.plot_widget_classes):
            self.plot_widget.append(
                plot_widget(self.procedure_class.DATA_COLUMNS,
                            x_axes=self.x_axes[index],
                            y_axes=self.y_axes[index],
                            x_label=self.x_labels[index],
                            y_label=self.y_labels[index],
                            legend_text=self.legend_text[index],
                            color_cycle=self.color_cycle))
            self.plot.append(self.plot_widget[-1].plot)

        measured_quantities = [
            item for x_axis in self.x_axes for item in x_axis
        ]
        measured_quantities.extend(
            [item for y_axis in self.y_axes for item in y_axis])
        quantities = []
        for item in measured_quantities:
            if isinstance(item, (list, tuple)):
                quantities.extend(item)
            else:
                quantities.append(item)
        self.browser_widget = BrowserWidget(self.procedure_class,
                                            self.displays,
                                            quantities,
                                            parent=self)
        self.browser_widget.show_button.clicked.connect(self.show_experiments)
        self.browser_widget.hide_button.clicked.connect(self.hide_experiments)
        self.browser_widget.clear_button.clicked.connect(
            self.clear_experiments)
        self.browser_widget.open_button.clicked.connect(self.open_experiment)

        self.browser = self.browser_widget.browser
        self.browser.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.browser.customContextMenuRequested.connect(self.browser_item_menu)
        self.browser.itemChanged.connect(self.browser_item_changed)

        self.inputs = InputsWidget(self.procedure_class,
                                   self.inputs,
                                   parent=self)
        self.manager = Manager(self.plot,
                               self.browser,
                               log_level=self.log_level,
                               parent=self)
        self.manager.abort_returned.connect(self.abort_returned)
        self.manager.queued.connect(self.queued)
        self.manager.running.connect(self.running)
        self.manager.finished.connect(self.finished)
        self.manager.failed.connect(self.failed)
        self.manager.log.connect(self.log.handle)

        self.indicators = IndicatorsWidget(self.procedure_class)