From c16309b21ea5aafca07b111567aa17be0f3155ea Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Fri, 18 Apr 2008 15:02:23 +0000 Subject: [PATCH] newly joined buffers are now selected properly --- src/client/buffermodel.cpp | 4 ++-- src/uisupport/bufferview.cpp | 29 ++++++++++++++++++++++++----- src/uisupport/bufferview.h | 1 + src/uisupport/bufferviewfilter.cpp | 2 +- version.inc | 4 ++-- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/client/buffermodel.cpp b/src/client/buffermodel.cpp index c487e0fb..b67a447d 100644 --- a/src/client/buffermodel.cpp +++ b/src/client/buffermodel.cpp @@ -64,8 +64,8 @@ QModelIndex BufferModel::currentIndex() { } void BufferModel::setCurrentIndex(const QModelIndex &newCurrent) { - _selectionModelSynchronizer.selectionModel()->setCurrentIndex(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); - _selectionModelSynchronizer.selectionModel()->select(newCurrent, QItemSelectionModel::Current); + _selectionModelSynchronizer.selectionModel()->setCurrentIndex(newCurrent, QItemSelectionModel::Current); + _selectionModelSynchronizer.selectionModel()->select(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } void BufferModel::debug_currentChanged(QModelIndex current, QModelIndex previous) { diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 598686ec..9887818b 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -20,9 +20,11 @@ #include "bufferview.h" +#include "buffermodel.h" #include "bufferviewfilter.h" #include "buffersyncer.h" #include "client.h" +#include "mappedselectionmodel.h" #include "network.h" #include "networkmodel.h" @@ -78,11 +80,12 @@ void BufferView::init() { void BufferView::setModel(QAbstractItemModel *model) { delete selectionModel(); + if(QTreeView::model()) { + disconnect(QTreeView::model(), SIGNAL(layoutChanged()), this, SLOT(updateSelection())); + } + QTreeView::setModel(model); init(); - if(!model) - return; - // remove old Actions QList oldactions = header()->actions(); foreach(QAction *action, oldactions) { @@ -90,6 +93,11 @@ void BufferView::setModel(QAbstractItemModel *model) { action->deleteLater(); } + if(!model) + return; + + connect(model, SIGNAL(layoutChanged()), this, SLOT(updateSelection())); + QString sectionName; QAction *showSection; for(int i = 1; i < model->columnCount(); i++) { @@ -182,14 +190,25 @@ void BufferView::keyPressEvent(QKeyEvent *event) { // ensure that newly inserted network nodes are expanded per default void BufferView::rowsInserted(const QModelIndex & parent, int start, int end) { QTreeView::rowsInserted(parent, start, end); - if(model()->rowCount(parent) == 1 && parent.data(NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType - && parent.data(NetworkModel::ItemActiveRole) == true) { + if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType) + return; + + if(model()->rowCount(parent) == 1 && parent.data(NetworkModel::ItemActiveRole) == true) { // without updating the parent the expand will have no effect... Qt Bug? update(parent); expand(parent); } } +void BufferView::updateSelection() { + MappedSelectionModel *mappedSelectionModel = qobject_cast(selectionModel()); + if(!config()) + return; + + mappedSelectionModel->mappedSetCurrentIndex(Client::bufferModel()->standardSelectionModel()->currentIndex(), QItemSelectionModel::Current); + mappedSelectionModel->mappedSelect(Client::bufferModel()->standardSelectionModel()->selection(), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); +} + void BufferView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { QTreeView::dataChanged(topLeft, bottomRight); diff --git a/src/uisupport/bufferview.h b/src/uisupport/bufferview.h index b766f99c..6485fa5b 100644 --- a/src/uisupport/bufferview.h +++ b/src/uisupport/bufferview.h @@ -64,6 +64,7 @@ private slots: void joinChannel(const QModelIndex &index); void toggleHeader(bool checked); void showContextMenu(const QPoint &); + void updateSelection(); private: QPointer _config; diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 49f1673a..293870d8 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -255,7 +255,7 @@ QVariant BufferViewFilter::foreground(const QModelIndex &index) const { } void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, int end) { - if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType) + if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType) return; if(!config() || !config()->addNewBuffersAutomatically()) diff --git a/version.inc b/version.inc index 03281a3d..021ed4a2 100644 --- a/version.inc +++ b/version.inc @@ -4,8 +4,8 @@ { using namespace Global; quasselVersion = "0.2.0-beta1-pre"; - quasselDate = "2008-04-16"; - quasselBuild = 756; + quasselDate = "2008-04-18"; + quasselBuild = 777; //! Minimum client build number the core needs clientBuildNeeded = 731; -- 2.20.1