+bool BufferViewFilter::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
+ int itemType = sourceModel()->data(source_left, NetworkModel::ItemTypeRole).toInt();
+ 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()) {
+ return config()->bufferList().indexOf(leftBufferId) < config()->bufferList().indexOf(rightBufferId);
+ } 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>();
+
+ if(config() && config()->sortAlphabetically())
+ return QSortFilterProxyModel::lessThan(source_left, source_right);
+ else
+ return leftNetworkId < rightNetworkId;
+}
+
+QVariant BufferViewFilter::data(const QModelIndex &index, int role) const {
+ if(role == Qt::ForegroundRole)
+ return foreground(index);
+ else
+ return QSortFilterProxyModel::data(index, role);
+}
+
+QVariant BufferViewFilter::foreground(const QModelIndex &index) const {
+ UiSettings s("QtUi/Colors");
+ QVariant inactiveActivity = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray)));
+ QVariant noActivity = s.value("noActivityFG", QVariant(QColor(Qt::black)));
+ QVariant highlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta)));
+ QVariant newMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green)));
+ QVariant otherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen)));
+
+ if(!index.data(NetworkModel::ItemActiveRole).toBool())
+ return inactiveActivity;
+
+ Buffer::ActivityLevel activity = (Buffer::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt();
+
+ if(activity & Buffer::Highlight)
+ return highlightActivity;
+ if(activity & Buffer::NewMessage)
+ return newMessageActivity;
+ if(activity & Buffer::OtherActivity)
+ return otherActivity;
+
+ return noActivity;
+
+}
+
+void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, int end) {
+ if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType)
+ return;
+
+ if(!config() || !config()->addNewBuffersAutomatically())
+ return;
+
+ for(int row = start; row <= end; row++) {
+ addBuffer(parent.child(row, 0).data(NetworkModel::BufferIdRole).value<BufferId>());
+ }
+}
+
+// ******************************
+// Helper
+// ******************************
+bool bufferIdLessThan(const BufferId &left, const BufferId &right) {
+ Q_CHECK_PTR(Client::networkModel());
+ if(!Client::networkModel())
+ return true;
+
+ QModelIndex leftIndex = Client::networkModel()->bufferIndex(left);
+ QModelIndex rightIndex = Client::networkModel()->bufferIndex(right);
+
+ int leftType = Client::networkModel()->data(leftIndex, NetworkModel::BufferTypeRole).toInt();
+ int rightType = Client::networkModel()->data(rightIndex, NetworkModel::BufferTypeRole).toInt();