summaryrefslogtreecommitdiffstats
path: root/qt-models
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-09-22 14:33:33 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-09-25 13:35:30 -0700
commit05200f9266a4e8e723450abb281c597a48da2e9f (patch)
tree670d7b30f4b77f40e35253243f95fb219d5c7aea /qt-models
parentf20d6187f0135ef3cf7f583785be65012336a99d (diff)
downloadsubsurface-05200f9266a4e8e723450abb281c597a48da2e9f.tar.gz
Cleanup: unify idiosyncratic singletons
The way we handle singletons in QML, QML insists on allocating the objects. This leads to a very idiosyncratic way of handling singletons: The global instance pointer is set in the constructor. Unify all these by implementing a "SillySingleton" template. All of the weird singleton-classes can derive from this template and don't have to bother with reimplementing the instance() function with all the safety-checks, etc. This serves firstly as documentation but also improves debugging as we will now see wanted and unwanted creation and destruction of these weird singletons. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models')
-rw-r--r--qt-models/divelistmodel.cpp8
-rw-r--r--qt-models/divelistmodel.h6
-rw-r--r--qt-models/gpslistmodel.cpp9
-rw-r--r--qt-models/gpslistmodel.h6
4 files changed, 4 insertions, 25 deletions
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp
index 779e695ab..e2fddbf83 100644
--- a/qt-models/divelistmodel.cpp
+++ b/qt-models/divelistmodel.cpp
@@ -134,11 +134,8 @@ QString DiveListSortModel::tripShortDate(const QString &section)
return QStringLiteral("%1\n'%2").arg(firstMonth,firstTime.toString("yy"));
}
-DiveListModel *DiveListModel::m_instance = NULL;
-
DiveListModel::DiveListModel(QObject *parent) : QAbstractListModel(parent)
{
- m_instance = this;
}
void DiveListModel::insertDive(int i)
@@ -274,11 +271,6 @@ QString DiveListModel::startAddDive()
return QString::number(d->id);
}
-DiveListModel *DiveListModel::instance()
-{
- return m_instance;
-}
-
struct dive *DiveListModel::getDive(int i)
{
if (i < 0 || i >= dive_table.nr) {
diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h
index d6eb07463..cccece51d 100644
--- a/qt-models/divelistmodel.h
+++ b/qt-models/divelistmodel.h
@@ -6,6 +6,7 @@
#include <QSortFilterProxyModel>
#include "core/subsurface-qt/DiveObjectHelper.h"
+#include "core/singleton.h"
class DiveListSortModel : public QSortFilterProxyModel
{
@@ -28,7 +29,7 @@ private:
void updateFilterState();
};
-class DiveListModel : public QAbstractListModel
+class DiveListModel : public QAbstractListModel, public SillySingleton<DiveListModel>
{
Q_OBJECT
public:
@@ -45,7 +46,6 @@ public:
DepthDurationRole,
};
- static DiveListModel *instance();
DiveListModel(QObject *parent = 0);
void addDive(const QList<dive *> &listOfDives);
void addAllDives();
@@ -63,8 +63,6 @@ public:
QString startAddDive();
void resetInternalData();
Q_INVOKABLE DiveObjectHelper at(int i);
-private:
- static DiveListModel *m_instance;
};
#endif // DIVELISTMODEL_H
diff --git a/qt-models/gpslistmodel.cpp b/qt-models/gpslistmodel.cpp
index 8d874d67b..8a623bf00 100644
--- a/qt-models/gpslistmodel.cpp
+++ b/qt-models/gpslistmodel.cpp
@@ -3,11 +3,8 @@
#include "core/qthelper.h"
#include <QVector>
-GpsListModel *GpsListModel::m_instance = NULL;
-
GpsListModel::GpsListModel(QObject *parent) : QAbstractListModel(parent)
{
- m_instance = this;
}
void GpsListModel::update()
@@ -62,9 +59,3 @@ QHash<int, QByteArray> GpsListModel::roleNames() const
roles[GpsLongitudeRole] = "longitude";
return roles;
}
-
-GpsListModel *GpsListModel::instance()
-{
- return m_instance;
-}
-
diff --git a/qt-models/gpslistmodel.h b/qt-models/gpslistmodel.h
index a1c82e5d6..14145d065 100644
--- a/qt-models/gpslistmodel.h
+++ b/qt-models/gpslistmodel.h
@@ -3,10 +3,10 @@
#define GPSLISTMODEL_H
#include "core/gpslocation.h"
-#include <QObject>
+#include "core/singleton.h"
#include <QAbstractListModel>
-class GpsListModel : public QAbstractListModel
+class GpsListModel : public QAbstractListModel, public SillySingleton<GpsListModel>
{
Q_OBJECT
public:
@@ -19,7 +19,6 @@ public:
GpsWhenRole
};
- static GpsListModel *instance();
GpsListModel(QObject *parent = 0);
void clear();
int rowCount(const QModelIndex &parent = QModelIndex()) const;
@@ -28,7 +27,6 @@ public:
void update();
private:
QVector<gpsTracker> m_gpsFixes;
- static GpsListModel *m_instance;
};
#endif // GPSLISTMODEL_H