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 +