diff --git a/sw/supervision/python/app_settings.py b/sw/supervision/python/app_settings.py
index d74fa78ed8..dd3c85bb39 100644
--- a/sw/supervision/python/app_settings.py
+++ b/sw/supervision/python/app_settings.py
@@ -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)
diff --git a/sw/supervision/python/build_widget.py b/sw/supervision/python/build_widget.py
index 64a2e9594f..160411f47c 100644
--- a/sw/supervision/python/build_widget.py
+++ b/sw/supervision/python/build_widget.py
@@ -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)
diff --git a/sw/supervision/python/conf_file_widget.py b/sw/supervision/python/conf_file_widget.py
index 39b1db1952..c6f7bac29d 100644
--- a/sw/supervision/python/conf_file_widget.py
+++ b/sw/supervision/python/conf_file_widget.py
@@ -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)
diff --git a/sw/supervision/python/conf_widget.py b/sw/supervision/python/conf_widget.py
index 1946b05ba3..f9d3c76a52 100644
--- a/sw/supervision/python/conf_widget.py
+++ b/sw/supervision/python/conf_widget.py
@@ -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)
diff --git a/sw/supervision/python/configuration_panel.py b/sw/supervision/python/configuration_panel.py
index d0dde6b5a0..71b08a9285 100644
--- a/sw/supervision/python/configuration_panel.py
+++ b/sw/supervision/python/configuration_panel.py
@@ -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()
diff --git a/sw/supervision/python/generated/ui_app_settings.py b/sw/supervision/python/generated/ui_app_settings.py
index 131fb8a27a..4e093aa902 100644
--- a/sw/supervision/python/generated/ui_app_settings.py
+++ b/sw/supervision/python/generated/ui_app_settings.py
@@ -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"))
diff --git a/sw/supervision/python/generated/ui_build.py b/sw/supervision/python/generated/ui_build.py
index e49da087c2..50a0ab715f 100644
--- a/sw/supervision/python/generated/ui_build.py
+++ b/sw/supervision/python/generated/ui_build.py
@@ -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"))
diff --git a/sw/supervision/python/generated/ui_conf_header.py b/sw/supervision/python/generated/ui_conf_header.py
index 1ad40771c2..3c3a25139d 100644
--- a/sw/supervision/python/generated/ui_conf_header.py
+++ b/sw/supervision/python/generated/ui_conf_header.py
@@ -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"))
diff --git a/sw/supervision/python/program_widget.py b/sw/supervision/python/program_widget.py
index 986031087d..54ce45ec17 100644
--- a/sw/supervision/python/program_widget.py
+++ b/sw/supervision/python/program_widget.py
@@ -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:
diff --git a/sw/supervision/python/ui/ui_app_settings.ui b/sw/supervision/python/ui/ui_app_settings.ui
index 95036026ab..a99facf757 100644
--- a/sw/supervision/python/ui/ui_app_settings.ui
+++ b/sw/supervision/python/ui/ui_app_settings.ui
@@ -24,16 +24,6 @@
-
- -
-
-
- Terminal Emulator
-
-
-
- -
-
-
-
@@ -41,6 +31,16 @@
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
-
@@ -48,13 +48,30 @@
- -
-
-
- Qt::Horizontal
+
-
+
+
+ Terminal Emulator
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+ -
+
+
+ -
+
+
+ keep build programs
+
+
+ true
+
+
+
+ -
+
+
+
diff --git a/sw/supervision/python/ui/ui_build.ui b/sw/supervision/python/ui/ui_build.ui
index 1b22973b16..8b88d079c0 100644
--- a/sw/supervision/python/ui/ui_build.ui
+++ b/sw/supervision/python/ui/ui_build.ui
@@ -55,6 +55,9 @@
..
+
+ Ctrl+C
+
-
@@ -69,6 +72,9 @@
..
+
+ Ctrl+B
+
Qt::ToolButtonIconOnly
@@ -96,7 +102,7 @@
-
- Flash
+ Upload
-
@@ -127,6 +133,9 @@
..
+
+ Ctrl+U
+
diff --git a/sw/supervision/python/ui/ui_conf_header.ui b/sw/supervision/python/ui/ui_conf_header.ui
index 6d8ad9b53f..aec156bfea 100644
--- a/sw/supervision/python/ui/ui_conf_header.ui
+++ b/sw/supervision/python/ui/ui_conf_header.ui
@@ -14,13 +14,6 @@
Form
- -
-
-
- 255
-
-
-
-
@@ -31,6 +24,13 @@
+ -
+
+
+ 255
+
+
+
-
@@ -70,6 +70,9 @@
..
+
+ Ctrl+R
+
-
@@ -84,6 +87,9 @@
..
+
+ Ctrl+S
+
-