diff --git a/src/main/python/keyboard_container.py b/src/main/python/keyboard_container.py index 1a50b9c..e6cb87a 100644 --- a/src/main/python/keyboard_container.py +++ b/src/main/python/keyboard_container.py @@ -151,3 +151,10 @@ class KeyboardContainer(QWidget): self.selected_col = col break self.refresh_layer_display() + + def save_layout(self): + return self.keyboard.save_layout() + + def restore_layout(self, data): + self.keyboard.restore_layout(data) + self.refresh_layer_display() diff --git a/src/main/python/main_window.py b/src/main/python/main_window.py index 2b6b288..9778f2d 100644 --- a/src/main/python/main_window.py +++ b/src/main/python/main_window.py @@ -1,7 +1,8 @@ # SPDX-License-Identifier: GPL-2.0-or-later from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import QWidget, QComboBox, QToolButton, QHBoxLayout, QVBoxLayout +from PyQt5.QtWidgets import QWidget, QComboBox, QToolButton, QHBoxLayout, QVBoxLayout, QMainWindow, QAction, qApp, \ + QFileDialog, QDialog from keyboard import Keyboard from keyboard_container import KeyboardContainer @@ -10,7 +11,7 @@ from tabbed_keycodes import TabbedKeycodes from util import tr, find_vial_keyboards, open_device -class MainWindow(QWidget): +class MainWindow(QMainWindow): def __init__(self): super().__init__() @@ -39,11 +40,54 @@ class MainWindow(QWidget): layout.addLayout(layout_combobox) layout.addWidget(self.keyboard_container) layout.addWidget(self.tabbed_keycodes) - self.setLayout(layout) + w = QWidget() + w.setLayout(layout) + self.setCentralWidget(w) + + self.init_menu() # make sure initial state is valid self.on_click_refresh() + def init_menu(self): + layout_load_act = QAction(tr("MenuFile", "Load saved layout"), self) + layout_load_act.setShortcut("Ctrl+O") + layout_load_act.triggered.connect(self.on_layout_load) + + layout_save_act = QAction(tr("MenuFile", "Save current layout"), self) + layout_save_act.setShortcut("Ctrl+S") + layout_save_act.triggered.connect(self.on_layout_save) + + exit_act = QAction(tr("MenuFile", "Exit"), self) + exit_act.setShortcut("Ctrl+Q") + exit_act.triggered.connect(qApp.exit) + + menubar = self.menuBar() + file_menu = self.menuBar().addMenu(tr("Menu", "File")) + file_menu.addAction(layout_load_act) + file_menu.addAction(layout_save_act) + file_menu.addSeparator() + file_menu.addAction(exit_act) + + def on_layout_load(self): + dialog = QFileDialog() + dialog.setDefaultSuffix("vil") + dialog.setAcceptMode(QFileDialog.AcceptOpen) + dialog.setNameFilters(["Vial layout (*.vil)"]) + if dialog.exec_() == QDialog.Accepted: + with open(dialog.selectedFiles()[0], "rb") as inf: + data = inf.read() + self.keyboard_container.restore_layout(data) + + def on_layout_save(self): + dialog = QFileDialog() + dialog.setDefaultSuffix("vil") + dialog.setAcceptMode(QFileDialog.AcceptSave) + dialog.setNameFilters(["Vial layout (*.vil)"]) + if dialog.exec_() == QDialog.Accepted: + with open(dialog.selectedFiles()[0], "wb") as outf: + outf.write(self.keyboard_container.save_layout()) + def on_click_refresh(self): self.devices = find_vial_keyboards() self.combobox_devices.clear()