ui: add field highlighting, tweak theming

This commit is contained in:
Travis Abendshien
2025-01-05 04:59:55 -08:00
parent 369d2dc388
commit af511d8986
7 changed files with 39 additions and 26 deletions

View File

@@ -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"<h4>{title}</h4>"
self.title_widget.setText(self.title)
def set_inline(self, inline: bool):
self.inline = inline

View File

@@ -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")

View File

@@ -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{{"

View File

@@ -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{{"

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)