MainWindow.py 7.63 KB
Newer Older
# -*- coding: utf-8 -*-

import os

from PyQt5 import QtGui
from PyQt5.QtWidgets import (
    QMainWindow, QApplication, QAction,
)
from PyQt5.uic import loadUi
from view.ListedSubWindow import ListedSubWindow
from view.DummyWindow import DummyWindow
from view.ConfigureWindow import ConfigureWindow
from view.NewStudyWindow import NewStudyWindow
from view.AboutWindow import AboutWindow
from model.Study import Study

no_model_action = [
    "actionOuvrir_une_tude", "actionR_seau", "actionNouvelle_tude_RubarBE",
    "actionOuvrir_une_tude_2", "actionImporter_un_jeu_de_donn_es_MAGE",
    "actionImporter_un_jeu_de_donn_es_RubarBE"
]

model_action = [
    "actionenregistrer_etude_en_cours", "actionfermer_etude_en_cours",
    "actionFermer", "actionEnregistrer", "actionEnregistrer_2",
    "actionEnregistrer_sous", "actionArchiver",
]

other_model_action = [
    "actionlancer_solveur",
]

define_model_action = [
    "actionReseau", "actionGeometrie",
    "actionMaillage", "actionlancer_mailleur_externe",
    "actionCond_Limites", "actionApp_Lat_raux",
    "actionDeversements", "actionTroncons",
    "actionFrottements", "actionOuvrages",
]

action = (
    no_model_action + model_action + define_model_action
)

class ApplicationWindow(QMainWindow, ListedSubWindow):
    def __init__(self, conf=None):
        super(ApplicationWindow, self).__init__()
        # App Configuration
        self.conf = conf

            os.path.join(os.path.dirname(__file__), "ui", "MainWindow_old.ui"),
        self.init_callback()
        self.default_style()
    def enable_actions(self, action:str, enable:bool):
        """Enable of disable an action componant

        Args:
            action: Action to enable/disable
            enable: True to Enable, or False to disable

        Returns:
            Nothing
        """
        self.ui.findChild(QAction, action).setEnabled(enable)
        """Connect action to callback function

        Returns:
            Nothing
        """
        actions = {
            # Menu action
            "actionA_propos": self.open_about,
            "actionConfiguration_de_Pamhyr": self.open_configure,
            "actionR_seau": self.open_new_study,
            "actionEnregistrer_2": self.save_study,
            "actionEnregistrer_sous": self.save_as_study,
            # ToolBar action
            "actionquitter_application": self.close,
            "actionOuvrir_une_tude": self.open_model,
            "actionenregistrer_etude_en_cours": self.save_study,
            "actionfermer_etude_en_cours": self.close_model,
            "actionlancer_solveur": self.open_dummy,
            "actioninterrompt_simulation_en_cours": self.open_dummy,
            "actionafficher_listings_simulation": self.open_dummy,
            "actionlancer_solveur": self.open_dummy,
            "actionReseau": lambda: self.open_dummy("Networks"),
            "actionGeometrie": lambda: self.open_dummy("Geomerty"),
            "actionMaillage": lambda: self.open_dummy("Maillage"),
            "actionlancer_mailleur_externe": lambda: self.open_dummy("Lancement mailleur externe"),
            "actionCond_Limites": lambda: self.open_dummy("Condition Limites"),
            "actionApp_Lat_raux": lambda: self.open_dummy("Apport Lateraux"),
            "actionDeversements": lambda: self.open_dummy("Deversement"),
            "actionTroncons": lambda: self.open_dummy("Tronçons"),
            "actionFrottements": lambda: self.open_dummy("Frottements"),
            "actionOuvrages": lambda: self.open_dummy("Ouvrages"),
        }

        for action in actions:
            self.ui.findChild(QAction, action)\
                   .triggered.connect(actions[action])
        """Set default window style

        Returns:
            Nothing
        """
        self.update_enable_action()
        # Maximise window
        self.showMaximized()

    #########
    # MODEL #
    #########

    def get_model(self):
        return self.model

    def set_model(self, model):
        self.model = model
        self.update_enable_action()

    def close_model(self):
        self.model = None
        self.update_enable_action()

    def update_enable_action(self):
        """Update status of action componante
        Update status of action componant, enable or disable in
        function of model state

        Returns:
            Nothing
        """
        no_model = self.model is None

        for action in no_model_action:
            self.enable_actions(action, no_model)

        for action in define_model_action + other_model_action:
            self.enable_actions(action, not no_model)

        for action in model_action:
            self.enable_actions(action, not no_model)

    ############
    # FEATURES #
    ############

    def save_study(self):
        """Save current study

        Save current study, if study as no associate file, open a
        file dialog.

        Returns:
            Nothing
        """
        if self.model.filename == "":
            file_name, _ = QFileDialog.getSaveFileName(
                self, "Save File",
                "", "Pamhyr(*.pkl)")
            if file_name[-4:] == ".pkl":
                self.model.filename = file_name
            else:
                self.model.filename = file_name + ".pkl"

        self.model.save()

    def save_as_study(self):
        """Save current study as new file

        Save current study as new file, if study as no associate file,
        open a file dialog.

        Returns:
            Nothing
        """
        file_name, _ = QFileDialog.getSaveFileName(
            self, "Save File",
            "", "Pamhyr(*.pkl)")
        if file_name[-4:] == ".pkl":
            self.model.filename = file_name
        else:
            self.model.filename = file_name + ".pkl"

        self.model.save()

    #############
    # SUBWINDOW #
    #############

    def open_configure(self):
        """Open configure window

        Open PamHyr configure window

        Returns:
            Nothing
        """
        self.config = ConfigureWindow(conf=self.conf, parent=self)
        self.config.show()

        """Open about window

        Open a new window with information about PamHyr

        Returns:
            Nothing
        """
        self.about = AboutWindow(parent=self)
        self.about.show()

    def open_model(self):
        """Open file dialog to select saved model

        Returns:
            Nothing
        """
        if self.model is None:
            dialog = QFileDialog(self)
            dialog.setFileMode(QFileDialog.FileMode.ExistingFile)
            dialog.setDefaultSuffix(".pkl")
            #dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)
            dialog.setNameFilters(['PamHyr (*.pkl)'])

            if dialog.exec_():
                file_name = dialog.selectedFiles()
                self.set_model(Study.open(file_name[0]))
                print(f"[MainWindow] Open Study : {self.model.name}")

    def open_new_study(self):
        """Open dialog to set new study

        Returns:
            Nothing
        """
        if self.model is None:
            self.new_study = NewStudyWindow(parent=self)
            self.new_study.show()

    # TODO: Delete me !
    ###############
    # DUMMY STUFF #
    ###############

    def open_dummy(self, title="Dummy"):
        self.dummy = DummyWindow(
            title=title if type(title) is str else "Dummy",
            parent=self
        )
        self.dummy.show()
        self.set_model([1,2,3])

    def dummy_model(self):
        self.set_model([1,2,3])