|
|
|
|
@@ -587,28 +587,89 @@ void ResourceFolderModel::setupHeaderAction(QAction* act, int column)
|
|
|
|
|
|
|
|
|
|
void ResourceFolderModel::saveColumns(QTreeView* tree)
|
|
|
|
|
{
|
|
|
|
|
auto const setting_name = QString("UI/%1_Page/Columns").arg(id());
|
|
|
|
|
auto setting = m_instance->settings()->getOrRegisterSetting(setting_name);
|
|
|
|
|
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());
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
for (auto i = 0; i < m_columnsHiddenByDefault.size(); ++i) {
|
|
|
|
|
tree->setColumnHidden(i, m_columnsHiddenByDefault[i]);
|
|
|
|
|
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 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 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
|
|
|
|
|
auto settings = m_instance->settings();
|
|
|
|
|
if (!settings->getOrRegisterSetting(overrideSettingName, false)->get().toBool()) {
|
|
|
|
|
settings = APPLICATION->settings();
|
|
|
|
|
}
|
|
|
|
|
auto visibility = settings->getOrRegisterSetting(visibilitySettingName, defaultValue);
|
|
|
|
|
setVisible(visibility->get());
|
|
|
|
|
|
|
|
|
|
auto const setting_name = QString("UI/%1_Page/Columns").arg(id());
|
|
|
|
|
auto setting = m_instance->settings()->getOrRegisterSetting(setting_name);
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
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"));
|
|
|
|
|
|
|
|
|
|
for (int col = 0; col < columnCount(); ++col) {
|
|
|
|
|
|