summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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