+ default:
+ return false;
+ }
+}
+
+bool BufferViewFilter::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
+ int leftItemType = sourceModel()->data(source_left, NetworkModel::ItemTypeRole).toInt();
+ int rightItemType = sourceModel()->data(source_right, NetworkModel::ItemTypeRole).toInt();
+ int itemType = leftItemType & rightItemType;
+ switch(itemType) {
+ case NetworkModel::NetworkItemType:
+ return networkLessThan(source_left, source_right);
+ case NetworkModel::BufferItemType:
+ return bufferLessThan(source_left, source_right);
+ default:
+ return QSortFilterProxyModel::lessThan(source_left, source_right);
+ }
+}
+
+bool BufferViewFilter::bufferLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
+ BufferId leftBufferId = sourceModel()->data(source_left, NetworkModel::BufferIdRole).value<BufferId>();
+ BufferId rightBufferId = sourceModel()->data(source_right, NetworkModel::BufferIdRole).value<BufferId>();
+ if(config()) {
+ int leftPos = config()->bufferList().indexOf(leftBufferId);
+ int rightPos = config()->bufferList().indexOf(rightBufferId);
+ if(leftPos == -1 && rightPos == -1)
+ return QSortFilterProxyModel::lessThan(source_left, source_right);
+ if(leftPos == -1 || rightPos == -1)
+ return !(leftPos < rightPos);
+ return leftPos < rightPos;
+ } else
+ return bufferIdLessThan(leftBufferId, rightBufferId);
+}
+
+bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
+ NetworkId leftNetworkId = sourceModel()->data(source_left, NetworkModel::NetworkIdRole).value<NetworkId>();
+ NetworkId rightNetworkId = sourceModel()->data(source_right, NetworkModel::NetworkIdRole).value<NetworkId>();
+
+ return QSortFilterProxyModel::lessThan(source_left, source_right);
+}
+
+QVariant BufferViewFilter::data(const QModelIndex &index, int role) const {
+ switch(role) {
+ case Qt::FontRole:
+ case Qt::ForegroundRole:
+ case Qt::BackgroundRole:
+ case Qt::DecorationRole:
+ if((config() && config()->disableDecoration()))
+ return QVariant();
+ return GraphicalUi::uiStyle()->bufferViewItemData(mapToSource(index), role);
+ case Qt::CheckStateRole:
+ return checkedState(index);
+ default:
+ return QSortFilterProxyModel::data(index, role);
+ }
+}
+
+QVariant BufferViewFilter::checkedState(const QModelIndex &index) const {
+ if(!_editMode || !config())
+ return QVariant();
+
+ QModelIndex source_index = mapToSource(index);
+ if(source_index == QModelIndex() || sourceModel()->data(source_index, NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType)
+ return QVariant();
+
+ BufferId bufferId = sourceModel()->data(source_index, NetworkModel::BufferIdRole).value<BufferId>();
+ if(_toAdd.contains(bufferId))
+ return Qt::Checked;
+
+ if(_toTempRemove.contains(bufferId))
+ return Qt::PartiallyChecked;
+
+ if(_toRemove.contains(bufferId))
+ return Qt::Unchecked;
+
+ if(config()->bufferList().contains(bufferId))
+ return Qt::Checked;
+
+ if(config()->temporarilyRemovedBuffers().contains(bufferId))
+ return Qt::PartiallyChecked;
+
+ return Qt::Unchecked;