Skip to content
Snippets Groups Projects
distribution_overview_controller.py 4 KiB
Newer Older
from timeit import default_timer as timer
from PyQt5 import Qt
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QLineEdit
from model.distribution import Distribution
from model.team import Team
from utils.members_drag_drop_table import MembersDragDropTable
from windows import distribution_overview

class DistributionOverview(Qt.QWidget, distribution_overview.Ui_Form):
    def __init__(self, main_window, teams, group, parent=None):
        super(DistributionOverview, self).__init__(parent)
        self.setupUi(self)
        self.main_window = main_window
        self.group = group
        self._editName = QLineEdit()
        self.teamTables = []
        for i, team_name in enumerate(teams):
            table = MembersDragDropTable(i, teams[team_name], team_name, self)
            table.model.sourceModel().droppedMemberFrom.connect(self.removeMember)
            table.deleteClicked.connect(self.removeTeam)
            self.teamTables.append(table)
            self.gridTeams.addWidget(table, i // 2, i % 2)

        self.btnAddTeam.clicked.connect(self.addTeam)
        self.btnSave.clicked.connect(self.save)
        self.btnEditName.clicked.connect(self.editName)
        self._editName.textChanged.connect(self.onEditNameChanged)

    @pyqtSlot()
    def editName(self):
        self.btnEditName.setText("OK")
        self.lblDistName.hide()
        if self.lblDistName.width() > 100:
            self._editName.setFixedWidth(self.lblDistName.width())
        else:
            self._editName.setFixedWidth(100)
        self._editName.setFixedHeight(self.lblDistName.height())

        self._editName.setText(self.lblDistName.text())
        self.layoutName.replaceWidget(self.lblDistName, self._editName)
        self._editName.show()

        self.btnEditName.clicked.disconnect(self.editName)
        self.btnEditName.clicked.connect(self.changeName)

    @pyqtSlot()
    def changeName(self):
        self.btnEditName.setText("Edit")
        self._editName.hide()
        self.lblDistName.setText(self._editName.text())
        self.layoutName.replaceWidget(self._editName, self.lblDistName)
        self.lblDistName.show()
        self.btnEditName.clicked.disconnect(self.changeName)
        self.btnEditName.clicked.connect(self.editName)

    @pyqtSlot()
    def onEditNameChanged(self):
        if 0 < len(self._editName.text()) < 25:
            self.btnEditName.setDisabled(False)
        else:
            self.btnEditName.setDisabled(True)

    @pyqtSlot()
    def addTeam(self):
        table_id = len(self.teamTables)
        table = MembersDragDropTable(table_id, [], "Tým " + str(table_id + 1), self)
        table.model.sourceModel().droppedMemberFrom.connect(self.removeMember)
        table.deleteClicked.connect(self.removeTeam)
        self.teamTables.append(table)
        self.gridTeams.addWidget(table, table_id // 2, table_id % 2)

    @pyqtSlot(int, int)
    def removeMember(self, member_id, table_id):
        self.teamTables[table_id].removeMember(member_id)

    @pyqtSlot(int)
    def removeTeam(self, table_id):
        if self.teamTables[table_id].isEmpty():
            self.teamTables[table_id].hide()
            for i in range(len(self.teamTables) - 1, table_id, -1):
                self.gridTeams.replaceWidget(self.teamTables[i-1], self.teamTables[i])
                self.teamTables[i].id_ -= 1
            self.teamTables.pop(table_id)
        else:
            msg = Qt.QMessageBox(self)
            msg.setIcon(Qt.QMessageBox.Critical)
            msg.setWindowTitle("Chyba")
            msg.setText("Nelze smazat neprázdný tým!")
            msg.setStandardButtons(Qt.QMessageBox.Ok)
            msg.exec_()

    @pyqtSlot()
    def save(self):
        teams = []
        for table in self.teamTables:
            team = Team(table.id_, table.name, table.getAllData())
            teams.append(team)
        distribution = Distribution(self.lblDistName.text(), teams, self.group.id_)
        start = timer()
        distribution.saveToDb()
        print('total time:', timer() - start)
        self.main_window.reset()