From 2508286e99dbdd3df4a9a681648f66fe31fe4528 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 26 Dec 2013 19:57:14 +0100 Subject: [PATCH] Fixed column resize mode setup for messages. --- src/core/parsingfactory.cpp | 17 ++++--- src/gui/messagesview.cpp | 94 ++++++++++++++++++++----------------- src/gui/messagesview.h | 4 ++ 3 files changed, 64 insertions(+), 51 deletions(-) diff --git a/src/core/parsingfactory.cpp b/src/core/parsingfactory.cpp index b376049c1..da91b16f5 100644 --- a/src/core/parsingfactory.cpp +++ b/src/core/parsingfactory.cpp @@ -25,13 +25,15 @@ QList ParsingFactory::parseAsRSS20(const QString &data) { QDomNodeList messages_in_xml = xml_file.elementsByTagName("item"); for (int i = 0; i < messages_in_xml.size(); i++) { - QDomElement elem_link = messages_in_xml.item(i).namedItem("link").toElement(); - QDomElement elem_description = messages_in_xml.item(i).namedItem("description").toElement(); - QDomElement elem_description2 = messages_in_xml.item(i).namedItem("encoded").toElement(); - QDomElement elem_title = messages_in_xml.item(i).namedItem("title").toElement(); - QDomElement elem_updated = messages_in_xml.item(i).namedItem("pubDate").toElement(); - QDomElement elem_author = messages_in_xml.item(i).namedItem("author").toElement(); - QDomElement elem_author2 = messages_in_xml.item(i).namedItem("creator").toElement(); + QDomNode message_item = messages_in_xml.item(i); + + QDomElement elem_link = message_item.namedItem("link").toElement(); + QDomElement elem_description = message_item.namedItem("description").toElement(); + QDomElement elem_description2 = message_item.namedItem("encoded").toElement(); + QDomElement elem_title = message_item.namedItem("title").toElement(); + QDomElement elem_updated = message_item.namedItem("pubDate").toElement(); + QDomElement elem_author = message_item.namedItem("author").toElement(); + QDomElement elem_author2 = message_item.namedItem("creator").toElement(); // RSS 1.0 requires to have title and link valid. if (elem_description.text().isEmpty() && elem_title.text().isEmpty()) { @@ -57,6 +59,7 @@ QList ParsingFactory::parseAsRSS20(const QString &data) { new_message.m_author = elem_author2.text(); } + // Setup dates. new_message.m_created = TextFactory::parseDateTime(elem_updated.text()); new_message.m_createdFromFeed = !new_message.m_created.isNull(); diff --git a/src/gui/messagesview.cpp b/src/gui/messagesview.cpp index dc8d9f003..d4326af39 100644 --- a/src/gui/messagesview.cpp +++ b/src/gui/messagesview.cpp @@ -14,7 +14,10 @@ MessagesView::MessagesView(QWidget *parent) - : QTreeView(parent), m_contextMenu(NULL), m_batchUnreadSwitch(false) { + : QTreeView(parent), + m_contextMenu(NULL), + m_columnsAdjusted(false), + m_batchUnreadSwitch(false) { m_proxyModel = new MessagesProxyModel(this); m_sourceModel = m_proxyModel->sourceModel(); @@ -37,6 +40,10 @@ void MessagesView::createConnections() { // in new tab on double click. connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(openSelectedSourceMessagesInternally())); + + // Adjust columns when layout gets changed. + connect(header(), SIGNAL(geometriesChanged()), + this, SLOT(adjustColumns())); } MessagesModel *MessagesView::sourceModel() { @@ -53,49 +60,6 @@ void MessagesView::setSortingEnabled(bool enable) { } void MessagesView::setupAppearance() { - // FIXME: Sometimes ASSERT occurs if model provides less columns - // than we set resize mode for. - int column_count = header()->count(); - - qDebug("Loading MessagesView with %d columns.", - column_count); - - if (column_count > 0) { -#if QT_VERSION >= 0x050000 - // Setup column resize strategies. - header()->setSectionResizeMode(MSG_DB_ID_INDEX, QHeaderView::Interactive); - header()->setSectionResizeMode(MSG_DB_READ_INDEX, QHeaderView::ResizeToContents); - header()->setSectionResizeMode(MSG_DB_DELETED_INDEX, QHeaderView::Interactive); - header()->setSectionResizeMode(MSG_DB_IMPORTANT_INDEX, QHeaderView::ResizeToContents); - header()->setSectionResizeMode(MSG_DB_FEED_INDEX, QHeaderView::Interactive); - header()->setSectionResizeMode(MSG_DB_TITLE_INDEX, QHeaderView::Stretch); - header()->setSectionResizeMode(MSG_DB_URL_INDEX, QHeaderView::Interactive); - header()->setSectionResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive); - header()->setSectionResizeMode(MSG_DB_DCREATED_INDEX, QHeaderView::Interactive); - header()->setSectionResizeMode(MSG_DB_CONTENTS_INDEX, QHeaderView::Interactive); -#else - // Setup column resize strategies. - header()->setResizeMode(MSG_DB_ID_INDEX, QHeaderView::Interactive); - header()->setResizeMode(MSG_DB_READ_INDEX, QHeaderView::ResizeToContents); - header()->setResizeMode(MSG_DB_DELETED_INDEX, QHeaderView::Interactive); - header()->setResizeMode(MSG_DB_IMPORTANT_INDEX, QHeaderView::ResizeToContents); - header()->setResizeMode(MSG_DB_FEED_INDEX, QHeaderView::Interactive); - header()->setResizeMode(MSG_DB_TITLE_INDEX, QHeaderView::Stretch); - header()->setResizeMode(MSG_DB_URL_INDEX, QHeaderView::Interactive); - header()->setResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive); - header()->setResizeMode(MSG_DB_DCREATED_INDEX, QHeaderView::Interactive); - header()->setResizeMode(MSG_DB_CONTENTS_INDEX, QHeaderView::Interactive); -#endif - - // Hide columns. - // TODO: Make this changeable. - hideColumn(MSG_DB_ID_INDEX); - hideColumn(MSG_DB_DELETED_INDEX); - hideColumn(MSG_DB_FEED_INDEX); - hideColumn(MSG_DB_URL_INDEX); - hideColumn(MSG_DB_CONTENTS_INDEX); - } - header()->setDefaultSectionSize(MESSAGES_VIEW_DEFAULT_COL); header()->setStretchLastSection(false); setUniformRowHeights(true); @@ -388,3 +352,45 @@ void MessagesView::reselectIndexes(const QModelIndexList &indexes) { QItemSelectionModel::Rows); } } + +void MessagesView::adjustColumns() { + if (header()->count() == 10 && !m_columnsAdjusted) { + m_columnsAdjusted = true; + +#if QT_VERSION >= 0x050000 + // Setup column resize strategies. + header()->setSectionResizeMode(MSG_DB_ID_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_READ_INDEX, QHeaderView::ResizeToContents); + header()->setSectionResizeMode(MSG_DB_DELETED_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_IMPORTANT_INDEX, QHeaderView::ResizeToContents); + header()->setSectionResizeMode(MSG_DB_FEED_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_TITLE_INDEX, QHeaderView::Stretch); + header()->setSectionResizeMode(MSG_DB_URL_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_DCREATED_INDEX, QHeaderView::Interactive); + header()->setSectionResizeMode(MSG_DB_CONTENTS_INDEX, QHeaderView::Interactive); +#else + // Setup column resize strategies. + header()->setResizeMode(MSG_DB_ID_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_READ_INDEX, QHeaderView::ResizeToContents); + header()->setResizeMode(MSG_DB_DELETED_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_IMPORTANT_INDEX, QHeaderView::ResizeToContents); + header()->setResizeMode(MSG_DB_FEED_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_TITLE_INDEX, QHeaderView::Stretch); + header()->setResizeMode(MSG_DB_URL_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_AUTHOR_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_DCREATED_INDEX, QHeaderView::Interactive); + header()->setResizeMode(MSG_DB_CONTENTS_INDEX, QHeaderView::Interactive); +#endif + + // Hide columns. + // TODO: Make this changeable. + hideColumn(MSG_DB_ID_INDEX); + hideColumn(MSG_DB_DELETED_INDEX); + hideColumn(MSG_DB_FEED_INDEX); + hideColumn(MSG_DB_URL_INDEX); + hideColumn(MSG_DB_CONTENTS_INDEX); + + qDebug("Adjusting column resize modes for MessagesView."); + } +} diff --git a/src/gui/messagesview.h b/src/gui/messagesview.h index 6e567cf93..46656c96e 100755 --- a/src/gui/messagesview.h +++ b/src/gui/messagesview.h @@ -53,6 +53,9 @@ class MessagesView : public QTreeView { // Marks given indexes as selected. void reselectIndexes(const QModelIndexList &indexes); + // Changes resize mode for all columns. + void adjustColumns(); + protected: void initializeContextMenu(); void setupAppearance(); @@ -79,6 +82,7 @@ class MessagesView : public QTreeView { MessagesProxyModel *m_proxyModel; MessagesModel *m_sourceModel; + bool m_columnsAdjusted; bool m_batchUnreadSwitch; };