-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwidgetatleti.cpp
97 lines (81 loc) · 3.54 KB
/
widgetatleti.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
/*
* Andrea Favero
* 1125545
*/
#include "widgetatleti.h"
#include <QStringList>
#include <QStandardItemModel>
#include <QtGlobal>
#include <QHeaderView>
#include <QMessageBox>
#include "dialogatleta.h"
WidgetAtleti::WidgetAtleti(Contenitore<std::shared_ptr<Persona>>& a, QWidget *parent)
: QWidget(parent), atleti(a)
{
lblTitolo = new QLabel("ATLETI");
btnNuovoAtleta = new QPushButton("Nuovo Atleta");
layout = new QVBoxLayout;
layout->addWidget(lblTitolo);
layout->setAlignment(lblTitolo, Qt::AlignHCenter);
tabAtleti = new QTableView;
layout->addWidget(tabAtleti);
layout->addWidget(btnNuovoAtleta);
layout->setAlignment(btnNuovoAtleta, Qt::AlignHCenter);
setLayout(layout);
modello = new ModelTabellaAtleti(atleti);
tabAtleti->setModel(modello);
delegatoEl = new DelegateEliminazione;
tabAtleti->setItemDelegateForColumn(3,delegatoEl);
delegatoMod = new DelegateModifica;
tabAtleti->setItemDelegateForColumn(4,delegatoMod);
// "stira" le colonne per occupare tutta la larghezza della tabella
tabAtleti->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//setWindowModality(Qt::ApplicationModal); //le altre finestre non sono usabili
// creazione di un nuovo atleta
connect(btnNuovoAtleta, SIGNAL(clicked(bool)), this, SLOT(avviaDialogInserimento(bool)));
// 'Eventi' relativi all'eleliminazione di un atleta
// il delegate avverte che l'utente ha cliccato un bottone e vuole eliminare una riga
connect(delegatoEl, SIGNAL(avvisoEliminazione(int)), this, SLOT(ricevutaNotificaEliminazioneRiga(int)));
// se l'utente conferma l'eliminazione viene avertito il delegate
connect(this, SIGNAL(rimuovereRiga(int)), delegatoEl, SLOT(slotEliminazione(int)));
// il delegate avverte il model di rimuovere la riga desiderata
connect(delegatoEl, SIGNAL(eliminaRiga(int)), modello, SLOT(eliminazioneAtleta(int)));
// 'Eventi' relativi alla modifica di un atleta
connect(delegatoMod, SIGNAL(avvisoModifica(int)), this, SLOT(avviaDialogModifica(int)));
}
ModelTabellaAtleti* WidgetAtleti::getModello() const {
return modello;
}
DelegateEliminazione* WidgetAtleti::getDelegatoEl() const {
return delegatoEl;
}
void WidgetAtleti::avviaDialogInserimento(bool cliccato) {
Q_UNUSED(cliccato);
DialogAtleta da(atleti);
connect(&da, SIGNAL(reset()), modello, SLOT(inserimentoNuovoAtletaEsterno()));
//avviso il widget ricerca che deve aggiornare la sua combobox
connect(&da, SIGNAL(reset()), this, SIGNAL(avvisoWidgetRicercaInseritoNuovoAtl()));
da.exec();
da.disconnect();
}
void WidgetAtleti::ricevutaNotificaEliminazioneRiga(int riga) {
QMessageBox boxConfermaEliminazione;
boxConfermaEliminazione.setIcon(QMessageBox::Question);
boxConfermaEliminazione.setText("ATTENZIONE:");
boxConfermaEliminazione.setInformativeText(
QString("Vuoi davvero eliminare l'atleta?") +
" L'operazione è definitiva e verranno eliminati "
+ "tutti gli allenamenti associati a tale atleta.");
boxConfermaEliminazione.addButton("No", QMessageBox::NoRole);
boxConfermaEliminazione.addButton("Sì", QMessageBox::YesRole);
int scelta = boxConfermaEliminazione.exec();
if(scelta)
emit rimuovereRiga(riga);
}
void WidgetAtleti::avviaDialogModifica(int atl) {
DialogAtleta da(atleti,true, atl);
connect(&da, SIGNAL(reset()), modello, SLOT(inserimentoNuovoAtletaEsterno()));
da.exec();
da.disconnect();
}