diff options
Diffstat (limited to 'ui/qt/models/supported_protocols_model.h')
-rw-r--r-- | ui/qt/models/supported_protocols_model.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/ui/qt/models/supported_protocols_model.h b/ui/qt/models/supported_protocols_model.h new file mode 100644 index 0000000000..dce988aca8 --- /dev/null +++ b/ui/qt/models/supported_protocols_model.h @@ -0,0 +1,119 @@ +/* supported_protocols_model.h + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef SUPPORTED_PROTOCOLS_MODEL_H +#define SUPPORTED_PROTOCOLS_MODEL_H + +#include <config.h> + +#include <epan/proto.h> + +#include <QAbstractItemModel> +#include <QSortFilterProxyModel> + +class SupportedProtocolsItem +{ +public: + SupportedProtocolsItem(protocol_t* proto, const char *name, const char* filter, ftenum_t ftype, const char* descr, SupportedProtocolsItem* parent); + virtual ~SupportedProtocolsItem(); + + protocol_t* protocol() const {return proto_; } + QString name() const { return name_; } + ftenum_t type() const {return ftype_; } + QString filter() const { return filter_; } + QString description() const { return descr_; } + + void appendChild(SupportedProtocolsItem* child); + SupportedProtocolsItem* child(int row); + int childCount() const; + int row() const; + SupportedProtocolsItem* parentItem() {return parent_; } + +private: + SupportedProtocolsItem* parent_; + QList<SupportedProtocolsItem*> childItems_; + + protocol_t* proto_; + QString name_; + QString filter_; + ftenum_t ftype_; + QString descr_; +}; + + +class SupportedProtocolsModel : public QAbstractItemModel +{ + Q_OBJECT + +public: + explicit SupportedProtocolsModel(QObject * parent = Q_NULLPTR); + virtual ~SupportedProtocolsModel(); + + enum SupportedProtocolsColumn { + colName = 0, + colFilter, + colType, + colDescription, + colLast + }; + + int fieldCount() {return field_count_;} + + QModelIndex index(int row, int column, + const QModelIndex & = QModelIndex()) const; + QModelIndex parent(const QModelIndex &) const; + QVariant data(const QModelIndex &index, int role) const; + + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + + void populate(); + +private: + SupportedProtocolsItem* root_; + int field_count_; +}; + +class SupportedProtocolsProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT +public: + + explicit SupportedProtocolsProxyModel(QObject * parent = Q_NULLPTR); + + virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; + + void setFilter(const QString& filter); + +protected: + bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; + bool filterAcceptItem(SupportedProtocolsItem& item) const; + +private: + + QString filter_; +}; + +#endif // SUPPORTED_PROTOCOLS_MODEL_H + +/* + * Editor modelines + * + * Local Variables: + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: + */ |