feat: make the visibility per resource

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2025-05-22 23:55:57 +03:00
parent 8c710fb8de
commit a29b189056
No known key found for this signature in database
GPG key ID: 55EF5DA53DB36318
3 changed files with 29 additions and 22 deletions

View file

@ -816,8 +816,6 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv)
m_settings->registerSetting("TPDownloadGeometry", ""); m_settings->registerSetting("TPDownloadGeometry", "");
m_settings->registerSetting("ShaderDownloadGeometry", ""); m_settings->registerSetting("ShaderDownloadGeometry", "");
m_settings->registerSetting("UI/FolderResourceColumnVisibility", "{}");
// HACK: This code feels so stupid is there a less stupid way of doing this? // HACK: This code feels so stupid is there a less stupid way of doing this?
{ {
m_settings->registerSetting("PastebinURL", ""); m_settings->registerSetting("PastebinURL", "");

View file

@ -232,9 +232,6 @@ void MinecraftInstance::loadSpecificSettings()
auto envSetting = m_settings->registerSetting("OverrideEnv", false); auto envSetting = m_settings->registerSetting("OverrideEnv", false);
m_settings->registerOverride(global_settings->getSetting("Env"), envSetting); m_settings->registerOverride(global_settings->getSetting("Env"), envSetting);
m_settings->registerSetting("UI/ColumnsOverride", false);
m_settings->registerSetting("UI/FolderResourceColumnVisibility", "{}");
m_settings->set("InstanceType", "OneSix"); m_settings->set("InstanceType", "OneSix");
} }

View file

@ -587,32 +587,36 @@ void ResourceFolderModel::setupHeaderAction(QAction* act, int column)
void ResourceFolderModel::saveColumns(QTreeView* tree) void ResourceFolderModel::saveColumns(QTreeView* tree)
{ {
auto const settingName = QString("UI/%1_Page/Columns").arg(id()); auto const stateSettingName = QString("UI/%1_Page/Columns").arg(id());
auto setting = m_instance->settings()->getSetting(settingName); auto const overrideSettingName = QString("UI/%1_Page/ColumnsOverride").arg(id());
auto const visibilitySettingName = QString("UI/%1_Page/ColumnsVisibility").arg(id());
setting->set(QString::fromUtf8(tree->header()->saveState().toBase64())); 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 // 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(); auto settings = m_instance->settings();
if (!settings->get("UI/ColumnsOverride").toBool()) { if (!settings->get(overrideSettingName).toBool()) {
settings = APPLICATION->settings(); settings = APPLICATION->settings();
} }
auto visibility = Json::toMap(settings->get("UI/FolderResourceColumnVisibility").toString()); auto visibility = Json::toMap(settings->get(visibilitySettingName).toString());
for (auto i = 0; i < m_column_names.size(); ++i) { for (auto i = 0; i < m_column_names.size(); ++i) {
if (m_columnsHideable[i]) { if (m_columnsHideable[i]) {
auto name = m_column_names[i]; auto name = m_column_names[i];
visibility[name] = !tree->isColumnHidden(i); visibility[name] = !tree->isColumnHidden(i);
} }
} }
settings->set("UI/FolderResourceColumnVisibility", Json::fromMap(visibility)); settings->set(visibilitySettingName, Json::fromMap(visibility));
} }
void ResourceFolderModel::loadColumns(QTreeView* tree) void ResourceFolderModel::loadColumns(QTreeView* tree)
{ {
auto const settingName = QString("UI/%1_Page/Columns").arg(id()); auto const stateSettingName = QString("UI/%1_Page/Columns").arg(id());
auto const overrideSettingName = QString("UI/%1_Page/ColumnsOverride").arg(id());
auto const visibilitySettingName = QString("UI/%1_Page/ColumnsVisibility").arg(id());
auto setting = m_instance->settings()->getOrRegisterSetting(settingName, ""); auto stateSetting = m_instance->settings()->getOrRegisterSetting(stateSettingName, "");
tree->header()->restoreState(QByteArray::fromBase64(setting->get().toString().toUtf8())); tree->header()->restoreState(QByteArray::fromBase64(stateSetting->get().toString().toUtf8()));
auto setVisible = [this, tree](QVariant value) { auto setVisible = [this, tree](QVariant value) {
auto visibility = Json::toMap(value.toString()); auto visibility = Json::toMap(value.toString());
@ -624,18 +628,25 @@ void ResourceFolderModel::loadColumns(QTreeView* tree)
} }
}; };
auto const defaultValue = Json::fromMap({
{ "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 // 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(); auto settings = m_instance->settings();
if (!settings->get("UI/ColumnsOverride").toBool()) { if (!settings->getOrRegisterSetting(overrideSettingName, false)->get().toBool()) {
settings = APPLICATION->settings(); settings = APPLICATION->settings();
} }
auto visibility = settings->getSetting("UI/FolderResourceColumnVisibility"); auto visibility = settings->getOrRegisterSetting(visibilitySettingName, defaultValue);
setVisible(visibility->get()); setVisible(visibility->get());
// allways connect the signal in case the setting is toggled on and off // allways connect the signal in case the setting is toggled on and off
auto gSetting = APPLICATION->settings()->getOrRegisterSetting("UI/FolderResourceColumnVisibility"); auto gSetting = APPLICATION->settings()->getOrRegisterSetting(visibilitySettingName, defaultValue);
connect(gSetting.get(), &Setting::SettingChanged, tree, [this, setVisible](const Setting&, QVariant value) { connect(gSetting.get(), &Setting::SettingChanged, tree, [this, setVisible, overrideSettingName](const Setting&, QVariant value) {
if (!m_instance->settings()->get("UI/ColumnsOverride").toBool()) { if (!m_instance->settings()->get(overrideSettingName).toBool()) {
setVisible(value); setVisible(value);
} }
}); });
@ -647,12 +658,13 @@ QMenu* ResourceFolderModel::createHeaderContextMenu(QTreeView* tree)
{ // action to decide if the visibility is per instance or not { // action to decide if the visibility is per instance or not
auto act = new QAction(tr("Overide Columns Visibility"), menu); auto act = new QAction(tr("Overide Columns Visibility"), menu);
auto const overrideSettingName = QString("UI/%1_Page/ColumnsOverride").arg(id());
act->setCheckable(true); act->setCheckable(true);
act->setChecked(m_instance->settings()->get("UI/ColumnsOverride").toBool()); act->setChecked(m_instance->settings()->getOrRegisterSetting(overrideSettingName, false)->get().toBool());
connect(act, &QAction::toggled, tree, [this, tree](bool toggled) { connect(act, &QAction::toggled, tree, [this, tree, overrideSettingName](bool toggled) {
m_instance->settings()->set("UI/ColumnsOverride", toggled); m_instance->settings()->set(overrideSettingName, toggled);
saveColumns(tree); saveColumns(tree);
}); });