From 83e420913decbfd3701a9bac77dc854c87ee7f1b Mon Sep 17 00:00:00 2001 From: Roland Knall Date: Fri, 17 Jun 2022 10:57:35 +0200 Subject: [PATCH] Qt: Implement sort model for traffic type list --- ui/qt/traffic_table_dialog.cpp | 8 -------- ui/qt/widgets/traffic_types_list.cpp | 21 ++++++++++++++++++++- ui/qt/widgets/traffic_types_list.h | 14 ++++++++++++++ 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/ui/qt/traffic_table_dialog.cpp b/ui/qt/traffic_table_dialog.cpp index ee4e81b639..62eb4c146c 100644 --- a/ui/qt/traffic_table_dialog.cpp +++ b/ui/qt/traffic_table_dialog.cpp @@ -35,14 +35,6 @@ #include #include -// To do: -// - Add "copy" items to the menu. - -// Bugs: -// - Tabs and menu items don't always end up in the same order. -// - Columns don't resize correctly. -// - Closing the capture file clears conversation data. - TrafficTableDialog::TrafficTableDialog(QWidget &parent, CaptureFile &cf, const QString &table_name) : WiresharkDialog(parent, cf), ui(new Ui::TrafficTableDialog) diff --git a/ui/qt/widgets/traffic_types_list.cpp b/ui/qt/widgets/traffic_types_list.cpp index 9330154cda..55a4c6a57a 100644 --- a/ui/qt/widgets/traffic_types_list.cpp +++ b/ui/qt/widgets/traffic_types_list.cpp @@ -180,6 +180,22 @@ void TrafficTypesModel::selectProtocols(QList protocols) endResetModel(); } + +TrafficListSortModel::TrafficListSortModel(QObject * parent) : + QSortFilterProxyModel(parent) +{} + +bool TrafficListSortModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const +{ + if (source_left.isValid() && source_left.column() == TrafficTypesModel::COL_NAME) { + QString valA = source_left.data().toString(); + QString valB = source_right.data().toString(); + return valA.compare(valB, Qt::CaseInsensitive) <= 0; + } + return QSortFilterProxyModel::lessThan(source_left, source_right); +} + + TrafficTypesList::TrafficTypesList(QWidget *parent) : QTreeView(parent) { @@ -194,8 +210,11 @@ void TrafficTypesList::setProtocolInfo(QString name, GList ** recentList) { _name = name; + TrafficListSortModel * sortModel = new TrafficListSortModel(); + _model = new TrafficTypesModel(recentList); - setModel(_model); + sortModel->setSourceModel(_model); + setModel(sortModel); connect(_model, &TrafficTypesModel::protocolsChanged, this, &TrafficTypesList::protocolsChanged); diff --git a/ui/qt/widgets/traffic_types_list.h b/ui/qt/widgets/traffic_types_list.h index d4dd3f4e0c..d5a15c79f2 100644 --- a/ui/qt/widgets/traffic_types_list.h +++ b/ui/qt/widgets/traffic_types_list.h @@ -19,6 +19,7 @@ #include #include #include +#include class TrafficTypesRowData { @@ -37,6 +38,7 @@ private: bool _checked; }; + class TrafficTypesModel : public QAbstractListModel { Q_OBJECT @@ -78,6 +80,18 @@ private: }; + +class TrafficListSortModel : public QSortFilterProxyModel +{ + Q_OBJECT +public: + TrafficListSortModel(QObject * parent = nullptr); + +protected: + virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; +}; + + class TrafficTypesList : public QTreeView { Q_OBJECT