mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
141 lines
3.8 KiB
C++
141 lines
3.8 KiB
C++
#include "coreconfig.h"
|
|
|
|
#include <QMetaEnum>
|
|
#include <QLocale>
|
|
|
|
using namespace vnotex;
|
|
|
|
#define READSTR(key) readString(appObj, userObj, (key))
|
|
#define READINT(key) readInt(appObj, userObj, (key))
|
|
#define READBOOL(key) readBool(appObj, userObj, (key))
|
|
|
|
QStringList CoreConfig::s_availableLocales;
|
|
|
|
CoreConfig::CoreConfig(ConfigMgr *p_mgr, IConfig *p_topConfig)
|
|
: IConfig(p_mgr, p_topConfig)
|
|
{
|
|
m_sessionName = QStringLiteral("core");
|
|
}
|
|
|
|
const QString &CoreConfig::getTheme() const
|
|
{
|
|
return m_theme;
|
|
}
|
|
|
|
void CoreConfig::init(const QJsonObject &p_app,
|
|
const QJsonObject &p_user)
|
|
{
|
|
const auto appObj = p_app.value(m_sessionName).toObject();
|
|
const auto userObj = p_user.value(m_sessionName).toObject();
|
|
|
|
m_theme = READSTR(QStringLiteral("theme"));
|
|
|
|
m_locale = READSTR(QStringLiteral("locale"));
|
|
if (!m_locale.isEmpty() && !getAvailableLocales().contains(m_locale)) {
|
|
m_locale = QStringLiteral("en_US");
|
|
}
|
|
|
|
loadShortcuts(appObj, userObj);
|
|
|
|
m_toolBarIconSize = READINT(QStringLiteral("toolbar_icon_size"));
|
|
if (m_toolBarIconSize <= 0) {
|
|
m_toolBarIconSize = 16;
|
|
}
|
|
|
|
if (!isUndefinedKey(appObj, userObj, "minimize_to_system_tray")) {
|
|
m_minimizeToSystemTray = READBOOL(QStringLiteral("minimize_to_system_tray")) ? 1 : 0;
|
|
}
|
|
}
|
|
|
|
QJsonObject CoreConfig::toJson() const
|
|
{
|
|
QJsonObject obj;
|
|
obj[QStringLiteral("theme")] = m_theme;
|
|
obj[QStringLiteral("locale")] = m_locale;
|
|
obj[QStringLiteral("shortcuts")] = saveShortcuts();
|
|
obj[QStringLiteral("toolbar_icon_size")] = m_toolBarIconSize;
|
|
if (m_minimizeToSystemTray != -1) {
|
|
obj[QStringLiteral("minimize_to_system_tray")] = m_minimizeToSystemTray > 0;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
const QString &CoreConfig::getLocale() const
|
|
{
|
|
return m_locale;
|
|
}
|
|
|
|
void CoreConfig::setLocale(const QString &p_locale)
|
|
{
|
|
updateConfig(m_locale,
|
|
p_locale,
|
|
this);
|
|
}
|
|
|
|
QString CoreConfig::getLocaleToUse() const
|
|
{
|
|
return QLocale().name();
|
|
}
|
|
|
|
const QStringList &CoreConfig::getAvailableLocales()
|
|
{
|
|
if (s_availableLocales.isEmpty()) {
|
|
s_availableLocales << QStringLiteral("en_US");
|
|
s_availableLocales << QStringLiteral("zh_CN");
|
|
}
|
|
|
|
return s_availableLocales;
|
|
}
|
|
|
|
void CoreConfig::loadShortcuts(const QJsonObject &p_app, const QJsonObject &p_user)
|
|
{
|
|
const auto appObj = p_app.value(QStringLiteral("shortcuts")).toObject();
|
|
const auto userObj = p_user.value(QStringLiteral("shortcuts")).toObject();
|
|
|
|
static const auto indexOfShortcutEnum = CoreConfig::staticMetaObject.indexOfEnumerator("Shortcut");
|
|
Q_ASSERT(indexOfShortcutEnum >= 0);
|
|
const auto metaEnum = CoreConfig::staticMetaObject.enumerator(indexOfShortcutEnum);
|
|
// Skip the Max flag.
|
|
for (int i = 0; i < metaEnum.keyCount() - 1; ++i) {
|
|
m_shortcuts[i] = READSTR(metaEnum.key(i));
|
|
}
|
|
}
|
|
|
|
QJsonObject CoreConfig::saveShortcuts() const
|
|
{
|
|
QJsonObject obj;
|
|
static const auto indexOfShortcutEnum = CoreConfig::staticMetaObject.indexOfEnumerator("Shortcut");
|
|
Q_ASSERT(indexOfShortcutEnum >= 0);
|
|
const auto metaEnum = CoreConfig::staticMetaObject.enumerator(indexOfShortcutEnum);
|
|
// Skip the Max flag.
|
|
for (int i = 0; i < metaEnum.keyCount() - 1; ++i) {
|
|
obj[metaEnum.key(i)] = m_shortcuts[i];
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
const QString &CoreConfig::getShortcut(Shortcut p_shortcut) const
|
|
{
|
|
Q_ASSERT(p_shortcut < Shortcut::MaxShortcut);
|
|
return m_shortcuts[p_shortcut];
|
|
}
|
|
|
|
int CoreConfig::getToolBarIconSize() const
|
|
{
|
|
return m_toolBarIconSize;
|
|
}
|
|
|
|
void CoreConfig::setToolBarIconSize(int p_size)
|
|
{
|
|
Q_ASSERT(p_size > 0);
|
|
updateConfig(m_toolBarIconSize, p_size, this);
|
|
}
|
|
|
|
int CoreConfig::getMinimizeToSystemTray() const {
|
|
return m_minimizeToSystemTray;
|
|
}
|
|
|
|
void CoreConfig::setMinimizeToSystemTray(bool state){
|
|
updateConfig(m_minimizeToSystemTray, int(state), this);
|
|
}
|