from _ast import Global from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QLineEdit from globals import Global from model.member import Member from utils.editable_title_widget import EditableTitle from utils.members_table import MembersTable from utils.qtmodels.distributions_tree_model import DistributionTreeModel from windows import groupedit from PyQt5 import QtWidgets as Qt class GroupEdit(Qt.QWidget, groupedit.Ui_Form): def __init__(self, main_window, group, parent=None): """ Cotnroller of group edit window :param main_window: main application window :param group: (Group) group to be displayed :param parent: """ super(GroupEdit, self).__init__(parent) self.setupUi(self) self.main_window = main_window self.group = group self.membersTable = MembersTable(num_of_buttons=2, button_titles=("View", "-",), data=group.members) self.updateMemberCount() self.layoutMembers.addWidget(self.membersTable) self.treeDistributions.setModel(DistributionTreeModel(group.distributions)) title = EditableTitle(group.name) self.layoutName.replaceWidget(self.titleWidget, title) self.titleWidget = title # signals self.btnDelete.clicked.connect(self.deleteGroup) self.btnAddNew.clicked.connect(self.addNewMember) self.editNewMemberName.returnPressed.connect(self.editNewMemberSurname.setFocus) self.editNewMemberSurname.returnPressed.connect(self.addNewMember) self.btnDistribute.clicked.connect(self.distribute) self.membersTable.btnClicked.connect(self.onTableMembersBtnClicked) title.textConfirmed.connect(self.changeGroupName) def reloadData(self): self.group = Global.db.getGroupById(self.group.id_) self.membersTable.changeData(self.group.members) self.updateMemberCount() self.treeDistributions.setModel(DistributionTreeModel(self.group.distributions)) @pyqtSlot(str) def changeGroupName(self, name): try: self.group.changeName(name) except ValueError as e: msg = Qt.QMessageBox(self) msg.setIcon(Qt.QMessageBox.Critical) msg.setText(e.args[0]) msg.setWindowTitle("Nelze pĆejmenovat skupinu") msg.setStandardButtons(Qt.QMessageBox.Ok) msg.exec() self._editName.setFocus() self.titleWidget.editMode() @pyqtSlot() def deleteGroup(self): """ Show confirmation prompt and delete group + go back after """ msg = Qt.QMessageBox(self) msg.setIcon(Qt.QMessageBox.Question) msg.setWindowTitle("Opravdu?") msg.setText("Opravdu chcete smazat skupinu " + self.group.name + "?") msg.setStandardButtons(Qt.QMessageBox.Ok | Qt.QMessageBox.Cancel) if msg.exec() == Qt.QMessageBox.Ok: self.group.delete() self.main_window.dataChanged() self.main_window.goBack() @pyqtSlot() def addNewMember(self): """ Add member specified in self.editNewMemberName and self.editNewMemberSurname """ name = self.editNewMemberName.text() surname = self.editNewMemberSurname.text() self.group.addMember(name, surname) # TODO if already exists? self.membersTable.changeData(self.group.members) # prepare for inserting another one self.editNewMemberName.clear() self.editNewMemberSurname.clear() self.editNewMemberName.setFocus() self.updateMemberCount() def updateMemberCount(self): """ Updates member count label """ self.lblMemberCount.setText(str(self.group.member_count)) @pyqtSlot() def distribute(self): """ go to distribution setup for this group """ self.main_window.goToDistributionSetup(self.group) @pyqtSlot(Member, int) def onTableMembersBtnClicked(self, member, btn_nr): """ Slot for buttons from tableMembers :param member: :param btn_nr: """ if btn_nr == 0: self.goToMemberOverview(member) elif btn_nr == 1: self.deleteMember(member) def goToMemberOverview(self, member): """ go to member overview :param member: """ self.main_window.goToMemberOverview(member) def deleteMember(self, member): """ delete member :param member: """ member.delete() self.main_window.dataChanged() self.reloadData()