diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /ui/qt/widgets/traffic_tree.h | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ui/qt/widgets/traffic_tree.h')
-rw-r--r-- | ui/qt/widgets/traffic_tree.h | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/ui/qt/widgets/traffic_tree.h b/ui/qt/widgets/traffic_tree.h new file mode 100644 index 00000000..5bc87e91 --- /dev/null +++ b/ui/qt/widgets/traffic_tree.h @@ -0,0 +1,177 @@ +/** @file + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef TRAFFIC_TREE_H +#define TRAFFIC_TREE_H + +#include "config.h" + +#include <glib.h> + +#include <ui/recent.h> + +#include <ui/qt/models/atap_data_model.h> +#include <ui/qt/filter_action.h> + +#include <QTreeView> +#include <QMenu> +#include <QHeaderView> +#include <QSortFilterProxyModel> + +#include <QWidgetAction> +#include <QLineEdit> +#include <QActionGroup> + +class MenuEditAction : public QWidgetAction +{ + Q_OBJECT +public: + MenuEditAction(QString text, QString hintText, QObject * parent = nullptr); + + QString text() const; + +protected: + virtual QWidget * createWidget(QWidget *parent); +private: + QString _hintText; + QString _text; + QLineEdit * _lineEdit; + +private slots: + void triggerEntry(); +}; + + +class TrafficTreeHeaderView : public QHeaderView +{ + Q_OBJECT +public: + TrafficTreeHeaderView(GList ** recentColumnList, QWidget * parent = nullptr); + ~TrafficTreeHeaderView(); + + void applyRecent(); + +signals: + void columnsHaveChanged(QList<int> visible); + void filterOnColumn(int column, int filterOn, QString filterText); +private: + GList ** _recentColumnList; + QActionGroup * _actions; + QString _filterText; + +private slots: + void headerContextMenu(const QPoint &pos); + void columnTriggered(bool checked = false); + void menuActionTriggered(QAction *); + void filterColumn(bool checked = false); + +}; + + +class TrafficDataFilterProxy : public QSortFilterProxyModel +{ + Q_OBJECT +public: + + enum { + TRAFFIC_DATA_LESS, + TRAFFIC_DATA_GREATER, + TRAFFIC_DATA_EQUAL, + }; + + TrafficDataFilterProxy(QObject *parent = nullptr); + + void setColumnVisibility(int column, bool visible); + bool columnVisible(int column) const; + +public slots: + void filterForColumn(int column, int filterOn, QString filterText); + +protected: + virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; + virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const; + virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const; + +private: + QList<int> hideColumns_; + + int _filterColumn; + int _filterOn; + QString _filterText; + + int mapToSourceColumn(int proxyColumn) const; + +}; + + +class TrafficTree : public QTreeView +{ + Q_OBJECT + +public: + /** + * @brief Type for the selection of export + * @see copyToClipboard + */ + typedef enum { + CLIPBOARD_CSV, /* export as CSV */ + CLIPBOARD_YAML, /* export as YAML */ + CLIPBOARD_JSON /* export as JSON */ + } eTrafficTreeClipboard; + + TrafficTree(QString baseName, GList ** recentColumnList, QWidget *parent = nullptr); + + /** + * @brief Create a menu containing clipboard copy entries for this tab + * + * It will create all entries, including copying the content of the currently selected tab + * to CSV, YAML and JSON + * + * @param parent the parent object or null + * @return QMenu* the resulting menu or null + */ + QMenu * createCopyMenu(QWidget * parent = nullptr); + + void applyRecentColumns(); + + virtual void setModel(QAbstractItemModel *model) override; + +signals: + void filterAction(QString filter, FilterAction::Action action, FilterAction::ActionType type); + void columnsHaveChanged(QList<int> columns); + +public slots: + void tapListenerEnabled(bool enable); + void disableTap(); + void columnsChanged(QList<int> columns); + +private: + bool _tapEnabled; + int _exportRole; + bool _saveRaw; + QString _baseName; + + TrafficTreeHeaderView * _header; + + ATapDataModel * dataModel(); + + QMenu * createActionSubMenu(FilterAction::Action cur_action, QModelIndex idx, bool isConversation); + void copyToClipboard(eTrafficTreeClipboard type); + + friend class TrafficTreeHeaderView; + +private slots: + void customContextMenu(const QPoint &pos); + void useFilterAction(); + void clipboardAction(); + void resizeAction(); + void toggleSaveRawAction(); +}; + +#endif // TRAFFIC_TREE_H |