Skip to content
Snippets Groups Projects
group_edit_controller.py 4.64 KiB
Newer Older
Jakub Štercl's avatar
Jakub Štercl committed
from _ast import Global

from PyQt5.QtWidgets import QLineEdit
Jakub Štercl's avatar
Jakub Štercl committed

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

Jakub Štercl's avatar
Jakub Štercl committed
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: 
        """
Jakub Štercl's avatar
Jakub Štercl committed
        super(GroupEdit, self).__init__(parent)
        self.main_window = main_window
Jakub Štercl's avatar
Jakub Štercl committed

        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
        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)
Jakub Štercl's avatar
Jakub Štercl committed
        self.membersTable.btnClicked.connect(self.onTableMembersBtnClicked)
        self.membersTable.itemDoubleClicked.connect(self.goToMemberOverview)
Jakub Štercl's avatar
Jakub Štercl committed
        title.textConfirmed.connect(self.changeGroupName)
Jakub Štercl's avatar
Jakub Štercl committed
    def reloadData(self):
        self.group = Global.db.getGroupById(self.group.id_)
        self.membersTable.changeData(self.group.members)
Jakub Štercl's avatar
Jakub Štercl committed
        self.treeDistributions.setModel(DistributionTreeModel(self.group.distributions))
Jakub Štercl's avatar
Jakub Štercl committed
    @pyqtSlot(str)
    def changeGroupName(self, name):
Jakub Štercl's avatar
Jakub Štercl committed
            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()
Jakub Štercl's avatar
Jakub Štercl committed
            self.titleWidget.editMode()
        """
        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)
            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)
Jakub Štercl's avatar
Jakub Štercl committed
        # 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))
Jakub Štercl's avatar
Jakub Štercl committed
        go to distribution setup for this group
        """
        self.main_window.goToDistributionSetup(self.group)
Jakub Štercl's avatar
Jakub Štercl committed

    @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:
        """
        # TODO: full/partial delete?
Jakub Štercl's avatar
Jakub Štercl committed
        member.delete()
        self.main_window.dataChanged()
        self.reloadData()