Newer
Older
Jakub Štercl
committed
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QLineEdit
Jakub Štercl
committed
from utils.members_table import MembersTable
Jakub Štercl
committed
from windows import groupedit
from PyQt5 import QtWidgets as Qt
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
Jakub Štercl
committed
self.setGroup(group)
self._editName = QLineEdit()
Jakub Štercl
committed
# signals
self.btnDelete.clicked.connect(self.deleteGroup)
self.btnChangeName.clicked.connect(self.editName)
Jakub Štercl
committed
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)
def setGroup(self, group):
Jakub Štercl
committed
"""
Set group this controller (and window) displays
:param group:
"""
self.group = group
self.membersTable = MembersTable(num_of_buttons=2, button_titles=("View", "-",), data=group.members)
Jakub Štercl
committed
self.updateMemberCount()
self.layoutMembers.insertWidget(1, self.membersTable)
self.lblName.setText(group.name)
Jakub Štercl
committed
@pyqtSlot()
def editName(self):
Jakub Štercl
committed
"""
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())
Jakub Štercl
committed
# 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)
Jakub Štercl
committed
self.btnChangeName.clicked.connect(self._changeName)
Jakub Štercl
committed
@pyqtSlot()
def _changeName(self):
"""
Change group name to current value in edit line box (self._editName)
"""
Jakub Štercl
committed
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
Jakub Štercl
committed
self.btnChangeName.clicked.disconnect(self._changeName)
self.btnChangeName.clicked.connect(self.editName)
Jakub Štercl
committed
self.main_window.dataChanged()
Jakub Štercl
committed
@pyqtSlot()
def deleteGroup(self):
Jakub Štercl
committed
"""
Show confirmation prompt and delete group + go back after
"""
Jakub Štercl
committed
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)
Jakub Štercl
committed
if msg.exec() == Qt.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()
surname = self.editNewMemberSurname.text()
self.group.addMember(name, surname)
self.membersTable.changeData(self.group.members)
Jakub Štercl
committed
# 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)