Fixed column resize mode setup for messages.

This commit is contained in:
Martin Rotter 2013-12-26 19:57:14 +01:00
parent b3cc490d85
commit 2508286e99
3 changed files with 64 additions and 51 deletions

View file

@ -25,13 +25,15 @@ QList<Message> 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<Message> 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();

View file

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

View file

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