summaryrefslogtreecommitdiff
path: root/src/settings.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-03 01:55:21 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-04 06:09:48 -0400
commit07f1ac7a96dcf4c91a24bb1d30af92851ecda78f (patch)
tree727eaf6332d7f63a316e5d408d30272f85e702d9 /src/settings.cpp
parentb6b01a52db1877b16531137289641fb9be9833aa (diff)
split into GeometrySettings
removed most of storeSettings() from OrganizerCore: QSettings handles saving by itself, no need for that removed topLevelSplitter from ui, unused since the log widget is in a dock removed QSettings from MainWindow::readSettings() replaced return values for some of the new getters in Settings to std::optional
Diffstat (limited to 'src/settings.cpp')
-rw-r--r--src/settings.cpp180
1 files changed, 165 insertions, 15 deletions
diff --git a/src/settings.cpp b/src/settings.cpp
index 5d103267..d843a0db 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -26,10 +26,56 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
using namespace MOBase;
+template <class T>
+T convertVariant(const QVariant& v);
+
+template <>
+QByteArray convertVariant<QByteArray>(const QVariant& v)
+{
+ return v.toByteArray();
+}
+
+template <>
+QString convertVariant<QString>(const QVariant& v)
+{
+ return v.toString();
+}
+
+template <>
+int convertVariant<int>(const QVariant& v)
+{
+ return v.toInt();
+}
+
+template <>
+bool convertVariant<bool>(const QVariant& v)
+{
+ return v.toBool();
+}
+
+template <>
+QSize convertVariant<QSize>(const QVariant& v)
+{
+ return v.toSize();
+}
+
+
+
+template <class T>
+std::optional<T> getOptional(const QSettings& s, const QString& name)
+{
+ if (s.contains(name)) {
+ return convertVariant<T>(s.value(name));
+ }
+
+ return {};
+}
+
+
Settings *Settings::s_Instance = nullptr;
Settings::Settings(const QString& path)
- : m_Settings(path, QSettings::IniFormat)
+ : m_Settings(path, QSettings::IniFormat), m_Geometry(m_Settings)
{
if (s_Instance != nullptr) {
throw std::runtime_error("second instance of \"Settings\" created");
@@ -51,6 +97,11 @@ Settings &Settings::instance()
return *s_Instance;
}
+QString Settings::getFilename() const
+{
+ return m_Settings.fileName();
+}
+
void Settings::clearPlugins()
{
m_Plugins.clear();
@@ -278,9 +329,13 @@ QString Settings::getModDirectory(bool resolve) const
return getConfigurablePath("mod_directory", ToQString(AppConfig::modsPath()), resolve);
}
-QString Settings::getManagedGameDirectory() const
+std::optional<QString> Settings::getManagedGameDirectory() const
{
- return QString::fromUtf8(m_Settings.value("gamePath", "").toByteArray());
+ if (auto v=getOptional<QByteArray>(m_Settings, "gamePath")) {
+ return QString::fromUtf8(*v);
+ }
+
+ return {};
}
void Settings::setManagedGameDirectory(const QString& path)
@@ -288,9 +343,9 @@ void Settings::setManagedGameDirectory(const QString& path)
m_Settings.setValue("gamePath", QDir::toNativeSeparators(path).toUtf8());
}
-QString Settings::getManagedGameName() const
+std::optional<QString> Settings::getManagedGameName() const
{
- return m_Settings.value("gameName", "").toString();
+ return getOptional<QString>(m_Settings, "gameName");
}
void Settings::setManagedGameName(const QString& name)
@@ -298,9 +353,9 @@ void Settings::setManagedGameName(const QString& name)
m_Settings.setValue("gameName", name);
}
-QString Settings::getManagedGameEdition() const
+std::optional<QString> Settings::getManagedGameEdition() const
{
- return m_Settings.value("game_edition", "").toString();
+ return getOptional<QString>(m_Settings, "game_edition");
}
void Settings::setManagedGameEdition(const QString& name)
@@ -308,19 +363,23 @@ void Settings::setManagedGameEdition(const QString& name)
m_Settings.setValue("game_edition", name);
}
-QString Settings::getSelectedProfileName() const
+std::optional<QString> Settings::getSelectedProfileName() const
{
- return QString::fromUtf8(m_Settings.value("selected_profile", "").toByteArray());
+ if (auto v=getOptional<QByteArray>(m_Settings, "selected_profile")) {
+ return QString::fromUtf8(*v);
+ }
+
+ return {};
}
-int Settings::getMainWindowMonitor() const
+void Settings::setSelectedProfileName(const QString& name)
{
- return m_Settings.value("window_monitor", -1).toInt();
+ m_Settings.setValue("selected_profile", name.toUtf8());
}
-QString Settings::getStyleName() const
+std::optional<QString> Settings::getStyleName() const
{
- return m_Settings.value("Settings/style", "").toString();
+ return getOptional<QString>(m_Settings, "Settings/style");
}
void Settings::setStyleName(const QString& name)
@@ -328,9 +387,14 @@ void Settings::setStyleName(const QString& name)
m_Settings.setValue("Settings/style", name);
}
-bool Settings::isCategoryListVisible() const
+std::optional<int> Settings::getSelectedExecutable() const
{
- return m_Settings.value("categorylist_visible", true).toBool();
+ return getOptional<int>(m_Settings, "selected_executable");
+}
+
+std::optional<bool> Settings::getUseProxy() const
+{
+ return getOptional<bool>(m_Settings, "Settings/use_proxy");
}
QString Settings::getProfileDirectory(bool resolve) const
@@ -659,6 +723,22 @@ void Settings::writePluginBlacklist()
m_Settings.endArray();
}
+GeometrySettings& Settings::geometry()
+{
+ return m_Geometry;
+}
+
+const GeometrySettings& Settings::geometry() const
+{
+ return m_Geometry;
+}
+
+QSettings::Status Settings::sync() const
+{
+ m_Settings.sync();
+ return m_Settings.status();
+}
+
void Settings::dump() const
{
static const QStringList ignore({
@@ -679,3 +759,73 @@ void Settings::dump() const
m_Settings.endGroup();
}
+
+
+GeometrySettings::GeometrySettings(QSettings& s)
+ : m_Settings(s)
+{
+}
+
+std::optional<QByteArray> GeometrySettings::getMainWindow() const
+{
+ return getOptional<QByteArray>(m_Settings, "window_geometry");
+}
+
+std::optional<QByteArray> GeometrySettings::getMainWindowState() const
+{
+ return getOptional<QByteArray>(m_Settings, "window_state");
+}
+
+std::optional<QSize> GeometrySettings::getToolbarSize() const
+{
+ return getOptional<QSize>(m_Settings, "toolbar_size");
+}
+
+std::optional<Qt::ToolButtonStyle> GeometrySettings::getToolbarButtonStyle() const
+{
+ if (auto v=getOptional<int>(m_Settings, "toolbar_button_style")) {
+ return static_cast<Qt::ToolButtonStyle>(*v);
+ }
+
+ return {};
+}
+
+std::optional<bool> GeometrySettings::getMenubarVisible() const
+{
+ return getOptional<bool>(m_Settings, "menubar_visible");
+}
+
+std::optional<bool> GeometrySettings::getStatusbarVisible() const
+{
+ return getOptional<bool>(m_Settings, "statusbar_visible");
+}
+
+std::optional<QByteArray> GeometrySettings::getMainSplitterState() const
+{
+ return getOptional<QByteArray>(m_Settings, "window_split");
+}
+
+std::optional<bool> GeometrySettings::getFiltersVisible() const
+{
+ return getOptional<bool>(m_Settings, "filters_visible");
+}
+
+std::optional<int> GeometrySettings::getMainWindowMonitor() const
+{
+ return getOptional<int>(m_Settings, "window_monitor");
+}
+
+void GeometrySettings::setDockSize(const QString& name, int size)
+{
+ m_Settings.setValue("geometry/" + name + "_size", size);
+}
+
+std::optional<int> GeometrySettings::getDockSize(const QString& name) const
+{
+ return getOptional<int>(m_Settings, "geometry/" + name + "_size");
+}
+
+std::optional<bool> GeometrySettings::isCategoryListVisible() const
+{
+ return getOptional<bool>(m_Settings, "categorylist_visible");
+}