summaryrefslogtreecommitdiffstats
path: root/ui/qt/models/enabled_protocols_model.h
blob: 23b2c1bb2d7f37d82ec376382603f24a234a8679 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/** @file
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * Copyright 1998 Gerald Combs
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#ifndef ENABLED_PROTOCOLS_MODEL_H
#define ENABLED_PROTOCOLS_MODEL_H

#include <config.h>

#include <ui/qt/models/tree_model_helpers.h>

#include <epan/proto.h>

#include <QAbstractItemModel>
#include <QSortFilterProxyModel>

class EnabledProtocolItem : public ModelHelperTreeItem<EnabledProtocolItem>
{
    Q_GADGET
public:
    enum EnableProtocolType{
        Any,
        Standard,
        Heuristic
    };
    Q_ENUM(EnableProtocolType)

    EnabledProtocolItem(QString name, QString description, bool enabled, EnabledProtocolItem* parent);
    virtual ~EnabledProtocolItem();

    QString name() const {return name_;}
    QString description() const {return description_;}
    bool enabled() const {return enabled_;}
    void setEnabled(bool enable) {enabled_ = enable;}

    EnableProtocolType type() const;

    bool applyValue();

protected:
    virtual void applyValuePrivate(gboolean value) = 0;

    QString name_;
    QString description_;
    bool enabled_;
    bool enabledInit_;      //value that model starts with to determine change
    EnableProtocolType type_;
};

class EnabledProtocolsModel : public QAbstractItemModel
{
    Q_OBJECT

public:
    explicit EnabledProtocolsModel(QObject * parent = Q_NULLPTR);
    virtual ~EnabledProtocolsModel();

    enum EnabledProtocolsColumn {
        colProtocol = 0,
        colDescription,
        colLast
    };

    enum EnableProtocolData {
        DATA_ENABLE = Qt::UserRole,
        DATA_PROTOCOL_TYPE
    };

    QModelIndex index(int row, int column,
                      const QModelIndex & = QModelIndex()) const;
    QModelIndex parent(const QModelIndex &) const;
    Qt::ItemFlags flags(const QModelIndex &index) const;
    QVariant data(const QModelIndex &index, int role) const;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);

    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();

    void applyChanges(bool writeChanges = true);
    static void disableProtocol(struct _protocol *protocol);

protected:
    static void saveChanges(bool writeChanges = true);

private:
    EnabledProtocolItem* root_;
};

class EnabledProtocolsProxyModel : public QSortFilterProxyModel
{
    Q_OBJECT

public:
    enum SearchType
    {
        EveryWhere,
        OnlyProtocol,
        OnlyDescription,
        EnabledItems,
        DisabledItems
    };
    Q_ENUM(SearchType)

    enum EnableType
    {
        Enable,
        Disable,
        Invert
    };

    explicit EnabledProtocolsProxyModel(QObject * parent = Q_NULLPTR);

    virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
    virtual Qt::ItemFlags flags(const QModelIndex &index) const override;

    void setFilter(const QString& filter, EnabledProtocolsProxyModel::SearchType type,
        EnabledProtocolItem::EnableProtocolType protocolType);

    void setItemsEnable(EnabledProtocolsProxyModel::EnableType enable, QModelIndex parent = QModelIndex());

protected:
    bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;

private:
    EnabledProtocolsProxyModel::SearchType type_;
    EnabledProtocolItem::EnableProtocolType protocolType_;
    QString filter_;

    bool filterAcceptsSelf(int sourceRow, const QModelIndex &sourceParent) const;
    bool filterAcceptsChild(int sourceRow, const QModelIndex &sourceParent) const;
};

#endif // ENABLED_PROTOCOLS_MODEL_H