mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
87d8963c78
Add static and inline to getter in all qPref header files Remove call to GET_PREFERENCE_* in qPrefDisplay.cpp static inline is slightly faster than a function call, but it saves a lot of coding lines (no lines in qPref*.cpp). Getters are a direct reference to struct preferences, so they will normally only be used from QML. Signed-off-by: Jan Iversen <jani@apache.org>
107 lines
2.8 KiB
C++
107 lines
2.8 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#include "qPref.h"
|
|
#include "qPrefPrivate.h"
|
|
#include "core/subsurface-string.h"
|
|
|
|
#include <QApplication>
|
|
#include <QFont>
|
|
|
|
static const QString group = QStringLiteral("Display");
|
|
|
|
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);
|
|
}
|
|
|
|
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))) {
|
|
qPrefPrivate::copy_txt(&prefs.divelist_font, value);
|
|
disk_divelist_font(true);
|
|
|
|
qApp->setFont(QFont(newValue));
|
|
emit divelist_font_changed(value);
|
|
}
|
|
}
|
|
void qPrefDisplay::disk_divelist_font(bool doSync)
|
|
{
|
|
if (doSync)
|
|
LOADSYNC_TXT("/divelist_font", divelist_font)
|
|
else
|
|
setCorrectFont();
|
|
}
|
|
|
|
void qPrefDisplay::set_font_size(double value)
|
|
{
|
|
if (value != prefs.font_size) {
|
|
prefs.font_size = value;
|
|
disk_font_size(true);
|
|
|
|
QFont defaultFont = qApp->font();
|
|
defaultFont.setPointSizeF(prefs.font_size);
|
|
qApp->setFont(defaultFont);
|
|
emit font_size_changed(value);
|
|
}
|
|
}
|
|
void qPrefDisplay::disk_font_size(bool doSync)
|
|
{
|
|
if (doSync)
|
|
LOADSYNC_DOUBLE("/font_size", font_size)
|
|
else
|
|
setCorrectFont();
|
|
}
|
|
|
|
HANDLE_PREFERENCE_BOOL(Display, "/displayinvalid", display_invalid_dives);
|
|
|
|
HANDLE_PREFERENCE_BOOL(Display, "/show_developer", show_developer);
|
|
|
|
HANDLE_PREFERENCE_TXT(Display, "/theme", theme);
|
|
|
|
|
|
void qPrefDisplay::setCorrectFont()
|
|
{
|
|
bool doSync = false;
|
|
QSettings s;
|
|
QVariant v;
|
|
|
|
// get the font from the settings or our defaults
|
|
// respect the system default font size if none is explicitly set
|
|
QFont defaultFont = s.value(group + "/divelist_font", prefs.divelist_font).value<QFont>();
|
|
if (IS_FP_SAME(system_divelist_default_font_size, -1.0)) {
|
|
prefs.font_size = qApp->font().pointSizeF();
|
|
system_divelist_default_font_size = prefs.font_size; // this way we don't save it on exit
|
|
}
|
|
|
|
prefs.font_size = s.value(group + "/font_size", prefs.font_size).toFloat();
|
|
// painful effort to ignore previous default fonts on Windows - ridiculous
|
|
QString fontName = defaultFont.toString();
|
|
if (fontName.contains(","))
|
|
fontName = fontName.left(fontName.indexOf(","));
|
|
if (subsurface_ignore_font(qPrintable(fontName))) {
|
|
defaultFont = QFont(prefs.divelist_font);
|
|
} else {
|
|
free((void *)prefs.divelist_font);
|
|
prefs.divelist_font = copy_qstring(fontName);
|
|
}
|
|
defaultFont.setPointSizeF(prefs.font_size);
|
|
qApp->setFont(defaultFont);
|
|
LOADSYNC_BOOL("/displayinvalid", display_invalid_dives);
|
|
}
|