Newer
Older
Jakub Štercl
committed
from PyQt5.QtWidgets import QMainWindow, QMessageBox
Jakub Štercl
committed
from PyQt5.QtCore import pyqtSlot
from controllers.distribution_edit_controller import DistributionEdit
from controllers.distribution_overview_controller import DistributionOverview
Jakub Štercl
committed
from controllers.distribution_setup_controller import DistributionSetup, EmptyGroupError
from controllers.groups_overview_controller import GroupsOverview
from controllers.member_overview import MemberOverview
from globals import Global
import resources_rc # used for icons lookup, do not remove
Jakub Štercl
committed
class MainWindow(QMainWindow, mainwindow.Ui_MainWindow):
def __init__(self, parent=None):
Jakub Štercl
committed
"""
:param parent: parent widget for qt
"""
self.menuBar.addAction(self.tr("Zpět"), self.goBack).setIcon(QIcon(':/icons/back.svg'))
self.menuBar.addAction(self.tr("Přehled skupin"), self.reset)
Jakub Štercl
committed
def _goToWidget(self, widget):
self.stackedWidget.addWidget(widget)
self.stackedWidget.setCurrentWidget(widget)
Jakub Štercl
committed
"""
all controllers have to call this when they change data in db
it prompts every controller before current widget in stack to reload data when getting back to view
"""
self._last_changed = self.stackedWidget.currentIndex()
def goToGroupsOverview(self):
"""
change active window to GroupsOverview()
"""
Jakub Štercl
committed
self._goToWidget(GroupsOverview(self))
Jakub Štercl
committed
@pyqtSlot()
def goToGroupEdit(self, group=None):
"""
change active window to GroupEdit()
:param group: if unfilled (or None), create new group
"""
if group is None:
self._last_changed = self.stackedWidget.currentIndex() + 1
Jakub Štercl
committed
group = Global.db.createNewGroup()
self._goToWidget(GroupEdit(self, group))
def goToDistributionSetup(self, group):
Jakub Štercl
committed
change active window to DistributionSetup()
:param group:
"""
Jakub Štercl
committed
try:
self._goToWidget(DistributionSetup(self, group))
except EmptyGroupError as e:
Jakub Štercl
committed
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Critical)
Jakub Štercl
committed
msg.setWindowTitle(self.tr("Chyba"))
msg.setText(self.tr("Skupina nemá žádné členy!"))
Jakub Štercl
committed
msg.setStandardButtons(QMessageBox.Ok)
Jakub Štercl
committed
msg.exec_()
def goToDistributionOverview(self, teams, group):
Jakub Štercl
committed
"""
change active window to DistributionOverview()
:param teams: teams in the distribution (dictionary of teams - {"team_name": [Member1, Member2, ...], ... }
:param group: group from which the members in distribution are
"""
self._goToWidget(DistributionOverview(self, teams, group))
def goToMemberOverview(self, member):
"""
change active window to MemberOverview()
:param member:
"""
self._goToWidget(MemberOverview(self, member))
def goToDistributionEdit(self, distribution, group):
"""
change active window to DistributionEdit()
:param distribution:
:param group:
"""
self._goToWidget(DistributionEdit(self, distribution, group))
def reset(self):
"""
Set application to default state (effectively this means emptying 'back' stack and going to GroupsOverview()
"""
for i in range(self.stackedWidget.count() - 1, -1, -1):
widget = self.stackedWidget.widget(i)
self.stackedWidget.removeWidget(widget)
widget.deleteLater()
self._last_changed = 0
self.goToGroupsOverview()
def goBack(self):
Jakub Štercl
committed
"""
go one step back, to previous screen
"""
current_index = self.stackedWidget.currentIndex()
current_widget = self.stackedWidget.currentWidget()
if current_index <= 0:
# we're on groups overview (do nothing)
return
if current_index <= self._last_changed:
self.stackedWidget.widget(current_index - 1).reloadData()
self._last_changed -= 1
self.stackedWidget.removeWidget(current_widget)
current_widget.deleteLater()
self.stackedWidget.setCurrentIndex(current_index - 1)