diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-09-28 23:31:40 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-10-04 09:19:10 -0700 |
commit | 3db50aedeaea94b7395fe6fcdb56bda9bee2f2cb (patch) | |
tree | ff4de197788d1122bba31f8d5cea67357a6ff3df | |
parent | 2a9a3dda20c47e74746fbfa3c6e5fd9ee919b2b3 (diff) | |
download | subsurface-3db50aedeaea94b7395fe6fcdb56bda9bee2f2cb.tar.gz |
Cleanup: Turn DiveListSortModel into classical singleton
To make this class available from QMLManager, the run_ui()
function would create the object and then set a pointer in
QMLManager. It works, but is inconsistent with the rest of
the code. Therefore, make it a classical singleton class,
which is generated on demand.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | mobile-widgets/qmlmanager.cpp | 4 | ||||
-rw-r--r-- | qt-models/divelistmodel.cpp | 8 | ||||
-rw-r--r-- | qt-models/divelistmodel.h | 3 | ||||
-rw-r--r-- | subsurface-helper.cpp | 4 |
4 files changed, 12 insertions, 7 deletions
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index fcb25e4a5..f6c182a55 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -825,7 +825,7 @@ void QMLManager::consumeFinishedLoad(timestamp_t currentDiveTimestamp) process_loaded_dives(); DiveListModel::instance()->reload(); if (currentDiveTimestamp) - setUpdateSelectedDive(dlSortModel->getIdxForId(get_dive_id_closest_to(currentDiveTimestamp))); + setUpdateSelectedDive(DiveListSortModel::instance()->getIdxForId(get_dive_id_closest_to(currentDiveTimestamp))); appendTextToLog(QStringLiteral("%1 dives loaded").arg(dive_table.nr)); if (dive_table.nr == 0) setStartPageText(tr("Cloud storage open successfully. No dives in dive list.")); @@ -2056,7 +2056,7 @@ void QMLManager::setFilter(const QString filterText) QMetaObject::invokeMethod(qmlWindow, "showBusy"); QtConcurrent::run(QThreadPool::globalInstance(), [=]{ - dlSortModel->setFilter(filterText); + DiveListSortModel::instance()->setFilter(filterText); QMetaObject::invokeMethod(qmlWindow, "hideBusy"); }); } diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp index 6d94b09c9..d3c4e3ce2 100644 --- a/qt-models/divelistmodel.cpp +++ b/qt-models/divelistmodel.cpp @@ -6,7 +6,7 @@ #include "core/ssrf.h" // for LOG_STP #include <QDateTime> -DiveListSortModel::DiveListSortModel(QObject *parent) : QSortFilterProxyModel(parent) +DiveListSortModel::DiveListSortModel() { setSourceModel(DiveListModel::instance()); setDynamicSortFilter(true); @@ -16,6 +16,12 @@ DiveListSortModel::DiveListSortModel(QObject *parent) : QSortFilterProxyModel(pa LOG_STP("run_ui diveListModel sorted"); } +DiveListSortModel *DiveListSortModel::instance() +{ + static DiveListSortModel self; + return &self; +} + void DiveListSortModel::updateFilterState() { if (filterString.isEmpty()) { diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h index 87c5bb254..e7fb5369c 100644 --- a/qt-models/divelistmodel.h +++ b/qt-models/divelistmodel.h @@ -11,7 +11,8 @@ class DiveListSortModel : public QSortFilterProxyModel { Q_OBJECT public: - DiveListSortModel(QObject *parent = 0); + DiveListSortModel(); + static DiveListSortModel *instance(); void setSourceModel(QAbstractItemModel *sourceModel); Q_INVOKABLE void reload(); Q_INVOKABLE QString tripTitle(const QString &trip); diff --git a/subsurface-helper.cpp b/subsurface-helper.cpp index 26e58ece9..c389e2099 100644 --- a/subsurface-helper.cpp +++ b/subsurface-helper.cpp @@ -96,14 +96,13 @@ void run_ui() qDebug() << "QML import path" << engine.importPathList(); #endif // __APPLE__ not Q_OS_IOS engine.addImportPath("qrc://imports"); - DiveListSortModel *sortModel = new DiveListSortModel(0); QSortFilterProxyModel *gpsSortModel = new QSortFilterProxyModel(nullptr); gpsSortModel->setSourceModel(GpsListModel::instance()); gpsSortModel->setDynamicSortFilter(true); gpsSortModel->setSortRole(GpsListModel::GpsWhenRole); gpsSortModel->sort(0, Qt::DescendingOrder); QQmlContext *ctxt = engine.rootContext(); - ctxt->setContextProperty("diveModel", sortModel); + ctxt->setContextProperty("diveModel", DiveListSortModel::instance()); ctxt->setContextProperty("gpsModel", gpsSortModel); ctxt->setContextProperty("vendorList", vendorList); set_non_bt_addresses(); @@ -135,7 +134,6 @@ void run_ui() LOG_STP("run_ui show_computer_list"); manager->setDevicePixelRatio(qml_window->devicePixelRatio(), qml_window->screen()); - manager->dlSortModel = sortModel; manager->qmlWindow = qqWindowObject; manager->screenChanged(screen); qDebug() << "qqwindow screen has ldpi/pdpi" << screen->logicalDotsPerInch() << screen->physicalDotsPerInch(); |