Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions src/tagstudio/qt/controllers/field_suggest_box.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
# SPDX-License-Identifier: GPL-3.0-only


import typing
from typing import override
from warnings import catch_warnings

Expand All @@ -18,18 +17,15 @@
from tagstudio.qt.controllers.modal_content import ModalContent
from tagstudio.qt.controllers.suggest_box import SuggestBox
from tagstudio.qt.controllers.underlined_widget import UnderlinedWidget
from tagstudio.qt.global_settings import GlobalSettings
from tagstudio.qt.translations import Translations

if typing.TYPE_CHECKING:
from tagstudio.qt.ts_qt import QtDriver

logger = structlog.get_logger(__name__)


class FieldSuggestBox(SuggestBox[BaseFieldTemplate]):
def __init__(self, driver: "QtDriver", placeholder_text: str = ""):
super().__init__(driver, placeholder_text)
self._lib = self._driver.lib
def __init__(self, library: Library, settings: GlobalSettings, placeholder_text: str = ""):
super().__init__(library, settings, placeholder_text)

# Context Menu Actions
edit_field_on_add_action = QAction(Translations["settings.edit_field_on_add"], self)
Expand All @@ -38,15 +34,15 @@ def __init__(self, driver: "QtDriver", placeholder_text: str = ""):
self.addAction(edit_field_on_add_action)
self.layout().search_field.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
self.layout().search_field.addAction(edit_field_on_add_action)
edit_field_on_add_action.setChecked(self._driver.settings.edit_field_on_add)
edit_field_on_add_action.setChecked(self._settings.edit_field_on_add)
edit_field_on_add_action.triggered.connect(
lambda checked: self.toggle_edit_on_field_add(checked)
)

def toggle_edit_on_field_add(self, checked: bool) -> None:
"""Toggle the setting for opening the edit window after adding a field."""
self._driver.settings.edit_field_on_add = checked
self._driver.settings.save()
self._settings.edit_field_on_add = checked
self._settings.save()

@override
def _on_item_create(self) -> None:
Expand Down Expand Up @@ -75,7 +71,6 @@ def _on_item_create(self) -> None:
def _on_item_edit(self, item: BaseFieldTemplate) -> None:
panel: EditFieldTemplateModal = EditFieldTemplateModal(item)
modal: Modal = Modal(panel, item.name, Translations["field_template.edit"], is_savable=True)

modal.saved.connect(lambda: self._edit_item(panel))
modal.show()

Expand Down Expand Up @@ -106,6 +101,7 @@ def _set_item_widget(self, item: BaseFieldTemplate | None, index: int) -> None:

# TODO: Add tabbing to different items, and use underline to indicate which will be added
underlined_widget.toggle_underline(index != 0)

# Disconnect previous callbacks
with catch_warnings(record=True):
field_template_widget.on_edit.disconnect()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import structlog
from PySide6.QtCore import Signal
from PySide6.QtWidgets import QMessageBox
from PySide6.QtWidgets import QMessageBox, QWidget

from tagstudio.core.library.alchemy.fields import BaseFieldTemplate
from tagstudio.core.library.alchemy.library import Library
Expand All @@ -17,44 +17,30 @@
from tagstudio.qt.controllers.modal_content import ModalContent
from tagstudio.qt.controllers.search_panel_controller import SearchPanel
from tagstudio.qt.translations import Translations
from tagstudio.qt.views.field_template_search_panel_view import FieldTemplateSearchPanelView
from tagstudio.qt.views.search_panel_view import SearchPanelView

logger = structlog.get_logger(__name__)


class FieldTemplateSearchModal(Modal):
def __init__(
self,
library: Library,
is_field_template_chooser: bool = True,
has_save: bool = False,
) -> None:
self.search_panel: FieldTemplateSearchPanel = FieldTemplateSearchPanel(
library,
is_field_template_chooser,
view=FieldTemplateSearchPanelView(is_field_template_chooser),
)
super().__init__(self.search_panel, Translations["field.add.plural"], is_savable=has_save)


class FieldTemplateSearchPanel(SearchPanel[BaseFieldTemplate]):
field_template_chosen = Signal(object)

def __init__(
self,
library: Library,
is_field_template_chooser: bool = True,
view: FieldTemplateSearchPanelView | None = None,
is_chooser: bool = True,
view: SearchPanelView | None = None,
) -> None:
super().__init__(
view=view or FieldTemplateSearchPanelView(is_field_template_chooser),
view=view
or SearchPanelView(Translations["home.search_field_templates"], is_chooser=is_chooser),
exclude=[],
is_chooser=is_field_template_chooser,
is_chooser=is_chooser,
)
self.__lib = library

self._unlimited_limit_item_label = Translations["field_template.all_field_templates"]
self._create_and_add_button_label_key = "field_template.create_add"
self._create_and_add_button_key = "field_template.create_add"

@override
def _get_max_limit(self) -> int:
Expand Down Expand Up @@ -102,7 +88,7 @@ def on_item_edit(self, item: BaseFieldTemplate) -> None:

@override
def _on_item_remove(self, item: BaseFieldTemplate) -> None:
if self.is_chooser:
if self._is_chooser:
return

message_box = QMessageBox(
Expand Down Expand Up @@ -138,7 +124,7 @@ def set_item_widget(self, item: BaseFieldTemplate | None, index: int) -> None:
if item is None:
return

field_template_widget.has_remove = not self.is_chooser
field_template_widget.has_remove = not self._is_chooser

# Disconnect previous callbacks
with catch_warnings(record=True):
Expand Down Expand Up @@ -175,4 +161,18 @@ def edit_item(self, edit_item_panel: ModalContent) -> None:
self.__lib.update_field_template(
edit_item_panel.old_field_type, edit_item_panel.build_field_template()
)
self.update_items(self.search_field.text())
self.update_items(self.layout().search_field.text())

@override
def get_item_widget(self, index: int, library: Library | None) -> FieldTemplateWidget:
"""Gets the item widget at a specific index."""
# Create any new item widgets needed up to the given index
if self.layout().scroll_layout.count() <= index:
while self.layout().scroll_layout.count() <= index:
pad_field_template_widget = FieldTemplateWidget()
pad_field_template_widget.setHidden(True)
self.layout().scroll_layout.addWidget(pad_field_template_widget)

field_template_widget: QWidget = self.layout().scroll_layout.itemAt(index).widget()
assert isinstance(field_template_widget, FieldTemplateWidget)
return field_template_widget
1 change: 0 additions & 1 deletion src/tagstudio/qt/controllers/preview_panel_controller.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# SPDX-FileCopyrightText: (c) TagStudio Contributors
# SPDX-License-Identifier: GPL-3.0-only


import typing
from datetime import datetime as dt
from enum import IntEnum
Expand Down
Loading
Loading