summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2017-06-04 14:40:25 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-06-04 07:11:01 -0700
commit03e771066bf79c2f719b58948a55547f105f2dc2 (patch)
tree3ec16e166a6c0be31d6cf6d43fd74fe516118e16
parent78ee3f40a5f3b55b9d98842f7e309b7bba9882c0 (diff)
downloadsubsurface-03e771066bf79c2f719b58948a55547f105f2dc2.tar.gz
QML UI: show selection box on the Download from DC list
QML and C++ model don't interact too much, a new Rule should be created and used on the QML Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--mobile-widgets/qml/DownloadFromDiveComputer.qml1
-rw-r--r--mobile-widgets/qml/DownloadedDiveDelegate.qml9
-rw-r--r--qt-models/diveimportedmodel.cpp13
-rw-r--r--qt-models/diveimportedmodel.h2
4 files changed, 18 insertions, 7 deletions
diff --git a/mobile-widgets/qml/DownloadFromDiveComputer.qml b/mobile-widgets/qml/DownloadFromDiveComputer.qml
index 3a5cf6618..c4dc70790 100644
--- a/mobile-widgets/qml/DownloadFromDiveComputer.qml
+++ b/mobile-widgets/qml/DownloadFromDiveComputer.qml
@@ -116,6 +116,7 @@ Kirigami.Page {
datetime: model.datetime
duration: model.duration
depth: model.depth
+ selected: model.selected
backgroundColor: selectAll ? Kirigami.Theme.highlightColor : Kirigami.Theme.viewBackgroundColor
diff --git a/mobile-widgets/qml/DownloadedDiveDelegate.qml b/mobile-widgets/qml/DownloadedDiveDelegate.qml
index eb66ce52d..5bfc884b3 100644
--- a/mobile-widgets/qml/DownloadedDiveDelegate.qml
+++ b/mobile-widgets/qml/DownloadedDiveDelegate.qml
@@ -12,6 +12,7 @@ Kirigami.AbstractListItem {
property string depth
property string datetime
property string duration
+ property bool selected
enabled: true
supportsMouseEvents: true
@@ -30,9 +31,15 @@ Kirigami.AbstractListItem {
NumberAnimation { property: "opacity"; from: 0; to: 1.0; duration: 400 }
NumberAnimation { property: "scale"; from: 0; to: 1.0; duration: 400 }
}
+ CheckBox {
+ id: diveIsSelected
+ checked: innerListItem.selected;
+ width: childrenRect.heigh - Kirigami.Units.smallSpacing;
+ height: childrenRect.heigh - Kirigami.Units.smallSpacing;
+ }
Item {
id: diveListEntry
- width: parent.width - Kirigami.Units.gridUnit * (innerListItem.deleteButtonVisible ? 3 : 1)
+ width: parent.width - diveIsSelected.width - Kirigami.Units.gridUnit * (innerListItem.deleteButtonVisible ? 3 : 1)
height: childrenRect.height - Kirigami.Units.smallSpacing
Kirigami.Label {
diff --git a/qt-models/diveimportedmodel.cpp b/qt-models/diveimportedmodel.cpp
index eeb564fc8..cd54da92b 100644
--- a/qt-models/diveimportedmodel.cpp
+++ b/qt-models/diveimportedmodel.cpp
@@ -67,7 +67,7 @@ QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
// widgets access the model via index.column(), qml via role.
int column = index.column();
- if (role == DateTime || role == Duration || role == Depth) {
+ if (role >= DateTime) {
column = role - DateTime;
role = Qt::DisplayRole;
}
@@ -80,6 +80,8 @@ QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
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));
+ case 3:
+ return checkStates[index.row()];
}
}
if (role == Qt::CheckStateRole) {
@@ -92,25 +94,25 @@ QVariant DiveImportedModel::data(const QModelIndex &index, int role) const
void DiveImportedModel::changeSelected(QModelIndex clickedIndex)
{
checkStates[clickedIndex.row()] = !checkStates[clickedIndex.row()];
- dataChanged(index(clickedIndex.row(), 0), index(clickedIndex.row(), 0), QVector<int>() << Qt::CheckStateRole);
+ dataChanged(index(clickedIndex.row(), 0), index(clickedIndex.row(), 0), QVector<int>() << Qt::CheckStateRole << Selected);
}
void DiveImportedModel::selectAll()
{
memset(checkStates, true, lastIndex - firstIndex + 1);
- dataChanged(index(0, 0), index(lastIndex - firstIndex, 0), QVector<int>() << Qt::CheckStateRole);
+ dataChanged(index(0, 0), index(lastIndex - firstIndex, 0), QVector<int>() << Qt::CheckStateRole << Selected);
}
void DiveImportedModel::selectRow(int row)
{
checkStates[row] = !checkStates[row];
- dataChanged(index(row, 0), index(row, 0));
+ dataChanged(index(row, 0), index(row, 0), QVector<int>() << Qt::CheckStateRole << Selected);
}
void DiveImportedModel::selectNone()
{
memset(checkStates, false, lastIndex - firstIndex + 1);
- dataChanged(index(0, 0), index(lastIndex - firstIndex,0 ), QVector<int>() << Qt::CheckStateRole);
+ dataChanged(index(0, 0), index(lastIndex - firstIndex,0 ), QVector<int>() << Qt::CheckStateRole << Selected);
}
Qt::ItemFlags DiveImportedModel::flags(const QModelIndex &index) const
@@ -176,6 +178,7 @@ QHash<int, QByteArray> DiveImportedModel::roleNames() const {
{ DateTime, "datetime"},
{ Depth, "depth"},
{ Duration, "duration"},
+ { Selected, "selected"}
};
return roles;
}
diff --git a/qt-models/diveimportedmodel.h b/qt-models/diveimportedmodel.h
index 21674480d..3d128b074 100644
--- a/qt-models/diveimportedmodel.h
+++ b/qt-models/diveimportedmodel.h
@@ -8,7 +8,7 @@ class DiveImportedModel : public QAbstractTableModel
{
Q_OBJECT
public:
- enum roleTypes { DateTime = Qt::UserRole + 1, Duration, Depth};
+ enum roleTypes { DateTime = Qt::UserRole + 1, Duration, Depth, Selected};
DiveImportedModel(QObject *parent = 0);
void setDiveTable(struct dive_table *table);