summaryrefslogtreecommitdiff
path: root/src/modinfodialog.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-09-09 01:25:01 -0400
committerGitHub <noreply@github.com>2019-09-09 01:25:01 -0400
commit99fdbb2539227cec4fab534efc7420cfc5ca1a92 (patch)
tree4fe70561a85d86b65cc4c6725541767684af09a7 /src/modinfodialog.cpp
parent73626b297904d50507bb7d5d1342120040e655e8 (diff)
parentd863e62c6e2f3c0daa50e16a0206f59558a7bb7e (diff)
Merge pull request #830 from isanae/settings-interface
Settings interface
Diffstat (limited to 'src/modinfodialog.cpp')
-rw-r--r--src/modinfodialog.cpp77
1 files changed, 22 insertions, 55 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 4b1e2f76..c7e071ad 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -210,6 +210,9 @@ void ModInfoDialog::createTabs()
int ModInfoDialog::exec()
{
+ GeometrySaver gs(Settings::instance(), this);
+ restoreState();
+
// whether to select the first tab; if the main window requested a specific
// tab, it is selected when encountered in update()
const auto selectFirst = (m_initialTab == ModInfoTabIDs::None);
@@ -220,7 +223,10 @@ int ModInfoDialog::exec()
ui->tabWidget->setCurrentIndex(0);
}
- return TutorableDialog::exec();
+ const int r = TutorableDialog::exec();
+ saveState();
+
+ return r;
}
void ModInfoDialog::setMod(ModInfo::Ptr mod)
@@ -356,7 +362,7 @@ void ModInfoDialog::setTabsVisibility(bool firstTime)
if (!firstTime) {
// but don't do it the first time visibility is set because the tabs are
// in the default order, which will clobber the current settings
- saveTabOrder(Settings::instance());
+ saveTabOrder();
}
// remember selection, if any
@@ -375,11 +381,14 @@ void ModInfoDialog::reAddTabs(
Q_ASSERT(visibility.size() == m_tabs.size());
// ordered tab names from settings
- const auto orderedNames = getOrderedTabNames();
+ const auto orderedNames = m_core->settings().geometry().modInfoTabOrder();
- // whether the tabs can be sorted; if the object name of a tab widget is not
- // found in orderedNames, the list cannot be sorted safely
- bool canSort = true;
+ // whether the tabs can be sorted
+ //
+ // if the object name of a tab widget is not found in orderedNames, the list
+ // cannot be sorted safely; if the list is empty, it's probably a first run
+ // and there's nothing to sort
+ bool canSort = !orderedNames.empty();
// gathering visible tabs
std::vector<TabInfo*> visibleTabs;
@@ -575,37 +584,28 @@ MOShared::FilesOrigin* ModInfoDialog::getOrigin()
return origin;
}
-void ModInfoDialog::saveState(Settings& s) const
+void ModInfoDialog::saveState() const
{
- saveTabOrder(s);
-
- // remove 2.2.0 settings
- s.directInterface().remove("mod_info_tabs");
- s.directInterface().remove("mod_info_conflict_expanders");
- s.directInterface().remove("mod_info_conflicts");
- s.directInterface().remove("mod_info_advanced_conflicts");
- s.directInterface().remove("mod_info_conflicts_overwrite");
- s.directInterface().remove("mod_info_conflicts_noconflict");
- s.directInterface().remove("mod_info_conflicts_overwritten");
+ saveTabOrder();
// save state for each tab
for (const auto& tabInfo : m_tabs) {
- tabInfo.tab->saveState(s);
+ tabInfo.tab->saveState(m_core->settings());
}
}
-void ModInfoDialog::restoreState(const Settings& s)
+void ModInfoDialog::restoreState()
{
// tab order is not restored here, it will be picked up if tabs have to be
// removed and re-added
// restore state for each tab
for (const auto& tabInfo : m_tabs) {
- tabInfo.tab->restoreState(s);
+ tabInfo.tab->restoreState(m_core->settings());
}
}
-void ModInfoDialog::saveTabOrder(Settings& s) const
+void ModInfoDialog::saveTabOrder() const
{
if (static_cast<int>(m_tabs.size()) != ui->tabWidget->count()) {
// only save tab state when all tabs are visible
@@ -629,40 +629,7 @@ void ModInfoDialog::saveTabOrder(Settings& s) const
names += ui->tabWidget->widget(i)->objectName();
}
- s.directInterface().setValue("mod_info_tab_order", names);
-}
-
-std::vector<QString> ModInfoDialog::getOrderedTabNames() const
-{
- const auto& settings = Settings::instance().directInterface();
-
- std::vector<QString> v;
-
- if (settings.contains("mod_info_tabs")) {
- // old byte array from 2.2.0
- QDataStream stream(settings.value("mod_info_tabs").toByteArray());
-
- int count = 0;
- stream >> count;
-
- for (int i=0; i<count; ++i) {
- QString s;
- stream >> s;
- v.emplace_back(std::move(s));
- }
- } else {
- // string list
- QString string = settings.value("mod_info_tab_order").toString();
- QTextStream stream(&string);
-
- while (!stream.atEnd()) {
- QString s;
- stream >> s;
- v.emplace_back(std::move(s));
- }
- }
-
- return v;
+ m_core->settings().geometry().setModInfoTabOrder(names);
}
void ModInfoDialog::onOriginModified(int originID)