diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 4 | ||||
| -rw-r--r-- | src/modinfodialog.cpp | 86 | ||||
| -rw-r--r-- | src/modinfodialog.h | 16 | ||||
| -rw-r--r-- | src/settings.h | 1 |
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 |
