diff --git a/tagstudio/src/qt/widgets/panel.py b/tagstudio/src/qt/widgets/panel.py index cb87f1ef..7ba3d4d2 100644 --- a/tagstudio/src/qt/widgets/panel.py +++ b/tagstudio/src/qt/widgets/panel.py @@ -1,9 +1,9 @@ # Copyright (C) 2024 Travis Abendshien (CyanVoxel). # Licensed under the GPL-3.0 License. # Created for TagStudio: https://github.com/CyanVoxel/TagStudio - - +import logging from types import FunctionType +from typing import Callable from PySide6.QtCore import Signal, Qt from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton @@ -70,12 +70,12 @@ class PanelModal(QWidget): # self.cancel_button.clicked.connect(cancel_callback) self.button_layout.addWidget(self.cancel_button) - if save_callback or has_save: self.save_button = QPushButton() self.save_button.setText("Save") self.save_button.setAutoDefault(True) self.save_button.clicked.connect(self.hide) self.save_button.clicked.connect(self.saved.emit) + if done_callback: self.save_button.clicked.connect(done_callback) if save_callback: @@ -84,6 +84,9 @@ class PanelModal(QWidget): ) self.button_layout.addWidget(self.save_button) + # trigger save button actions when pressing enter in the widget + self.widget.add_callback(lambda: self.save_button.click()) + widget.done.connect(lambda: save_callback(widget.get_content())) self.root_layout.addWidget(self.title_widget) @@ -107,3 +110,6 @@ class PanelWidget(QWidget): def reset(self): pass + + def add_callback(self, callback: Callable, event: str = "returnPressed"): + logging.warning(f"add_callback not implemented for {self.__class__.__name__}") diff --git a/tagstudio/src/qt/widgets/text_line_edit.py b/tagstudio/src/qt/widgets/text_line_edit.py index 2158b97b..971f7746 100644 --- a/tagstudio/src/qt/widgets/text_line_edit.py +++ b/tagstudio/src/qt/widgets/text_line_edit.py @@ -1,7 +1,7 @@ # Copyright (C) 2024 Travis Abendshien (CyanVoxel). # Licensed under the GPL-3.0 License. # Created for TagStudio: https://github.com/CyanVoxel/TagStudio - +from typing import Callable from PySide6.QtWidgets import QVBoxLayout, QLineEdit @@ -18,7 +18,6 @@ class EditTextLine(PanelWidget): self.text = text self.text_edit = QLineEdit() self.text_edit.setText(text) - self.text_edit.returnPressed.connect(self.done.emit) self.root_layout.addWidget(self.text_edit) def get_content(self) -> str: @@ -26,3 +25,9 @@ class EditTextLine(PanelWidget): def reset(self): self.text_edit.setText(self.text) + + def add_callback(self, callback: Callable, event: str = "returnPressed"): + if event == "returnPressed": + self.text_edit.returnPressed.connect(callback) + else: + raise ValueError(f"unknown event type: {event}")