From b867bc26e999081a8eb03d81b090b98d302f81c3 Mon Sep 17 00:00:00 2001 From: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com> Date: Fri, 3 Jan 2025 04:58:55 -0800 Subject: [PATCH] fix(ui): properly unset container callbacks --- tagstudio/src/qt/widgets/fields.py | 37 +++++++++---------- .../qt/widgets/preview/field_containers.py | 7 ++-- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/tagstudio/src/qt/widgets/fields.py b/tagstudio/src/qt/widgets/fields.py index dfcc89d0..f3117d81 100644 --- a/tagstudio/src/qt/widgets/fields.py +++ b/tagstudio/src/qt/widgets/fields.py @@ -5,14 +5,13 @@ import math from pathlib import Path -from types import MethodType -from typing import Callable, Optional +from typing import Callable +from warnings import catch_warnings from PIL import Image, ImageQt from PySide6.QtCore import QEvent, Qt from PySide6.QtGui import QEnterEvent, QPixmap -from PySide6.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QWidget -from src.qt.helpers.qbutton_wrapper import QPushButtonWrapper +from PySide6.QtWidgets import QHBoxLayout, QLabel, QPushButton, QVBoxLayout, QWidget class FieldContainer(QWidget): @@ -72,7 +71,7 @@ class FieldContainer(QWidget): self.title_layout.addWidget(self.title_widget) self.title_layout.addStretch(2) - self.copy_button = QPushButtonWrapper() + self.copy_button = QPushButton() self.copy_button.setMinimumSize(button_size, button_size) self.copy_button.setMaximumSize(button_size, button_size) self.copy_button.setFlat(True) @@ -81,7 +80,7 @@ class FieldContainer(QWidget): self.title_layout.addWidget(self.copy_button) self.copy_button.setHidden(True) - self.edit_button = QPushButtonWrapper() + self.edit_button = QPushButton() self.edit_button.setMinimumSize(button_size, button_size) self.edit_button.setMaximumSize(button_size, button_size) self.edit_button.setFlat(True) @@ -90,7 +89,7 @@ class FieldContainer(QWidget): self.title_layout.addWidget(self.edit_button) self.edit_button.setHidden(True) - self.remove_button = QPushButtonWrapper() + self.remove_button = QPushButton() self.remove_button.setMinimumSize(button_size, button_size) self.remove_button.setMaximumSize(button_size, button_size) self.remove_button.setFlat(True) @@ -107,29 +106,29 @@ class FieldContainer(QWidget): self.field_container.setLayout(self.field_layout) self.inner_layout.addWidget(self.field_container) - def set_copy_callback(self, callback: Optional[MethodType]): - if self.copy_button.is_connected: + def set_copy_callback(self, callback: Callable | None = None): + with catch_warnings(record=True): self.copy_button.clicked.disconnect() self.copy_callback = callback - self.copy_button.clicked.connect(callback) - self.copy_button.is_connected = callable(callback) + if callback: + self.copy_button.clicked.connect(callback) - def set_edit_callback(self, callback: Callable): - if self.edit_button.is_connected: + def set_edit_callback(self, callback: Callable | None = None): + with catch_warnings(record=True): self.edit_button.clicked.disconnect() self.edit_callback = callback - self.edit_button.clicked.connect(callback) - self.edit_button.is_connected = callable(callback) + if callback: + self.edit_button.clicked.connect(callback) - def set_remove_callback(self, callback: Callable): - if self.remove_button.is_connected: + def set_remove_callback(self, callback: Callable | None = None): + with catch_warnings(record=True): self.remove_button.clicked.disconnect() self.remove_callback = callback - self.remove_button.clicked.connect(callback) - self.remove_button.is_connected = callable(callback) + if callback: + self.remove_button.clicked.connect(callback) def set_inner_widget(self, widget: "FieldWidget"): if self.field_layout.itemAt(0): diff --git a/tagstudio/src/qt/widgets/preview/field_containers.py b/tagstudio/src/qt/widgets/preview/field_containers.py index d3482387..406bbbe4 100644 --- a/tagstudio/src/qt/widgets/preview/field_containers.py +++ b/tagstudio/src/qt/widgets/preview/field_containers.py @@ -321,7 +321,6 @@ class FieldContainers(QWidget): if not is_mixed: try: container.set_title(field.type.name) - # container.set_editable(False) container.set_inline(False) # TODO: Localize this and/or add preferences. date = dt.strptime(field.value, "%Y-%m-%d %H:%M:%S") @@ -330,12 +329,12 @@ class FieldContainers(QWidget): container.set_inner_widget(inner_widget) except Exception: container.set_title(field.type.name) - # container.set_editable(False) container.set_inline(False) title = f"{field.type.name} (Date) (Unknown Format)" inner_widget = TextWidget(title, str(field.value)) container.set_inner_widget(inner_widget) + container.set_edit_callback() container.set_remove_callback( lambda: self.remove_message_box( prompt=self.remove_field_prompt(field.type.name), @@ -367,7 +366,6 @@ class FieldContainers(QWidget): ) ) - container.edit_button.setHidden(True) container.setHidden(False) def write_tag_container( @@ -424,7 +422,8 @@ class FieldContainers(QWidget): container.set_inner_widget(inner_widget) self.tags_updated.emit() - container.edit_button.setHidden(True) + container.set_edit_callback() + container.set_remove_callback() container.setHidden(False) def remove_field(self, field: BaseField):