From 8214ba00563be6b2e730dd471b406ad4c6a6945f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Helge=20Nordg=C3=A5rd?= Date: Sat, 25 Sep 2021 17:33:53 +0200 Subject: [PATCH] Implementerte filhistorikk #4 --- src/core/mainwindow.cpp | 125 ++++++++++++++++++++++++++++++++++++++++ src/core/mainwindow.h | 7 +++ src/core/mainwindow.ui | 6 ++ 3 files changed, 138 insertions(+) diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index abb72c3..0642136 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -15,6 +15,12 @@ MainWindow::MainWindow(QWidget *parent) oppdaterUI(); filLagret = true; + QCoreApplication::setOrganizationName("Arctic Software"); + QCoreApplication::setOrganizationDomain("arcticsoftware.no"); + QCoreApplication::setApplicationName("Saeterprosjekt"); + + konstruerHistorikk(); + innstillingDlg = new InnstillingDialog(this); connect(innstillingDlg, SIGNAL(rejected()), this, SLOT(barnDialogLukket())); @@ -52,6 +58,7 @@ void MainWindow::on_actionNy_triggered() { filLagret = true; oppdaterTittel(); oppdaterUI(); + leggFilbaneTilHistorikk(filSti); delete hest; hest = new ArbeidsHest(this); @@ -113,6 +120,8 @@ void MainWindow::on_action_pne_triggered() { prosjektW->oppdaterProsjektListe(prosjektKart, bindinger, kundeKart); } + leggFilbaneTilHistorikk(filSti); + delete hest; hest = new ArbeidsHest(this); @@ -217,6 +226,33 @@ void MainWindow::oppdaterUI() { ui->actionLagre->setEnabled(harFil); } +/* oppdaterTellere(): + * ------------------------ + * + * Fyller historikk menyen med de siste åpnede filene + */ + +void MainWindow::konstruerHistorikk() { + QSettings settings; + qRegisterMetaTypeStreamOperators >("QList"); + + QList filHistorikkListe = settings.value("filhistorikk").value>(); + if (filHistorikkListe.isEmpty()) { + QAction *tomListe = new QAction("Ingen filer i historikk", this); + ui->menuH_istorikk->addAction(tomListe); + tomListe->setEnabled(false); + } else { + ui->menuH_istorikk->clear(); + for (int i = 0; i < filHistorikkListe.size(); ++i) { + QAction *historikkAction = new QAction(filHistorikkListe.at(i), this); + connect(historikkAction, &QAction::triggered, this, [=]() { + lastDatabaseFil(filHistorikkListe.at(i)); + }); + ui->menuH_istorikk->addAction(historikkAction); + } + } +} + /* oppdaterTellere(): * ------------------------ * @@ -262,6 +298,95 @@ void MainWindow::erstattProsjekt(ProsjektFil prosjekt) { oppdaterTittel(); } + +/* leggFilbaneTilHistorikk(): + * -------------------------- + * + * Legger ny filbane inn i historikken + */ + +void MainWindow::leggFilbaneTilHistorikk(QString filBane) { + QSettings settings; + qRegisterMetaTypeStreamOperators >("QList"); + + QList filHistorikkListe = settings.value("filhistorikk").value>(); + + if (filHistorikkListe.contains(filBane)) { + filHistorikkListe.removeOne(filBane); + filHistorikkListe.prepend(filBane); + settings.setValue("filhistorikk",QVariant::fromValue(filHistorikkListe)); + } else { + if (filHistorikkListe.size() > 9) + filHistorikkListe.removeLast(); + + filHistorikkListe.prepend(filBane); + settings.setValue("filhistorikk",QVariant::fromValue(filHistorikkListe)); + } + + konstruerHistorikk(); +} + +/* lastDatabaseFil(QString): + * -------------------------- + * + * Åpner en database med stien fil + */ + +void MainWindow::lastDatabaseFil(QString fil) { + filSti = fil; + // invokerer lastFil fra DataHandler klassen der alle IO funksjoner ligger + if (!ioHandler->lastFil(filSti, kundeKart, prosjektKart, bindinger)) { + ErrorCodes error = ioHandler->getError(); + switch (error) { + case ErrorCodes::UGYLDIG_FIL: + QMessageBox::critical(this, "Feil oppstod", "Dette ser ikke ut til å være en gyldig sæterprosjekt databasefil"); + break; + case ErrorCodes::APP_VERSJONSKONFLIKT: + QMessageBox::critical(this, "Feil oppstod", "Versjonskonflikt i programmet. Sjekk hjemmesiden for programvareoppdateringer før du prøver å åpne denne filen"); + break; + case ErrorCodes::DB_VERSJONSKONFLIKT: + QMessageBox::critical(this, "Feil oppstod", "Versjonskonflikt i databasefilen. Filen du prøver å åpne er enten en eldre eller nyere versjon av hva programmet er skrevet for å håndtere. Sjekk hjemmesiden for programvareoppdateringer før du prøver å åpne denne filen"); + break; + case ErrorCodes::LESEFEIL: + QMessageBox::critical(this, "Feil oppstod", "Kunne ikke lese fra disken. Sjekk at du har de nødvenige rettighetene til katalogen og/eller filen før du åpner databasen"); + break; + default: + break; + } + + harFil = false; + filLagret = false; + } else { // hvis databasefilen kan åpnes, er alt fryd og gammen. Hvis ikke kan ikke denne filen brukes + // oppdater grensesnittet med antall kunder og prosjekter som er lagret i filen + oppdaterTellere(); + // Oppdaterer diverse brytere i klassen for å reflektere endringer i programmet + harFil = true; + filLagret = true; + + // Sjekk om kundekartoteket allerede er åpnet, hvis ikke trenger vi ikke å foreta oss noe. Hvis den er åpen må vi oppdatere tabellen + if (kListe) { + kundeW->lagKundeTabell(kundeKart); + } else if (pListe) { // Hvis prosjektkartoteket er åpen, oppdater dette grensesnittet + prosjektW->oppdaterProsjektListe(prosjektKart, bindinger, kundeKart); + } + + leggFilbaneTilHistorikk(filSti); + + delete hest; + hest = new ArbeidsHest(this); + + connect(hest, SIGNAL(alert(ProsjektFil,AlertConditions)), this, SLOT(varsle(ProsjektFil,AlertConditions))); + + hest->setTidTaging(1000); + hest->settProsjekt(prosjektKart); + hest->run(); + } + + // oppdater grensesnittet basert på de boolske verdiene i klassen + oppdaterTittel(); + oppdaterUI(); +} + /* tellKunder(): * ------------------------ * diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index d2e50d2..5045446 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -2,9 +2,11 @@ #define MAINWINDOW_H #include +#include #include #include #include +#include #include "kundewidget.h" #include "prosjektwidget.h" @@ -23,6 +25,8 @@ QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE +Q_DECLARE_METATYPE(QList) + class MainWindow : public QMainWindow { Q_OBJECT @@ -83,9 +87,12 @@ private: void oppdaterTittel(); void oppdaterUI(); + void konstruerHistorikk(); void oppdaterTellere(); void slettKundeFraKartotek(int kundeNummer); void erstattProsjekt(ProsjektFil prosjekt); + void leggFilbaneTilHistorikk(QString filBane); + void lastDatabaseFil(QString fil); int tellKunder(); int tellProsjekter(); int hentKundeIndeksPosisjon(int kundeNummer); diff --git a/src/core/mainwindow.ui b/src/core/mainwindow.ui index 2ee26dd..79783d8 100644 --- a/src/core/mainwindow.ui +++ b/src/core/mainwindow.ui @@ -214,7 +214,13 @@ + + + H&istorikk + + +