QML UI: add the Downloaded Dive Model

Still to do:
 - select the dives to save
 - record the downloaded dives

but download is already working. :)

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2017-05-26 17:53:25 +02:00 committed by Dirk Hohndel
parent 7858376727
commit 38e24512b7
4 changed files with 53 additions and 7 deletions

View file

@ -44,6 +44,14 @@ Kirigami.Page {
deviceData.diveId : 0 deviceData.diveId : 0
deviceData.saveDump : false deviceData.saveDump : false
deviceData.saveLog : false deviceData.saveLog : false
onFinished : {
importModel.repopulate()
}
}
DCImportModel {
id: importModel
} }
ColumnLayout { ColumnLayout {
@ -98,6 +106,8 @@ Kirigami.Page {
Layout.fillWidth: true // The tableview should fill Layout.fillWidth: true // The tableview should fill
Layout.fillHeight: true // all remaining vertical space Layout.fillHeight: true // all remaining vertical space
height: parent.height // on this screen height: parent.height // on this screen
model : importModel
QQC1.TableViewColumn { QQC1.TableViewColumn {
width: parent.width / 2 width: parent.width / 2
role: "datetime" role: "datetime"

View file

@ -7,6 +7,8 @@ DiveImportedModel::DiveImportedModel(QObject *o) : QAbstractTableModel(o),
checkStates(nullptr), checkStates(nullptr),
diveTable(nullptr) diveTable(nullptr)
{ {
// Defaults to downloadTable, can be changed later.
diveTable = &downloadTable;
} }
int DiveImportedModel::columnCount(const QModelIndex &model) const int DiveImportedModel::columnCount(const QModelIndex &model) const
@ -25,8 +27,16 @@ QVariant DiveImportedModel::headerData(int section, Qt::Orientation orientation,
{ {
if (orientation == Qt::Vertical) if (orientation == Qt::Vertical)
return QVariant(); return QVariant();
// widgets access the model via index.column(), qml via role.
int column = section;
if (role == DateTime || role == Duration || role == Depth) {
column = role - DateTime;
role = Qt::DisplayRole;
}
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
switch (section) { switch (column) {
case 0: case 0:
return QVariant(tr("Date/time")); return QVariant(tr("Date/time"));
case 1: case 1:
@ -40,7 +50,7 @@ QVariant DiveImportedModel::headerData(int section, Qt::Orientation orientation,
void DiveImportedModel::setDiveTable(struct dive_table* table) void DiveImportedModel::setDiveTable(struct dive_table* table)
{ {
diveTable = table; diveTable = table;
} }
QVariant DiveImportedModel::data(const QModelIndex &index, int role) const QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
@ -54,8 +64,16 @@ QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
struct dive *d = get_dive_from_table(index.row() + firstIndex, diveTable); struct dive *d = get_dive_from_table(index.row() + firstIndex, diveTable);
if (!d) if (!d)
return QVariant(); return QVariant();
// widgets access the model via index.column(), qml via role.
int column = index.column();
if (role == DateTime || role == Duration || role == Depth) {
column = role - DateTime;
role = Qt::DisplayRole;
}
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
switch (index.column()) { switch (column) {
case 0: case 0:
return QVariant(get_short_dive_date_string(d->when)); return QVariant(get_short_dive_date_string(d->when));
case 1: case 1:
@ -119,3 +137,16 @@ void DiveImportedModel::setImportedDivesIndexes(int first, int last)
memset(checkStates, true, last - first + 1); memset(checkStates, true, last - first + 1);
endInsertRows(); endInsertRows();
} }
void DiveImportedModel::repopulate()
{
setImportedDivesIndexes(0, diveTable->nr-1);
}
QHash<int, QByteArray> DiveImportedModel::roleNames() const {
static QHash<int, QByteArray> roles = {
{ DateTime, "datetime"},
{ Depth, "depth"},
{ Duration, "duration"}};
return roles;
}

View file

@ -8,8 +8,10 @@ class DiveImportedModel : public QAbstractTableModel
{ {
Q_OBJECT Q_OBJECT
public: public:
DiveImportedModel(QObject *o); enum roleTypes { DateTime = Qt::UserRole + 1, Duration, Depth};
void setDiveTable(struct dive_table *table);
DiveImportedModel(QObject *parent = 0);
void setDiveTable(struct dive_table *table);
int columnCount(const QModelIndex& index = QModelIndex()) const; int columnCount(const QModelIndex& index = QModelIndex()) const;
int rowCount(const QModelIndex& index = QModelIndex()) const; int rowCount(const QModelIndex& index = QModelIndex()) const;
QVariant data(const QModelIndex& index, int role) const; QVariant data(const QModelIndex& index, int role) const;
@ -17,7 +19,8 @@ public:
void setImportedDivesIndexes(int first, int last); void setImportedDivesIndexes(int first, int last);
Qt::ItemFlags flags(const QModelIndex &index) const; Qt::ItemFlags flags(const QModelIndex &index) const;
void clearTable(); void clearTable();
QHash<int, QByteArray> roleNames() const;
Q_INVOKABLE void repopulate();
public public
slots: slots:
void changeSelected(QModelIndex clickedIndex); void changeSelected(QModelIndex clickedIndex);
@ -28,7 +31,7 @@ private:
int firstIndex; int firstIndex;
int lastIndex; int lastIndex;
bool *checkStates; bool *checkStates;
struct dive_table *diveTable; struct dive_table *diveTable;
}; };
#endif #endif

View file

@ -22,6 +22,7 @@
#include "qt-models/gpslistmodel.h" #include "qt-models/gpslistmodel.h"
#include "mobile-widgets/qmlprofile.h" #include "mobile-widgets/qmlprofile.h"
#include "core/downloadfromdcthread.h" #include "core/downloadfromdcthread.h"
#include "qt-models/diveimportedmodel.h"
#include "mobile-widgets/qml/kirigami/src/kirigamiplugin.h" #include "mobile-widgets/qml/kirigami/src/kirigamiplugin.h"
@ -39,6 +40,7 @@ void run_ui()
qmlRegisterType<DCDeviceData>("org.subsurfacedivelog.mobile", 1, 0, "DCDeviceData"); qmlRegisterType<DCDeviceData>("org.subsurfacedivelog.mobile", 1, 0, "DCDeviceData");
qmlRegisterType<DownloadThread>("org.subsurfacedivelog.mobile", 1, 0, "DCDownloadThread"); qmlRegisterType<DownloadThread>("org.subsurfacedivelog.mobile", 1, 0, "DCDownloadThread");
qmlRegisterType<DiveImportedModel>("org.subsurfacedivelog.mobile", 1, 0, "DCImportModel");
QQmlApplicationEngine engine; QQmlApplicationEngine engine;
KirigamiPlugin::getInstance().registerTypes(); KirigamiPlugin::getInstance().registerTypes();