You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.5 KiB
Python

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItem, QStandardItemModel
from ArtNet.gui.dialogs.category_modify_dialog.category_modify_dialog import Ui_category_modify_dialog
class CategoryModDialog(QtWidgets.QDialog):
def __init__(self, parent=None, delete_category: bool = False):
super().__init__(parent)
self.parent = parent
self.ui = Ui_category_modify_dialog()
self.ui.setupUi(self)
self.name_valid: bool = False
self.all_categories: list = None
self.default_style = self.ui.category_name_line.styleSheet()
self.delete_mode: bool = delete_category
if delete_category:
self.ui.dialog_topic.setText("Delete Category")
else:
self.ui.dialog_topic.setText("Create Category")
self.ui.category_name_line.textChanged.connect(self.on_category_name_change)
self.set_all_categories()
def set_all_categories(self):
"""
Populate the category list with all categories if name line is empty.
Otherwise fuzzy search for fitting categories
:return:
"""
self.all_categories = self.parent.get_categories(self.ui.category_name_line.text(), all_if_empty=True)
categories = []
for i in range(len(self.all_categories)):
categories.append(self.all_categories[i])
self.all_categories = categories
item_model = QStandardItemModel(self.ui.other_categories_list)
for category in self.all_categories:
item = QStandardItem(category)
item_model.appendRow(item)
self.ui.other_categories_list.setModel(item_model)
def on_category_name_change(self):
# TODO mark input red if it is a taken name (or if it isn't in deletion mode)
self.set_all_categories()
self.ui.category_name_line.setStyleSheet(self.default_style)
self.name_valid = True
if self.delete_mode:
if self.ui.category_name_line.text() not in self.all_categories:
self.ui.category_name_line.setStyleSheet("color: red")
self.name_valid = False
else:
if self.ui.category_name_line.text() in self.all_categories:
self.ui.category_name_line.setStyleSheet("color: red")
self.name_valid = False
def exec_(self) -> dict:
if super(CategoryModDialog, self).exec_() == QtWidgets.QDialog.Rejected or not self.name_valid:
return None
return {"name": self.ui.category_name_line.text()}