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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/*
* maintab.cpp
*
* classes for the "notebook" area of the main window of Subsurface
*
*/
#include "maintab.h"
#include "ui_maintab.h"
#include "addcylinderdialog.h"
#include "addweightsystemdialog.h"
#include <QLabel>
MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
ui(new Ui::MainTab()),
weightModel(new WeightModel()),
cylindersModel(new CylindersModel())
{
ui->setupUi(this);
ui->cylinders->setModel(cylindersModel);
ui->weights->setModel(weightModel);
}
void MainTab::clearEquipment()
{
}
void MainTab::clearInfo()
{
ui->sacText->setText(QString());
ui->otuText->setText(QString());
ui->oxygenHeliumText->setText(QString());
ui->gasUsedText->setText(QString());
ui->dateText->setText(QString());
ui->diveTimeText->setText(QString());
ui->surfaceIntervalText->setText(QString());
ui->maximumDepthText->setText(QString());
ui->averageDepthText->setText(QString());
ui->visibilityText->setText(QString());
ui->waterTemperatureText->setText(QString());
ui->airTemperatureText->setText(QString());
ui->airPressureText->setText(QString());
}
void MainTab::clearStats()
{
ui->maximumDepthAllText->setText(QString());
ui->minimumDepthAllText->setText(QString());
ui->averageDepthAllText->setText(QString());
ui->maximumSacAllText->setText(QString());
ui->minimumSacAllText->setText(QString());
ui->averageSacAllText->setText(QString());
ui->divesAllText->setText(QString());
ui->maximumTemperatureAllText->setText(QString());
ui->minimumTemperatureAllText->setText(QString());
ui->averageTemperatureAllText->setText(QString());
ui->totalTimeAllText->setText(QString());
ui->averageTimeAllText->setText(QString());
ui->longestAllText->setText(QString());
ui->shortestAllText->setText(QString());
}
#define UPDATE_TEXT(d, field) \
if (!d || !d->field) \
ui->field->setText(""); \
else \
ui->field->setText(d->field)
void MainTab::updateDiveInfo(int dive)
{
// So, this is what happens now:
// Every tab should be populated from this method,
// it will be called whenever a new dive is selected
// I'm already populating the 'notes' box
// to show how it can be done.
// If you are unsure what's the name of anything,
// open the file maintab.ui on the designer
// click on the item and check its objectName,
// the access is ui->objectName from here on.
struct dive *d = get_dive(dive);
UPDATE_TEXT(d, notes);
UPDATE_TEXT(d, location);
UPDATE_TEXT(d, suit);
UPDATE_TEXT(d, divemaster);
UPDATE_TEXT(d, buddy);
if (d)
ui->rating->setCurrentStars(d->rating);
else
ui->rating->setCurrentStars(0);
}
void MainTab::on_addCylinder_clicked()
{
if (cylindersModel->rowCount() >= MAX_CYLINDERS)
return;
AddCylinderDialog dialog(this);
cylinder_t *newCylinder = (cylinder_t*) malloc(sizeof(cylinder_t));
newCylinder->type.description = "";
dialog.setCylinder(newCylinder);
int result = dialog.exec();
if (result == QDialog::Rejected){
return;
}
dialog.updateCylinder();
cylindersModel->add(newCylinder);
}
void MainTab::on_editCylinder_clicked()
{
}
void MainTab::on_delCylinder_clicked()
{
}
void MainTab::on_addWeight_clicked()
{
if (weightModel->rowCount() >= MAX_WEIGHTSYSTEMS)
return;
AddWeightsystemDialog dialog(this);
weightsystem_t newWeightsystem;
newWeightsystem.description = "";
newWeightsystem.weight.grams = 0;
dialog.setWeightsystem(&newWeightsystem);
int result = dialog.exec();
if (result == QDialog::Rejected)
return;
dialog.updateWeightsystem();
weightModel->add(&newWeightsystem);
}
void MainTab::on_editWeight_clicked()
{
}
void MainTab::on_delWeight_clicked()
{
}
void MainTab::reload()
{
cylindersModel->update();
}
|