subsurface/qt-models/gpslistmodel.cpp
Dirk Hohndel a7f8a7574e Create GpsListModel in order to be able to display GPS fixes
This will allow us to visualize the GPS fixes that are currently stored in the
QML UI.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-01-07 21:29:05 -08:00

96 lines
1.8 KiB
C++

#include "gpslistmodel.h"
#include "helpers.h"
GpsTracker::GpsTracker()
{
m_latitude = 0;
m_longitude = 0;
m_when = 0;
m_name = QString();
}
GpsTracker::~GpsTracker()
{
}
uint64_t GpsTracker::when() const
{
return m_when;
}
int32_t GpsTracker::latitude() const
{
return m_latitude;
}
int32_t GpsTracker::longitude() const
{
return m_longitude;
}
QString GpsTracker::name() const
{
return m_name;
}
GpsListModel *GpsListModel::m_instance = NULL;
GpsListModel::GpsListModel(QObject *parent) : QAbstractListModel(parent)
{
m_instance = this;
}
void GpsListModel::addGpsFix(gpsTracker *g)
{
beginInsertColumns(QModelIndex(), rowCount(), rowCount());
m_gpsFixes.append(GpsTracker(g));
endInsertRows();
}
void GpsListModel::clear()
{
if (m_gpsFixes.count()) {
beginRemoveRows(QModelIndex(), 0, m_gpsFixes.count() - 1);
m_gpsFixes.clear();
endRemoveRows();
}
}
int GpsListModel::rowCount(const QModelIndex &parent) const
{
return m_gpsFixes.count();
}
QVariant GpsListModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() > m_gpsFixes.count())
return QVariant();
const GpsTracker &gt = m_gpsFixes[index.row()];
if (role == GpsDateRole)
return get_short_dive_date_string(gt.when());
else if (role == GpsNameRole)
return QString(gt.name());
else if (role == GpsLatitudeRole)
return QString::number(gt.latitude() / 1000000.0, 'f', 6);
else if (role == GpsLongitudeRole)
return QString::number(gt.longitude() / 1000000.0, 'f', 6);
return QVariant();
}
QHash<int, QByteArray> GpsListModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[GpsDateRole] = "when";
roles[GpsNameRole] = "name";
roles[GpsLatitudeRole] = "latitude";
roles[GpsLongitudeRole] = "longitude";
return roles;
}
GpsListModel *GpsListModel::instance()
{
return m_instance;
}