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()