diff --git a/src/main/python/layout_editor.py b/src/main/python/layout_editor.py new file mode 100644 index 0000000..5a22367 --- /dev/null +++ b/src/main/python/layout_editor.py @@ -0,0 +1,38 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +from PyQt5.QtWidgets import QVBoxLayout + +from keyboard_container import KeyboardContainer +from keycodes import recreate_layer_keycodes +from tabbed_keycodes import TabbedKeycodes + + +class LayoutEditor(QVBoxLayout): + + def __init__(self, parent=None): + super().__init__(parent) + + self.keyboard_container = KeyboardContainer() + self.keyboard_container.number_layers_changed.connect(self.on_number_layers_changed) + + self.tabbed_keycodes = TabbedKeycodes() + self.tabbed_keycodes.keycode_changed.connect(self.on_keycode_changed) + + self.addWidget(self.keyboard_container) + self.addWidget(self.tabbed_keycodes) + + def on_number_layers_changed(self): + recreate_layer_keycodes(self.keyboard_container.keyboard.layers) + self.tabbed_keycodes.recreate_layer_keycode_buttons() + + def on_keycode_changed(self, code): + self.keyboard_container.set_key(code) + + def rebuild(self, keyboard): + self.keyboard_container.rebuild(keyboard) + + def save_layout(self): + return self.keyboard_container.save_layout() + + def restore_layout(self, data): + self.keyboard_container.restore_layout(data) diff --git a/src/main/python/main_window.py b/src/main/python/main_window.py index 566bcc6..ae3db3a 100644 --- a/src/main/python/main_window.py +++ b/src/main/python/main_window.py @@ -8,9 +8,7 @@ import json from firmware_flasher import FirmwareFlasher from keyboard import Keyboard -from keyboard_container import KeyboardContainer -from keycodes import recreate_layer_keycodes -from tabbed_keycodes import TabbedKeycodes +from layout_editor import LayoutEditor from util import tr, find_vial_keyboards, open_device @@ -23,12 +21,6 @@ class MainWindow(QMainWindow): self.sideload_json = None self.sideload_vid = self.sideload_pid = -1 - self.keyboard_container = KeyboardContainer() - self.keyboard_container.number_layers_changed.connect(self.on_number_layers_changed) - - self.tabbed_keycodes = TabbedKeycodes() - self.tabbed_keycodes.keycode_changed.connect(self.on_keycode_changed) - self.combobox_devices = QComboBox() self.combobox_devices.currentIndexChanged.connect(self.on_device_selected) @@ -41,14 +33,11 @@ class MainWindow(QMainWindow): layout_combobox.addWidget(self.combobox_devices) layout_combobox.addWidget(btn_refresh_devices) - kb_and_codes = QVBoxLayout() - kb_and_codes.addWidget(self.keyboard_container) - kb_and_codes.addWidget(self.tabbed_keycodes) - + self.layout_editor = LayoutEditor() flasher = FirmwareFlasher() tabs = QTabWidget() - for container, lbl in [(kb_and_codes, "Layout"), (flasher, "Firmware updater")]: + for container, lbl in [(self.layout_editor, "Layout"), (flasher, "Firmware updater")]: w = QWidget() w.setLayout(container) tabs.addTab(w, tr("MainWindow", lbl)) @@ -98,7 +87,7 @@ class MainWindow(QMainWindow): if dialog.exec_() == QDialog.Accepted: with open(dialog.selectedFiles()[0], "rb") as inf: data = inf.read() - self.keyboard_container.restore_layout(data) + self.layout_editor.restore_layout(data) def on_layout_save(self): dialog = QFileDialog() @@ -107,7 +96,7 @@ class MainWindow(QMainWindow): 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()) + outf.write(self.layout_editor.save_layout()) def on_click_refresh(self): self.devices = find_vial_keyboards(self.sideload_vid, self.sideload_pid) @@ -130,14 +119,7 @@ class MainWindow(QMainWindow): self.keyboard.reload(self.sideload_json) else: self.keyboard.reload() - self.keyboard_container.rebuild(self.keyboard) - - def on_number_layers_changed(self): - recreate_layer_keycodes(self.keyboard_container.keyboard.layers) - self.tabbed_keycodes.recreate_layer_keycode_buttons() - - def on_keycode_changed(self, code): - self.keyboard_container.set_key(code) + self.layout_editor.rebuild(self.keyboard) def on_sideload_json(self): dialog = QFileDialog()