Skip to content
Snippets Groups Projects
mainwindow_controller.py 4.34 KiB
Newer Older
Jakub Štercl's avatar
Jakub Štercl committed
from PyQt5.QtGui import QIcon
Jakub Štercl's avatar
Jakub Štercl committed
from PyQt5.QtWidgets import QMainWindow, QMessageBox
from controllers.distribution_edit_controller import DistributionEdit
from controllers.distribution_overview_controller import DistributionOverview
from controllers.distribution_setup_controller import DistributionSetup, EmptyGroupError
Jakub Štercl's avatar
Jakub Štercl committed
from controllers.group_edit_controller import GroupEdit
from controllers.groups_overview_controller import GroupsOverview
Jakub Štercl's avatar
Jakub Štercl committed
from controllers.member_overview import MemberOverview
Jakub Štercl's avatar
Jakub Štercl committed
from utils.globals import Global
from windows import mainwindow
Jakub Štercl's avatar
Jakub Štercl committed


class MainWindow(QMainWindow, mainwindow.Ui_MainWindow):
    def __init__(self, parent=None):
Jakub Štercl's avatar
Jakub Štercl committed
        super(MainWindow, self).__init__(parent)
Jakub Štercl's avatar
Jakub Štercl committed
        self.setupUi(self)
Jakub Štercl's avatar
Jakub Štercl committed
        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's avatar
Jakub Štercl committed
        self.goToGroupsOverview()
        self._last_changed = 0

    def _goToWidget(self, widget):
        self.stackedWidget.addWidget(widget)
        self.stackedWidget.setCurrentWidget(widget)

    def dataChanged(self):
        """
        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()
Jakub Štercl's avatar
Jakub Štercl committed

    def goToGroupsOverview(self):
        """
        change active window to GroupsOverview()
        """
Jakub Štercl's avatar
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
            group = Global.db.createNewGroup()
        self._goToWidget(GroupEdit(self, group))

    def goToDistributionSetup(self, group):
        change active window to DistributionSetup()
        :param group: 
        """
        try:
            self._goToWidget(DistributionSetup(self, group))
        except EmptyGroupError as e:
            msg = QMessageBox(self)
            msg.setIcon(QMessageBox.Critical)
            msg.setWindowTitle(self.tr("Chyba"))
            msg.setText(self.tr("Skupina nemá žádné členy!"))
    def goToDistributionOverview(self, teams, group):
        """
        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))
Jakub Štercl's avatar
Jakub Štercl committed
    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()

        current_index = self.stackedWidget.currentIndex()
        current_widget = self.stackedWidget.currentWidget()
        if current_index <= 0:
            # we're on groups overview (do nothing)
        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)