summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-05-20 18:33:50 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-05-20 18:33:50 -0400
commit513eaaa3556bc08c7ac9d03944ee35deff9d7ceb (patch)
tree00118efcb71698b52784b08d500c0ac64a0d71d0 /src
parentc5f61733850d6737814041f645a009e1cc60a7ed (diff)
added const version of Settings::directInterface() for restoring states
added top-level saveState() and restoreState() to ModInfoDialog that are called from MainWindow, because it now also has to handle expander states in the conflict tab added internal opened state to expander widget instead of using widget visibility so it can be saved even after the dialog is closed
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp4
-rw-r--r--src/modinfodialog.cpp86
-rw-r--r--src/modinfodialog.h16
-rw-r--r--src/settings.h1
4 files changed, 78 insertions, 29 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 9108464f..89cb9f56 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2983,7 +2983,7 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index,
dialog.openTab(tab);
}
- dialog.restoreTabState(m_OrganizerCore.settings().directInterface().value("mod_info_tabs").toByteArray());
+ dialog.restoreState(m_OrganizerCore.settings());
QSettings &settings = m_OrganizerCore.settings().directInterface();
QString key = QString("geometry/%1").arg(dialog.objectName());
if (settings.contains(key)) {
@@ -3001,7 +3001,7 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index,
}
dialog.exec();
- m_OrganizerCore.settings().directInterface().setValue("mod_info_tabs", dialog.saveTabState());
+ dialog.saveState(m_OrganizerCore.settings());
settings.setValue(key, dialog.saveGeometry());
modInfo->saveMeta();
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index d32b112f..ca09aaa0 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -266,7 +266,7 @@ bool FileRenamer::renameFailed(const QString& oldName, const QString& newName)
ExpanderWidget::ExpanderWidget()
- : m_button(nullptr), m_content(nullptr)
+ : m_button(nullptr), m_content(nullptr), opened_(false)
{
}
@@ -284,39 +284,41 @@ void ExpanderWidget::set(QToolButton* button, QWidget* content, bool o)
m_button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
m_button->setCheckable(true);
- if (o)
- open();
- else
- close();
-
+ toggle(o);
QObject::connect(m_button, &QToolButton::clicked, [&]{ toggle(); });
}
-void ExpanderWidget::open()
+void ExpanderWidget::toggle()
{
- m_button->setArrowType(Qt::DownArrow);
- m_button->setChecked(false);
- m_content->show();
+ if (opened()) {
+ toggle(false);
+ }
+ else {
+ toggle(true);
+ }
}
-void ExpanderWidget::close()
+void ExpanderWidget::toggle(bool b)
{
- m_button->setArrowType(Qt::RightArrow);
- m_button->setChecked(false);
- m_content->hide();
-}
+ if (b) {
+ m_button->setArrowType(Qt::DownArrow);
+ m_button->setChecked(false);
+ m_content->show();
+ } else {
+ m_button->setArrowType(Qt::RightArrow);
+ m_button->setChecked(false);
+ m_content->hide();
+ }
-void ExpanderWidget::toggle()
-{
- if (opened())
- close();
- else
- open();
+ // the state has to be remembered instead of using m_content's visibility
+ // because saving the state in saveConflictExpandersState() happens after the
+ // dialog is closed, which marks all the widgets hidden
+ opened_ = b;
}
bool ExpanderWidget::opened() const
{
- return m_content->isVisible();
+ return opened_;
}
@@ -507,6 +509,18 @@ int ModInfoDialog::tabIndex(const QString &tabId)
}
+void ModInfoDialog::saveState(Settings& s) const
+{
+ s.directInterface().setValue("mod_info_tabs", saveTabState());
+ s.directInterface().setValue("mod_info_conflict_expanders", saveConflictExpandersState());
+}
+
+void ModInfoDialog::restoreState(const Settings& s)
+{
+ restoreTabState(s.directInterface().value("mod_info_tabs").toByteArray());
+ restoreConflictExpandersState(s.directInterface().value("mod_info_conflict_expanders").toByteArray());
+}
+
void ModInfoDialog::restoreTabState(const QByteArray &state)
{
QDataStream stream(state);
@@ -538,6 +552,22 @@ void ModInfoDialog::restoreTabState(const QByteArray &state)
ui->tabWidget->blockSignals(false);
}
+void ModInfoDialog::restoreConflictExpandersState(const QByteArray &state)
+{
+ QDataStream stream(state);
+
+ bool overwriteExpanded = false;
+ bool overwrittenExpanded = false;
+ bool noConflictExpanded = false;
+
+ stream >> overwriteExpanded >> overwrittenExpanded >> noConflictExpanded;
+
+ if (stream.status() == QDataStream::Ok) {
+ m_overwriteExpander.toggle(overwriteExpanded);
+ m_overwrittenExpander.toggle(overwrittenExpanded);
+ m_nonconflictExpander.toggle(noConflictExpanded);
+ }
+}
QByteArray ModInfoDialog::saveTabState() const
{
@@ -551,6 +581,18 @@ QByteArray ModInfoDialog::saveTabState() const
return result;
}
+QByteArray ModInfoDialog::saveConflictExpandersState() const
+{
+ QByteArray result;
+ QDataStream stream(&result, QIODevice::WriteOnly);
+
+ stream
+ << m_overwriteExpander.opened()
+ << m_overwrittenExpander.opened()
+ << m_nonconflictExpander.opened();
+
+ return result;
+}
void ModInfoDialog::refreshLists()
{
diff --git a/src/modinfodialog.h b/src/modinfodialog.h
index 32efa210..3ce76740 100644
--- a/src/modinfodialog.h
+++ b/src/modinfodialog.h
@@ -191,14 +191,14 @@ public:
void set(QToolButton* button, QWidget* content, bool opened=false);
- void open();
- void close();
void toggle();
+ void toggle(bool b);
bool opened() const;
private:
QToolButton* m_button;
QWidget* m_content;
+ bool opened_;
};
@@ -257,9 +257,8 @@ public:
**/
void openTab(int tab);
- void restoreTabState(const QByteArray &state);
-
- QByteArray saveTabState() const;
+ void saveState(Settings& s) const;
+ void restoreState(const Settings& s);
signals:
@@ -408,6 +407,13 @@ private:
ExpanderWidget m_overwriteExpander, m_overwrittenExpander, m_nonconflictExpander;
+
+ void restoreTabState(const QByteArray &state);
+ void restoreConflictExpandersState(const QByteArray &state);
+
+ QByteArray saveTabState() const;
+ QByteArray saveConflictExpandersState() const;
+
bool canHideConflictItem(const QTreeWidgetItem* item) const;
bool canUnhideConflictItem(const QTreeWidgetItem* item) const;
bool canPreviewConflictItem(const QTreeWidgetItem* item) const;
diff --git a/src/settings.h b/src/settings.h
index ed49a1bc..04a0646e 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -306,6 +306,7 @@ public:
* @return the wrapped QSettings object
*/
QSettings &directInterface() { return m_Settings; }
+ const QSettings &directInterface() const { return m_Settings; }
/**
* @brief retrieve a setting for one of the installed plugins