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.text_editor_edit.setText(settings.value("text_editor", "", str))
self.terminal_emulator_edit.setText(settings.value("terminal_emulator", "", 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_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) self.finished.connect(self.handle_finished)
def handle_finished(self, result): def handle_finished(self, result):
@@ -26,3 +27,5 @@ class AppSettings(QDialog, Ui_AppSettingsDialog):
settings.setValue("terminal_emulator", terminal_emulator) settings.setValue("terminal_emulator", terminal_emulator)
keep_changes = self.keep_changes_checkbox.isChecked() keep_changes = self.keep_changes_checkbox.isChecked()
settings.setValue("always_keep_changes", keep_changes) 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): 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): def __init__(self, parent=None):
QWidget.__init__(self, parent=parent) QWidget.__init__(self, parent=parent)
@@ -93,13 +93,15 @@ class BuildWidget(Ui_Build, QWidget):
cmd.append("PRINT_CONFIG=1") cmd.append("PRINT_CONFIG=1")
shortname = "Build {}".format(self.ac.name) shortname = "Build {}".format(self.ac.name)
self.conf.save(False) 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): def clean(self):
cmd = ["make", "-C", utils.PAPARAZZI_HOME, "-f", "Makefile.ac", cmd = ["make", "-C", utils.PAPARAZZI_HOME, "-f", "Makefile.ac",
"AIRCRAFT={}".format(self.ac.name), "clean_ac"] "AIRCRAFT={}".format(self.ac.name), "clean_ac"]
shortname = "Clean {}".format(self.ac.name) 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): def flash(self):
target = self.target_combo.currentText() target = self.target_combo.currentText()
@@ -115,5 +117,8 @@ class BuildWidget(Ui_Build, QWidget):
cmd = ["make", "-C", utils.PAPARAZZI_HOME, "-f", "Makefile.ac", cmd = ["make", "-C", utils.PAPARAZZI_HOME, "-f", "Makefile.ac",
"AIRCRAFT={}".format(self.ac.name)] + vars + ["{}.upload".format(target)] "AIRCRAFT={}".format(self.ac.name)] + vars + ["{}.upload".format(target)]
shortname = "Flash {}".format(self.ac.name) 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() file_changed = QtCore.pyqtSignal()
edit_alt = QtCore.pyqtSignal(str) 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) QWidget.__init__(self, parent=parent)
self.nature = title.lower().replace(" ", "_") + "s" self.conf_subdir = conf_subdir
self.path = None self.path = None
self.setupUi(self) self.setupUi(self)
self.edit_alt_button.hide() self.edit_alt_button.hide()
@@ -31,9 +31,8 @@ class ConfFileWidget(QWidget, Ui_FileConf):
utils.edit_file(self.path) utils.edit_file(self.path)
def select_file(self): def select_file(self):
base_path = os.path.join(utils.CONF_DIR, self.nature) base_path = os.path.join(utils.CONF_DIR, self.conf_subdir)
print(base_path) (path, _) = QFileDialog().getOpenFileName(self, "Select {} file".format(self.title_label.text()),
(path, _) = QFileDialog().getOpenFileName(self, "Select {} file".format(self.nature),
base_path, "Xml (*.xml)") base_path, "Xml (*.xml)")
if path != "": if path != "":
self.path = os.path.relpath(path, utils.CONF_DIR) 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): def __init__(self, parent=None):
QWidget.__init__(self, parent=parent) QWidget.__init__(self, parent=parent)
lay = QVBoxLayout(self) lay = QVBoxLayout(self)
self.airframe = ConfFileWidget("Airframe", self) self.airframe = ConfFileWidget("Airframe", "airframes", self)
self.airframe.file_changed.connect(self.conf_changed) 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.file_changed.connect(self.conf_changed)
self.flight_plan.edit_alt_button.show() self.flight_plan.edit_alt_button.show()
self.flight_plan.edit_alt_button.setText("Edit GCS") self.flight_plan.edit_alt_button.setText("Edit GCS")
self.settings = ConfSettingsWidget(self) self.settings = ConfSettingsWidget(self)
self.settings.settings_changed.connect(self.setting_changed) 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.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.telemetry.file_changed.connect(self.conf_changed)
self.settings.settings.itemDoubleClicked.connect(self.edit_setting) 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 from programs_conf import parse_tools
import subprocess import subprocess
# TODO make a setting ?
REMOVE_PROGRAMS_FINISHED = True
class ConfigurationPanel(QWidget, Ui_ConfigurationPanel): class ConfigurationPanel(QWidget, Ui_ConfigurationPanel):
@@ -82,14 +79,17 @@ class ConfigurationPanel(QWidget, Ui_ConfigurationPanel):
subprocess.Popen(cmd) subprocess.Popen(cmd)
# self.launch_program(self.flight_plan_editor.name, cmd, self.flight_plan_editor.icon) # 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) pw = ProgramWidget(shortname, cmd, icon, self.programs_widget)
self.programs_widget.layout().addWidget(pw) self.programs_widget.layout().addWidget(pw)
pw.ready_read_stderr.connect(lambda: self.console_widget.handle_stderr(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.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)) 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)) 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.finished.connect(lambda: self.remove_program(pw))
pw.start_program() pw.start_program()
@@ -22,24 +22,32 @@ class Ui_AppSettingsDialog(object):
self.text_editor_edit = QtWidgets.QLineEdit(AppSettingsDialog) self.text_editor_edit = QtWidgets.QLineEdit(AppSettingsDialog)
self.text_editor_edit.setObjectName("text_editor_edit") self.text_editor_edit.setObjectName("text_editor_edit")
self.gridLayout.addWidget(self.text_editor_edit, 0, 1, 1, 1) 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 = QtWidgets.QLabel(AppSettingsDialog)
self.label_2.setObjectName("label_2") self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.terminal_emulator_edit = QtWidgets.QLineEdit(AppSettingsDialog) self.terminal_emulator_edit = QtWidgets.QLineEdit(AppSettingsDialog)
self.terminal_emulator_edit.setObjectName("terminal_emulator_edit") self.terminal_emulator_edit.setObjectName("terminal_emulator_edit")
self.gridLayout.addWidget(self.terminal_emulator_edit, 1, 1, 1, 1) self.gridLayout.addWidget(self.terminal_emulator_edit, 1, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(AppSettingsDialog) self.label_4 = QtWidgets.QLabel(AppSettingsDialog)
self.label_3.setObjectName("label_3") self.label_4.setWordWrap(True)
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1) self.label_4.setObjectName("label_4")
self.keep_changes_checkbox = QtWidgets.QCheckBox(AppSettingsDialog) self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
self.keep_changes_checkbox.setText("") self.keep_build_programs_checkbox = QtWidgets.QCheckBox(AppSettingsDialog)
self.keep_changes_checkbox.setObjectName("keep_changes_checkbox") self.keep_build_programs_checkbox.setText("")
self.gridLayout.addWidget(self.keep_changes_checkbox, 2, 1, 1, 1) self.keep_build_programs_checkbox.setObjectName("keep_build_programs_checkbox")
self.buttonBox = QtWidgets.QDialogButtonBox(AppSettingsDialog) self.gridLayout.addWidget(self.keep_build_programs_checkbox, 3, 1, 1, 1)
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.retranslateUi(AppSettingsDialog) self.retranslateUi(AppSettingsDialog)
self.buttonBox.accepted.connect(AppSettingsDialog.accept) self.buttonBox.accepted.connect(AppSettingsDialog.accept)
@@ -50,5 +58,6 @@ class Ui_AppSettingsDialog(object):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
AppSettingsDialog.setWindowTitle(_translate("AppSettingsDialog", "Settings")) AppSettingsDialog.setWindowTitle(_translate("AppSettingsDialog", "Settings"))
self.label.setText(_translate("AppSettingsDialog", "Text editor")) 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_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.label_14.setText(_translate("Build", "Target"))
self.clean_button.setToolTip(_translate("Build", "Clean")) self.clean_button.setToolTip(_translate("Build", "Clean"))
self.clean_button.setText(_translate("Build", "...")) self.clean_button.setText(_translate("Build", "..."))
self.clean_button.setShortcut(_translate("Build", "Ctrl+C"))
self.build_button.setToolTip(_translate("Build", "Build")) self.build_button.setToolTip(_translate("Build", "Build"))
self.build_button.setText(_translate("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.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.label_15.setText(_translate("Build", "Device"))
self.flash_button.setToolTip(_translate("Build", "Upload")) self.flash_button.setToolTip(_translate("Build", "Upload"))
self.flash_button.setText(_translate("Build", "Flash")) 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) ConfHeader.resize(664, 192)
self.horizontalLayout = QtWidgets.QHBoxLayout(ConfHeader) self.horizontalLayout = QtWidgets.QHBoxLayout(ConfHeader)
self.horizontalLayout.setObjectName("horizontalLayout") 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 = QtWidgets.QToolButton(ConfHeader)
self.color_button.setStyleSheet("") self.color_button.setStyleSheet("")
self.color_button.setText("") self.color_button.setText("")
self.color_button.setObjectName("color_button") self.color_button.setObjectName("color_button")
self.horizontalLayout.addWidget(self.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) self.ac_combo = QtWidgets.QComboBox(ConfHeader)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@@ -85,8 +85,10 @@ class Ui_ConfHeader(object):
ConfHeader.setWindowTitle(_translate("ConfHeader", "Form")) ConfHeader.setWindowTitle(_translate("ConfHeader", "Form"))
self.refresh_button.setToolTip(_translate("ConfHeader", "refresh Aircraft")) self.refresh_button.setToolTip(_translate("ConfHeader", "refresh Aircraft"))
self.refresh_button.setText(_translate("ConfHeader", "...")) 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.setToolTip(_translate("ConfHeader", "save conf"))
self.save_button.setText(_translate("ConfHeader", "...")) self.save_button.setText(_translate("ConfHeader", "..."))
self.save_button.setShortcut(_translate("ConfHeader", "Ctrl+S"))
self.label_4.setText(_translate("ConfHeader", "Set")) self.label_4.setText(_translate("ConfHeader", "Set"))
self.new_ac_action.setText(_translate("ConfHeader", "New AC")) self.new_ac_action.setText(_translate("ConfHeader", "New AC"))
self.remove_ac_action.setText(_translate("ConfHeader", "Remove")) 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: if self.process.state() == QProcess.NotRunning:
self.cmd = self.program_lineedit.text().split(" ") self.cmd = self.program_lineedit.text().split(" ")
self.start_program() self.start_program()
elif self.process.state() == QProcess.Running:
self.terminate()
def handle_run(self): def handle_run(self):
if self.process.state() == QProcess.NotRunning: if self.process.state() == QProcess.NotRunning:
+33 -16
View File
@@ -24,16 +24,6 @@
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="text_editor_edit"/> <widget class="QLineEdit" name="text_editor_edit"/>
</item> </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"> <item row="2" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
@@ -41,6 +31,16 @@
</property> </property>
</widget> </widget>
</item> </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"> <item row="2" column="1">
<widget class="QCheckBox" name="keep_changes_checkbox"> <widget class="QCheckBox" name="keep_changes_checkbox">
<property name="text"> <property name="text">
@@ -48,13 +48,30 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0" colspan="2"> <item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QLabel" name="label_2">
<property name="orientation"> <property name="text">
<enum>Qt::Horizontal</enum> <string>Terminal Emulator</string>
</property> </property>
<property name="standardButtons"> </widget>
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </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> </property>
</widget> </widget>
</item> </item>
+10 -1
View File
@@ -55,6 +55,9 @@
<iconset theme="edit-clear"> <iconset theme="edit-clear">
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="shortcut">
<string>Ctrl+C</string>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -69,6 +72,9 @@
<iconset theme="system-run"> <iconset theme="system-run">
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="shortcut">
<string>Ctrl+B</string>
</property>
<property name="toolButtonStyle"> <property name="toolButtonStyle">
<enum>Qt::ToolButtonIconOnly</enum> <enum>Qt::ToolButtonIconOnly</enum>
</property> </property>
@@ -96,7 +102,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox_2"> <widget class="QGroupBox" name="groupBox_2">
<property name="title"> <property name="title">
<string>Flash</string> <string>Upload</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_3"> <layout class="QHBoxLayout" name="horizontalLayout_3">
<item> <item>
@@ -127,6 +133,9 @@
<iconset theme="emblem-downloads"> <iconset theme="emblem-downloads">
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="shortcut">
<string>Ctrl+U</string>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
+13 -7
View File
@@ -14,13 +14,6 @@
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QSpinBox" name="id_spinBox">
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item> <item>
<widget class="QToolButton" name="color_button"> <widget class="QToolButton" name="color_button">
<property name="styleSheet"> <property name="styleSheet">
@@ -31,6 +24,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QSpinBox" name="id_spinBox">
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item> <item>
<widget class="QComboBox" name="ac_combo"> <widget class="QComboBox" name="ac_combo">
<property name="sizePolicy"> <property name="sizePolicy">
@@ -70,6 +70,9 @@
<iconset theme="view-refresh"> <iconset theme="view-refresh">
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="shortcut">
<string>Ctrl+R</string>
</property>
</widget> </widget>
</item> </item>
<item> <item>
@@ -84,6 +87,9 @@
<iconset theme="document-save"> <iconset theme="document-save">
<normaloff>.</normaloff>.</iconset> <normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</widget> </widget>
</item> </item>
<item> <item>