gui: add im/export json settings menu bar actions

This commit is contained in:
2025-08-04 18:24:23 +08:00
parent c23db4467f
commit e6597e4c2e
3 changed files with 69 additions and 6 deletions

View File

@@ -1 +1,2 @@
include pykirdy/ui/*
include pykirdy/ui/*
include pykirdy/settings.schema.json

View File

@@ -707,6 +707,57 @@ class MainWindow(QtWidgets.QMainWindow):
self.kirdy_handler.end_session()
self.menu_action_hard_reset.triggered.connect(reset_kirdy)
@asyncSlot(str)
async def import_settings(path):
success = await self.kirdy.import_settings_from_json(path)
if success:
msg_box = QtWidgets.QMessageBox(self)
msg_box.setWindowTitle("Success")
msg_box.setIcon(QtWidgets.QMessageBox.Icon.Information)
msg_box.setText("Settings are loaded to Kirdy successfully.")
msg_box.show()
# Failure message is handled by cmd_warning_sig or cmd_error_sig Pyqt signal
@pyqtSlot(bool)
def import_settings_from_json_file(_):
file_dialog = QtWidgets.QFileDialog(self)
file_dialog.setWindowTitle("Open File")
file_dialog.setNameFilter("All Json files (*.json)")
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.ExistingFile)
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.Detail)
file_dialog.fileSelected.connect(import_settings)
file_dialog.show()
@pyqtSlot(bool)
def import_settings_warning_msg_box(_):
msg_box = QtWidgets.QMessageBox(self)
msg_box.setWindowTitle("Warning")
msg_box.setText("Laser and Thermostat will be powered off before importing settings. Do you want to continue?")
msg_box.setIcon(QtWidgets.QMessageBox.Icon.Warning)
msg_box.addButton(QtWidgets.QPushButton("No"), QtWidgets.QMessageBox.ButtonRole.RejectRole)
yes_button = QtWidgets.QPushButton("Yes")
yes_button.clicked.connect(import_settings_from_json_file)
msg_box.addButton(yes_button, QtWidgets.QMessageBox.ButtonRole.AcceptRole)
msg_box.show()
self.menu_action_import_settings_from_json_file.triggered.connect(import_settings_warning_msg_box)
@asyncSlot(str)
async def export_settings(path):
await self.kirdy.export_settings_to_json(path)
@asyncSlot(bool)
async def export_settings_to_json_file(_):
file_dialog = QtWidgets.QFileDialog(self)
file_dialog.setWindowTitle("Save Json File")
file_dialog.selectFile("settings.json")
file_dialog.setNameFilter("All Json files (*.json)")
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.ExistingFile)
file_dialog.setAcceptMode(QtWidgets.QFileDialog.AcceptMode.AcceptSave)
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.Detail)
file_dialog.fileSelected.connect(export_settings)
file_dialog.show()
self.menu_action_export_settings_to_json_file.triggered.connect(export_settings_to_json_file)
@pyqtSlot(bool)
def save_settings(_):
self.kirdy_handler.dispatch_task_to_kirdy(self.kirdy.device.save_current_settings_to_flash())
@@ -1060,6 +1111,8 @@ class MainWindow(QtWidgets.QMainWindow):
self.menu_action_save.setEnabled(result)
self.menu_action_load.setEnabled(result)
self.menu_action_update_net_settings.setEnabled(result)
self.menu_action_export_settings_to_json_file.setEnabled(result)
self.menu_action_import_settings_from_json_file.setEnabled(result)
menu_bar_setEnable(result)
def graph_group_setEnable(result):

View File

@@ -527,7 +527,7 @@
<x>0</x>
<y>0</y>
<width>1280</width>
<height>23</height>
<height>24</height>
</rect>
</property>
<property name="styleSheet">
@@ -552,7 +552,8 @@
<addaction name="menu_action_load"/>
<addaction name="menu_action_dfu_mode"/>
<addaction name="menu_action_hard_reset"/>
<addaction name="menu_action_reconfigure_transconductanc"/>
<addaction name="menu_action_import_settings_from_json_file"/>
<addaction name="menu_action_export_settings_to_json_file"/>
</widget>
<widget class="QMenu" name="menuAbout">
<property name="styleSheet">
@@ -708,12 +709,20 @@
<string>Load Settings from Flash</string>
</property>
</action>
<action name="menu_action_reconfigure_transconductanc">
<property name="enabled">
<action name="menu_action_export_settings_to_json_file">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Reconfigure Transconductance</string>
<string>Export Settings to Json File</string>
</property>
</action>
<action name="menu_action_import_settings_from_json_file">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Import Settings from Json File</string>
</property>
</action>
</widget>