Skip to content
Snippets Groups Projects
mainwindow_controller.py 2.28 KiB
Newer Older
Jakub Štercl's avatar
Jakub Štercl committed
from PyQt5 import QtWidgets as Qt
from PyQt5.QtCore import pyqtSlot

from controllers.distribution_setup import DistributionSetup
Jakub Štercl's avatar
Jakub Štercl committed
from controllers.group_edit_controller import GroupEdit
from controllers.groups_overview_controller import GroupsOverview
from model.qtmodels.groups_table_model import GroupsTableModel
from model.qtmodels.members_table_model import MembersTableModel
from utils.groups_table import GroupsTable
Jakub Štercl's avatar
Jakub Štercl committed
from windows import mainwindow
from globals import Global
Jakub Štercl's avatar
Jakub Štercl committed


Jakub Štercl's avatar
Jakub Štercl committed
class MainWindow(Qt.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)
        self.btnBack.clicked.connect(self.goBack)
        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):
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: 
        """
        self._goToWidget(DistributionSetup(self, group))
        current_index = self.stackedWidget.currentIndex()
        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(self.stackedWidget.currentWidget())
        self.stackedWidget.setCurrentIndex(current_index - 1)