try to fix problems related to errorneous saving of message list header state

This commit is contained in:
Martin Rotter 2021-08-17 08:07:49 +02:00
parent 4f6ec40356
commit b81ac69578
4 changed files with 53 additions and 3 deletions

View File

@ -30,7 +30,7 @@
<url type="donation">https://martinrotter.github.io/donate/</url>
<content_rating type="oars-1.1" />
<releases>
<release version="4.0.0" date="2021-08-16"/>
<release version="4.0.0" date="2021-08-17"/>
</releases>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>

View File

@ -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()));
}
}

View File

@ -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,

View File

@ -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);