#include <QColor>
+#include "buffermodel.h"
#include "client.h"
#include "networkmodel.h"
{
setConfig(config);
setSourceModel(model);
- // setSortCaseSensitivity(Qt::CaseInsensitive);
+ connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(source_rowsInserted(const QModelIndex &, int, int)));
+
setDynamicSortFilter(true);
}
networkId = bufferList[i].first;
bufferId = bufferList[i].second;
if(droppedNetworkId == networkId) {
+ if(row < 0)
+ row = 0;
if(row < rowCount(parent)) {
BufferId beforeBufferId = parent.child(row, 0).data(NetworkModel::BufferIdRole).value<BufferId>();
pos = config()->bufferList().indexOf(beforeBufferId);
}
void BufferViewFilter::addBuffer(const BufferId &bufferId) {
- if(config()->bufferList().contains(bufferId))
+ if(!config() || config()->bufferList().contains(bufferId))
return;
int pos = config()->bufferList().count();
bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const {
+ BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value<BufferId>();
+ Q_ASSERT(bufferId.isValid());
if(!_config)
return true;
+ if(config()->networkId().isValid() && config()->networkId() != sourceModel()->data(source_bufferIndex, NetworkModel::NetworkIdRole).value<NetworkId>())
+ return false;
+
if(!(_config->allowedBufferTypes() & (BufferInfo::Type)source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt()))
return false;
if(_config->hideInactiveBuffers() && !source_bufferIndex.data(NetworkModel::ItemActiveRole).toBool())
return false;
- if(_config->minimumActivity() > source_bufferIndex.data(NetworkModel::BufferActivityRole).toInt())
- return false;
+ if(_config->minimumActivity() > source_bufferIndex.data(NetworkModel::BufferActivityRole).toInt()) {
+ if(bufferId != Client::bufferModel()->standardSelectionModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>())
+ return false;
+ }
- BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value<BufferId>();
- return _config->bufferList().contains(bufferId);
+ return _config->bufferList().contains(bufferId);
}
bool BufferViewFilter::filterAcceptNetwork(const QModelIndex &source_index) const {
return false;
}
- if(source_parent == QModelIndex())
+ if(!source_parent.isValid())
return filterAcceptNetwork(child);
else
return filterAcceptBuffer(child);
}
bool BufferViewFilter::bufferLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
+ return QSortFilterProxyModel::lessThan(source_left, source_right);
BufferId leftBufferId = sourceModel()->data(source_left, NetworkModel::BufferIdRole).value<BufferId>();
BufferId rightBufferId = sourceModel()->data(source_right, NetworkModel::BufferIdRole).value<BufferId>();
if(config()) {
return config()->bufferList().indexOf(leftBufferId) < config()->bufferList().indexOf(rightBufferId);
} else
- return leftBufferId < rightBufferId;
+ return bufferIdLessThan(leftBufferId, rightBufferId);
}
bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
}
+void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, int end) {
+ if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
+ return;
+
+ if(!config() || !config()->addNewBuffersAutomatically())
+ return;
+
+ QModelIndex child;
+ for(int row = start; row <= end; row++) {
+ child = sourceModel()->index(row, 0, parent);
+ addBuffer(sourceModel()->data(child, NetworkModel::BufferIdRole).value<BufferId>());
+ }
+}
// ******************************
// Helper
if(leftType != rightType)
return leftType < rightType;
else
- return Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString() < Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString();
+ return QString::compare(Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString(), Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString(), Qt::CaseInsensitive) < 0;
}