From af511d898610344d29c6ec0721abd6c03ff41e44 Mon Sep 17 00:00:00 2001
From: Travis Abendshien <46939827+CyanVoxel@users.noreply.github.com>
Date: Sun, 5 Jan 2025 04:59:55 -0800
Subject: [PATCH] ui: add field highlighting, tweak theming
---
tagstudio/src/qt/widgets/fields.py | 42 +++++++++++++------
.../qt/widgets/preview/field_containers.py | 5 ++-
tagstudio/src/qt/widgets/preview_panel.py | 1 +
tagstudio/src/qt/widgets/tag.py | 6 +--
tagstudio/src/qt/widgets/text.py | 5 +--
tagstudio/src/qt/widgets/text_box_edit.py | 3 +-
tagstudio/src/qt/widgets/text_line_edit.py | 3 +-
7 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/tagstudio/src/qt/widgets/fields.py b/tagstudio/src/qt/widgets/fields.py
index 44ce64bb..f4fd6ae1 100644
--- a/tagstudio/src/qt/widgets/fields.py
+++ b/tagstudio/src/qt/widgets/fields.py
@@ -12,6 +12,7 @@ from PIL import Image, ImageQt
from PySide6.QtCore import QEvent, Qt
from PySide6.QtGui import QEnterEvent, QPixmap
from PySide6.QtWidgets import QHBoxLayout, QLabel, QPushButton, QVBoxLayout, QWidget
+from src.core.enums import Theme
class FieldContainer(QWidget):
@@ -31,6 +32,19 @@ class FieldContainer(QWidget):
).resize((math.floor(24 * 1.25), math.floor(24 * 1.25)))
trash_icon_128.load()
+ # TODO: There should be a global button theme somewhere.
+ container_style = (
+ f"QWidget#fieldContainer{{"
+ "border-radius:4px;"
+ f"}}"
+ f"QWidget#fieldContainer::hover{{"
+ f"background-color:{Theme.COLOR_HOVER.value};"
+ f"}}"
+ f"QWidget#fieldContainer::pressed{{"
+ f"background-color:{Theme.COLOR_PRESSED.value};"
+ f"}}"
+ )
+
def __init__(self, title: str = "Field", inline: bool = True) -> None:
super().__init__()
self.setObjectName("fieldContainer")
@@ -47,12 +61,12 @@ class FieldContainer(QWidget):
self.inner_layout = QVBoxLayout()
self.inner_layout.setObjectName("innerLayout")
- self.inner_layout.setContentsMargins(0, 0, 0, 0)
+ self.inner_layout.setContentsMargins(6, 0, 6, 6)
self.inner_layout.setSpacing(0)
- self.inner_container = QWidget()
- self.inner_container.setObjectName("innerContainer")
- self.inner_container.setLayout(self.inner_layout)
- self.root_layout.addWidget(self.inner_container)
+ self.field_container = QWidget()
+ self.field_container.setObjectName("fieldContainer")
+ self.field_container.setLayout(self.inner_layout)
+ self.root_layout.addWidget(self.field_container)
self.title_container = QWidget()
self.title_layout = QHBoxLayout(self.title_container)
@@ -66,12 +80,12 @@ class FieldContainer(QWidget):
self.title_widget.setMinimumHeight(button_size)
self.title_widget.setObjectName("fieldTitle")
self.title_widget.setWordWrap(True)
- self.title_widget.setStyleSheet("font-weight: bold; font-size: 14px;")
self.title_widget.setText(title)
self.title_layout.addWidget(self.title_widget)
self.title_layout.addStretch(2)
self.copy_button = QPushButton()
+ self.copy_button.setObjectName("copyButton")
self.copy_button.setMinimumSize(button_size, button_size)
self.copy_button.setMaximumSize(button_size, button_size)
self.copy_button.setFlat(True)
@@ -81,6 +95,7 @@ class FieldContainer(QWidget):
self.copy_button.setHidden(True)
self.edit_button = QPushButton()
+ self.edit_button.setObjectName("editButton")
self.edit_button.setMinimumSize(button_size, button_size)
self.edit_button.setMaximumSize(button_size, button_size)
self.edit_button.setFlat(True)
@@ -90,6 +105,7 @@ class FieldContainer(QWidget):
self.edit_button.setHidden(True)
self.remove_button = QPushButton()
+ self.remove_button.setObjectName("removeButton")
self.remove_button.setMinimumSize(button_size, button_size)
self.remove_button.setMaximumSize(button_size, button_size)
self.remove_button.setFlat(True)
@@ -98,13 +114,15 @@ class FieldContainer(QWidget):
self.title_layout.addWidget(self.remove_button)
self.remove_button.setHidden(True)
- self.field_container = QWidget()
- self.field_container.setObjectName("fieldContainer")
+ self.field = QWidget()
+ self.field.setObjectName("field")
self.field_layout = QHBoxLayout()
self.field_layout.setObjectName("fieldLayout")
self.field_layout.setContentsMargins(0, 0, 0, 0)
- self.field_container.setLayout(self.field_layout)
- self.inner_layout.addWidget(self.field_container)
+ self.field.setLayout(self.field_layout)
+ self.inner_layout.addWidget(self.field)
+
+ self.setStyleSheet(FieldContainer.container_style)
def set_copy_callback(self, callback: Callable | None = None):
with catch_warnings(record=True):
@@ -144,8 +162,8 @@ class FieldContainer(QWidget):
return None
def set_title(self, title: str):
- self.title = title
- self.title_widget.setText(title)
+ self.title = self.title = f"
{title}
"
+ self.title_widget.setText(self.title)
def set_inline(self, inline: bool):
self.inline = inline
diff --git a/tagstudio/src/qt/widgets/preview/field_containers.py b/tagstudio/src/qt/widgets/preview/field_containers.py
index 333a6a27..a61d3a0d 100644
--- a/tagstudio/src/qt/widgets/preview/field_containers.py
+++ b/tagstudio/src/qt/widgets/preview/field_containers.py
@@ -68,7 +68,8 @@ class FieldContainers(QWidget):
self.scroll_layout = QVBoxLayout()
self.scroll_layout.setAlignment(Qt.AlignmentFlag.AlignTop)
- self.scroll_layout.setContentsMargins(6, 1, 6, 6)
+ self.scroll_layout.setContentsMargins(3, 3, 3, 3)
+ self.scroll_layout.setSpacing(0)
scroll_container: QWidget = QWidget()
scroll_container.setObjectName("entryScrollContainer")
@@ -77,7 +78,7 @@ class FieldContainers(QWidget):
info_section = QWidget()
info_layout = QVBoxLayout(info_section)
info_layout.setContentsMargins(0, 0, 0, 0)
- info_layout.setSpacing(6)
+ info_layout.setSpacing(0)
self.scroll_area = QScrollArea()
self.scroll_area.setObjectName("entryScrollArea")
diff --git a/tagstudio/src/qt/widgets/preview_panel.py b/tagstudio/src/qt/widgets/preview_panel.py
index a88768fa..0ae9c0e5 100644
--- a/tagstudio/src/qt/widgets/preview_panel.py
+++ b/tagstudio/src/qt/widgets/preview_panel.py
@@ -44,6 +44,7 @@ class PreviewPanel(QWidget):
f"QPushButton{{"
f"background-color:{Theme.COLOR_BG.value};"
"border-radius:6px;"
+ "font-weight: 500;"
"text-align: center;"
f"}}"
f"QPushButton::hover{{"
diff --git a/tagstudio/src/qt/widgets/tag.py b/tagstudio/src/qt/widgets/tag.py
index 46f5fb9b..efc288bb 100644
--- a/tagstudio/src/qt/widgets/tag.py
+++ b/tagstudio/src/qt/widgets/tag.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2024 Travis Abendshien (CyanVoxel).
+# Copyright (C) 2025 Travis Abendshien (CyanVoxel).
# Licensed under the GPL-3.0 License.
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
@@ -114,8 +114,6 @@ class TagWidget(QWidget):
self.tag = tag
self.has_edit = has_edit
self.has_remove = has_remove
- # self.bg_label = QLabel()
- # self.setStyleSheet('background-color:blue;')
# if on_click_callback:
self.setCursor(Qt.CursorShape.PointingHandCursor)
@@ -148,7 +146,7 @@ class TagWidget(QWidget):
self.inner_layout.setContentsMargins(2, 2, 2, 2)
self.bg_button.setLayout(self.inner_layout)
- self.bg_button.setMinimumSize(math.ceil(22 * 1.5), 22)
+ self.bg_button.setMinimumSize(math.ceil(22 * 2), 22)
self.bg_button.setStyleSheet(
f"QPushButton{{"
diff --git a/tagstudio/src/qt/widgets/text.py b/tagstudio/src/qt/widgets/text.py
index 8238f4c1..28e21b03 100644
--- a/tagstudio/src/qt/widgets/text.py
+++ b/tagstudio/src/qt/widgets/text.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2024 Travis Abendshien (CyanVoxel).
+# Copyright (C) 2025 Travis Abendshien (CyanVoxel).
# Licensed under the GPL-3.0 License.
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
@@ -11,14 +11,11 @@ from src.qt.widgets.fields import FieldWidget
class TextWidget(FieldWidget):
def __init__(self, title, text: str) -> None:
super().__init__(title)
- # self.item = item
self.setObjectName("textBox")
- # self.setStyleSheet('background-color:purple;')
self.base_layout = QHBoxLayout()
self.base_layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.base_layout)
self.text_label = QLabel()
- # self.text_label.textFormat(Qt.TextFormat.RichText)
self.text_label.setStyleSheet("font-size: 12px")
self.text_label.setWordWrap(True)
self.text_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
diff --git a/tagstudio/src/qt/widgets/text_box_edit.py b/tagstudio/src/qt/widgets/text_box_edit.py
index 44cca3f4..5f554501 100644
--- a/tagstudio/src/qt/widgets/text_box_edit.py
+++ b/tagstudio/src/qt/widgets/text_box_edit.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2024 Travis Abendshien (CyanVoxel).
+# Copyright (C) 2025 Travis Abendshien (CyanVoxel).
# Licensed under the GPL-3.0 License.
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
@@ -10,7 +10,6 @@ from src.qt.widgets.panel import PanelWidget
class EditTextBox(PanelWidget):
def __init__(self, text):
super().__init__()
- # self.setLayout()
self.setMinimumSize(480, 480)
self.root_layout = QVBoxLayout(self)
self.root_layout.setContentsMargins(6, 0, 6, 0)
diff --git a/tagstudio/src/qt/widgets/text_line_edit.py b/tagstudio/src/qt/widgets/text_line_edit.py
index 74b65c5b..09e2681c 100644
--- a/tagstudio/src/qt/widgets/text_line_edit.py
+++ b/tagstudio/src/qt/widgets/text_line_edit.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2024 Travis Abendshien (CyanVoxel).
+# Copyright (C) 2025 Travis Abendshien (CyanVoxel).
# Licensed under the GPL-3.0 License.
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
from typing import Callable
@@ -10,7 +10,6 @@ from src.qt.widgets.panel import PanelWidget
class EditTextLine(PanelWidget):
def __init__(self, text):
super().__init__()
- # self.setLayout()
self.setMinimumWidth(480)
self.root_layout = QVBoxLayout(self)
self.root_layout.setContentsMargins(6, 0, 6, 0)