From 925149e4675223754de4962b95728b76647d4949 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 12 Apr 2010 20:36:00 +0200 Subject: [PATCH] BufferViewOverlay now correctly respects filtering of buffer types --- src/client/bufferviewoverlay.cpp | 88 ++++++++++------------- src/client/bufferviewoverlay.h | 7 +- src/qtui/debugbufferviewoverlay.cpp | 4 -- src/uisupport/bufferviewoverlayfilter.cpp | 7 +- 4 files changed, 40 insertions(+), 66 deletions(-) diff --git a/src/client/bufferviewoverlay.cpp b/src/client/bufferviewoverlay.cpp index b1938d11..f4b29857 100644 --- a/src/client/bufferviewoverlay.cpp +++ b/src/client/bufferviewoverlay.cpp @@ -33,8 +33,6 @@ BufferViewOverlay::BufferViewOverlay(QObject *parent) : QObject(parent), _aboutToUpdate(false), _uninitializedViewCount(0), - _addBuffersAutomatically(false), - _hideInactiveBuffers(false), _allowedBufferTypes(0), _minimumActivity(0) { @@ -98,11 +96,9 @@ void BufferViewOverlay::viewInitialized(BufferViewConfig *config) { } disconnect(config, SIGNAL(initDone()), this, SLOT(viewInitialized())); - connect(config, SIGNAL(configChanged()), this, SLOT(update())); + connect(config, SIGNAL(configChanged()), this, SLOT(update())); // connect(config, SIGNAL(networkIdSet(const NetworkId &)), this, SLOT(update())); -// connect(config, SIGNAL(addNewBuffersAutomaticallySet(bool)), this, SLOT(update())); // connect(config, SIGNAL(sortAlphabeticallySet(bool)), this, SLOT(update())); -// connect(config, SIGNAL(hideInactiveBuffersSet(bool)), this, SLOT(update())); // connect(config, SIGNAL(allowedBufferTypesSet(int)), this, SLOT(update())); // connect(config, SIGNAL(minimumActivitySet(int)), this, SLOT(update())); // connect(config, SIGNAL(bufferListSet()), this, SLOT(update())); @@ -140,8 +136,6 @@ void BufferViewOverlay::updateHelper() { bool changed = false; - bool addBuffersAutomatically = false; - bool hideInactiveBuffers = true; int allowedBufferTypes = 0; int minimumActivity = -1; QSet networkIds; @@ -157,48 +151,32 @@ void BufferViewOverlay::updateHelper() { if(!config) continue; - networkIds << config->networkId(); - if(config->networkId().isValid()) { - NetworkId networkId = config->networkId(); - // we have to filter out all the buffers that don't belong to this net... :/ - QSet bufferIds; - foreach(BufferId bufferId, config->bufferList()) { - if(Client::networkModel()->networkId(bufferId) == networkId) - bufferIds << bufferId; - } - buffers += bufferIds; - - bufferIds.clear(); - foreach(BufferId bufferId, config->temporarilyRemovedBuffers()) { - if(Client::networkModel()->networkId(bufferId) == networkId) - bufferIds << bufferId; - } - tempRemovedBuffers += bufferIds; - } else { - buffers += config->bufferList().toSet(); - tempRemovedBuffers += config->temporarilyRemovedBuffers(); - } - - // in the overlay a buffer is removed it is removed from all views - if(removedBuffers.isEmpty()) - removedBuffers = config->removedBuffers(); - else - removedBuffers.intersect(config->removedBuffers()); - - - addBuffersAutomatically |= config->addNewBuffersAutomatically(); - hideInactiveBuffers &= config->hideInactiveBuffers(); allowedBufferTypes |= config->allowedBufferTypes(); if(minimumActivity == -1 || config->minimumActivity() < minimumActivity) minimumActivity = config->minimumActivity(); + + networkIds << config->networkId(); + + + // we have to apply several filters before we can add a buffer to a category (visible, removed, ...) + buffers += filterBuffersByConfig(config->bufferList(), config); + tempRemovedBuffers += filterBuffersByConfig(config->temporarilyRemovedBuffers().toList(), config); + removedBuffers += config->removedBuffers(); } + + // prune the sets from overlap QSet availableBuffers = Client::networkModel()->allBufferIds().toSet(); + buffers.intersect(availableBuffers); + tempRemovedBuffers.intersect(availableBuffers); + tempRemovedBuffers.subtract(buffers); + + removedBuffers.intersect(availableBuffers); + removedBuffers.subtract(tempRemovedBuffers); + removedBuffers.subtract(buffers); } - changed |= (addBuffersAutomatically != _addBuffersAutomatically); - changed |= (hideInactiveBuffers != _hideInactiveBuffers); changed |= (allowedBufferTypes != _allowedBufferTypes); changed |= (minimumActivity != _minimumActivity); changed |= (networkIds != _networkIds); @@ -206,8 +184,6 @@ void BufferViewOverlay::updateHelper() { changed |= (removedBuffers != _removedBuffers); changed |= (tempRemovedBuffers != _tempRemovedBuffers); - _addBuffersAutomatically = addBuffersAutomatically; - _hideInactiveBuffers = hideInactiveBuffers; _allowedBufferTypes = allowedBufferTypes; _minimumActivity = minimumActivity; _networkIds = networkIds; @@ -221,6 +197,24 @@ void BufferViewOverlay::updateHelper() { emit hasChanged(); } +QSet BufferViewOverlay::filterBuffersByConfig(const QList &buffers, const BufferViewConfig *config) { + Q_ASSERT(config); + + QSet bufferIds; + BufferInfo bufferInfo; + foreach(BufferId bufferId, buffers) { + bufferInfo = Client::networkModel()->bufferInfo(bufferId); + if(!(bufferInfo.type() & config->allowedBufferTypes())) + continue; + if(config->networkId().isValid() && bufferInfo.networkId() != config->networkId()) + continue; + bufferIds << bufferId; + } + + return bufferIds; +} + + void BufferViewOverlay::customEvent(QEvent *event) { if(event->type() == _updateEventId) { updateHelper(); @@ -252,16 +246,6 @@ const QSet &BufferViewOverlay::tempRemovedBufferIds() { return _tempRemovedBuffers; } -bool BufferViewOverlay::addBuffersAutomatically() { - updateHelper(); - return _addBuffersAutomatically; -} - -bool BufferViewOverlay::hideInactiveBuffers() { - updateHelper(); - return _hideInactiveBuffers; -} - int BufferViewOverlay::allowedBufferTypes() { updateHelper(); return _allowedBufferTypes; diff --git a/src/client/bufferviewoverlay.h b/src/client/bufferviewoverlay.h index 96f63238..204e5530 100644 --- a/src/client/bufferviewoverlay.h +++ b/src/client/bufferviewoverlay.h @@ -42,8 +42,6 @@ public: const QSet &removedBufferIds(); const QSet &tempRemovedBufferIds(); - bool addBuffersAutomatically(); - bool hideInactiveBuffers(); int allowedBufferTypes(); int minimumActivity(); @@ -69,15 +67,14 @@ private slots: private: void updateHelper(); + QSet filterBuffersByConfig(const QList &buffers, const BufferViewConfig *config); + bool _aboutToUpdate; QSet _bufferViewIds; int _uninitializedViewCount; QSet _networkIds; - - bool _addBuffersAutomatically; - bool _hideInactiveBuffers; int _allowedBufferTypes; int _minimumActivity; diff --git a/src/qtui/debugbufferviewoverlay.cpp b/src/qtui/debugbufferviewoverlay.cpp index 976499ac..1207c2a2 100644 --- a/src/qtui/debugbufferviewoverlay.cpp +++ b/src/qtui/debugbufferviewoverlay.cpp @@ -54,8 +54,6 @@ DebugBufferViewOverlay::DebugBufferViewOverlay(QWidget *parent) layout->addRow(tr("Removed buffers:"), _removedBufferIds = new QTextEdit(this)); layout->addRow(tr("Temp. removed buffers:"), _tempRemovedBufferIds = new QTextEdit(this)); - layout->addRow(tr("Add Buffers Automatically:"), _addBuffersAutomatically = new QLabel(this)); - layout->addRow(tr("Hide inactive buffers:"), _hideInactiveBuffers = new QLabel(this)); layout->addRow(tr("Allowed buffer types:"), _allowedBufferTypes = new QLabel(this)); layout->addRow(tr("Minimum activity:"), _minimumActivity = new QLabel(this)); @@ -100,8 +98,6 @@ void DebugBufferViewOverlay::update() { } _tempRemovedBufferIds->setText(ids.join(", ")); - _addBuffersAutomatically->setText(overlay->addBuffersAutomatically() ? "yes" : "no"); - _hideInactiveBuffers->setText(overlay->hideInactiveBuffers() ? "yes" : "no"); _allowedBufferTypes->setText(QString::number(overlay->allowedBufferTypes())); _minimumActivity->setText(QString::number(overlay->minimumActivity())); diff --git a/src/uisupport/bufferviewoverlayfilter.cpp b/src/uisupport/bufferviewoverlayfilter.cpp index 992ab6c9..4309ee91 100644 --- a/src/uisupport/bufferviewoverlayfilter.cpp +++ b/src/uisupport/bufferviewoverlayfilter.cpp @@ -83,10 +83,6 @@ bool BufferViewOverlayFilter::filterAcceptsRow(int source_row, const QModelIndex if(_overlay->minimumActivity() > activityLevel) return false; - bool isActive = sourceModel()->data(source_bufferIndex, NetworkModel::ItemActiveRole).toBool(); - if(_overlay->hideInactiveBuffers() && !isActive && activityLevel <= BufferInfo::OtherActivity) - return false; - int bufferType = sourceModel()->data(source_bufferIndex, NetworkModel::BufferTypeRole).toInt(); if(!(_overlay->allowedBufferTypes() & bufferType)) return false; @@ -104,6 +100,7 @@ bool BufferViewOverlayFilter::filterAcceptsRow(int source_row, const QModelIndex return false; // the buffer is not known to us - return _overlay->addBuffersAutomatically(); + qDebug() << "BufferViewOverlayFilter::filterAcceptsRow()" << bufferId << "is unknown!"; + return false; } -- 2.20.1