mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Move model code to models
This makes it easery to use it on Qml. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
6bfd20a014
commit
3c3f91dcb2
5 changed files with 149 additions and 138 deletions
|
@ -7,6 +7,7 @@
|
||||||
#include "core/uemis.h"
|
#include "core/uemis.h"
|
||||||
#include "core/subsurface-qt/SettingsObjectWrapper.h"
|
#include "core/subsurface-qt/SettingsObjectWrapper.h"
|
||||||
#include "qt-models/models.h"
|
#include "qt-models/models.h"
|
||||||
|
#include "qt-models/diveimportedmodel.h"
|
||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
@ -650,116 +651,3 @@ void DownloadThread::run()
|
||||||
if (errorText)
|
if (errorText)
|
||||||
error = str_error(errorText, data->devname, data->vendor, data->product);
|
error = str_error(errorText, data->devname, data->vendor, data->product);
|
||||||
}
|
}
|
||||||
|
|
||||||
DiveImportedModel::DiveImportedModel(QObject *o) : QAbstractTableModel(o),
|
|
||||||
firstIndex(0),
|
|
||||||
lastIndex(-1),
|
|
||||||
checkStates(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int DiveImportedModel::columnCount(const QModelIndex &model) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(model)
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
int DiveImportedModel::rowCount(const QModelIndex &model) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(model)
|
|
||||||
return lastIndex - firstIndex + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant DiveImportedModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
||||||
{
|
|
||||||
if (orientation == Qt::Vertical)
|
|
||||||
return QVariant();
|
|
||||||
if (role == Qt::DisplayRole) {
|
|
||||||
switch (section) {
|
|
||||||
case 0:
|
|
||||||
return QVariant(tr("Date/time"));
|
|
||||||
case 1:
|
|
||||||
return QVariant(tr("Duration"));
|
|
||||||
case 2:
|
|
||||||
return QVariant(tr("Depth"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
|
|
||||||
{
|
|
||||||
if (!index.isValid())
|
|
||||||
return QVariant();
|
|
||||||
|
|
||||||
if (index.row() + firstIndex > lastIndex)
|
|
||||||
return QVariant();
|
|
||||||
|
|
||||||
struct dive *d = get_dive_from_table(index.row() + firstIndex, &downloadTable);
|
|
||||||
if (!d)
|
|
||||||
return QVariant();
|
|
||||||
if (role == Qt::DisplayRole) {
|
|
||||||
switch (index.column()) {
|
|
||||||
case 0:
|
|
||||||
return QVariant(get_short_dive_date_string(d->when));
|
|
||||||
case 1:
|
|
||||||
return QVariant(get_dive_duration_string(d->duration.seconds, tr("h"), tr("min")));
|
|
||||||
case 2:
|
|
||||||
return QVariant(get_depth_string(d->maxdepth.mm, true, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (role == Qt::CheckStateRole) {
|
|
||||||
if (index.column() == 0)
|
|
||||||
return checkStates[index.row()] ? Qt::Checked : Qt::Unchecked;
|
|
||||||
}
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiveImportedModel::changeSelected(QModelIndex clickedIndex)
|
|
||||||
{
|
|
||||||
checkStates[clickedIndex.row()] = !checkStates[clickedIndex.row()];
|
|
||||||
dataChanged(index(clickedIndex.row(), 0), index(clickedIndex.row(), 0), QVector<int>() << Qt::CheckStateRole);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiveImportedModel::selectAll()
|
|
||||||
{
|
|
||||||
memset(checkStates, true, lastIndex - firstIndex + 1);
|
|
||||||
dataChanged(index(0, 0), index(lastIndex - firstIndex, 0), QVector<int>() << Qt::CheckStateRole);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiveImportedModel::selectNone()
|
|
||||||
{
|
|
||||||
memset(checkStates, false, lastIndex - firstIndex + 1);
|
|
||||||
dataChanged(index(0, 0), index(lastIndex - firstIndex,0 ), QVector<int>() << Qt::CheckStateRole);
|
|
||||||
}
|
|
||||||
|
|
||||||
Qt::ItemFlags DiveImportedModel::flags(const QModelIndex &index) const
|
|
||||||
{
|
|
||||||
if (index.column() != 0)
|
|
||||||
return QAbstractTableModel::flags(index);
|
|
||||||
return QAbstractTableModel::flags(index) | Qt::ItemIsUserCheckable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiveImportedModel::clearTable()
|
|
||||||
{
|
|
||||||
beginRemoveRows(QModelIndex(), 0, lastIndex - firstIndex);
|
|
||||||
lastIndex = -1;
|
|
||||||
firstIndex = 0;
|
|
||||||
endRemoveRows();
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiveImportedModel::setImportedDivesIndexes(int first, int last)
|
|
||||||
{
|
|
||||||
Q_ASSERT(last >= first);
|
|
||||||
if (lastIndex >= firstIndex) {
|
|
||||||
beginRemoveRows(QModelIndex(), 0, lastIndex - firstIndex);
|
|
||||||
endRemoveRows();
|
|
||||||
}
|
|
||||||
beginInsertRows(QModelIndex(), 0, last - first);
|
|
||||||
lastIndex = last;
|
|
||||||
firstIndex = first;
|
|
||||||
delete[] checkStates;
|
|
||||||
checkStates = new bool[last - first + 1];
|
|
||||||
memset(checkStates, true, last - first + 1);
|
|
||||||
endInsertRows();
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class QStringListModel;
|
class QStringListModel;
|
||||||
|
class DiveImportedModel;
|
||||||
|
|
||||||
class DownloadThread : public QThread {
|
class DownloadThread : public QThread {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -30,31 +31,6 @@ private:
|
||||||
device_data_t *data;
|
device_data_t *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DiveImportedModel : public QAbstractTableModel
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
DiveImportedModel(QObject *o);
|
|
||||||
int columnCount(const QModelIndex& index = QModelIndex()) const;
|
|
||||||
int rowCount(const QModelIndex& index = QModelIndex()) const;
|
|
||||||
QVariant data(const QModelIndex& index, int role) const;
|
|
||||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
|
||||||
void setImportedDivesIndexes(int first, int last);
|
|
||||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
|
||||||
void clearTable();
|
|
||||||
|
|
||||||
public
|
|
||||||
slots:
|
|
||||||
void changeSelected(QModelIndex clickedIndex);
|
|
||||||
void selectAll();
|
|
||||||
void selectNone();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int firstIndex;
|
|
||||||
int lastIndex;
|
|
||||||
bool *checkStates;
|
|
||||||
};
|
|
||||||
|
|
||||||
class DownloadFromDCWidget : public QDialog {
|
class DownloadFromDCWidget : public QDialog {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -22,6 +22,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS
|
||||||
ssrfsortfilterproxymodel.cpp
|
ssrfsortfilterproxymodel.cpp
|
||||||
divelistmodel.cpp
|
divelistmodel.cpp
|
||||||
gpslistmodel.cpp
|
gpslistmodel.cpp
|
||||||
|
diveimportedmodel.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS})
|
source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS})
|
||||||
|
|
115
qt-models/diveimportedmodel.cpp
Normal file
115
qt-models/diveimportedmodel.cpp
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
#include "diveimportedmodel.h"
|
||||||
|
#include "core/helpers.h"
|
||||||
|
|
||||||
|
DiveImportedModel::DiveImportedModel(QObject *o) : QAbstractTableModel(o),
|
||||||
|
firstIndex(0),
|
||||||
|
lastIndex(-1),
|
||||||
|
checkStates(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int DiveImportedModel::columnCount(const QModelIndex &model) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(model)
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DiveImportedModel::rowCount(const QModelIndex &model) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(model)
|
||||||
|
return lastIndex - firstIndex + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant DiveImportedModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if (orientation == Qt::Vertical)
|
||||||
|
return QVariant();
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
switch (section) {
|
||||||
|
case 0:
|
||||||
|
return QVariant(tr("Date/time"));
|
||||||
|
case 1:
|
||||||
|
return QVariant(tr("Duration"));
|
||||||
|
case 2:
|
||||||
|
return QVariant(tr("Depth"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (!index.isValid())
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
if (index.row() + firstIndex > lastIndex)
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
struct dive *d = get_dive_from_table(index.row() + firstIndex, &downloadTable);
|
||||||
|
if (!d)
|
||||||
|
return QVariant();
|
||||||
|
if (role == Qt::DisplayRole) {
|
||||||
|
switch (index.column()) {
|
||||||
|
case 0:
|
||||||
|
return QVariant(get_short_dive_date_string(d->when));
|
||||||
|
case 1:
|
||||||
|
return QVariant(get_dive_duration_string(d->duration.seconds, tr("h:"), tr("min")));
|
||||||
|
case 2:
|
||||||
|
return QVariant(get_depth_string(d->maxdepth.mm, true, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (role == Qt::CheckStateRole) {
|
||||||
|
if (index.column() == 0)
|
||||||
|
return checkStates[index.row()] ? Qt::Checked : Qt::Unchecked;
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiveImportedModel::changeSelected(QModelIndex clickedIndex)
|
||||||
|
{
|
||||||
|
checkStates[clickedIndex.row()] = !checkStates[clickedIndex.row()];
|
||||||
|
dataChanged(index(clickedIndex.row(), 0), index(clickedIndex.row(), 0), QVector<int>() << Qt::CheckStateRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiveImportedModel::selectAll()
|
||||||
|
{
|
||||||
|
memset(checkStates, true, lastIndex - firstIndex + 1);
|
||||||
|
dataChanged(index(0, 0), index(lastIndex - firstIndex, 0), QVector<int>() << Qt::CheckStateRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiveImportedModel::selectNone()
|
||||||
|
{
|
||||||
|
memset(checkStates, false, lastIndex - firstIndex + 1);
|
||||||
|
dataChanged(index(0, 0), index(lastIndex - firstIndex,0 ), QVector<int>() << Qt::CheckStateRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::ItemFlags DiveImportedModel::flags(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if (index.column() != 0)
|
||||||
|
return QAbstractTableModel::flags(index);
|
||||||
|
return QAbstractTableModel::flags(index) | Qt::ItemIsUserCheckable;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiveImportedModel::clearTable()
|
||||||
|
{
|
||||||
|
beginRemoveRows(QModelIndex(), 0, lastIndex - firstIndex);
|
||||||
|
lastIndex = -1;
|
||||||
|
firstIndex = 0;
|
||||||
|
endRemoveRows();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiveImportedModel::setImportedDivesIndexes(int first, int last)
|
||||||
|
{
|
||||||
|
Q_ASSERT(last >= first);
|
||||||
|
if (lastIndex >= firstIndex) {
|
||||||
|
beginRemoveRows(QModelIndex(), 0, lastIndex - firstIndex);
|
||||||
|
endRemoveRows();
|
||||||
|
}
|
||||||
|
beginInsertRows(QModelIndex(), 0, last - first);
|
||||||
|
lastIndex = last;
|
||||||
|
firstIndex = first;
|
||||||
|
delete[] checkStates;
|
||||||
|
checkStates = new bool[last - first + 1];
|
||||||
|
memset(checkStates, true, last - first + 1);
|
||||||
|
endInsertRows();
|
||||||
|
}
|
31
qt-models/diveimportedmodel.h
Normal file
31
qt-models/diveimportedmodel.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#ifndef DIVEIMPORTEDMODEL_H
|
||||||
|
#define DIVEIMPORTEDMODEL_H
|
||||||
|
|
||||||
|
#include <QAbstractTableModel>
|
||||||
|
|
||||||
|
class DiveImportedModel : public QAbstractTableModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
DiveImportedModel(QObject *o);
|
||||||
|
int columnCount(const QModelIndex& index = QModelIndex()) const;
|
||||||
|
int rowCount(const QModelIndex& index = QModelIndex()) const;
|
||||||
|
QVariant data(const QModelIndex& index, int role) const;
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
||||||
|
void setImportedDivesIndexes(int first, int last);
|
||||||
|
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||||
|
void clearTable();
|
||||||
|
|
||||||
|
public
|
||||||
|
slots:
|
||||||
|
void changeSelected(QModelIndex clickedIndex);
|
||||||
|
void selectAll();
|
||||||
|
void selectNone();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int firstIndex;
|
||||||
|
int lastIndex;
|
||||||
|
bool *checkStates;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Add a link
Reference in a new issue