X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtgui%2Fbufferviewfilter.cpp;h=57155ea01e66ef533da6843b5706077d0b6c206e;hp=caa1fb382f4f363130927f6fa8bb2e776b82fa93;hb=64ff44560cc13569ab4968e3d974b0b7e9820607;hpb=73edffb5f0f6ecae4118c36a7ca2c0d479b7f8c6 diff --git a/src/qtgui/bufferviewfilter.cpp b/src/qtgui/bufferviewfilter.cpp index caa1fb38..57155ea0 100644 --- a/src/qtgui/bufferviewfilter.cpp +++ b/src/qtgui/bufferviewfilter.cpp @@ -25,6 +25,9 @@ *****************************************/ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, Modes filtermode, QStringList nets, QObject *parent) : QSortFilterProxyModel(parent) { setSourceModel(model); + setSortRole(BufferTreeModel::BufferNameRole); + setSortCaseSensitivity(Qt::CaseInsensitive); + mode = filtermode; networks = nets; @@ -51,22 +54,70 @@ void BufferViewFilter::doubleClickReceived(const QModelIndex &clicked) { emit doubleClicked(mapToSource(clicked)); } -bool BufferViewFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { - QModelIndex child = source_parent.child(source_row, 0); - if(!child.isValid()) - return true; // can't imagine this case but true sounds good :) +void BufferViewFilter::enterDrag() { + connect(sourceModel(), SIGNAL(addBuffer(const uint &, const QString &)), + this, SLOT(addBuffer(const uint &, const QString &))); +} + +void BufferViewFilter::leaveDrag() { + disconnect(sourceModel(), SIGNAL(addBuffer(const uint &, const QString &)), + this, SLOT(addBuffer(const uint &, const QString &))); +} - Buffer::Type bufferType = (Buffer::Type) child.data(BufferTreeModel::BufferTypeRole).toInt(); +void BufferViewFilter::addBuffer(const uint &bufferuid, const QString &network) { + if(!networks.contains(network)) { + networks << network; + } + + if(!customBuffers.contains(bufferuid)) { + customBuffers << bufferuid; + invalidateFilter(); + } + +} + +bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const { + Buffer::Type bufferType = (Buffer::Type) source_bufferIndex.data(BufferTreeModel::BufferTypeRole).toInt(); if((mode & NoChannels) && bufferType == Buffer::ChannelBuffer) return false; if((mode & NoQueries) && bufferType == Buffer::QueryBuffer) return false; if((mode & NoServers) && bufferType == Buffer::ServerBuffer) return false; - bool isActive = child.data(BufferTreeModel::BufferActiveRole).toBool(); + bool isActive = source_bufferIndex.data(BufferTreeModel::BufferActiveRole).toBool(); if((mode & NoActive) && isActive) return false; if((mode & NoInactive) && !isActive) return false; - QString net = child.data(Qt::DisplayRole).toString(); - if((mode & SomeNets) && !networks.contains(net)) return false; + if((mode & FullCustom)) { + uint bufferuid = source_bufferIndex.data(BufferTreeModel::BufferIdRole).toUInt(); + if(!customBuffers.contains(bufferuid)) + return false; + } return true; } + +bool BufferViewFilter::filterAcceptNetwork(const QModelIndex &source_index) const { + QString net = source_index.data(Qt::DisplayRole).toString(); + if((mode & SomeNets) && !networks.contains(net)) + return false; + else + return true; +} + +bool BufferViewFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + QModelIndex child = sourceModel()->index(source_row, 0, source_parent); + + if(!child.isValid()) { + qDebug() << "filterAcceptsRow has been called with an invalid Child"; + return false; + } + + if(source_parent == QModelIndex()) + return filterAcceptNetwork(child); + else + return filterAcceptBuffer(child); +} + +bool BufferViewFilter::lessThan(const QModelIndex &left, const QModelIndex &right) { + return QSortFilterProxyModel::lessThan(left, right); +} +