-
Notifications
You must be signed in to change notification settings - Fork 0
/
finestraprincipale.cpp
104 lines (87 loc) · 4.15 KB
/
finestraprincipale.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* Andrea Favero
* 1125545
* andrea.favero.8@studenti.unipd.it
*/
#include "finestraprincipale.h"
#include <QtGlobal>
#include <QDesktopWidget>
#include <QMessageBox>
#include "widgetintroduttivo.h"
#include "widgetnuovosport.h"
#include "widgetatleti.h"
#include "widgetallenamenti.h"
#include "widgetricerca.h"
#include "gestorefile.h"
FinestraPrincipale::FinestraPrincipale(Contenitore<DeepPtr<Allenamento>>& a,
Contenitore<std::shared_ptr<Persona>>& p,
QWidget *parent)
: QMainWindow(parent), ca(a), cp(p)
{
tabFunzionalita = new QTabWidget();
caricamentoContenitori();
wi = new WidgetIntroduttivo();
tabFunzionalita->addTab(wi, "Introduzione");
fa = new WidgetAtleti(cp);
tabFunzionalita->addTab(fa, "Atleti");
wa = new WidgetAllenamenti(cp, ca);
tabFunzionalita->addTab(wa, "Allenamenti");
wr = new WidgetRicerca(cp, ca, wa);
tabFunzionalita->addTab(wr, "Ricerca");
setCentralWidget(tabFunzionalita);
setWindowTitle("QONTAINER ALLENAMENTI");
// largezza iniziale finestra 90% schermo
resize(QDesktopWidget().availableGeometry(this).size() * 0.9);
// permette di eliminare a cascata gli allenamenti di un atleta che viene cancellato
connect(fa->getModello(), SIGNAL(atletaDaEliminare(std::shared_ptr<Persona>)),
wa->getModello(), SLOT(eliminazioneAllenamenti(std::shared_ptr<Persona>)));
//si aggiorno il proxy model della ricerca
connect(fa->getModello(), SIGNAL(atletaDaEliminare(std::shared_ptr<Persona>)),
wr, SLOT(rimozioneRigheEliminateModel(std::shared_ptr<Persona>)));
// essendo stato eliminato l'atleta, viene eliminata anche la sua entry nella QComboBox
// presente nel widget di ricerca
connect(fa->getDelegatoEl(), SIGNAL(eliminaRiga(int)), wr, SLOT(aggiornamentoComboBoxAtleti(int)));
//eliminazione di una riga visualizzata dal proxy
connect(wa->getDelEl(), SIGNAL(eliminaRiga(int)), wr, SLOT(rimozioneRigaEliminataModel(int)));
// segnali e slot relativi alla selezione della tab con i bottoni
//del widget introduttivo
connect(wi->getBtnAtleti(), SIGNAL(clicked()), this, SLOT(impostaTab()));
connect(wi->getBtnAllenamenti(), SIGNAL(clicked()), this, SLOT(impostaTab()));
connect(wi->getBtnRicerca(), SIGNAL(clicked()), this, SLOT(impostaTab()));
// avvisa il widget ricerca che deve aggiornare la sua combobox perché è stato inserito un
// nuovo atleta
connect(fa, SIGNAL(avvisoWidgetRicercaInseritoNuovoAtl()), wr, SLOT(aggiuntaAtletaAppenaInseritoCombo()));
}
FinestraPrincipale::~FinestraPrincipale() {
GestoreFile salvataggio(cp,ca);
salvataggio.scritturaFileAtleti();
salvataggio.scritturaFileAllenamenti();
}
bool FinestraPrincipale::richiestaUtilizzoFileDiDefault() const {
QMessageBox boxConfermaEliminazione;
boxConfermaEliminazione.setIcon(QMessageBox::Question);
boxConfermaEliminazione.setText("ATTENZIONE:");
boxConfermaEliminazione.setInformativeText(QString("Non è stato trovato alcun file riguardante gli atleti o gli allenamenti.") +
QString(" Si desidera caricarne uno di default?"));
boxConfermaEliminazione.addButton("No", QMessageBox::NoRole);
boxConfermaEliminazione.addButton("Sì", QMessageBox::YesRole);
return boxConfermaEliminazione.exec();
}
// carica cp e ca con gli atleti e gli allenamenti salvati su file
void FinestraPrincipale::caricamentoContenitori() {
GestoreFile caricatore(cp,ca);
if(caricatore.filePresente("atleti.xml"))
caricatore.letturaFile("atleti.xml", "allenamenti.xml");
else if(richiestaUtilizzoFileDiDefault()) // file di "default" per velocizzare la correzione del progetto
caricatore.letturaFile(":/file/atleti.xml", ":/file/allenamenti.xml");
}
void FinestraPrincipale::impostaTab() {
QObject *sender = QObject::sender();
if(sender == wi->getBtnAtleti()) {
tabFunzionalita->setCurrentIndex(1);
} else if(sender == wi->getBtnAllenamenti()) {
tabFunzionalita->setCurrentIndex(2);
} else if (sender == wi->getBtnRicerca()) {
tabFunzionalita->setCurrentIndex(3);
}
}