2013-04-14 03:44:02 +00:00
|
|
|
/*
|
|
|
|
* maintab.cpp
|
|
|
|
*
|
|
|
|
* classes for the "notebook" area of the main window of Subsurface
|
|
|
|
*
|
|
|
|
*/
|
2013-04-07 22:20:43 +00:00
|
|
|
#include "maintab.h"
|
|
|
|
#include "ui_maintab.h"
|
2013-04-13 13:17:59 +00:00
|
|
|
#include "addcylinderdialog.h"
|
2013-05-01 22:37:41 +00:00
|
|
|
#include "addweightsystemdialog.h"
|
2013-05-07 03:36:37 +00:00
|
|
|
#include "../helpers.h"
|
|
|
|
#include "../statistics.h"
|
2013-04-13 13:17:59 +00:00
|
|
|
|
|
|
|
#include <QLabel>
|
2013-04-07 22:20:43 +00:00
|
|
|
|
|
|
|
MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
|
2013-04-13 13:17:59 +00:00
|
|
|
ui(new Ui::MainTab()),
|
|
|
|
weightModel(new WeightModel()),
|
|
|
|
cylindersModel(new CylindersModel())
|
2013-04-07 22:20:43 +00:00
|
|
|
{
|
|
|
|
ui->setupUi(this);
|
2013-04-13 13:17:59 +00:00
|
|
|
ui->cylinders->setModel(cylindersModel);
|
|
|
|
ui->weights->setModel(weightModel);
|
2013-05-09 07:32:27 +00:00
|
|
|
|
|
|
|
/* example of where code is more concise than Qt designer */
|
|
|
|
QList<QObject *> infoTabWidgets = ui->infoTab->children();
|
|
|
|
Q_FOREACH( QObject* obj, infoTabWidgets ){
|
|
|
|
QLabel* label = qobject_cast<QLabel *>(obj);
|
|
|
|
if (label)
|
|
|
|
label->setAlignment(Qt::AlignHCenter);
|
|
|
|
}
|
2013-04-13 13:17:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainTab::clearEquipment()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainTab::clearInfo()
|
|
|
|
{
|
2013-05-03 07:19:00 +00:00
|
|
|
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());
|
2013-04-13 13:17:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainTab::clearStats()
|
|
|
|
{
|
2013-05-06 07:30:40 +00:00
|
|
|
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());
|
2013-04-13 13:17:59 +00:00
|
|
|
}
|
|
|
|
|
2013-05-06 17:16:16 +00:00
|
|
|
#define UPDATE_TEXT(d, field) \
|
|
|
|
if (!d || !d->field) \
|
|
|
|
ui->field->setText(""); \
|
|
|
|
else \
|
|
|
|
ui->field->setText(d->field)
|
|
|
|
|
2013-05-07 03:36:37 +00:00
|
|
|
|
2013-05-06 16:23:14 +00:00
|
|
|
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.
|
2013-05-07 03:36:37 +00:00
|
|
|
volume_t sacVal;
|
2013-05-06 16:23:14 +00:00
|
|
|
struct dive *d = get_dive(dive);
|
2013-05-06 17:16:16 +00:00
|
|
|
UPDATE_TEXT(d, notes);
|
|
|
|
UPDATE_TEXT(d, location);
|
|
|
|
UPDATE_TEXT(d, suit);
|
|
|
|
UPDATE_TEXT(d, divemaster);
|
|
|
|
UPDATE_TEXT(d, buddy);
|
2013-05-08 19:08:00 +00:00
|
|
|
if (d) {
|
2013-05-06 17:16:16 +00:00
|
|
|
ui->rating->setCurrentStars(d->rating);
|
2013-05-08 19:08:00 +00:00
|
|
|
ui->maximumDepthText->setText(get_depth_string(d->maxdepth, TRUE));
|
|
|
|
ui->averageDepthText->setText(get_depth_string(d->meandepth, TRUE));
|
|
|
|
ui->otuText->setText(QString("%1").arg(d->otu));
|
|
|
|
ui->waterTemperatureText->setText(get_temperature_string(d->watertemp, TRUE));
|
|
|
|
ui->airTemperatureText->setText(get_temperature_string(d->airtemp, TRUE));
|
2013-05-07 03:36:37 +00:00
|
|
|
ui->gasUsedText->setText(get_volume_string(get_gas_used(d), TRUE));
|
2013-05-08 19:08:00 +00:00
|
|
|
if ((sacVal.mliter = d->sac) > 0)
|
|
|
|
ui->sacText->setText(get_volume_string(sacVal, TRUE).append("/min"));
|
|
|
|
else
|
|
|
|
ui->sacText->setText(QString());
|
|
|
|
if (d->surface_pressure.mbar)
|
|
|
|
/* this is ALWAYS displayed in mbar */
|
|
|
|
ui->airPressureText->setText(QString("%1mbar").arg(d->surface_pressure.mbar));
|
|
|
|
else
|
|
|
|
ui->airPressureText->setText(QString());
|
|
|
|
} else {
|
|
|
|
ui->rating->setCurrentStars(0);
|
|
|
|
ui->sacText->setText(QString());
|
|
|
|
ui->otuText->setText(QString());
|
|
|
|
ui->oxygenHeliumText->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->gasUsedText->setText(QString());
|
|
|
|
ui->airPressureText->setText(QString());
|
|
|
|
}
|
2013-05-06 16:23:14 +00:00
|
|
|
}
|
|
|
|
|
2013-04-13 13:17:59 +00:00
|
|
|
void MainTab::on_addCylinder_clicked()
|
|
|
|
{
|
2013-05-01 21:49:17 +00:00
|
|
|
if (cylindersModel->rowCount() >= MAX_CYLINDERS)
|
|
|
|
return;
|
|
|
|
|
2013-04-13 13:17:59 +00:00
|
|
|
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()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2013-05-01 21:30:34 +00:00
|
|
|
void MainTab::on_addWeight_clicked()
|
|
|
|
{
|
2013-05-01 21:49:17 +00:00
|
|
|
if (weightModel->rowCount() >= MAX_WEIGHTSYSTEMS)
|
|
|
|
return;
|
|
|
|
|
2013-05-01 22:37:41 +00:00
|
|
|
AddWeightsystemDialog dialog(this);
|
2013-05-01 23:23:20 +00:00
|
|
|
weightsystem_t newWeightsystem;
|
|
|
|
newWeightsystem.description = "";
|
|
|
|
newWeightsystem.weight.grams = 0;
|
2013-05-01 22:37:41 +00:00
|
|
|
|
2013-05-01 23:23:20 +00:00
|
|
|
dialog.setWeightsystem(&newWeightsystem);
|
2013-05-01 22:37:41 +00:00
|
|
|
int result = dialog.exec();
|
|
|
|
if (result == QDialog::Rejected)
|
|
|
|
return;
|
|
|
|
|
|
|
|
dialog.updateWeightsystem();
|
2013-05-01 23:23:20 +00:00
|
|
|
weightModel->add(&newWeightsystem);
|
2013-05-01 21:30:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void MainTab::on_editWeight_clicked()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainTab::on_delWeight_clicked()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2013-04-13 13:17:59 +00:00
|
|
|
void MainTab::reload()
|
|
|
|
{
|
|
|
|
cylindersModel->update();
|
2013-04-07 22:20:43 +00:00
|
|
|
}
|