Implementerte filhistorikk #4

This commit is contained in:
Helge-Mikael Nordgård 2021-09-25 17:33:53 +02:00
parent c4688d7aec
commit 8214ba0056
3 changed files with 138 additions and 0 deletions

View File

@ -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<QString> >("QList<QString>");
QList<QString> filHistorikkListe = settings.value("filhistorikk").value<QList<QString>>();
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<QString> >("QList<QString>");
QList<QString> filHistorikkListe = settings.value("filhistorikk").value<QList<QString>>();
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():
* ------------------------
*

View File

@ -2,9 +2,11 @@
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSettings>
#include <QFileDialog>
#include <QMessageBox>
#include <QCloseEvent>
#include <QAction>
#include "kundewidget.h"
#include "prosjektwidget.h"
@ -23,6 +25,8 @@ QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QList<QString>)
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);

View File

@ -214,7 +214,13 @@
</property>
<addaction name="actionOm"/>
</widget>
<widget class="QMenu" name="menuH_istorikk">
<property name="title">
<string>H&amp;istorikk</string>
</property>
</widget>
<addaction name="menu_Fil"/>
<addaction name="menuH_istorikk"/>
<addaction name="menuOm"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>