From 9c7495aa055da5207af31272b478523f2ed2a809 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 13 Feb 2012 18:40:51 +0100 Subject: [PATCH] simplifying workaround for missing nickitems... especially getting rid of old workaround --- src/uisupport/nickview.cpp | 57 +++++++++++--------------------------- src/uisupport/nickview.h | 3 +- 2 files changed, 18 insertions(+), 42 deletions(-) diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index 34fb554e..8b157445 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -35,11 +35,6 @@ #include "networkmodel.h" #include "types.h" -class ExpandAllEvent : public QEvent { -public: - ExpandAllEvent() : QEvent(QEvent::User) {} -}; - NickView::NickView(QWidget *parent) : QTreeView(parent) { @@ -52,9 +47,9 @@ NickView::NickView(QWidget *parent) setContextMenuPolicy(Qt::CustomContextMenu); setSelectionMode(QAbstractItemView::ExtendedSelection); - // breaks with Qt 4.8 - if(QString("4.8.0") > qVersion()) // FIXME breaks with Qt versions >= 4.10! - setAnimated(true); +// // breaks with Qt 4.8 +// if(QString("4.8.0") > qVersion()) // FIXME breaks with Qt versions >= 4.10! + setAnimated(true); connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(showContextMenu(const QPoint&))); @@ -88,14 +83,14 @@ void NickView::setModel(QAbstractItemModel *model_) { void NickView::rowsInserted(const QModelIndex &parent, int start, int end) { QTreeView::rowsInserted(parent, start, end); if(model()->data(parent, NetworkModel::ItemTypeRole) == NetworkModel::UserCategoryItemType && !isExpanded(parent)) { - QCoreApplication::postEvent(this, new ExpandAllEvent); + unanimatedExpandAll(); } } void NickView::setRootIndex(const QModelIndex &index) { QAbstractItemView::setRootIndex(index); if(index.isValid()) - QCoreApplication::postEvent(this, new ExpandAllEvent); + unanimatedExpandAll(); } QModelIndexList NickView::selectedIndexes() const { @@ -110,6 +105,17 @@ QModelIndexList NickView::selectedIndexes() const { return indexList; } +void NickView::unanimatedExpandAll() { + // since of Qt Version 4.8.0 the default expandAll will not properly work if + // animations are enabled. Therefore we perform an unanimated expand when a + // model is set or a toplevel node is inserted. + bool wasAnimated = isAnimated(); + setAnimated(false); + expandAll(); + setAnimated(wasAnimated); +} + + void NickView::showContextMenu(const QPoint &pos ) { Q_UNUSED(pos); @@ -129,34 +135,3 @@ void NickView::startQuery(const QModelIndex &index) { Client::bufferModel()->switchToOrStartQuery(networkId, ircUser->nick()); } - -void NickView::customEvent(QEvent *event) { - // THIS IS A REPLACEMENT FOR expandAll() - /* WARNING: do not call expandAll()! - * it fucks up big time in combination with sorting and changing the rootIndex - * the following sequence of commands leads to unexpected behavior when inserting new items - * setSortingEnabled(true); - * setModel(); - * expandAll(); - * setRootIndex(); - */ - if(event->type() != QEvent::User) - return; - - if(!model()) - return; - - QModelIndex topLevelIdx; - for(int i = 0; i < model()->rowCount(rootIndex()); i++) { - topLevelIdx = model()->index(i, 0, rootIndex()); - if(isExpanded(topLevelIdx)) - continue; - else { - expand(topLevelIdx); - if(i < model()->rowCount(rootIndex()) - 1) - QCoreApplication::postEvent(this, new ExpandAllEvent); - break; - } - } - event->accept(); -} diff --git a/src/uisupport/nickview.h b/src/uisupport/nickview.h index e722537c..a95798cb 100644 --- a/src/uisupport/nickview.h +++ b/src/uisupport/nickview.h @@ -33,11 +33,12 @@ public: protected: virtual void rowsInserted(const QModelIndex &parent, int start, int end); - virtual void customEvent(QEvent *event); //! This reimplementation ensures that the current index is first in list virtual QModelIndexList selectedIndexes() const; + void unanimatedExpandAll(); + public slots: virtual void setModel(QAbstractItemModel *model); virtual void setRootIndex(const QModelIndex &index); -- 2.20.1