mirror of
https://github.com/TagStudioDev/TagStudio.git
synced 2026-06-26 08:59:06 +00:00
ui: add multiline checkbox to field template editor
This commit is contained in:
@@ -21,13 +21,13 @@ class EditFieldTemplateModal(EditFieldTemplateModalView):
|
||||
"TextFieldTemplate": Translations["field_type.text"],
|
||||
"DatetimeFieldTemplate": Translations["field_type.datetime"],
|
||||
}
|
||||
DEFAULT_TYPE_INDEX = 0
|
||||
|
||||
def __init__(self, field_template: BaseFieldTemplate | None = None) -> None:
|
||||
super().__init__()
|
||||
self.__field_id: int | None = field_template.id if field_template else None
|
||||
self.__field_name: str = ""
|
||||
self.__field_type: str | None = field_template.class_name if field_template else None
|
||||
self.__text_field_is_multiline: bool = False
|
||||
self.old_field_type: str = ""
|
||||
|
||||
for k, v in EditFieldTemplateModal.field_type_map.items():
|
||||
@@ -35,6 +35,7 @@ class EditFieldTemplateModal(EditFieldTemplateModalView):
|
||||
|
||||
self.__connect_callbacks()
|
||||
self.set_field_template(field_template)
|
||||
self.__on_type_changed(EditFieldTemplateModal.DEFAULT_TYPE_INDEX)
|
||||
|
||||
def __connect_callbacks(self) -> None:
|
||||
self.name_field.textChanged.connect(self.__on_name_changed)
|
||||
@@ -47,7 +48,9 @@ class EditFieldTemplateModal(EditFieldTemplateModalView):
|
||||
# Indicates a new template, set default values
|
||||
if field_template is None:
|
||||
self.__field_name = Translations["field_template.new"]
|
||||
self.__field_type = list(EditFieldTemplateModal.field_type_map.keys())[0] # First index
|
||||
self.__field_type = list(EditFieldTemplateModal.field_type_map.keys())[
|
||||
EditFieldTemplateModal.DEFAULT_TYPE_INDEX
|
||||
]
|
||||
return
|
||||
# Populate common values for any field type
|
||||
else:
|
||||
@@ -63,7 +66,7 @@ class EditFieldTemplateModal(EditFieldTemplateModalView):
|
||||
|
||||
# Populate values for specific field types
|
||||
if isinstance(field_template, TextFieldTemplate):
|
||||
self.__text_field_is_multiline = field_template.is_multiline
|
||||
self._multiline_checkbox.setChecked(field_template.is_multiline)
|
||||
|
||||
def __on_name_changed(self):
|
||||
is_empty = not self.name_field.text().strip()
|
||||
@@ -78,14 +81,26 @@ class EditFieldTemplateModal(EditFieldTemplateModalView):
|
||||
self.panel_save_button.setDisabled(is_empty)
|
||||
|
||||
def __on_type_changed(self, index: int):
|
||||
old_type = self.__field_type
|
||||
self.__field_type = list(EditFieldTemplateModal.field_type_map.keys())[index]
|
||||
|
||||
if old_type == self.__field_type:
|
||||
logger.info(f"old type {old_type}, new type {self.__field_type}")
|
||||
return
|
||||
|
||||
if old_type == "TextFieldTemplate":
|
||||
self._text_field_attributes_widget.hide()
|
||||
# NOTE: Future options specific to other type will go here.
|
||||
|
||||
if self.__field_type == "TextFieldTemplate":
|
||||
self._text_field_attributes_widget.show()
|
||||
|
||||
def build_field_template(self) -> BaseFieldTemplate:
|
||||
if self.__field_type == "TextFieldTemplate":
|
||||
return TextFieldTemplate(
|
||||
id=self.__field_id,
|
||||
name=self.name_field.text(),
|
||||
is_multiline=self.__text_field_is_multiline,
|
||||
is_multiline=self._multiline_checkbox.isChecked(),
|
||||
)
|
||||
elif self.__field_type == "DatetimeFieldTemplate":
|
||||
return DatetimeFieldTemplate(
|
||||
@@ -100,17 +115,5 @@ class EditFieldTemplateModal(EditFieldTemplateModalView):
|
||||
)
|
||||
return TextFieldTemplate(
|
||||
name=self.name_field.text(),
|
||||
is_multiline=self.__text_field_is_multiline,
|
||||
is_multiline=self._multiline_checkbox.isChecked(),
|
||||
)
|
||||
|
||||
# def parent_post_init(self):
|
||||
# self.setTabOrder(self.name_field, self.shorthand_field)
|
||||
# self.setTabOrder(self.shorthand_field, self.aliases_add_button)
|
||||
# self.setTabOrder(self.aliases_add_button, self.parent_tags_add_button)
|
||||
# self.setTabOrder(self.parent_tags_add_button, self.color_button)
|
||||
# self.setTabOrder(self.color_button, unwrap(self.panel_cancel_button))
|
||||
# self.setTabOrder(unwrap(self.panel_cancel_button), unwrap(self.panel_save_button))
|
||||
# self.setTabOrder(unwrap(self.panel_save_button), self.aliases_table.cellWidget(0, 1))
|
||||
# self.name_field.selectAll()
|
||||
# self.name_field.setFocus()
|
||||
# self._set_aliases()
|
||||
|
||||
@@ -12,9 +12,9 @@ from PySide6.QtCore import QEasingCurve, QPoint, QPropertyAnimation, Qt
|
||||
from PySide6.QtGui import QPixmap
|
||||
from PySide6.QtWidgets import QLabel, QPushButton, QVBoxLayout, QWidget
|
||||
|
||||
from tagstudio.qt.controllers.clickable_label import ClickableLabel
|
||||
from tagstudio.qt.helpers.color_overlay import gradient_overlay, theme_fg_overlay
|
||||
from tagstudio.qt.translations import Translations
|
||||
from tagstudio.qt.views.clickable_label import ClickableLabel
|
||||
|
||||
# Only import for type checking/autocompletion, will not be imported at runtime.
|
||||
if typing.TYPE_CHECKING:
|
||||
|
||||
@@ -5,15 +5,19 @@
|
||||
import structlog
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtWidgets import (
|
||||
QCheckBox,
|
||||
QComboBox,
|
||||
QHBoxLayout,
|
||||
QLabel,
|
||||
QLineEdit,
|
||||
QVBoxLayout,
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from tagstudio.qt.controllers.clickable_label import ClickableLabel
|
||||
from tagstudio.qt.translations import Translations
|
||||
from tagstudio.qt.views.panel_modal import PanelWidget
|
||||
from tagstudio.qt.views.stylesheets.stylesheets import checkbox_style
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
@@ -28,7 +32,7 @@ class EditFieldTemplateModalView(PanelWidget):
|
||||
self.root_layout.setContentsMargins(6, 0, 6, 0)
|
||||
self.root_layout.setAlignment(Qt.AlignmentFlag.AlignTop)
|
||||
|
||||
# Field Name -------------------------------------------------------------------------------
|
||||
# Field Name
|
||||
self._name_widget = QWidget()
|
||||
self._name_layout = QVBoxLayout(self._name_widget)
|
||||
self._name_layout.setStretch(1, 1)
|
||||
@@ -42,7 +46,7 @@ class EditFieldTemplateModalView(PanelWidget):
|
||||
self.name_field.setPlaceholderText(Translations["field.field_name_required"])
|
||||
self._name_layout.addWidget(self.name_field)
|
||||
|
||||
# Field Type -------------------------------------------------------------------------------
|
||||
# Field Type
|
||||
self._type_widget = QWidget()
|
||||
self._type_layout = QVBoxLayout(self._type_widget)
|
||||
self._type_layout.setStretch(1, 1)
|
||||
@@ -52,8 +56,36 @@ class EditFieldTemplateModalView(PanelWidget):
|
||||
self._type_title = QLabel(Translations["field.type"])
|
||||
self._type_layout.addWidget(self._type_title)
|
||||
self._type_combobox = QComboBox()
|
||||
self._type_combobox.setMinimumWidth(120)
|
||||
self._type_layout.addWidget(self._type_combobox)
|
||||
|
||||
# Text Field Attributes --------------------------------------------------------------------
|
||||
self._text_field_attributes_widget = QWidget()
|
||||
self._text_field_attributes_layout = QHBoxLayout(self._text_field_attributes_widget)
|
||||
self._text_field_attributes_layout.setStretch(1, 1)
|
||||
self._text_field_attributes_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self._text_field_attributes_layout.setSpacing(6)
|
||||
|
||||
# Is Multiline
|
||||
self._multiline_widget = QWidget()
|
||||
self._multiline_layout = QHBoxLayout(self._multiline_widget)
|
||||
self._multiline_layout.setStretch(1, 1)
|
||||
self._multiline_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self._multiline_layout.setSpacing(6)
|
||||
self._multiline_layout.setAlignment(Qt.AlignmentFlag.AlignLeft)
|
||||
self._multiline_title = ClickableLabel(Translations["field.text.is_multiline"])
|
||||
self._multiline_checkbox = QCheckBox()
|
||||
self._multiline_checkbox.setFixedSize(22, 22)
|
||||
self._multiline_checkbox.setStyleSheet(checkbox_style())
|
||||
self._multiline_title.clicked.connect(self._multiline_checkbox.click)
|
||||
self._multiline_layout.addWidget(self._multiline_checkbox)
|
||||
self._multiline_layout.addWidget(self._multiline_title)
|
||||
self._text_field_attributes_layout.addWidget(self._multiline_widget)
|
||||
|
||||
# NOTE: Future options specific to other type will go in their own sections,
|
||||
# following the pattern with text fields above.
|
||||
|
||||
# Add Widgets to Layout ====================================================================
|
||||
self.root_layout.addWidget(self._name_widget)
|
||||
self.root_layout.addWidget(self._type_widget)
|
||||
self.root_layout.addWidget(self._text_field_attributes_widget)
|
||||
|
||||
@@ -13,8 +13,8 @@ from PySide6.QtWidgets import (
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from tagstudio.qt.controllers.clickable_label import ClickableLabel
|
||||
from tagstudio.qt.translations import Translations
|
||||
from tagstudio.qt.views.clickable_label import ClickableLabel
|
||||
from tagstudio.qt.views.panel_modal import PanelWidget
|
||||
from tagstudio.qt.views.stylesheets.stylesheets import checkbox_style
|
||||
|
||||
|
||||
Reference in New Issue
Block a user