mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Move the YearlyStatisticsModel to qt-models
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
9bc62748af
commit
7171d2e1eb
7 changed files with 241 additions and 243 deletions
|
@ -257,6 +257,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS
|
|||
qt-models/weightmodel.cpp
|
||||
qt-models/divecomputermodel.cpp
|
||||
qt-models/treemodel.cpp
|
||||
qt-models/yearlystatisticsmodel.cpp
|
||||
qt-models/divecomputerextradatamodel.cpp
|
||||
qt-models/completionmodels.cpp
|
||||
)
|
||||
|
|
|
@ -36,20 +36,6 @@ const QPixmap &trashIcon()
|
|||
return trash;
|
||||
}
|
||||
|
||||
//#################################################################################################
|
||||
//#
|
||||
//# Tree Model - a Basic Tree Model so I don't need to kill myself repeating this for every model.
|
||||
//#
|
||||
//#################################################################################################
|
||||
|
||||
/*! A DiveItem for use with a DiveTripModel
|
||||
*
|
||||
* A simple class which wraps basic stats for a dive (e.g. duration, depth) and
|
||||
* tidies up after it's children. This is done manually as we don't inherit from
|
||||
* QObject.
|
||||
*
|
||||
*/
|
||||
|
||||
/*################################################################
|
||||
*
|
||||
* Implementation of the Dive List.
|
||||
|
@ -605,206 +591,6 @@ bool DiveTripModel::setData(const QModelIndex &index, const QVariant &value, int
|
|||
* ################################################################
|
||||
*/
|
||||
|
||||
class YearStatisticsItem : public TreeItem {
|
||||
public:
|
||||
enum {
|
||||
YEAR,
|
||||
DIVES,
|
||||
TOTAL_TIME,
|
||||
AVERAGE_TIME,
|
||||
SHORTEST_TIME,
|
||||
LONGEST_TIME,
|
||||
AVG_DEPTH,
|
||||
MIN_DEPTH,
|
||||
MAX_DEPTH,
|
||||
AVG_SAC,
|
||||
MIN_SAC,
|
||||
MAX_SAC,
|
||||
AVG_TEMP,
|
||||
MIN_TEMP,
|
||||
MAX_TEMP,
|
||||
COLUMNS
|
||||
};
|
||||
|
||||
QVariant data(int column, int role) const;
|
||||
YearStatisticsItem(stats_t interval);
|
||||
|
||||
private:
|
||||
stats_t stats_interval;
|
||||
};
|
||||
|
||||
YearStatisticsItem::YearStatisticsItem(stats_t interval) : stats_interval(interval)
|
||||
{
|
||||
}
|
||||
|
||||
QVariant YearStatisticsItem::data(int column, int role) const
|
||||
{
|
||||
double value;
|
||||
QVariant ret;
|
||||
|
||||
if (role == Qt::FontRole) {
|
||||
QFont font = defaultModelFont();
|
||||
font.setBold(stats_interval.is_year);
|
||||
return font;
|
||||
} else if (role != Qt::DisplayRole) {
|
||||
return ret;
|
||||
}
|
||||
switch (column) {
|
||||
case YEAR:
|
||||
if (stats_interval.is_trip) {
|
||||
ret = stats_interval.location;
|
||||
} else {
|
||||
ret = stats_interval.period;
|
||||
}
|
||||
break;
|
||||
case DIVES:
|
||||
ret = stats_interval.selection_size;
|
||||
break;
|
||||
case TOTAL_TIME:
|
||||
ret = get_time_string(stats_interval.total_time.seconds, 0);
|
||||
break;
|
||||
case AVERAGE_TIME:
|
||||
ret = get_minutes(stats_interval.total_time.seconds / stats_interval.selection_size);
|
||||
break;
|
||||
case SHORTEST_TIME:
|
||||
ret = get_minutes(stats_interval.shortest_time.seconds);
|
||||
break;
|
||||
case LONGEST_TIME:
|
||||
ret = get_minutes(stats_interval.longest_time.seconds);
|
||||
break;
|
||||
case AVG_DEPTH:
|
||||
ret = get_depth_string(stats_interval.avg_depth);
|
||||
break;
|
||||
case MIN_DEPTH:
|
||||
ret = get_depth_string(stats_interval.min_depth);
|
||||
break;
|
||||
case MAX_DEPTH:
|
||||
ret = get_depth_string(stats_interval.max_depth);
|
||||
break;
|
||||
case AVG_SAC:
|
||||
ret = get_volume_string(stats_interval.avg_sac);
|
||||
break;
|
||||
case MIN_SAC:
|
||||
ret = get_volume_string(stats_interval.min_sac);
|
||||
break;
|
||||
case MAX_SAC:
|
||||
ret = get_volume_string(stats_interval.max_sac);
|
||||
break;
|
||||
case AVG_TEMP:
|
||||
if (stats_interval.combined_temp && stats_interval.combined_count) {
|
||||
ret = QString::number(stats_interval.combined_temp / stats_interval.combined_count, 'f', 1);
|
||||
}
|
||||
break;
|
||||
case MIN_TEMP:
|
||||
value = get_temp_units(stats_interval.min_temp, NULL);
|
||||
if (value > -100.0)
|
||||
ret = QString::number(value, 'f', 1);
|
||||
break;
|
||||
case MAX_TEMP:
|
||||
value = get_temp_units(stats_interval.max_temp, NULL);
|
||||
if (value > -100.0)
|
||||
ret = QString::number(value, 'f', 1);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
YearlyStatisticsModel::YearlyStatisticsModel(QObject *parent)
|
||||
{
|
||||
columns = COLUMNS;
|
||||
update_yearly_stats();
|
||||
}
|
||||
|
||||
QVariant YearlyStatisticsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
QVariant val;
|
||||
if (role == Qt::FontRole)
|
||||
val = defaultModelFont();
|
||||
|
||||
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
|
||||
switch (section) {
|
||||
case YEAR:
|
||||
val = tr("Year \n > Month / Trip");
|
||||
break;
|
||||
case DIVES:
|
||||
val = tr("#");
|
||||
break;
|
||||
case TOTAL_TIME:
|
||||
val = tr("Duration \n Total");
|
||||
break;
|
||||
case AVERAGE_TIME:
|
||||
val = tr("\nAverage");
|
||||
break;
|
||||
case SHORTEST_TIME:
|
||||
val = tr("\nShortest");
|
||||
break;
|
||||
case LONGEST_TIME:
|
||||
val = tr("\nLongest");
|
||||
break;
|
||||
case AVG_DEPTH:
|
||||
val = QString(tr("Depth (%1)\n Average")).arg(get_depth_unit());
|
||||
break;
|
||||
case MIN_DEPTH:
|
||||
val = tr("\nMinimum");
|
||||
break;
|
||||
case MAX_DEPTH:
|
||||
val = tr("\nMaximum");
|
||||
break;
|
||||
case AVG_SAC:
|
||||
val = QString(tr("SAC (%1)\n Average")).arg(get_volume_unit());
|
||||
break;
|
||||
case MIN_SAC:
|
||||
val = tr("\nMinimum");
|
||||
break;
|
||||
case MAX_SAC:
|
||||
val = tr("\nMaximum");
|
||||
break;
|
||||
case AVG_TEMP:
|
||||
val = QString(tr("Temp. (%1)\n Average").arg(get_temp_unit()));
|
||||
break;
|
||||
case MIN_TEMP:
|
||||
val = tr("\nMinimum");
|
||||
break;
|
||||
case MAX_TEMP:
|
||||
val = tr("\nMaximum");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
void YearlyStatisticsModel::update_yearly_stats()
|
||||
{
|
||||
int i, month = 0;
|
||||
unsigned int j, combined_months;
|
||||
|
||||
for (i = 0; stats_yearly != NULL && stats_yearly[i].period; ++i) {
|
||||
YearStatisticsItem *item = new YearStatisticsItem(stats_yearly[i]);
|
||||
combined_months = 0;
|
||||
for (j = 0; combined_months < stats_yearly[i].selection_size; ++j) {
|
||||
combined_months += stats_monthly[month].selection_size;
|
||||
YearStatisticsItem *iChild = new YearStatisticsItem(stats_monthly[month]);
|
||||
item->children.append(iChild);
|
||||
iChild->parent = item;
|
||||
month++;
|
||||
}
|
||||
rootItem->children.append(item);
|
||||
item->parent = rootItem;
|
||||
}
|
||||
|
||||
|
||||
if (stats_by_trip != NULL && stats_by_trip[0].is_trip == true) {
|
||||
YearStatisticsItem *item = new YearStatisticsItem(stats_by_trip[0]);
|
||||
for (i = 1; stats_by_trip != NULL && stats_by_trip[i].is_trip; ++i) {
|
||||
YearStatisticsItem *iChild = new YearStatisticsItem(stats_by_trip[i]);
|
||||
item->children.append(iChild);
|
||||
iChild->parent = item;
|
||||
}
|
||||
rootItem->children.append(item);
|
||||
item->parent = rootItem;
|
||||
}
|
||||
}
|
||||
|
||||
/*#################################################################
|
||||
* #
|
||||
* # Table Print Model
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
|
||||
struct DiveItem : public TreeItem {
|
||||
enum Column {
|
||||
NR,
|
||||
|
@ -61,7 +60,6 @@ struct DiveItem : public TreeItem {
|
|||
|
||||
struct TripItem;
|
||||
|
||||
|
||||
class DiveTripModel : public TreeModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
@ -109,33 +107,6 @@ private:
|
|||
Layout currentLayout;
|
||||
};
|
||||
|
||||
class YearlyStatisticsModel : public TreeModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum {
|
||||
YEAR,
|
||||
DIVES,
|
||||
TOTAL_TIME,
|
||||
AVERAGE_TIME,
|
||||
SHORTEST_TIME,
|
||||
LONGEST_TIME,
|
||||
AVG_DEPTH,
|
||||
MIN_DEPTH,
|
||||
MAX_DEPTH,
|
||||
AVG_SAC,
|
||||
MIN_SAC,
|
||||
MAX_SAC,
|
||||
AVG_TEMP,
|
||||
MIN_TEMP,
|
||||
MAX_TEMP,
|
||||
COLUMNS
|
||||
};
|
||||
|
||||
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
|
||||
YearlyStatisticsModel(QObject *parent = 0);
|
||||
void update_yearly_stats();
|
||||
};
|
||||
|
||||
/* TablePrintModel:
|
||||
* for now we use a blank table model with row items TablePrintItem.
|
||||
* these are pretty much the same as DiveItem, but have color
|
||||
|
|
205
qt-models/yearlystatisticsmodel.cpp
Normal file
205
qt-models/yearlystatisticsmodel.cpp
Normal file
|
@ -0,0 +1,205 @@
|
|||
#include "yearlystatisticsmodel.h"
|
||||
#include "dive.h"
|
||||
#include "helpers.h"
|
||||
#include "metrics.h"
|
||||
#include "statistics.h"
|
||||
|
||||
class YearStatisticsItem : public TreeItem {
|
||||
public:
|
||||
enum {
|
||||
YEAR,
|
||||
DIVES,
|
||||
TOTAL_TIME,
|
||||
AVERAGE_TIME,
|
||||
SHORTEST_TIME,
|
||||
LONGEST_TIME,
|
||||
AVG_DEPTH,
|
||||
MIN_DEPTH,
|
||||
MAX_DEPTH,
|
||||
AVG_SAC,
|
||||
MIN_SAC,
|
||||
MAX_SAC,
|
||||
AVG_TEMP,
|
||||
MIN_TEMP,
|
||||
MAX_TEMP,
|
||||
COLUMNS
|
||||
};
|
||||
|
||||
QVariant data(int column, int role) const;
|
||||
YearStatisticsItem(stats_t interval);
|
||||
|
||||
private:
|
||||
stats_t stats_interval;
|
||||
};
|
||||
|
||||
YearStatisticsItem::YearStatisticsItem(stats_t interval) : stats_interval(interval)
|
||||
{
|
||||
}
|
||||
|
||||
QVariant YearStatisticsItem::data(int column, int role) const
|
||||
{
|
||||
double value;
|
||||
QVariant ret;
|
||||
|
||||
if (role == Qt::FontRole) {
|
||||
QFont font = defaultModelFont();
|
||||
font.setBold(stats_interval.is_year);
|
||||
return font;
|
||||
} else if (role != Qt::DisplayRole) {
|
||||
return ret;
|
||||
}
|
||||
switch (column) {
|
||||
case YEAR:
|
||||
if (stats_interval.is_trip) {
|
||||
ret = stats_interval.location;
|
||||
} else {
|
||||
ret = stats_interval.period;
|
||||
}
|
||||
break;
|
||||
case DIVES:
|
||||
ret = stats_interval.selection_size;
|
||||
break;
|
||||
case TOTAL_TIME:
|
||||
ret = get_time_string(stats_interval.total_time.seconds, 0);
|
||||
break;
|
||||
case AVERAGE_TIME:
|
||||
ret = get_minutes(stats_interval.total_time.seconds / stats_interval.selection_size);
|
||||
break;
|
||||
case SHORTEST_TIME:
|
||||
ret = get_minutes(stats_interval.shortest_time.seconds);
|
||||
break;
|
||||
case LONGEST_TIME:
|
||||
ret = get_minutes(stats_interval.longest_time.seconds);
|
||||
break;
|
||||
case AVG_DEPTH:
|
||||
ret = get_depth_string(stats_interval.avg_depth);
|
||||
break;
|
||||
case MIN_DEPTH:
|
||||
ret = get_depth_string(stats_interval.min_depth);
|
||||
break;
|
||||
case MAX_DEPTH:
|
||||
ret = get_depth_string(stats_interval.max_depth);
|
||||
break;
|
||||
case AVG_SAC:
|
||||
ret = get_volume_string(stats_interval.avg_sac);
|
||||
break;
|
||||
case MIN_SAC:
|
||||
ret = get_volume_string(stats_interval.min_sac);
|
||||
break;
|
||||
case MAX_SAC:
|
||||
ret = get_volume_string(stats_interval.max_sac);
|
||||
break;
|
||||
case AVG_TEMP:
|
||||
if (stats_interval.combined_temp && stats_interval.combined_count) {
|
||||
ret = QString::number(stats_interval.combined_temp / stats_interval.combined_count, 'f', 1);
|
||||
}
|
||||
break;
|
||||
case MIN_TEMP:
|
||||
value = get_temp_units(stats_interval.min_temp, NULL);
|
||||
if (value > -100.0)
|
||||
ret = QString::number(value, 'f', 1);
|
||||
break;
|
||||
case MAX_TEMP:
|
||||
value = get_temp_units(stats_interval.max_temp, NULL);
|
||||
if (value > -100.0)
|
||||
ret = QString::number(value, 'f', 1);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
YearlyStatisticsModel::YearlyStatisticsModel(QObject *parent)
|
||||
{
|
||||
columns = COLUMNS;
|
||||
update_yearly_stats();
|
||||
}
|
||||
|
||||
QVariant YearlyStatisticsModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
QVariant val;
|
||||
if (role == Qt::FontRole)
|
||||
val = defaultModelFont();
|
||||
|
||||
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
|
||||
switch (section) {
|
||||
case YEAR:
|
||||
val = tr("Year \n > Month / Trip");
|
||||
break;
|
||||
case DIVES:
|
||||
val = tr("#");
|
||||
break;
|
||||
case TOTAL_TIME:
|
||||
val = tr("Duration \n Total");
|
||||
break;
|
||||
case AVERAGE_TIME:
|
||||
val = tr("\nAverage");
|
||||
break;
|
||||
case SHORTEST_TIME:
|
||||
val = tr("\nShortest");
|
||||
break;
|
||||
case LONGEST_TIME:
|
||||
val = tr("\nLongest");
|
||||
break;
|
||||
case AVG_DEPTH:
|
||||
val = QString(tr("Depth (%1)\n Average")).arg(get_depth_unit());
|
||||
break;
|
||||
case MIN_DEPTH:
|
||||
val = tr("\nMinimum");
|
||||
break;
|
||||
case MAX_DEPTH:
|
||||
val = tr("\nMaximum");
|
||||
break;
|
||||
case AVG_SAC:
|
||||
val = QString(tr("SAC (%1)\n Average")).arg(get_volume_unit());
|
||||
break;
|
||||
case MIN_SAC:
|
||||
val = tr("\nMinimum");
|
||||
break;
|
||||
case MAX_SAC:
|
||||
val = tr("\nMaximum");
|
||||
break;
|
||||
case AVG_TEMP:
|
||||
val = QString(tr("Temp. (%1)\n Average").arg(get_temp_unit()));
|
||||
break;
|
||||
case MIN_TEMP:
|
||||
val = tr("\nMinimum");
|
||||
break;
|
||||
case MAX_TEMP:
|
||||
val = tr("\nMaximum");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
void YearlyStatisticsModel::update_yearly_stats()
|
||||
{
|
||||
int i, month = 0;
|
||||
unsigned int j, combined_months;
|
||||
|
||||
for (i = 0; stats_yearly != NULL && stats_yearly[i].period; ++i) {
|
||||
YearStatisticsItem *item = new YearStatisticsItem(stats_yearly[i]);
|
||||
combined_months = 0;
|
||||
for (j = 0; combined_months < stats_yearly[i].selection_size; ++j) {
|
||||
combined_months += stats_monthly[month].selection_size;
|
||||
YearStatisticsItem *iChild = new YearStatisticsItem(stats_monthly[month]);
|
||||
item->children.append(iChild);
|
||||
iChild->parent = item;
|
||||
month++;
|
||||
}
|
||||
rootItem->children.append(item);
|
||||
item->parent = rootItem;
|
||||
}
|
||||
|
||||
|
||||
if (stats_by_trip != NULL && stats_by_trip[0].is_trip == true) {
|
||||
YearStatisticsItem *item = new YearStatisticsItem(stats_by_trip[0]);
|
||||
for (i = 1; stats_by_trip != NULL && stats_by_trip[i].is_trip; ++i) {
|
||||
YearStatisticsItem *iChild = new YearStatisticsItem(stats_by_trip[i]);
|
||||
item->children.append(iChild);
|
||||
iChild->parent = item;
|
||||
}
|
||||
rootItem->children.append(item);
|
||||
item->parent = rootItem;
|
||||
}
|
||||
}
|
33
qt-models/yearlystatisticsmodel.h
Normal file
33
qt-models/yearlystatisticsmodel.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
#ifndef YEARLYSTATISTICSMODEL_H
|
||||
#define YEARLYSTATISTICSMODEL_H
|
||||
|
||||
#include "treemodel.h"
|
||||
|
||||
class YearlyStatisticsModel : public TreeModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum {
|
||||
YEAR,
|
||||
DIVES,
|
||||
TOTAL_TIME,
|
||||
AVERAGE_TIME,
|
||||
SHORTEST_TIME,
|
||||
LONGEST_TIME,
|
||||
AVG_DEPTH,
|
||||
MIN_DEPTH,
|
||||
MAX_DEPTH,
|
||||
AVG_SAC,
|
||||
MIN_SAC,
|
||||
MAX_SAC,
|
||||
AVG_TEMP,
|
||||
MIN_TEMP,
|
||||
MAX_TEMP,
|
||||
COLUMNS
|
||||
};
|
||||
|
||||
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
|
||||
YearlyStatisticsModel(QObject *parent = 0);
|
||||
void update_yearly_stats();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -31,6 +31,7 @@
|
|||
#endif
|
||||
#include "tankinfomodel.h"
|
||||
#include "weigthsysteminfomodel.h"
|
||||
#include "yearlystatisticsmodel.h"
|
||||
#include "diveplannermodel.h"
|
||||
#include "divelogimportdialog.h"
|
||||
#include "divelogexportdialog.h"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "statisticswidget.h"
|
||||
#include "yearlystatisticsmodel.h"
|
||||
#include "models.h"
|
||||
#include <QModelIndex>
|
||||
|
||||
|
|
Loading…
Reference in a new issue