from PyQt5 import QtWidgets from PyQt5.QtGui import QStandardItemModel, QStandardItem from PyQt5.QtCore import Qt from ArtNet.gui.dialogs.tag_select_dialog.tag_selection_dialog import Ui_TagSelection class TagSelectDialog(QtWidgets.QDialog): def __init__(self, parent=None, delete_tag: bool=False): super().__init__(parent) self.parent = parent self.ui = Ui_TagSelection() self.ui.setupUi(self) if delete_tag: self.ui.select_tag_label.setText("Select Tag to delete") self.selected_item: QStandardItem = None self.selection: str = None self.ui.buttonBox.accepted.connect(self.getTagSelection) self.ui.tag_search_line.textChanged.connect(self.getSearchResult) self.getSearchResult() def getSearchResult(self): search_text = self.ui.tag_search_line.text() tags = self.parent.get_tag_search_result(search_text) if tags is None: return self.set_search_result_list(tags) def getTagSelection(self) -> str: if self.selected_item is None: return self.selection = self.selected_item.text() def on_tag_item_changed(self, item: QStandardItem): if self.selected_item is not None: self.selected_item.setCheckState(Qt.Unchecked) self.selected_item = item def set_search_result_list(self, tags: list): """ Set the tags in the search result list to tags :param tags: :return: """ item_model = QStandardItemModel(self.ui.search_result_list) for tag in tags: item = QStandardItem(tag[0]) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(Qt.Unchecked, Qt.CheckStateRole) item_model.appendRow(item) item_model.itemChanged.connect(self.on_tag_item_changed) self.ui.search_result_list.setModel(item_model) def exec_(self) -> dict: if super(TagSelectDialog, self).exec_() == QtWidgets.QDialog.Rejected: return None if self.selection is None: return None tag = self.parent.get_tag(self.selection)[0] tag_data = { "ID": tag[3], "name": tag[0], "description": tag[1], "aliases": self.parent.get_tag_aliases(tag[0]), "implications": self.parent.get_tag_implications(tag[0]), "category": tag[2] } return tag_data