2020-07-28 21:14:38 +08:00
|
|
|
#include "settings.h"
|
|
|
|
|
|
|
|
#include <QApplication>
|
|
|
|
#include <QStandardPaths>
|
|
|
|
#include <QDebug>
|
|
|
|
#include <QDir>
|
|
|
|
|
|
|
|
Settings *Settings::m_settings_instance = nullptr;
|
|
|
|
|
|
|
|
Settings *Settings::instance()
|
|
|
|
{
|
|
|
|
if (!m_settings_instance) {
|
|
|
|
m_settings_instance = new Settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
return m_settings_instance;
|
|
|
|
}
|
|
|
|
|
2020-07-29 00:57:43 +08:00
|
|
|
bool Settings::stayOnTop()
|
2020-07-28 21:14:38 +08:00
|
|
|
{
|
2020-07-29 00:57:43 +08:00
|
|
|
return m_qsettings->value("stay_on_top", true).toBool();
|
2020-07-28 21:14:38 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
DoubleClickBehavior Settings::doubleClickBehavior()
|
|
|
|
{
|
|
|
|
QString result = m_qsettings->value("double_click_behavior", "close").toString().toLower();
|
|
|
|
|
|
|
|
return stringToDoubleClickBehavior(result);
|
|
|
|
}
|
|
|
|
|
2021-01-24 00:07:58 +08:00
|
|
|
MouseWheelBehavior Settings::mouseWheelBehavior()
|
|
|
|
{
|
|
|
|
QString result = m_qsettings->value("mouse_wheel_behavior", "close").toString().toLower();
|
|
|
|
|
|
|
|
return stringToMouseWheelBehavior(result);
|
|
|
|
}
|
|
|
|
|
2020-07-29 00:57:43 +08:00
|
|
|
void Settings::setStayOnTop(bool on)
|
|
|
|
{
|
|
|
|
m_qsettings->setValue("stay_on_top", on);
|
|
|
|
m_qsettings->sync();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Settings::setDoubleClickBehavior(DoubleClickBehavior dcb)
|
|
|
|
{
|
|
|
|
m_qsettings->setValue("double_click_behavior", doubleClickBehaviorToString(dcb));
|
|
|
|
m_qsettings->sync();
|
|
|
|
}
|
|
|
|
|
2021-01-24 00:07:58 +08:00
|
|
|
void Settings::setMouseWheelBehavior(MouseWheelBehavior mwb)
|
|
|
|
{
|
|
|
|
m_qsettings->setValue("mouse_wheel_behavior", mouseWheelBehaviorToString(mwb));
|
|
|
|
m_qsettings->sync();
|
|
|
|
}
|
|
|
|
|
2020-07-28 21:14:38 +08:00
|
|
|
QString Settings::doubleClickBehaviorToString(DoubleClickBehavior dcb)
|
|
|
|
{
|
|
|
|
static QMap<DoubleClickBehavior, QString> _map {
|
|
|
|
{ActionCloseWindow, "close"},
|
|
|
|
{ActionMaximizeWindow, "maximize"},
|
|
|
|
{ActionDoNothing, "ignore"}
|
|
|
|
};
|
|
|
|
|
|
|
|
return _map.value(dcb, "close");
|
|
|
|
}
|
|
|
|
|
2021-01-24 00:07:58 +08:00
|
|
|
QString Settings::mouseWheelBehaviorToString(MouseWheelBehavior mwb)
|
|
|
|
{
|
|
|
|
static QMap<MouseWheelBehavior, QString> _map {
|
|
|
|
{ActionZoomImage, "zoom"},
|
|
|
|
{ActionPrevNextImage, "switch"}
|
|
|
|
};
|
|
|
|
|
|
|
|
return _map.value(mwb, "zoom");
|
|
|
|
}
|
|
|
|
|
2020-07-28 21:14:38 +08:00
|
|
|
DoubleClickBehavior Settings::stringToDoubleClickBehavior(QString str)
|
|
|
|
{
|
|
|
|
static QMap<QString, DoubleClickBehavior> _map {
|
|
|
|
{"close", ActionCloseWindow},
|
|
|
|
{"maximize", ActionMaximizeWindow},
|
|
|
|
{"ignore", ActionDoNothing}
|
|
|
|
};
|
|
|
|
|
|
|
|
return _map.value(str, ActionCloseWindow);
|
|
|
|
}
|
|
|
|
|
2021-01-24 00:07:58 +08:00
|
|
|
MouseWheelBehavior Settings::stringToMouseWheelBehavior(QString str)
|
|
|
|
{
|
|
|
|
static QMap<QString, MouseWheelBehavior> _map {
|
|
|
|
{"zoom", ActionZoomImage},
|
|
|
|
{"switch", ActionPrevNextImage}
|
|
|
|
};
|
|
|
|
|
|
|
|
return _map.value(str, ActionZoomImage);
|
|
|
|
}
|
|
|
|
|
2020-07-28 21:14:38 +08:00
|
|
|
Settings::Settings()
|
|
|
|
: QObject(qApp)
|
|
|
|
{
|
|
|
|
QString configPath;
|
|
|
|
|
2020-08-10 23:41:59 +08:00
|
|
|
#ifdef FLAG_PORTABLE_MODE_SUPPORT
|
2020-07-28 21:14:38 +08:00
|
|
|
QString portableConfigDirPath = QDir(QCoreApplication::applicationDirPath()).absoluteFilePath("data");
|
|
|
|
QFileInfo portableConfigDirInfo(portableConfigDirPath);
|
|
|
|
if (portableConfigDirInfo.exists() && portableConfigDirInfo.isDir() && portableConfigDirInfo.isWritable()) {
|
|
|
|
// we can use it.
|
|
|
|
configPath = portableConfigDirPath;
|
|
|
|
}
|
2020-08-10 23:41:59 +08:00
|
|
|
#endif // FLAG_PORTABLE_MODE_SUPPORT
|
2020-07-28 21:14:38 +08:00
|
|
|
|
|
|
|
// %LOCALAPPDATA% under Windows.
|
|
|
|
if (configPath.isEmpty()) {
|
|
|
|
configPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
|
|
|
|
}
|
|
|
|
|
|
|
|
m_qsettings = new QSettings(QDir(configPath).absoluteFilePath("config.ini"), QSettings::IniFormat, this);
|
|
|
|
}
|
|
|
|
|