Make column visibility global (#3748)

This commit is contained in:
Alexandru Ionut Tripon 2025-06-02 12:45:03 +03:00 committed by GitHub
commit 52fa074ff7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 187 additions and 70 deletions

View file

@ -858,7 +858,7 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_settings->registerSetting("CloseAfterLaunch", false); m_settings->registerSetting("CloseAfterLaunch", false);
m_settings->registerSetting("QuitAfterGameStop", false); m_settings->registerSetting("QuitAfterGameStop", false);
m_settings->registerSetting("Env", QVariant(QMap<QString, QVariant>())); m_settings->registerSetting("Env", "{}");
// Custom Microsoft Authentication Client ID // Custom Microsoft Authentication Client ID
m_settings->registerSetting("MSAClientIDOverride", ""); m_settings->registerSetting("MSAClientIDOverride", "");
@ -1665,8 +1665,8 @@ MainWindow* Application::showMainWindow(bool minimized)
m_mainWindow->activateWindow(); m_mainWindow->activateWindow();
} else { } else {
m_mainWindow = new MainWindow(); m_mainWindow = new MainWindow();
m_mainWindow->restoreState(QByteArray::fromBase64(APPLICATION->settings()->get("MainWindowState").toByteArray())); m_mainWindow->restoreState(QByteArray::fromBase64(APPLICATION->settings()->get("MainWindowState").toString().toUtf8()));
m_mainWindow->restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("MainWindowGeometry").toByteArray())); m_mainWindow->restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("MainWindowGeometry").toString().toUtf8()));
if (minimized) { if (minimized) {
m_mainWindow->showMinimized(); m_mainWindow->showMinimized();

View file

@ -44,6 +44,7 @@
#include <QJsonObject> #include <QJsonObject>
#include "Application.h" #include "Application.h"
#include "Json.h"
#include "settings/INISettingsObject.h" #include "settings/INISettingsObject.h"
#include "settings/OverrideSetting.h" #include "settings/OverrideSetting.h"
#include "settings/Setting.h" #include "settings/Setting.h"
@ -202,25 +203,25 @@ bool BaseInstance::shouldStopOnConsoleOverflow() const
QStringList BaseInstance::getLinkedInstances() const QStringList BaseInstance::getLinkedInstances() const
{ {
return m_settings->get("linkedInstances").toStringList(); auto setting = m_settings->get("linkedInstances").toString();
return Json::toStringList(setting);
} }
void BaseInstance::setLinkedInstances(const QStringList& list) void BaseInstance::setLinkedInstances(const QStringList& list)
{ {
auto linkedInstances = m_settings->get("linkedInstances").toStringList(); m_settings->set("linkedInstances", Json::fromStringList(list));
m_settings->set("linkedInstances", list);
} }
void BaseInstance::addLinkedInstanceId(const QString& id) void BaseInstance::addLinkedInstanceId(const QString& id)
{ {
auto linkedInstances = m_settings->get("linkedInstances").toStringList(); auto linkedInstances = getLinkedInstances();
linkedInstances.append(id); linkedInstances.append(id);
setLinkedInstances(linkedInstances); setLinkedInstances(linkedInstances);
} }
bool BaseInstance::removeLinkedInstanceId(const QString& id) bool BaseInstance::removeLinkedInstanceId(const QString& id)
{ {
auto linkedInstances = m_settings->get("linkedInstances").toStringList(); auto linkedInstances = getLinkedInstances();
int numRemoved = linkedInstances.removeAll(id); int numRemoved = linkedInstances.removeAll(id);
setLinkedInstances(linkedInstances); setLinkedInstances(linkedInstances);
return numRemoved > 0; return numRemoved > 0;
@ -228,7 +229,7 @@ bool BaseInstance::removeLinkedInstanceId(const QString& id)
bool BaseInstance::isLinkedToInstanceId(const QString& id) const bool BaseInstance::isLinkedToInstanceId(const QString& id) const
{ {
auto linkedInstances = m_settings->get("linkedInstances").toStringList(); auto linkedInstances = getLinkedInstances();
return linkedInstances.contains(id); return linkedInstances.contains(id);
} }

View file

@ -304,4 +304,23 @@ QString fromStringList(const QStringList& list)
return QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return QString::fromUtf8(doc.toJson(QJsonDocument::Compact));
} }
QVariantMap toMap(const QString& jsonString)
{
QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(jsonString.toUtf8(), &parseError);
if (parseError.error != QJsonParseError::NoError || !doc.isObject())
return {};
QJsonObject obj = doc.object();
return obj.toVariantMap();
}
QString fromMap(const QVariantMap& map)
{
QJsonObject obj = QJsonObject::fromVariantMap(map);
QJsonDocument doc(obj);
return QString::fromUtf8(doc.toJson(QJsonDocument::Compact));
}
} // namespace Json } // namespace Json

View file

@ -282,5 +282,8 @@ JSON_HELPERFUNCTIONS(Variant, QVariant)
QStringList toStringList(const QString& jsonString); QStringList toStringList(const QString& jsonString);
QString fromStringList(const QStringList& list); QString fromStringList(const QStringList& list);
QVariantMap toMap(const QString& jsonString);
QString fromMap(const QVariantMap& map);
} // namespace Json } // namespace Json
using JSONValidationError = Json::JsonException; using JSONValidationError = Json::JsonException;

View file

@ -38,6 +38,7 @@
#include "MinecraftInstance.h" #include "MinecraftInstance.h"
#include "Application.h" #include "Application.h"
#include "BuildConfig.h" #include "BuildConfig.h"
#include "Json.h"
#include "QObjectPtr.h" #include "QObjectPtr.h"
#include "minecraft/launch/AutoInstallJava.h" #include "minecraft/launch/AutoInstallJava.h"
#include "minecraft/launch/CreateGameFolders.h" #include "minecraft/launch/CreateGameFolders.h"
@ -636,7 +637,8 @@ QProcessEnvironment MinecraftInstance::createEnvironment()
} }
// custom env // custom env
auto insertEnv = [&env](QMap<QString, QVariant> envMap) { auto insertEnv = [&env](QString value) {
auto envMap = Json::toMap(value);
if (envMap.isEmpty()) if (envMap.isEmpty())
return; return;
@ -647,9 +649,9 @@ QProcessEnvironment MinecraftInstance::createEnvironment()
bool overrideEnv = settings()->get("OverrideEnv").toBool(); bool overrideEnv = settings()->get("OverrideEnv").toBool();
if (!overrideEnv) if (!overrideEnv)
insertEnv(APPLICATION->settings()->get("Env").toMap()); insertEnv(APPLICATION->settings()->get("Env").toString());
else else
insertEnv(settings()->get("Env").toMap()); insertEnv(settings()->get("Env").toString());
return env; return env;
} }

View file

@ -67,7 +67,6 @@ ModFolderModel::ModFolderModel(const QDir& dir, BaseInstance* instance, bool is_
QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive,
QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive }; QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive };
m_columnsHideable = { false, true, false, true, true, true, true, true, true, true, true }; m_columnsHideable = { false, true, false, true, true, true, true, true, true, true, true };
m_columnsHiddenByDefault = { false, false, false, false, false, false, false, true, true, true, true };
} }
QVariant ModFolderModel::data(const QModelIndex& index, int role) const QVariant ModFolderModel::data(const QModelIndex& index, int role) const

View file

@ -587,28 +587,89 @@ void ResourceFolderModel::setupHeaderAction(QAction* act, int column)
void ResourceFolderModel::saveColumns(QTreeView* tree) void ResourceFolderModel::saveColumns(QTreeView* tree)
{ {
auto const setting_name = QString("UI/%1_Page/Columns").arg(id()); auto const stateSettingName = QString("UI/%1_Page/Columns").arg(id());
auto setting = m_instance->settings()->getOrRegisterSetting(setting_name); auto const overrideSettingName = QString("UI/%1_Page/ColumnsOverride").arg(id());
auto const visibilitySettingName = QString("UI/%1_Page/ColumnsVisibility").arg(id());
setting->set(tree->header()->saveState()); auto stateSetting = m_instance->settings()->getSetting(stateSettingName);
stateSetting->set(QString::fromUtf8(tree->header()->saveState().toBase64()));
// neither passthrough nor override settings works for this usecase as I need to only set the global when the gate is false
auto settings = m_instance->settings();
if (!settings->get(overrideSettingName).toBool()) {
settings = APPLICATION->settings();
}
auto visibility = Json::toMap(settings->get(visibilitySettingName).toString());
for (auto i = 0; i < m_column_names.size(); ++i) {
if (m_columnsHideable[i]) {
auto name = m_column_names[i];
visibility[name] = !tree->isColumnHidden(i);
}
}
settings->set(visibilitySettingName, Json::fromMap(visibility));
} }
void ResourceFolderModel::loadColumns(QTreeView* tree) void ResourceFolderModel::loadColumns(QTreeView* tree)
{ {
for (auto i = 0; i < m_columnsHiddenByDefault.size(); ++i) { auto const stateSettingName = QString("UI/%1_Page/Columns").arg(id());
tree->setColumnHidden(i, m_columnsHiddenByDefault[i]); auto const overrideSettingName = QString("UI/%1_Page/ColumnsOverride").arg(id());
auto const visibilitySettingName = QString("UI/%1_Page/ColumnsVisibility").arg(id());
auto stateSetting = m_instance->settings()->getOrRegisterSetting(stateSettingName, "");
tree->header()->restoreState(QByteArray::fromBase64(stateSetting->get().toString().toUtf8()));
auto setVisible = [this, tree](QVariant value) {
auto visibility = Json::toMap(value.toString());
for (auto i = 0; i < m_column_names.size(); ++i) {
if (m_columnsHideable[i]) {
auto name = m_column_names[i];
tree->setColumnHidden(i, !visibility.value(name, false).toBool());
} }
}
};
auto const setting_name = QString("UI/%1_Page/Columns").arg(id()); auto const defaultValue = Json::fromMap({
auto setting = m_instance->settings()->getOrRegisterSetting(setting_name); { "Image", true },
{ "Version", true },
{ "Last Modified", true },
{ "Provider", true },
{ "Pack Format", true },
});
// neither passthrough nor override settings works for this usecase as I need to only set the global when the gate is false
auto settings = m_instance->settings();
if (!settings->getOrRegisterSetting(overrideSettingName, false)->get().toBool()) {
settings = APPLICATION->settings();
}
auto visibility = settings->getOrRegisterSetting(visibilitySettingName, defaultValue);
setVisible(visibility->get());
tree->header()->restoreState(setting->get().toByteArray()); // allways connect the signal in case the setting is toggled on and off
auto gSetting = APPLICATION->settings()->getOrRegisterSetting(visibilitySettingName, defaultValue);
connect(gSetting.get(), &Setting::SettingChanged, tree, [this, setVisible, overrideSettingName](const Setting&, QVariant value) {
if (!m_instance->settings()->get(overrideSettingName).toBool()) {
setVisible(value);
}
});
} }
QMenu* ResourceFolderModel::createHeaderContextMenu(QTreeView* tree) QMenu* ResourceFolderModel::createHeaderContextMenu(QTreeView* tree)
{ {
auto menu = new QMenu(tree); auto menu = new QMenu(tree);
{ // action to decide if the visibility is per instance or not
auto act = new QAction(tr("Override Columns Visibility"), menu);
auto const overrideSettingName = QString("UI/%1_Page/ColumnsOverride").arg(id());
act->setCheckable(true);
act->setChecked(m_instance->settings()->getOrRegisterSetting(overrideSettingName, false)->get().toBool());
connect(act, &QAction::toggled, tree, [this, tree, overrideSettingName](bool toggled) {
m_instance->settings()->set(overrideSettingName, toggled);
saveColumns(tree);
});
menu->addAction(act);
}
menu->addSeparator()->setText(tr("Show / Hide Columns")); menu->addSeparator()->setText(tr("Show / Hide Columns"));
for (int col = 0; col < columnCount(); ++col) { for (int col = 0; col < columnCount(); ++col) {

View file

@ -243,7 +243,6 @@ class ResourceFolderModel : public QAbstractListModel {
QList<QHeaderView::ResizeMode> m_column_resize_modes = { QHeaderView::Interactive, QHeaderView::Stretch, QHeaderView::Interactive, QList<QHeaderView::ResizeMode> m_column_resize_modes = { QHeaderView::Interactive, QHeaderView::Stretch, QHeaderView::Interactive,
QHeaderView::Interactive, QHeaderView::Interactive }; QHeaderView::Interactive, QHeaderView::Interactive };
QList<bool> m_columnsHideable = { false, false, true, true, true }; QList<bool> m_columnsHideable = { false, false, true, true, true };
QList<bool> m_columnsHiddenByDefault = { false, false, false, false, true };
QDir m_dir; QDir m_dir;
BaseInstance* m_instance; BaseInstance* m_instance;

View file

@ -51,7 +51,6 @@ TexturePackFolderModel::TexturePackFolderModel(const QDir& dir, BaseInstance* in
m_column_resize_modes = { QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Stretch, m_column_resize_modes = { QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Stretch,
QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive }; QHeaderView::Interactive, QHeaderView::Interactive, QHeaderView::Interactive };
m_columnsHideable = { false, true, false, true, true, true }; m_columnsHideable = { false, true, false, true, true, true };
m_columnsHiddenByDefault = { false, false, false, false, false, true };
} }
Task* TexturePackFolderModel::createParseTask(Resource& resource) Task* TexturePackFolderModel::createParseTask(Resource& resource)

View file

@ -44,13 +44,14 @@
#include <QTextStream> #include <QTextStream>
#include <QSettings> #include <QSettings>
#include "Json.h"
INIFile::INIFile() {} INIFile::INIFile() {}
bool INIFile::saveFile(QString fileName) bool INIFile::saveFile(QString fileName)
{ {
if (!contains("ConfigVersion")) if (!contains("ConfigVersion"))
insert("ConfigVersion", "1.2"); insert("ConfigVersion", "1.3");
QSettings _settings_obj{ fileName, QSettings::Format::IniFormat }; QSettings _settings_obj{ fileName, QSettings::Format::IniFormat };
_settings_obj.setFallbacksEnabled(false); _settings_obj.setFallbacksEnabled(false);
_settings_obj.clear(); _settings_obj.clear();
@ -149,6 +150,27 @@ bool parseOldFileFormat(QIODevice& device, QSettings::SettingsMap& map)
return true; return true;
} }
QVariant migrateQByteArrayToBase64(QString key, QVariant value)
{
static const QStringList otherByteArrays = { "MainWindowState", "MainWindowGeometry", "ConsoleWindowState",
"ConsoleWindowGeometry", "PagedGeometry", "NewInstanceGeometry",
"ModDownloadGeometry", "RPDownloadGeometry", "TPDownloadGeometry",
"ShaderDownloadGeometry" };
if (key.startsWith("WideBarVisibility_") || (key.startsWith("UI/") && key.endsWith("_Page/Columns"))) {
return QString::fromUtf8(value.toByteArray().toBase64());
}
if (otherByteArrays.contains(key)) {
return QString::fromUtf8(value.toByteArray());
}
if (key == "linkedInstances") {
return Json::fromStringList(value.toStringList());
}
if (key == "Env") {
return Json::fromMap(value.toMap());
}
return value;
}
bool INIFile::loadFile(QString fileName) bool INIFile::loadFile(QString fileName)
{ {
QSettings _settings_obj{ fileName, QSettings::Format::IniFormat }; QSettings _settings_obj{ fileName, QSettings::Format::IniFormat };
@ -168,22 +190,34 @@ bool INIFile::loadFile(QString fileName)
QSettings::SettingsMap map; QSettings::SettingsMap map;
parseOldFileFormat(file, map); parseOldFileFormat(file, map);
file.close(); file.close();
for (auto&& key : map.keys()) for (auto&& key : map.keys()) {
insert(key, map.value(key)); auto value = migrateQByteArrayToBase64(key, map.value(key));
insert("ConfigVersion", "1.2"); insert(key, value);
}
insert("ConfigVersion", "1.3");
} else if (_settings_obj.value("ConfigVersion").toString() == "1.1") { } else if (_settings_obj.value("ConfigVersion").toString() == "1.1") {
for (auto&& key : _settings_obj.allKeys()) { for (auto&& key : _settings_obj.allKeys()) {
if (auto valueStr = _settings_obj.value(key).toString(); auto value = migrateQByteArrayToBase64(key, _settings_obj.value(key));
if (auto valueStr = value.toString();
(valueStr.contains(QChar(';')) || valueStr.contains(QChar('=')) || valueStr.contains(QChar(','))) && (valueStr.contains(QChar(';')) || valueStr.contains(QChar('=')) || valueStr.contains(QChar(','))) &&
valueStr.endsWith("\"") && valueStr.startsWith("\"")) { valueStr.endsWith("\"") && valueStr.startsWith("\"")) {
insert(key, unquote(valueStr)); insert(key, unquote(valueStr));
} else } else {
insert(key, value);
}
}
insert("ConfigVersion", "1.3");
} else if (_settings_obj.value("ConfigVersion").toString() == "1.2") {
for (auto&& key : _settings_obj.allKeys()) {
auto value = migrateQByteArrayToBase64(key, _settings_obj.value(key));
insert(key, value);
}
insert("ConfigVersion", "1.3");
} else {
for (auto&& key : _settings_obj.allKeys()) {
insert(key, _settings_obj.value(key)); insert(key, _settings_obj.value(key));
} }
insert("ConfigVersion", "1.2"); }
} else
for (auto&& key : _settings_obj.allKeys())
insert(key, _settings_obj.value(key));
return true; return true;
} }

View file

@ -116,9 +116,9 @@ InstanceWindow::InstanceWindow(InstancePtr instance, QWidget* parent) : QMainWin
// restore window state // restore window state
{ {
auto base64State = APPLICATION->settings()->get("ConsoleWindowState").toByteArray(); auto base64State = APPLICATION->settings()->get("ConsoleWindowState").toString().toUtf8();
restoreState(QByteArray::fromBase64(base64State)); restoreState(QByteArray::fromBase64(base64State));
auto base64Geometry = APPLICATION->settings()->get("ConsoleWindowGeometry").toByteArray(); auto base64Geometry = APPLICATION->settings()->get("ConsoleWindowGeometry").toString().toUtf8();
restoreGeometry(QByteArray::fromBase64(base64Geometry)); restoreGeometry(QByteArray::fromBase64(base64Geometry));
} }
@ -190,8 +190,8 @@ void InstanceWindow::closeEvent(QCloseEvent* event)
return; return;
} }
APPLICATION->settings()->set("ConsoleWindowState", saveState().toBase64()); APPLICATION->settings()->set("ConsoleWindowState", QString::fromUtf8(saveState().toBase64()));
APPLICATION->settings()->set("ConsoleWindowGeometry", saveGeometry().toBase64()); APPLICATION->settings()->set("ConsoleWindowGeometry", QString::fromUtf8(saveGeometry().toBase64()));
emit isClosing(); emit isClosing();
event->accept(); event->accept();
} }

View file

@ -181,7 +181,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWi
auto const setting_name = QString("WideBarVisibility_%1").arg(ui->instanceToolBar->objectName()); auto const setting_name = QString("WideBarVisibility_%1").arg(ui->instanceToolBar->objectName());
instanceToolbarSetting = APPLICATION->settings()->getOrRegisterSetting(setting_name); instanceToolbarSetting = APPLICATION->settings()->getOrRegisterSetting(setting_name);
ui->instanceToolBar->setVisibilityState(instanceToolbarSetting->get().toByteArray()); ui->instanceToolBar->setVisibilityState(QByteArray::fromBase64(instanceToolbarSetting->get().toString().toUtf8()));
ui->instanceToolBar->addContextMenuAction(ui->newsToolBar->toggleViewAction()); ui->instanceToolBar->addContextMenuAction(ui->newsToolBar->toggleViewAction());
ui->instanceToolBar->addContextMenuAction(ui->instanceToolBar->toggleViewAction()); ui->instanceToolBar->addContextMenuAction(ui->instanceToolBar->toggleViewAction());
@ -1296,7 +1296,7 @@ void MainWindow::globalSettingsClosed()
updateStatusCenter(); updateStatusCenter();
// This needs to be done to prevent UI elements disappearing in the event the config is changed // This needs to be done to prevent UI elements disappearing in the event the config is changed
// but Prism Launcher exits abnormally, causing the window state to never be saved: // but Prism Launcher exits abnormally, causing the window state to never be saved:
APPLICATION->settings()->set("MainWindowState", saveState().toBase64()); APPLICATION->settings()->set("MainWindowState", QString::fromUtf8(saveState().toBase64()));
update(); update();
} }
@ -1491,9 +1491,9 @@ void MainWindow::on_actionViewSelectedInstFolder_triggered()
void MainWindow::closeEvent(QCloseEvent* event) void MainWindow::closeEvent(QCloseEvent* event)
{ {
// Save the window state and geometry. // Save the window state and geometry.
APPLICATION->settings()->set("MainWindowState", saveState().toBase64()); APPLICATION->settings()->set("MainWindowState", QString::fromUtf8(saveState().toBase64()));
APPLICATION->settings()->set("MainWindowGeometry", saveGeometry().toBase64()); APPLICATION->settings()->set("MainWindowGeometry", QString::fromUtf8(saveGeometry().toBase64()));
instanceToolbarSetting->set(ui->instanceToolBar->getVisibilityState()); instanceToolbarSetting->set(QString::fromUtf8(ui->instanceToolBar->getVisibilityState().toBase64()));
event->accept(); event->accept();
emit isClosing(); emit isClosing();
} }

View file

@ -134,7 +134,7 @@ NewInstanceDialog::NewInstanceDialog(const QString& initialGroup,
updateDialogState(); updateDialogState();
if (APPLICATION->settings()->get("NewInstanceGeometry").isValid()) { if (APPLICATION->settings()->get("NewInstanceGeometry").isValid()) {
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("NewInstanceGeometry").toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("NewInstanceGeometry").toString().toUtf8()));
} else { } else {
auto screen = parent->screen(); auto screen = parent->screen();
auto geometry = screen->availableSize(); auto geometry = screen->availableSize();
@ -146,7 +146,7 @@ NewInstanceDialog::NewInstanceDialog(const QString& initialGroup,
void NewInstanceDialog::reject() void NewInstanceDialog::reject()
{ {
APPLICATION->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); APPLICATION->settings()->set("NewInstanceGeometry", QString::fromUtf8(saveGeometry().toBase64()));
// This is just so that the pages get the close() call and can react to it, if needed. // This is just so that the pages get the close() call and can react to it, if needed.
m_container->prepareToClose(); m_container->prepareToClose();
@ -156,7 +156,7 @@ void NewInstanceDialog::reject()
void NewInstanceDialog::accept() void NewInstanceDialog::accept()
{ {
APPLICATION->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); APPLICATION->settings()->set("NewInstanceGeometry", QString::fromUtf8(saveGeometry().toBase64()));
importIconNow(); importIconNow();
// This is just so that the pages get the close() call and can react to it, if needed. // This is just so that the pages get the close() call and can react to it, if needed.
@ -316,7 +316,7 @@ void NewInstanceDialog::importIconNow()
InstIconKey = importIconName.mid(0, importIconName.lastIndexOf('.')); InstIconKey = importIconName.mid(0, importIconName.lastIndexOf('.'));
importIcon = false; importIcon = false;
} }
APPLICATION->settings()->set("NewInstanceGeometry", saveGeometry().toBase64()); APPLICATION->settings()->set("NewInstanceGeometry", QString::fromUtf8(saveGeometry().toBase64()));
} }
void NewInstanceDialog::selectedPageChanged(BasePage* previous, BasePage* selected) void NewInstanceDialog::selectedPageChanged(BasePage* previous, BasePage* selected)

View file

@ -84,7 +84,7 @@ ResourceDownloadDialog::ResourceDownloadDialog(QWidget* parent, const std::share
void ResourceDownloadDialog::accept() void ResourceDownloadDialog::accept()
{ {
if (!geometrySaveKey().isEmpty()) if (!geometrySaveKey().isEmpty())
APPLICATION->settings()->set(geometrySaveKey(), saveGeometry().toBase64()); APPLICATION->settings()->set(geometrySaveKey(), QString::fromUtf8(saveGeometry().toBase64()));
QDialog::accept(); QDialog::accept();
} }
@ -105,7 +105,7 @@ void ResourceDownloadDialog::reject()
} }
if (!geometrySaveKey().isEmpty()) if (!geometrySaveKey().isEmpty())
APPLICATION->settings()->set(geometrySaveKey(), saveGeometry().toBase64()); APPLICATION->settings()->set(geometrySaveKey(), QString::fromUtf8(saveGeometry().toBase64()));
QDialog::reject(); QDialog::reject();
} }
@ -275,7 +275,7 @@ ModDownloadDialog::ModDownloadDialog(QWidget* parent, const std::shared_ptr<ModF
connectButtons(); connectButtons();
if (!geometrySaveKey().isEmpty()) if (!geometrySaveKey().isEmpty())
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toString().toUtf8()));
} }
QList<BasePage*> ModDownloadDialog::getPages() QList<BasePage*> ModDownloadDialog::getPages()
@ -318,7 +318,7 @@ ResourcePackDownloadDialog::ResourcePackDownloadDialog(QWidget* parent,
connectButtons(); connectButtons();
if (!geometrySaveKey().isEmpty()) if (!geometrySaveKey().isEmpty())
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toString().toUtf8()));
} }
QList<BasePage*> ResourcePackDownloadDialog::getPages() QList<BasePage*> ResourcePackDownloadDialog::getPages()
@ -343,7 +343,7 @@ TexturePackDownloadDialog::TexturePackDownloadDialog(QWidget* parent,
connectButtons(); connectButtons();
if (!geometrySaveKey().isEmpty()) if (!geometrySaveKey().isEmpty())
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toString().toUtf8()));
} }
QList<BasePage*> TexturePackDownloadDialog::getPages() QList<BasePage*> TexturePackDownloadDialog::getPages()
@ -368,7 +368,7 @@ ShaderPackDownloadDialog::ShaderPackDownloadDialog(QWidget* parent,
connectButtons(); connectButtons();
if (!geometrySaveKey().isEmpty()) if (!geometrySaveKey().isEmpty())
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get(geometrySaveKey()).toString().toUtf8()));
} }
QList<BasePage*> ShaderPackDownloadDialog::getPages() QList<BasePage*> ShaderPackDownloadDialog::getPages()

View file

@ -53,7 +53,7 @@ PageDialog::PageDialog(BasePageProvider* pageProvider, QString defaultId, QWidge
connect(buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &PageDialog::reject); connect(buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &PageDialog::reject);
connect(buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help); connect(buttons->button(QDialogButtonBox::Help), &QPushButton::clicked, m_container, &PageContainer::help);
restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("PagedGeometry").toByteArray())); restoreGeometry(QByteArray::fromBase64(APPLICATION->settings()->get("PagedGeometry").toString().toUtf8()));
} }
void PageDialog::accept() void PageDialog::accept()
@ -75,7 +75,7 @@ bool PageDialog::handleClose()
return false; return false;
qDebug() << "Paged dialog close approved"; qDebug() << "Paged dialog close approved";
APPLICATION->settings()->set("PagedGeometry", saveGeometry().toBase64()); APPLICATION->settings()->set("PagedGeometry", QString::fromUtf8(saveGeometry().toBase64()));
qDebug() << "Paged dialog geometry saved"; qDebug() << "Paged dialog geometry saved";
emit applied(); emit applied();

View file

@ -148,14 +148,14 @@ void ExternalResourcesPage::openedImpl()
auto const setting_name = QString("WideBarVisibility_%1").arg(id()); auto const setting_name = QString("WideBarVisibility_%1").arg(id());
m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name); m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name);
ui->actionsToolbar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); ui->actionsToolbar->setVisibilityState(QByteArray::fromBase64(m_wide_bar_setting->get().toString().toUtf8()));
} }
void ExternalResourcesPage::closedImpl() void ExternalResourcesPage::closedImpl()
{ {
m_model->stopWatching(); m_model->stopWatching();
m_wide_bar_setting->set(ui->actionsToolbar->getVisibilityState()); m_wide_bar_setting->set(QString::fromUtf8(ui->actionsToolbar->getVisibilityState().toBase64()));
} }
void ExternalResourcesPage::retranslate() void ExternalResourcesPage::retranslate()

View file

@ -562,12 +562,12 @@ void ScreenshotsPage::openedImpl()
auto const setting_name = QString("WideBarVisibility_%1").arg(id()); auto const setting_name = QString("WideBarVisibility_%1").arg(id());
m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name); m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name);
ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); ui->toolBar->setVisibilityState(QByteArray::fromBase64(m_wide_bar_setting->get().toString().toUtf8()));
} }
void ScreenshotsPage::closedImpl() void ScreenshotsPage::closedImpl()
{ {
m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); m_wide_bar_setting->set(QString::fromUtf8(ui->toolBar->getVisibilityState().toBase64()));
} }
#include "ScreenshotsPage.moc" #include "ScreenshotsPage.moc"

View file

@ -705,7 +705,7 @@ void ServersPage::openedImpl()
auto const setting_name = QString("WideBarVisibility_%1").arg(id()); auto const setting_name = QString("WideBarVisibility_%1").arg(id());
m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name); m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name);
ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); ui->toolBar->setVisibilityState(QByteArray::fromBase64(m_wide_bar_setting->get().toString().toUtf8()));
// ping servers // ping servers
m_model->queryServersStatus(); m_model->queryServersStatus();
@ -715,7 +715,7 @@ void ServersPage::closedImpl()
{ {
m_model->unobserve(); m_model->unobserve();
m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); m_wide_bar_setting->set(QString::fromUtf8(ui->toolBar->getVisibilityState().toBase64()));
} }
void ServersPage::on_actionAdd_triggered() void ServersPage::on_actionAdd_triggered()

View file

@ -126,11 +126,11 @@ void VersionPage::openedImpl()
auto const setting_name = QString("WideBarVisibility_%1").arg(id()); auto const setting_name = QString("WideBarVisibility_%1").arg(id());
m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name); m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name);
ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); ui->toolBar->setVisibilityState(QByteArray::fromBase64(m_wide_bar_setting->get().toString().toUtf8()));
} }
void VersionPage::closedImpl() void VersionPage::closedImpl()
{ {
m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); m_wide_bar_setting->set(QString::fromUtf8(ui->toolBar->getVisibilityState().toBase64()));
} }
QMenu* VersionPage::createPopupMenu() QMenu* VersionPage::createPopupMenu()

View file

@ -125,14 +125,14 @@ void WorldListPage::openedImpl()
auto const setting_name = QString("WideBarVisibility_%1").arg(id()); auto const setting_name = QString("WideBarVisibility_%1").arg(id());
m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name); m_wide_bar_setting = APPLICATION->settings()->getOrRegisterSetting(setting_name);
ui->toolBar->setVisibilityState(m_wide_bar_setting->get().toByteArray()); ui->toolBar->setVisibilityState(QByteArray::fromBase64(m_wide_bar_setting->get().toString().toUtf8()));
} }
void WorldListPage::closedImpl() void WorldListPage::closedImpl()
{ {
m_worlds->stopWatching(); m_worlds->stopWatching();
m_wide_bar_setting->set(ui->toolBar->getVisibilityState()); m_wide_bar_setting->set(QString::fromUtf8(ui->toolBar->getVisibilityState().toBase64()));
} }
WorldListPage::~WorldListPage() WorldListPage::~WorldListPage()

View file

@ -190,7 +190,7 @@ void MinecraftSettingsWidget::loadSettings()
// Environment variables // Environment variables
m_ui->environmentVariables->initialize(m_instance != nullptr, m_instance == nullptr || settings->get("OverrideEnv").toBool(), m_ui->environmentVariables->initialize(m_instance != nullptr, m_instance == nullptr || settings->get("OverrideEnv").toBool(),
settings->get("Env").toMap()); Json::toMap(settings->get("Env").toString()));
// Legacy Tweaks // Legacy Tweaks
m_ui->legacySettingsGroupBox->setChecked(m_instance == nullptr || settings->get("OverrideLegacySettings").toBool()); m_ui->legacySettingsGroupBox->setChecked(m_instance == nullptr || settings->get("OverrideLegacySettings").toBool());
@ -359,7 +359,7 @@ void MinecraftSettingsWidget::saveSettings()
settings->set("OverrideEnv", env); settings->set("OverrideEnv", env);
if (env) if (env)
settings->set("Env", m_ui->environmentVariables->value()); settings->set("Env", Json::fromMap(m_ui->environmentVariables->value()));
else else
settings->reset("Env"); settings->reset("Env");

View file

@ -110,7 +110,7 @@ Wrapperommand=)";
f2.loadFile(fileName); f2.loadFile(fileName);
QCOMPARE(f2.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link"); QCOMPARE(f2.get("PreLaunchCommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link");
QCOMPARE(f2.get("Wrapperommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link ="); QCOMPARE(f2.get("Wrapperommand", "NOT SET").toString(), "\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar link =");
QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.2"); QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.3");
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
FS::deletePath(fileName); FS::deletePath(fileName);
#endif #endif
@ -151,7 +151,7 @@ Wrapperommand=)";
f2.loadFile(fileName); f2.loadFile(fileName);
for (auto key : settings.allKeys()) for (auto key : settings.allKeys())
QCOMPARE(f2.get(key, "NOT SET").toString(), settings.value(key).toString()); QCOMPARE(f2.get(key, "NOT SET").toString(), settings.value(key).toString());
QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.2"); QCOMPARE(f2.get("ConfigVersion", "NOT SET").toString(), "1.3");
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
FS::deletePath(fileName); FS::deletePath(fileName);
#endif #endif
@ -185,7 +185,7 @@ PreLaunchCommand=)";
INIFile f1; INIFile f1;
f1.loadFile(fileName); f1.loadFile(fileName);
QCOMPARE(f1.get("PreLaunchCommand", "NOT SET").toString(), "env mesa=true"); QCOMPARE(f1.get("PreLaunchCommand", "NOT SET").toString(), "env mesa=true");
QCOMPARE(f1.get("ConfigVersion", "NOT SET").toString(), "1.2"); QCOMPARE(f1.get("ConfigVersion", "NOT SET").toString(), "1.3");
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
FS::deletePath(fileName); FS::deletePath(fileName);
#endif #endif