diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-05-20 18:33:50 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-05-20 18:33:50 -0400 |
| commit | 513eaaa3556bc08c7ac9d03944ee35deff9d7ceb (patch) | |
| tree | 00118efcb71698b52784b08d500c0ac64a0d71d0 /src/modinfodialog.cpp | |
| parent | c5f61733850d6737814041f645a009e1cc60a7ed (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/modinfodialog.cpp')
| -rw-r--r-- | src/modinfodialog.cpp | 86 |
1 files changed, 64 insertions, 22 deletions
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() { |
