summaryrefslogtreecommitdiffstats
path: root/qt-models
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-05 21:17:37 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-05 21:17:37 -0700
commit1634c62b9a156b59faab4ed89d64c359ba0580f2 (patch)
treeeda73fe7126132f586ef839a110e62b824d65dcc /qt-models
parentf16a3a1709be50cb2ed4f4ca0e1e9bb5217cc25f (diff)
downloadsubsurface-1634c62b9a156b59faab4ed89d64c359ba0580f2.tar.gz
DiveListModel: don't add the dives one at a time
Most of the time we are adding all the dives, so do this in a single model operation. This makes the case when adding a single dive (in the undo delete function) slightly more complicated, but that seems totally worth it for the speedup in the common case. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models')
-rw-r--r--qt-models/divelistmodel.cpp21
-rw-r--r--qt-models/divelistmodel.h3
2 files changed, 20 insertions, 4 deletions
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp
index 79d770853..f0c726fae 100644
--- a/qt-models/divelistmodel.cpp
+++ b/qt-models/divelistmodel.cpp
@@ -31,13 +31,28 @@ DiveListModel::DiveListModel(QObject *parent) : QAbstractListModel(parent)
m_instance = this;
}
-void DiveListModel::addDive(dive *d)
+void DiveListModel::addDive(QList<dive *>listOfDives)
{
- beginInsertRows(QModelIndex(), rowCount(), rowCount());
- m_dives.append(new DiveObjectHelper(d));
+ if (listOfDives.isEmpty())
+ return;
+ beginInsertRows(QModelIndex(), rowCount(), rowCount() + listOfDives.count() - 1);
+ foreach (dive *d, listOfDives) {
+ m_dives.append(new DiveObjectHelper(d));
+ }
endInsertRows();
}
+void DiveListModel::addAllDives()
+{
+ QList<dive *>listOfDives;
+ int i;
+ struct dive *d;
+ for_each_dive (i, d)
+ listOfDives.append(d);
+ addDive(listOfDives);
+
+}
+
void DiveListModel::insertDive(int i, DiveObjectHelper *newDive)
{
beginInsertRows(QModelIndex(), i, i);
diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h
index 39c3497b9..05514ecba 100644
--- a/qt-models/divelistmodel.h
+++ b/qt-models/divelistmodel.h
@@ -30,7 +30,8 @@ public:
static DiveListModel *instance();
DiveListModel(QObject *parent = 0);
- void addDive(dive *d);
+ void addDive(QList<dive *> listOfDives);
+ void addAllDives();
void insertDive(int i, DiveObjectHelper *newDive);
void removeDive(int i);
void removeDiveById(int id);