diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index 3c839a428..f2e9830c0 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -30,7 +30,7 @@ https://martinrotter.github.io/donate/ - + none diff --git a/src/librssguard/gui/feedmessageviewer.cpp b/src/librssguard/gui/feedmessageviewer.cpp index 477a7caa7..195a75b3c 100644 --- a/src/librssguard/gui/feedmessageviewer.cpp +++ b/src/librssguard/gui/feedmessageviewer.cpp @@ -91,7 +91,7 @@ void FeedMessageViewer::saveSize() { // Store offsets of splitters. settings->setValue(GROUP(GUI), GUI::SplitterFeeds, QString(m_feedSplitter->saveState().toBase64())); settings->setValue(GROUP(GUI), GUI::SplitterMessages, QString(m_messageSplitter->saveState().toBase64())); - settings->setValue(GROUP(GUI), GUI::MessageViewState, QString(m_messagesView->header()->saveState().toBase64())); + settings->setValue(GROUP(GUI), GUI::MessageViewState, QString(m_messagesView->saveHeaderState().toBase64())); // Store "visibility" of toolbars and list headers. settings->setValue(GROUP(GUI), GUI::ToolbarsVisible, m_toolBarsEnabled); @@ -109,7 +109,7 @@ void FeedMessageViewer::loadSize() { QString settings_msg_header = settings->value(GROUP(GUI), SETTING(GUI::MessageViewState)).toString(); if (!settings_msg_header.isEmpty()) { - m_messagesView->header()->restoreState(QByteArray::fromBase64(settings_msg_header.toLocal8Bit())); + m_messagesView->restoreHeaderState(QByteArray::fromBase64(settings_msg_header.toLocal8Bit())); } } diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp index da3cf5005..430611c43 100644 --- a/src/librssguard/gui/messagesview.cpp +++ b/src/librssguard/gui/messagesview.cpp @@ -52,6 +52,53 @@ void MessagesView::reloadFontSettings() { m_sourceModel->setupFonts(); } +QByteArray MessagesView::saveHeaderState() const { + QByteArray arr; + QDataStream outt(&arr, QIODevice::OpenModeFlag::WriteOnly); + + outt.setVersion(QDataStream::Version::Qt_4_7); + outt << header()->count(); + outt << header()->sortIndicatorOrder(); + outt << header()->sortIndicatorSection(); + + // Save column data. + for (int i = 0; i < header()->count(); i++) { + outt << header()->visualIndex(i); + outt << header()->sectionSize(i); + outt << header()->isSectionHidden(i); + } + + return arr; +} + +void MessagesView::restoreHeaderState(const QByteArray& data) { + QByteArray arr = data; + QDataStream inn(&arr, QIODevice::OpenModeFlag::ReadOnly); + + inn.setVersion(QDataStream::Version::Qt_4_7); + + int saved_header_count; inn >> saved_header_count; + Qt::SortOrder saved_sort_order; inn >> saved_sort_order; + int saved_sort_column; inn >> saved_sort_column; + + for (int i = 0; i < saved_header_count && i < header()->count(); i++) { + int vi, ss; + bool ish; + + inn >> vi; + inn >> ss; + inn >> ish; + + header()->swapSections(header()->visualIndex(i), vi); + header()->resizeSection(i, ss); + header()->setSectionHidden(i, ish); + } + + if (saved_sort_column < header()->count()) { + header()->setSortIndicator(saved_sort_column, saved_sort_order); + } +} + void MessagesView::sort(int column, Qt::SortOrder order, bool repopulate_data, bool change_header, bool emit_changed_from_header, diff --git a/src/librssguard/gui/messagesview.h b/src/librssguard/gui/messagesview.h index cc6f9e810..bf3f17a4a 100644 --- a/src/librssguard/gui/messagesview.h +++ b/src/librssguard/gui/messagesview.h @@ -24,6 +24,9 @@ class MessagesView : public QTreeView { void reloadFontSettings(); + QByteArray saveHeaderState() const; + void restoreHeaderState(const QByteArray& data); + public slots: void keyboardSearch(const QString& search);