from PyQt5 import QtWidgets from PyQt5.QtGui import QStandardItem, QStandardItemModel from PyQt5.QtCore import Qt from ArtNet.gui.dockers.presence.presence_docker import Ui_presence_docker from ArtNet.gui.dialogs.presence_modify_dialog.presence_mod_dialog import PresenceModDialog from ArtNet.gui.dialogs.presence_selection_dialog.presence_select_dialog import PresenceSelectDialog class PresenceDocker(QtWidgets.QFrame): def __init__(self, parent=None): super().__init__(parent) self.parent = parent self.ui = Ui_presence_docker() self.ui.setupUi(self) self.ui.name_line.textChanged.connect(self.on_search_bar_change) self.ui.domain_line.textChanged.connect(self.on_search_bar_change) self.ui.create_presence_button.clicked.connect(self.on_create_presence_clicked) self.ui.edit_presence_button.clicked.connect(self.on_edit_presence_clicked) self.ui.delete_presence_button.clicked.connect(self.on_delete_presence_clicked) self.on_search_bar_change() def set_presence_list(self, presences: list): item_model = QStandardItemModel(self.ui.search_author_list) for name, domain in presences: item = QStandardItem(name+":"+domain) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(Qt.Unchecked, Qt.CheckStateRole) item_model.appendRow(item) if (name, domain) in self.parent.get_current_presences(): item.setCheckState(Qt.Checked) item_model.itemChanged.connect(self.on_presence_item_change) self.ui.search_author_list.setModel(item_model) def set_selected_presences_list(self, presences: list): item_model = QStandardItemModel(self.ui.selected_presence_list) for name, domain in presences: item = QStandardItem(name + ":" + domain) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(Qt.Unchecked, Qt.CheckStateRole) if domain == "(Not in Database)": continue item_model.appendRow(item) if (name, domain) in self.parent.get_current_presences(): item.setCheckState(Qt.Checked) item_model.itemChanged.connect(self.on_selected_presence_item_change) self.ui.selected_presence_list.setModel(item_model) def on_search_bar_change(self): authors = self.parent.get_authors(self.ui.name_line.text(), self.ui.domain_line.text()) self.set_presence_list(authors) def on_presence_item_change(self, item: QStandardItem): if item.checkState() == Qt.Checked: s = item.text().split(":") s = (s[0], s[1]) if self.parent.get_current_presences() is None: self.parent.set_current_presences([s]) self.set_selected_presences_list([s]) else: self.parent.set_current_presences(self.parent.get_current_presences() + [s]) self.set_selected_presences_list(self.parent.get_current_presences()) elif item.checkState() == Qt.Unchecked: presences = self.parent.get_current_presences() if presences is None: return s = item.text().split(":") s = (s[0], s[1]) presences.remove(s) self.parent.set_current_presences(presences) self.set_selected_presences_list(presences) def on_selected_presence_item_change(self, item: QStandardItem): item_presence = item.text().split(":") item_presence = (item_presence[0], item_presence[1]) if item.checkState() == Qt.Unchecked: presences = self.parent.get_current_presences() presences.remove(item_presence) self.parent.set_current_presences(presences) self.set_selected_presences_list(presences) self.on_search_bar_change() def on_create_presence_clicked(self): dialog = PresenceModDialog(self, edit_presence=False) data = dialog.exec_() if data is None: # canceled? self.on_search_bar_change() return self.parent.create_presence(name=data["name"], domain=data["domain"], artist=data["artist"], link=data["link"]) self.on_search_bar_change() def on_edit_presence_clicked(self): select_dialog = PresenceSelectDialog(self) selected_presence = select_dialog.exec_() if selected_presence is None: return dialog = PresenceModDialog(self, edit_presence=True) dialog.ui.presence_name_line.setText(selected_presence[0]) dialog.ui.presence_domain_line.setText(selected_presence[1]) if len(selected_presence) > 2: if len(selected_presence) >= 4: if selected_presence[3] is not None: dialog.ui.presence_link_list.setText(selected_presence[3]) artist = self.parent.get_artists(selected_presence[2])[0] dialog.curr_artist = artist dialog.set_artist_selected_list(dialog.curr_artist) data = dialog.exec_() if data is None: self.on_search_bar_change() return self.parent.create_presence(name=data["name"], domain=data["domain"], artist=data["artist"], link=data["link"]) self.parent.set_temporary_status_message("Saved Presence {0}:{1} Artist:{2} link:{3} to DB!" .format(data["name"], data["domain"], data["artist"], data["link"]), 3000) self.on_search_bar_change() def on_delete_presence_clicked(self): print("Clicked delete presence button!") select_dialog = PresenceSelectDialog(self) selected_presence = select_dialog.exec_() if selected_presence is None: self.on_search_bar_change() return self.parent.remove_presence(selected_presence[0], selected_presence[1]) self.on_search_bar_change()