Newer
Older
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QPainter
from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
from PyQt5.QtWidgets import QLineEdit, QDialog, QWidget, QGridLayout, QTableView, QSizePolicy
from model.distribution import Distribution
from model.team import Team
from utils.editable_title_widget import EditableTitle
from utils.members_drag_drop_table import MembersDragDropTable
from utils.members_table import MembersTable
from utils.print_widget import PrintWidget
from utils.qtmodels.members_table_model import MembersTableModel
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.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.distribution_name = "Nepojmenované rozdělení"
title = EditableTitle(self.distribution_name)
self.layoutName.replaceWidget(self.titleWidget, title)
self.titleWidget = title
# signals
self.btnAddTeam.clicked.connect(self.addTeam)
self.btnSave.clicked.connect(self.save)
self.btnPrint.clicked.connect(self.printDistribution)
self.titleWidget.textConfirmed.connect(self.changeDistName)
@pyqtSlot(str)
def changeDistName(self, name):
self.distribution_name = name
@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.distribution_name, teams, self.group.id_)
start = timer()
distribution.saveToDb()
print('total time:', timer() - start)
self.main_window.reset()
@pyqtSlot()
def printDistribution(self):
printer = QPrinter(QPrinter.HighResolution)
dialog = QPrintDialog()
if dialog.exec_() != QDialog.Accepted:
return
painter = QPainter()
widget = PrintWidget(self.distribution_name, self.teamTables)
size = widget.sizeHint()
painter.begin(printer)
xscale = printer.pageRect().width() / size.width()
yscale = printer.pageRect().height() / size.height()
scale = min([xscale, yscale])
painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
printer.paperRect().y() + printer.pageRect().height() / 2)
painter.scale(scale, scale)
painter.translate(-size.width() / 2, -size.height() / 2)
widget.render(painter)
painter.end()