Supervision improvements (#3002)

* [supervision] disable build and clean buttons during build/clean.

* [supervision] Move AC color at the left.

* [supervision] Add shortcuts and rename "flash" to "upload".

* [supervision] Fix telemetry select base path.

* [supervision] return key terminate program.

* [supervision] Add option to keep "build" programs after they finished.
This commit is contained in:
Fabien-B
2023-02-28 18:49:42 +01:00
committed by GitHub
parent 4ef8b85690
commit e42330c58d
12 changed files with 115 additions and 60 deletions
+3
View File
@@ -15,6 +15,7 @@ class AppSettings(QDialog, Ui_AppSettingsDialog):
self.text_editor_edit.setText(settings.value("text_editor", "", str))
self.terminal_emulator_edit.setText(settings.value("terminal_emulator", "", str))
self.keep_changes_checkbox.setChecked(settings.value("always_keep_changes", False, bool))
self.keep_build_programs_checkbox.setChecked(settings.value("keep_build_programs", False, bool))
self.finished.connect(self.handle_finished)
def handle_finished(self, result):
@@ -26,3 +27,5 @@ class AppSettings(QDialog, Ui_AppSettingsDialog):
settings.setValue("terminal_emulator", terminal_emulator)
keep_changes = self.keep_changes_checkbox.isChecked()
settings.setValue("always_keep_changes", keep_changes)
keep_build_programs = self.keep_build_programs_checkbox.isChecked()
settings.setValue("keep_build_programs", keep_build_programs)
+9 -4
View File
@@ -27,7 +27,7 @@ class FlashMode:
class BuildWidget(Ui_Build, QWidget):
spawn_program = QtCore.pyqtSignal(str, list, str)
spawn_program = QtCore.pyqtSignal(str, list, str, object)
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
@@ -93,13 +93,15 @@ class BuildWidget(Ui_Build, QWidget):
cmd.append("PRINT_CONFIG=1")
shortname = "Build {}".format(self.ac.name)
self.conf.save(False)
self.spawn_program.emit(shortname, cmd, None)
self.enable_buttons(False)
self.spawn_program.emit(shortname, cmd, None, lambda: self.enable_buttons(True))
def clean(self):
cmd = ["make", "-C", utils.PAPARAZZI_HOME, "-f", "Makefile.ac",
"AIRCRAFT={}".format(self.ac.name), "clean_ac"]
shortname = "Clean {}".format(self.ac.name)
self.spawn_program.emit(shortname, cmd, None)
self.enable_buttons(False)
self.spawn_program.emit(shortname, cmd, None, lambda: self.enable_buttons(True))
def flash(self):
target = self.target_combo.currentText()
@@ -115,5 +117,8 @@ class BuildWidget(Ui_Build, QWidget):
cmd = ["make", "-C", utils.PAPARAZZI_HOME, "-f", "Makefile.ac",
"AIRCRAFT={}".format(self.ac.name)] + vars + ["{}.upload".format(target)]
shortname = "Flash {}".format(self.ac.name)
self.spawn_program.emit(shortname, cmd, None)
self.spawn_program.emit(shortname, cmd, None, None)
def enable_buttons(self, enable: bool):
self.build_button.setEnabled(enable)
self.clean_button.setEnabled(enable)
+4 -5
View File
@@ -11,9 +11,9 @@ class ConfFileWidget(QWidget, Ui_FileConf):
file_changed = QtCore.pyqtSignal()
edit_alt = QtCore.pyqtSignal(str)
def __init__(self, title: str, parent=None):
def __init__(self, title: str, conf_subdir: str, parent=None):
QWidget.__init__(self, parent=parent)
self.nature = title.lower().replace(" ", "_") + "s"
self.conf_subdir = conf_subdir
self.path = None
self.setupUi(self)
self.edit_alt_button.hide()
@@ -31,9 +31,8 @@ class ConfFileWidget(QWidget, Ui_FileConf):
utils.edit_file(self.path)
def select_file(self):
base_path = os.path.join(utils.CONF_DIR, self.nature)
print(base_path)
(path, _) = QFileDialog().getOpenFileName(self, "Select {} file".format(self.nature),
base_path = os.path.join(utils.CONF_DIR, self.conf_subdir)
(path, _) = QFileDialog().getOpenFileName(self, "Select {} file".format(self.title_label.text()),
base_path, "Xml (*.xml)")
if path != "":
self.path = os.path.relpath(path, utils.CONF_DIR)
+4 -4
View File
@@ -15,17 +15,17 @@ class ConfWidget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self)
self.airframe = ConfFileWidget("Airframe", self)
self.airframe = ConfFileWidget("Airframe", "airframes", self)
self.airframe.file_changed.connect(self.conf_changed)
self.flight_plan = ConfFileWidget("Flight Plan", self)
self.flight_plan = ConfFileWidget("Flight Plan", "flight_plans", self)
self.flight_plan.file_changed.connect(self.conf_changed)
self.flight_plan.edit_alt_button.show()
self.flight_plan.edit_alt_button.setText("Edit GCS")
self.settings = ConfSettingsWidget(self)
self.settings.settings_changed.connect(self.setting_changed)
self.radio = ConfFileWidget("Radio", self)
self.radio = ConfFileWidget("Radio", "radios", self)
self.radio.file_changed.connect(self.conf_changed)
self.telemetry = ConfFileWidget("Telemetry", self)
self.telemetry = ConfFileWidget("Telemetry", "telemetry", self)
self.telemetry.file_changed.connect(self.conf_changed)
self.settings.settings.itemDoubleClicked.connect(self.edit_setting)
+5 -5
View File
@@ -7,9 +7,6 @@ from conf import *
from programs_conf import parse_tools
import subprocess
# TODO make a setting ?
REMOVE_PROGRAMS_FINISHED = True
class ConfigurationPanel(QWidget, Ui_ConfigurationPanel):
@@ -82,14 +79,17 @@ class ConfigurationPanel(QWidget, Ui_ConfigurationPanel):
subprocess.Popen(cmd)
# self.launch_program(self.flight_plan_editor.name, cmd, self.flight_plan_editor.icon)
def launch_program(self, shortname, cmd, icon):
def launch_program(self, shortname, cmd, icon, cb):
pw = ProgramWidget(shortname, cmd, icon, self.programs_widget)
self.programs_widget.layout().addWidget(pw)
pw.ready_read_stderr.connect(lambda: self.console_widget.handle_stderr(pw))
pw.ready_read_stdout.connect(lambda: self.console_widget.handle_stdout(pw))
pw.finished.connect(lambda c, s: self.console_widget.handle_program_finished(pw, c, s))
if cb is not None:
pw.finished.connect(cb)
pw.remove.connect(lambda: self.remove_program(pw))
if REMOVE_PROGRAMS_FINISHED:
settings = utils.get_settings()
if not settings.value("keep_build_programs", False, bool):
pw.finished.connect(lambda: self.remove_program(pw))
pw.start_program()
@@ -22,24 +22,32 @@ class Ui_AppSettingsDialog(object):
self.text_editor_edit = QtWidgets.QLineEdit(AppSettingsDialog)
self.text_editor_edit.setObjectName("text_editor_edit")
self.gridLayout.addWidget(self.text_editor_edit, 0, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(AppSettingsDialog)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.buttonBox = QtWidgets.QDialogButtonBox(AppSettingsDialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 2)
self.keep_changes_checkbox = QtWidgets.QCheckBox(AppSettingsDialog)
self.keep_changes_checkbox.setText("")
self.keep_changes_checkbox.setObjectName("keep_changes_checkbox")
self.gridLayout.addWidget(self.keep_changes_checkbox, 2, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(AppSettingsDialog)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.terminal_emulator_edit = QtWidgets.QLineEdit(AppSettingsDialog)
self.terminal_emulator_edit.setObjectName("terminal_emulator_edit")
self.gridLayout.addWidget(self.terminal_emulator_edit, 1, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(AppSettingsDialog)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.keep_changes_checkbox = QtWidgets.QCheckBox(AppSettingsDialog)
self.keep_changes_checkbox.setText("")
self.keep_changes_checkbox.setObjectName("keep_changes_checkbox")
self.gridLayout.addWidget(self.keep_changes_checkbox, 2, 1, 1, 1)
self.buttonBox = QtWidgets.QDialogButtonBox(AppSettingsDialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.gridLayout.addWidget(self.buttonBox, 3, 0, 1, 2)
self.label_4 = QtWidgets.QLabel(AppSettingsDialog)
self.label_4.setWordWrap(True)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
self.keep_build_programs_checkbox = QtWidgets.QCheckBox(AppSettingsDialog)
self.keep_build_programs_checkbox.setText("")
self.keep_build_programs_checkbox.setObjectName("keep_build_programs_checkbox")
self.gridLayout.addWidget(self.keep_build_programs_checkbox, 3, 1, 1, 1)
self.retranslateUi(AppSettingsDialog)
self.buttonBox.accepted.connect(AppSettingsDialog.accept)
@@ -50,5 +58,6 @@ class Ui_AppSettingsDialog(object):
_translate = QtCore.QCoreApplication.translate
AppSettingsDialog.setWindowTitle(_translate("AppSettingsDialog", "Settings"))
self.label.setText(_translate("AppSettingsDialog", "Text editor"))
self.label_2.setText(_translate("AppSettingsDialog", "Terminal Emulator"))
self.label_3.setText(_translate("AppSettingsDialog", "Keep changes on exit"))
self.label_2.setText(_translate("AppSettingsDialog", "Terminal Emulator"))
self.label_4.setText(_translate("AppSettingsDialog", "keep build programs"))
+4 -1
View File
@@ -86,10 +86,13 @@ class Ui_Build(object):
self.label_14.setText(_translate("Build", "Target"))
self.clean_button.setToolTip(_translate("Build", "Clean"))
self.clean_button.setText(_translate("Build", "..."))
self.clean_button.setShortcut(_translate("Build", "Ctrl+C"))
self.build_button.setToolTip(_translate("Build", "Build"))
self.build_button.setText(_translate("Build", "..."))
self.build_button.setShortcut(_translate("Build", "Ctrl+B"))
self.print_config_checkbox.setToolTip(_translate("Build", "print config at build time"))
self.groupBox_2.setTitle(_translate("Build", "Flash"))
self.groupBox_2.setTitle(_translate("Build", "Upload"))
self.label_15.setText(_translate("Build", "Device"))
self.flash_button.setToolTip(_translate("Build", "Upload"))
self.flash_button.setText(_translate("Build", "Flash"))
self.flash_button.setShortcut(_translate("Build", "Ctrl+U"))
@@ -16,15 +16,15 @@ class Ui_ConfHeader(object):
ConfHeader.resize(664, 192)
self.horizontalLayout = QtWidgets.QHBoxLayout(ConfHeader)
self.horizontalLayout.setObjectName("horizontalLayout")
self.id_spinBox = QtWidgets.QSpinBox(ConfHeader)
self.id_spinBox.setMaximum(255)
self.id_spinBox.setObjectName("id_spinBox")
self.horizontalLayout.addWidget(self.id_spinBox)
self.color_button = QtWidgets.QToolButton(ConfHeader)
self.color_button.setStyleSheet("")
self.color_button.setText("")
self.color_button.setObjectName("color_button")
self.horizontalLayout.addWidget(self.color_button)
self.id_spinBox = QtWidgets.QSpinBox(ConfHeader)
self.id_spinBox.setMaximum(255)
self.id_spinBox.setObjectName("id_spinBox")
self.horizontalLayout.addWidget(self.id_spinBox)
self.ac_combo = QtWidgets.QComboBox(ConfHeader)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -85,8 +85,10 @@ class Ui_ConfHeader(object):
ConfHeader.setWindowTitle(_translate("ConfHeader", "Form"))
self.refresh_button.setToolTip(_translate("ConfHeader", "refresh Aircraft"))
self.refresh_button.setText(_translate("ConfHeader", "..."))
self.refresh_button.setShortcut(_translate("ConfHeader", "Ctrl+R"))
self.save_button.setToolTip(_translate("ConfHeader", "save conf"))
self.save_button.setText(_translate("ConfHeader", "..."))
self.save_button.setShortcut(_translate("ConfHeader", "Ctrl+S"))
self.label_4.setText(_translate("ConfHeader", "Set"))
self.new_ac_action.setText(_translate("ConfHeader", "New AC"))
self.remove_ac_action.setText(_translate("ConfHeader", "Remove"))
+2
View File
@@ -45,6 +45,8 @@ class ProgramWidget(QWidget, Ui_Program):
if self.process.state() == QProcess.NotRunning:
self.cmd = self.program_lineedit.text().split(" ")
self.start_program()
elif self.process.state() == QProcess.Running:
self.terminate()
def handle_run(self):
if self.process.state() == QProcess.NotRunning:
+33 -16
View File
@@ -24,16 +24,6 @@
<item row="0" column="1">
<widget class="QLineEdit" name="text_editor_edit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Terminal Emulator</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="terminal_emulator_edit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
@@ -41,6 +31,16 @@
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="keep_changes_checkbox">
<property name="text">
@@ -48,13 +48,30 @@
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Terminal Emulator</string>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="terminal_emulator_edit"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>keep build programs</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="keep_build_programs_checkbox">
<property name="text">
<string/>
</property>
</widget>
</item>
+10 -1
View File
@@ -55,6 +55,9 @@
<iconset theme="edit-clear">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="shortcut">
<string>Ctrl+C</string>
</property>
</widget>
</item>
<item>
@@ -69,6 +72,9 @@
<iconset theme="system-run">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="shortcut">
<string>Ctrl+B</string>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonIconOnly</enum>
</property>
@@ -96,7 +102,7 @@
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Flash</string>
<string>Upload</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
@@ -127,6 +133,9 @@
<iconset theme="emblem-downloads">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="shortcut">
<string>Ctrl+U</string>
</property>
</widget>
</item>
</layout>
+13 -7
View File
@@ -14,13 +14,6 @@
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QSpinBox" name="id_spinBox">
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="color_button">
<property name="styleSheet">
@@ -31,6 +24,13 @@
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="id_spinBox">
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="ac_combo">
<property name="sizePolicy">
@@ -70,6 +70,9 @@
<iconset theme="view-refresh">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="shortcut">
<string>Ctrl+R</string>
</property>
</widget>
</item>
<item>
@@ -84,6 +87,9 @@
<iconset theme="document-save">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</widget>
</item>
<item>