X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=e02549c6b6c1a6be36cc476c026fb6cbf0c1990e;hp=51f8b0e5d3ccb58ac7e05e9ade4fdc878b1c1d8f;hb=99bb37d9938f3d88ce7551ded454146359fadc03;hpb=1066294489c2469323a2813b63ae4653d148bbc7 diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 51f8b0e5..e02549c6 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -20,12 +20,20 @@ #include "bufferviewfilter.h" +#include + #include "buffermodel.h" #include "client.h" #include "networkmodel.h" #include "uisettings.h" +class CheckRemovalEvent : public QEvent { +public: + CheckRemovalEvent(const QModelIndex &source_index) : QEvent(QEvent::User), index(source_index) {}; + QPersistentModelIndex index; +}; + /***************************************** * The Filter for the Tree View *****************************************/ @@ -40,6 +48,9 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * setDynamicSortFilter(true); loadColors(); + + connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex))); } void BufferViewFilter::loadColors() { @@ -144,9 +155,9 @@ void BufferViewFilter::addBuffer(const BufferId &bufferId) { } void BufferViewFilter::removeBuffer(const QModelIndex &index) { - if(!config()) + if(!config() || !index.isValid() || index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType) return; - + BufferId bufferId = data(index, NetworkModel::BufferIdRole).value(); config()->requestRemoveBuffer(bufferId); } @@ -255,7 +266,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::NetworkItemType) + if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType) return; if(!config() || !config()->addNewBuffersAutomatically()) @@ -268,6 +279,28 @@ void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, } } +void BufferViewFilter::checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous) { + Q_UNUSED(current); + if(previous.isValid()) + QCoreApplication::postEvent(this, new CheckRemovalEvent(previous)); +} + +void BufferViewFilter::customEvent(QEvent *event) { + if(event->type() != QEvent::User) + return; + + CheckRemovalEvent *removalEvent = static_cast(event); + checkItemForRemoval(removalEvent->index); + + event->accept(); +} + +void BufferViewFilter::checkItemsForRemoval(const QModelIndex &topLeft, const QModelIndex &bottomRight) { + QModelIndex source_topLeft = mapToSource(topLeft); + QModelIndex source_bottomRight = mapToSource(bottomRight); + emit _dataChanged(source_topLeft, source_bottomRight); +} + // ****************************** // Helper // ******************************