summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/CMakeLists.txt1
-rw-r--r--core/settings/qPref.h3
-rw-r--r--core/settings/qPrefDisplay.cpp119
-rw-r--r--core/settings/qPrefDisplay.h55
-rw-r--r--packaging/ios/Subsurface-mobile.pro2
5 files changed, 180 insertions, 0 deletions
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index 694108b1c..67f0623a7 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -100,6 +100,7 @@ set(SUBSURFACE_CORE_LIB_SRCS
# classes to manage struct preferences for QWidget and QML
settings/qPref.cpp
+ settings/qPrefDisplay.cpp
#Subsurface Qt have the Subsurface structs QObjectified for easy access via QML.
subsurface-qt/DiveObjectHelper.cpp
diff --git a/core/settings/qPref.h b/core/settings/qPref.h
index f312f328a..002f66608 100644
--- a/core/settings/qPref.h
+++ b/core/settings/qPref.h
@@ -3,8 +3,11 @@
#define QPREF_H
#include <QObject>
+#include <QSettings>
#include "core/pref.h"
+#include "qPrefDisplay.h"
+
class qPref : public QObject {
Q_OBJECT
Q_ENUMS(cloud_status);
diff --git a/core/settings/qPrefDisplay.cpp b/core/settings/qPrefDisplay.cpp
new file mode 100644
index 000000000..e651eb937
--- /dev/null
+++ b/core/settings/qPrefDisplay.cpp
@@ -0,0 +1,119 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "qPref.h"
+#include "qPref_private.h"
+#include "core/subsurface-string.h"
+
+#include <QApplication>
+#include <QFont>
+
+qPrefDisplay::qPrefDisplay(QObject *parent) : QObject(parent)
+{
+}
+qPrefDisplay *qPrefDisplay::instance()
+{
+ static qPrefDisplay *self = new qPrefDisplay;
+ return self;
+}
+
+void qPrefDisplay::loadSync(bool doSync)
+{
+ disk_divelist_font(doSync);
+ disk_font_size(doSync);
+ disk_display_invalid_dives(doSync);
+ disk_show_developer(doSync);
+ disk_theme(doSync);
+}
+
+const QString qPrefDisplay::divelist_font() const
+{
+ return prefs.divelist_font;
+}
+void qPrefDisplay::set_divelist_font(const QString& value)
+{
+ QString newValue = value;
+ if (value.contains(","))
+ newValue = value.left(value.indexOf(","));
+
+ if (newValue != prefs.divelist_font &&
+ !subsurface_ignore_font(qPrintable(newValue))) {
+ COPY_TXT(divelist_font, value);
+ qApp->setFont(QFont(newValue));
+ disk_divelist_font(true);
+ emit divelist_font_changed(value);
+ }
+}
+void qPrefDisplay::disk_divelist_font(bool doSync)
+{
+ LOADSYNC_TXT("/divelist_font", divelist_font);
+}
+
+double qPrefDisplay::font_size() const
+{
+ return prefs.font_size;
+}
+void qPrefDisplay::set_font_size(double value)
+{
+ if (value != prefs.font_size) {
+ prefs.font_size = value;
+ QFont defaultFont = qApp->font();
+ defaultFont.setPointSizeF(prefs.font_size);
+ qApp->setFont(defaultFont);
+ disk_font_size(true);
+ emit font_size_changed(value);
+ }
+}
+void qPrefDisplay::disk_font_size(bool doSync)
+{
+ LOADSYNC_DOUBLE("/font_size", font_size);
+}
+
+bool qPrefDisplay::display_invalid_dives() const
+{
+ return prefs.display_invalid_dives;
+}
+void qPrefDisplay::set_display_invalid_dives(bool value)
+{
+ if (value != prefs.display_invalid_dives) {
+ prefs.display_invalid_dives = value;
+ disk_display_invalid_dives(true);
+ emit display_invalid_dives_changed(value);
+ }
+}
+void qPrefDisplay::disk_display_invalid_dives(bool doSync)
+{
+ LOADSYNC_BOOL("/displayinvalid", display_invalid_dives);
+}
+
+bool qPrefDisplay::show_developer() const
+{
+ return prefs.show_developer;
+}
+void qPrefDisplay::set_show_developer(bool value)
+{
+ if (value != prefs.show_developer) {
+ prefs.show_developer = value;
+ disk_show_developer(true);
+ emit disk_show_developer(value);
+ }
+}
+void qPrefDisplay::disk_show_developer(bool doSync)
+{
+ LOADSYNC_BOOL("/showDeveloper", show_developer);
+}
+
+const QString qPrefDisplay::theme() const
+{
+ return prefs.theme;
+}
+void qPrefDisplay::set_theme(const QString& value)
+{
+ if (value != prefs.theme) {
+ COPY_TXT(theme, value);
+ disk_theme(true);
+ emit theme_changed(value);
+ }
+}
+void qPrefDisplay::disk_theme(bool doSync)
+{
+ LOADSYNC_TXT("/theme", theme);
+}
diff --git a/core/settings/qPrefDisplay.h b/core/settings/qPrefDisplay.h
new file mode 100644
index 000000000..6448e0115
--- /dev/null
+++ b/core/settings/qPrefDisplay.h
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef QPREFDISPLAY_H
+#define QPREFDISPLAY_H
+
+#include <QObject>
+#include <QSettings>
+
+class qPrefDisplay : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QString divelist_font READ divelist_font WRITE set_divelist_font NOTIFY divelist_font_changed);
+ Q_PROPERTY(double font_size READ font_size WRITE set_font_size NOTIFY font_size_changed);
+ Q_PROPERTY(bool display_invalid_dives READ display_invalid_dives WRITE set_display_invalid_dives NOTIFY display_invalid_dives_changed);
+ Q_PROPERTY(bool show_developer READ show_developer WRITE set_show_developer NOTIFY show_developer_changed);
+ Q_PROPERTY(QString theme READ theme WRITE set_theme NOTIFY theme_changed);
+
+public:
+ qPrefDisplay(QObject *parent = NULL);
+ static qPrefDisplay *instance();
+
+ // Load/Sync local settings (disk) and struct preference
+ void loadSync(bool doSync);
+
+public:
+ const QString divelist_font() const;
+ double font_size() const;
+ bool display_invalid_dives() const;
+ bool show_developer() const;
+ const QString theme() const;
+
+public slots:
+ void set_divelist_font(const QString& value);
+ void set_font_size(double value);
+ void set_display_invalid_dives(bool value);
+ void set_show_developer(bool value);
+ void set_theme(const QString& value);
+
+signals:
+ void divelist_font_changed(const QString& value);
+ void font_size_changed(double value);
+ void display_invalid_dives_changed(bool value);
+ void show_developer_changed(bool value);
+ void theme_changed(const QString& value);
+
+private:
+ const QString group = QStringLiteral("Display");
+ QSettings setting;
+
+ // functions to load/sync variable with disk
+ void disk_divelist_font(bool doSync);
+ void disk_font_size(bool doSync);
+ void disk_display_invalid_dives(bool doSync);
+ void disk_show_developer(bool doSync);
+ void disk_theme(bool doSync);
+};
+#endif
diff --git a/packaging/ios/Subsurface-mobile.pro b/packaging/ios/Subsurface-mobile.pro
index f42ce23be..5b9313598 100644
--- a/packaging/ios/Subsurface-mobile.pro
+++ b/packaging/ios/Subsurface-mobile.pro
@@ -78,6 +78,7 @@ SOURCES += ../../subsurface-mobile-main.cpp \
../../core/connectionlistmodel.cpp \
../../core/qt-ble.cpp \
../../core/settings/qPref.cpp \
+ ../../core/settings/qPrefDisplay.cpp \
../../core/subsurface-qt/CylinderObjectHelper.cpp \
../../core/subsurface-qt/DiveObjectHelper.cpp \
../../core/subsurface-qt/SettingsObjectWrapper.cpp \
@@ -185,6 +186,7 @@ HEADERS += \
../../core/connectionlistmodel.h \
../../core/qt-ble.h \
../../core/settings/qPref.h \
+ ../../core/settings/qPrefDisplay.h \
../../core/settings/qPref_private.h \
../../core/subsurface-qt/CylinderObjectHelper.h \
../../core/subsurface-qt/DiveObjectHelper.h \