diff options
-rw-r--r-- | core/CMakeLists.txt | 1 | ||||
-rw-r--r-- | core/settings/qPref.h | 3 | ||||
-rw-r--r-- | core/settings/qPrefDisplay.cpp | 119 | ||||
-rw-r--r-- | core/settings/qPrefDisplay.h | 55 | ||||
-rw-r--r-- | packaging/ios/Subsurface-mobile.pro | 2 |
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 \ |