Newer
Older
from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtWidgets import QMessageBox, QMenu
from database import IntegrityError
from model.distribution import Distribution
from model.member import Member
from utils.editable_title_widget import EditableTitle
Jakub Štercl
committed
from utils.members_table import MembersTable
from utils.qtmodels.distributions_tree_model import DistributionTreeModel
Jakub Štercl
committed
from windows import groupedit
from PyQt5 import QtWidgets as Qtw
Jakub Štercl
committed
class GroupEdit(Qtw.QWidget, groupedit.Ui_Form):
def __init__(self, main_window, group, parent=None):
Jakub Štercl
committed
"""
Cotnroller of group edit window
:param main_window: main application window
:param group: (Group) group to be displayed
:param parent:
"""
self.setupUi(self)
self.main_window = main_window
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)
self.layoutName.replaceWidget(self.widgetTitle, title)
self.widgetTitle = title
self.btnExpandAll.clicked.connect(self.onExpandAllClicked)
self.expanded = False
Jakub Štercl
committed
# signals
self.btnDelete.clicked.connect(self.deleteGroup)
Jakub Štercl
committed
self.btnAddNew.clicked.connect(self.addNewMember)
self.editNewMemberName.returnPressed.connect(self.addNewMember)
Jakub Štercl
committed
self.btnDistribute.clicked.connect(self.distribute)
self.membersTable.btnClicked.connect(self.onTableMembersBtnClicked)
self.membersTable.itemDoubleClicked.connect(self.goToMemberOverview)
self.widgetTitle.textConfirmed.connect(self.changeGroupName)
self.treeDistributions.expanded.connect(self.expandChildren)
self.treeDistributions.customContextMenuRequested.connect(self.onContextMenuRequested)
def reloadData(self):
self.group = Global.db.getGroupById(self.group.id_)
self.membersTable.changeData(self.group.members)
Jakub Štercl
committed
self.updateMemberCount()
self.treeDistributions.setModel(DistributionTreeModel(self.group.distributions))
Jakub Štercl
committed
try:
self.group.rename(name)
except IntegrityError as e:
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Critical)
msg.setText("Skupina s tímto jménem již existuje")
msg.setWindowTitle(self.tr("Nelze přejmenovat skupinu"))
msg.setStandardButtons(QMessageBox.Ok)
Jakub Štercl
committed
msg.exec()
self.widgetTitle.editMode()
Jakub Štercl
committed
@pyqtSlot()
def deleteGroup(self):
Jakub Štercl
committed
"""
Show confirmation prompt and delete group + go back after
"""
msg = Qtw.QMessageBox(self)
msg.setIcon(Qtw.QMessageBox.Question)
msg.setWindowTitle(self.tr("Opravdu?"))
msg.setText(self.tr("Opravdu chcete smazat skupinu " + self.group.name + "?"))
msg.setStandardButtons(Qtw.QMessageBox.Ok | Qtw.QMessageBox.Cancel)
if msg.exec() == Qtw.QMessageBox.Ok:
Jakub Štercl
committed
self.group.delete()
self.main_window.dataChanged()
self.main_window.goBack()
Jakub Štercl
committed
@pyqtSlot()
def addNewMember(self):
"""
Add member specified in self.editNewMemberName and self.editNewMemberSurname
"""
name = self.editNewMemberName.text()
try:
self.group.addMember(name)
except IntegrityError as e:
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Critical)
msg.setText(self.tr("Tento člen již v této skupině existuje."))
msg.setWindowTitle(self.tr("Nelze přidat člena"))
msg.setStandardButtons(QMessageBox.Ok)
msg.exec()
finally:
# prepare for inserting another one
self.editNewMemberName.clear()
self.editNewMemberName.setFocus()
self.membersTable.changeData(self.group.members)
Jakub Štercl
committed
self.updateMemberCount()
def updateMemberCount(self):
"""
Updates member count label
"""
Jakub Štercl
committed
self.lblMemberCount.setText(str(self.group.member_count))
Jakub Štercl
committed
@pyqtSlot()
def distribute(self):
"""
Jakub Štercl
committed
"""
self.main_window.goToDistributionSetup(self.group)
@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:
"""
member.delete()
self.main_window.dataChanged()
self.reloadData()
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
def onExpandAllClicked(self):
if self.expanded:
self.treeDistributions.collapseAll()
self.btnExpandAll.setText(self.tr("Rozbalit vše"))
else:
self.treeDistributions.expandAll()
self.btnExpandAll.setText(self.tr("Sbalit vše"))
self.expanded = not self.expanded
def expandChildren(self, index):
"""
expand all children of given index in self.treeDistribution
:param index:
"""
for i in range(index.model().rowCount(index)):
child = index.model().index(i, 0, index)
self.treeDistributions.expand(child)
def onContextMenuRequested(self, point):
"""
construct context menu (only if clicked on distribution)
:param point:
"""
element = self.treeDistributions.model().data(self.treeDistributions.indexAt(point), Qt.UserRole)
if not isinstance(element, Distribution):
return
menu = QMenu(self.treeDistributions)
menu.addAction(self.tr("Upravit"), lambda: self.goToDistributionOverview(element))
menu.exec_(self.treeDistributions.mapToGlobal(point))
def goToDistributionOverview(self, distribution):
self.main_window.goToDistributionEdit(distribution, self.group)