diff options
-rw-r--r-- | desktop-widgets/downloadfromdivecomputer.cpp | 114 | ||||
-rw-r--r-- | desktop-widgets/downloadfromdivecomputer.h | 26 | ||||
-rw-r--r-- | qt-models/CMakeLists.txt | 1 | ||||
-rw-r--r-- | qt-models/diveimportedmodel.cpp | 115 | ||||
-rw-r--r-- | qt-models/diveimportedmodel.h | 31 |
5 files changed, 149 insertions, 138 deletions
diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp index 14583ff1d..6392a2d1a 100644 --- a/desktop-widgets/downloadfromdivecomputer.cpp +++ b/desktop-widgets/downloadfromdivecomputer.cpp @@ -7,6 +7,7 @@ #include "core/uemis.h" #include "core/subsurface-qt/SettingsObjectWrapper.h" #include "qt-models/models.h" +#include "qt-models/diveimportedmodel.h" #include <QTimer> #include <QFileDialog> @@ -650,116 +651,3 @@ void DownloadThread::run() if (errorText) 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(); -} diff --git a/desktop-widgets/downloadfromdivecomputer.h b/desktop-widgets/downloadfromdivecomputer.h index 419e96453..b1967766a 100644 --- a/desktop-widgets/downloadfromdivecomputer.h +++ b/desktop-widgets/downloadfromdivecomputer.h @@ -17,6 +17,7 @@ #endif class QStringListModel; +class DiveImportedModel; class DownloadThread : public QThread { Q_OBJECT @@ -30,31 +31,6 @@ private: 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 { Q_OBJECT public: diff --git a/qt-models/CMakeLists.txt b/qt-models/CMakeLists.txt index 34e462fa3..cbdf47501 100644 --- a/qt-models/CMakeLists.txt +++ b/qt-models/CMakeLists.txt @@ -22,6 +22,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS ssrfsortfilterproxymodel.cpp divelistmodel.cpp gpslistmodel.cpp + diveimportedmodel.cpp ) source_group("Subsurface Models" FILES ${SUBSURFACE_MODELS}) diff --git a/qt-models/diveimportedmodel.cpp b/qt-models/diveimportedmodel.cpp new file mode 100644 index 000000000..b1e5a6174 --- /dev/null +++ b/qt-models/diveimportedmodel.cpp @@ -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(); +} diff --git a/qt-models/diveimportedmodel.h b/qt-models/diveimportedmodel.h new file mode 100644 index 000000000..06d73b6b2 --- /dev/null +++ b/qt-models/diveimportedmodel.h @@ -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 |