]> sigrok.org Git - pulseview.git/blame - pv/subwindows/decoder_selector/subwindow.hpp
DecoderSelector: Use srd_decoder_get_by_id()
[pulseview.git] / pv / subwindows / decoder_selector / subwindow.hpp
CommitLineData
97378470
SA
1/*
2 * This file is part of the PulseView project.
3 *
4 * Copyright (C) 2018 Soeren Apel <soeren@apelpie.net>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef PULSEVIEW_PV_SUBWINDOWS_DECODERSELECTOR_SUBWINDOW_HPP
21#define PULSEVIEW_PV_SUBWINDOWS_DECODERSELECTOR_SUBWINDOW_HPP
22
23#include <vector>
24
25#include <QAbstractItemModel>
c2b80ad9 26#include <QLabel>
a6fab024 27#include <QSortFilterProxyModel>
97378470
SA
28#include <QSplitter>
29#include <QTreeView>
30
31#include "pv/subwindows/subwindowbase.hpp"
32
33using std::shared_ptr;
34
35namespace pv {
36namespace subwindows {
37namespace decoder_selector {
38
39class DecoderCollectionItem
40{
41public:
42 DecoderCollectionItem(const vector<QVariant>& data,
43 shared_ptr<DecoderCollectionItem> parent = nullptr);
44
45 void appendSubItem(shared_ptr<DecoderCollectionItem> item);
46
47 shared_ptr<DecoderCollectionItem> subItem(int row) const;
48 shared_ptr<DecoderCollectionItem> parent() const;
49 shared_ptr<DecoderCollectionItem> findSubItem(const QVariant& value, int column);
50
51 int subItemCount() const;
52 int columnCount() const;
53 int row() const;
54 QVariant data(int column) const;
55
56private:
57 vector< shared_ptr<DecoderCollectionItem> > subItems_;
58 vector<QVariant> data_;
59 shared_ptr<DecoderCollectionItem> parent_;
60};
61
62
63class DecoderCollectionModel : public QAbstractItemModel
64{
65 Q_OBJECT
66
67public:
68 DecoderCollectionModel(QObject* parent = 0);
69
70 QVariant data(const QModelIndex& index, int role) const override;
71 Qt::ItemFlags flags(const QModelIndex& index) const override;
72
73 QVariant headerData(int section, Qt::Orientation orientation,
74 int role = Qt::DisplayRole) const override;
75 QModelIndex index(int row, int column,
76 const QModelIndex& parent_idx = QModelIndex()) const override;
77
78 QModelIndex parent(const QModelIndex& index) const override;
79
80 int rowCount(const QModelIndex& parent_idx = QModelIndex()) const override;
81 int columnCount(const QModelIndex& parent_idx = QModelIndex()) const override;
82
83private:
84 shared_ptr<DecoderCollectionItem> root_;
85};
86
87
b229a1b7
SA
88class QCustomSortFilterProxyModel : public QSortFilterProxyModel
89{
90protected:
91 bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
92};
93
e10848e8
SA
94class QCustomTreeView : public QTreeView
95{
96 Q_OBJECT
97
98public:
99 void currentChanged(const QModelIndex& current, const QModelIndex& previous);
100
101Q_SIGNALS:
102 void currentChanged(const QModelIndex& current);
103};
104
97378470
SA
105class SubWindow : public SubWindowBase
106{
107 Q_OBJECT
108
109public:
110 explicit SubWindow(Session &session, QWidget *parent = nullptr);
111
112 bool has_toolbar() const;
113 QToolBar* create_toolbar(QWidget *parent) const;
114
97378470
SA
115 /**
116 * Returns a list of input types that a given protocol decoder requires
117 * ("logic", "uart", etc.)
118 */
8f7c2dce 119 vector<const char*> get_decoder_inputs(const srd_decoder* d) const;
97378470
SA
120
121 /**
122 * Returns a list of protocol decoder IDs which provide a given output
123 * ("uart", "spi", etc.)
124 */
8f7c2dce 125 vector<const srd_decoder*> get_decoders_providing(const char* output) const;
97378470
SA
126
127Q_SIGNALS:
128 void new_decoders_selected(vector<const srd_decoder*> decoders);
129
130public Q_SLOTS:
e10848e8
SA
131 void on_item_changed(const QModelIndex& index);
132 void on_item_activated(const QModelIndex& index);
97378470 133
b229a1b7
SA
134 void on_filter_changed(const QString& text);
135
97378470
SA
136private:
137 QSplitter* splitter_;
e10848e8 138 QCustomTreeView* tree_view_;
c2b80ad9
SA
139 QWidget* info_box_;
140 QLabel* info_label_header_;
141 QLabel* info_label_body_;
142 QLabel* info_label_footer_;
97378470 143 DecoderCollectionModel* model_;
b229a1b7 144 QCustomSortFilterProxyModel* sort_filter_model_;
97378470
SA
145};
146
147} // decoder_selector
148} // namespace subwindows
149} // namespace pv
150
151#endif // PULSEVIEW_PV_SUBWINDOWS_DECODERSELECTOR_SUBWINDOW_HPP
152