Source code for qudi.gui.taskrunner.task_runner_gui

# -*- coding: utf-8 -*-
"""
This file contains the qudi task runner GUI.

.. Copyright (c) 2021, the qudi developers. See the AUTHORS.md file at the top-level directory of this
.. distribution and on <https://github.com/Ulm-IQO/qudi-core/>
..
.. This file is part of qudi.
..
.. Qudi is free software: you can redistribute it and/or modify it under the terms of
.. the GNU Lesser General Public License as published by the Free Software Foundation,
.. either version 3 of the License, or (at your option) any later version.
..
.. Qudi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
.. without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.. See the GNU Lesser General Public License for more details.
..
.. You should have received a copy of the GNU Lesser General Public License along with qudi.
.. If not, see <https://www.gnu.org/licenses/>.
"""

from PySide2 import QtCore

from qudi.core.connector import Connector
from qudi.core.module import GuiBase

from .main_window import TaskMainWindow


[docs] class TaskRunnerGui(GuiBase): """ TODO: Document """ # declare connectors _task_runner = Connector(name='task_runner', interface='TaskRunnerLogic')
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._mw = None
[docs] def on_activate(self): """Create all UI objects and show the window.""" # Initialize main window and connect task widgets taskrunner = self._task_runner() self._mw = TaskMainWindow(tasks=taskrunner.configured_task_types) self._mw.sigStartTask.connect(taskrunner.run_task, QtCore.Qt.QueuedConnection) self._mw.sigInterruptTask.connect( taskrunner.interrupt_task, QtCore.Qt.QueuedConnection ) self._mw.sigClosed.connect(self._deactivate_self) taskrunner.sigTaskStarted.connect( self._mw.task_started, QtCore.Qt.QueuedConnection ) taskrunner.sigTaskStateChanged.connect( self._mw.task_state_changed, QtCore.Qt.QueuedConnection ) taskrunner.sigTaskFinished.connect( self._mw.task_finished, QtCore.Qt.QueuedConnection ) # Set current task states for task_name, task_state in taskrunner.task_states.items(): if task_state != 'stopped': self._mw.task_started(task_name) else: self._mw.task_finished(task_name, None, False) self._mw.task_state_changed(task_name, task_state) # ToDo: Also set task results here self._restore_window_geometry(self._mw) self.show()
[docs] def show(self): """Make sure that the window is visible and at the top.""" self._mw.show()
@QtCore.Slot() def _deactivate_self(self): self._qudi_main.module_manager.deactivate_module(self._meta['name'])
[docs] def on_deactivate(self): """Hide window and stop ipython console.""" self._save_window_geometry(self._mw) self._mw.close() self._mw.sigStartTask.disconnect() self._mw.sigInterruptTask.disconnect() self._mw.sigClosed.disconnect() taskrunner = self._task_runner() taskrunner.sigTaskStarted.disconnect( self._mw.task_started, QtCore.Qt.QueuedConnection ) taskrunner.sigTaskStateChanged.disconnect( self._mw.task_state_changed, QtCore.Qt.QueuedConnection ) taskrunner.sigTaskFinished.disconnect( self._mw.task_finished, QtCore.Qt.QueuedConnection ) self._mw = None