mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-17 20:06:15 +00:00
core: copy Display from SettingsObjectWrapper to qPref as its own class
copy Display from SettingsObjectWrapper to qPref as its own class file. Update Display to use a common load/sync scheme. Update set/get functions to follow common name scheme: - get function have same name as in struct preferences - set function have set_<name in struct preferences> - signal function have <name in struct preferences>_changed one class one .h/.cpp is the C++ idiom. Having load/sync of each variable in 1 functions (in contrast to the distributed way SettingsObjectWrapper handles it) secures the same storage name is used. Having the set/get/load/sync functions grouped together makes it easier to get an overview. REMARK: this commit are made to show the use of the low level LOADSYNC macros, which will be used for special cases. This class is NOT linked into the live system. Signed-off-by: Jan Iversen <jani@apache.org>
This commit is contained in:
parent
55c3afc075
commit
e5dace2233
5 changed files with 180 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
119
core/settings/qPrefDisplay.cpp
Normal file
119
core/settings/qPrefDisplay.cpp
Normal file
|
@ -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);
|
||||
}
|
55
core/settings/qPrefDisplay.h
Normal file
55
core/settings/qPrefDisplay.h
Normal file
|
@ -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
|
|
@ -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 \
|
||||
|
|
Loading…
Add table
Reference in a new issue