Skip to content
Snippets Groups Projects
group_edit_controller.py 4.82 KiB
Newer Older
from PyQt5.QtWidgets import QLineEdit
from utils.members_table import MembersTable
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
        self.btnDelete.clicked.connect(self.deleteGroup)
        self.btnChangeName.clicked.connect(self.editName)
        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)
        """
        Set group this controller (and window) displays
        :param group: 
        """
        self.membersTable = MembersTable(num_of_buttons=2, button_titles=("View", "-",), data=group.members)
        self.updateMemberCount()
        self.layoutMembers.insertWidget(1, self.membersTable)
        """
        display edit line instead of group name (to enable editing of it)
        """
        self.btnChangeName.setText("OK")
        # hide label and remove it from layout
        self.lblName.hide()
        self.layoutName.removeWidget(self.lblName)
        # make line edit the same size
        if self.lblName.width() > 100:
            self._editName.setFixedWidth(self.lblName.width())
        else:
            self._editName.setFixedWidth(100)
        self._editName.setFixedHeight(self.lblName.height())
        # fill it with current name
        self._editName.setText(self.lblName.text())
        # add line edit to layout
        self.layoutName.insertWidget(1, self._editName)
        self._editName.show()
        # change signals of button
        self.btnChangeName.clicked.disconnect(self.editName)
        self.btnChangeName.clicked.connect(self._changeName)
    @pyqtSlot()
    def _changeName(self):
        """
        Change group name to current value in edit line box (self._editName)
        """
        try:
            self.group.changeName(self._editName.text())
        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()
            return
        self.btnChangeName.setText("Edit")
        # hide line edit
        self._editName.hide()
        self.layoutName.removeWidget(self._editName)
        #show updated label
        self.layoutName.insertWidget(1, self.lblName)
        self.lblName.setText(self._editName.text())
        self.lblName.show()
        # change signals of button
        self.btnChangeName.clicked.disconnect(self._changeName)
        self.btnChangeName.clicked.connect(self.editName)
        """
        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)
        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.getMemberCount()))

    @pyqtSlot()
    def distribute(self):
        """
        go to distribution for this group
        """
        self.main_window.goToDistributionSetup(self.group)