|
3 | 3 | // SPDX-License-Identifier: GPL-3.0-or-later |
4 | 4 | #include "netitemmodel.h" |
5 | 5 |
|
6 | | -#include "netitem.h" |
7 | | - |
8 | 6 | namespace dde { |
9 | 7 | namespace network { |
10 | 8 | enum NetModelRole { |
@@ -42,9 +40,28 @@ protected Q_SLOTS: |
42 | 40 | onAddObject(child); |
43 | 41 | } |
44 | 42 |
|
45 | | - void AboutToRemoveObject(const NetItem *, int pos) { beginRemoveRows(QModelIndex(), pos, pos); } |
| 43 | + bool needRemoveNodeItem(const NetItem *childItem) const |
| 44 | + { |
| 45 | + if (childItem && (childItem->itemType() == NetType::NetItemType::SystemProxyControlItem |
| 46 | + || childItem->itemType() == NetType::NetItemType::AppProxyControlItem)) { |
| 47 | + // 对于系统代理和应用代理(应用代理在V25上被裁减了,但是这里还是加上去这个判断,防止以后加上), |
| 48 | + // 这里始终显示当前的节点 |
| 49 | + return false; |
| 50 | + } |
| 51 | + return true; |
| 52 | + } |
46 | 53 |
|
47 | | - void removeObject(const NetItem *child) { endRemoveRows(); } |
| 54 | + void AboutToRemoveObject(const NetItem *parentItem, int pos) |
| 55 | + { |
| 56 | + if (needRemoveNodeItem(parentItem->getChild(pos))) |
| 57 | + beginRemoveRows(QModelIndex(), pos, pos); |
| 58 | + } |
| 59 | + |
| 60 | + void removeObject(const NetItem *child) |
| 61 | + { |
| 62 | + if (needRemoveNodeItem(child)) |
| 63 | + endRemoveRows(); |
| 64 | + } |
48 | 65 |
|
49 | 66 | protected: |
50 | 67 | NetItem *m_root; |
@@ -195,10 +212,32 @@ QHash<int, QByteArray> NetItemModel::roleNames() const |
195 | 212 | return names; |
196 | 213 | } |
197 | 214 |
|
| 215 | +bool NetItemModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const |
| 216 | +{ |
| 217 | + QModelIndex childIndex = sourceModel()->index(source_row, 0, source_parent); |
| 218 | + NetItem *curItem = static_cast<NetItem *>(childIndex.internalPointer()); |
| 219 | + if (!curItem) { |
| 220 | + return false; |
| 221 | + } |
| 222 | + // 有的节点出现了两次,所以这里让显示第一次出现的那个节点 |
| 223 | + if (m_rowMap.contains(curItem->itemType())) { |
| 224 | + return (m_rowMap[curItem->itemType()] == source_row); |
| 225 | + } |
| 226 | + |
| 227 | + m_rowMap[curItem->itemType()] = source_row; |
| 228 | + return true; |
| 229 | +} |
| 230 | + |
198 | 231 | bool NetItemModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const |
199 | 232 | { |
200 | 233 | NetItem *leftItem = static_cast<NetItem *>(source_left.internalPointer()); |
| 234 | + if (!leftItem) |
| 235 | + return false; |
| 236 | + |
201 | 237 | NetItem *rightItem = static_cast<NetItem *>(source_right.internalPointer()); |
| 238 | + if (!rightItem) |
| 239 | + return false; |
| 240 | + |
202 | 241 | if (leftItem->itemType() != rightItem->itemType()) |
203 | 242 | return leftItem->itemType() < rightItem->itemType(); |
204 | 243 | switch (leftItem->itemType()) { |
|
0 commit comments