Qt: Implement sort model for traffic type list

This commit is contained in:
Roland Knall 2022-06-17 10:57:35 +02:00
parent 300befc12a
commit 83e420913d
3 changed files with 34 additions and 9 deletions

View File

@ -35,14 +35,6 @@
#include <QToolButton>
#include <QTreeView>
// 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)

View File

@ -180,6 +180,22 @@ void TrafficTypesModel::selectProtocols(QList<int> 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);

View File

@ -19,6 +19,7 @@
#include <QMap>
#include <QList>
#include <QString>
#include <QSortFilterProxyModel>
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