28 #include <boost/thread/locks.hpp>
29 #include <boost/thread/shared_mutex.hpp>
32 #include <QFormLayout>
33 #include <QGridLayout>
43 #include <libsigrokcxx/libsigrokcxx.hpp>
47 using boost::shared_lock;
48 using boost::shared_mutex;
49 using std::lock_guard;
53 using std::shared_ptr;
54 using std::unordered_set;
57 using sigrok::Channel;
58 using sigrok::ChannelGroup;
66 Channels::Channels(
Session &session, QWidget *parent) :
69 updating_channels_(false),
70 enable_all_channels_(tr(
"Enable All"), this),
71 disable_all_channels_(tr(
"Disable All"), this),
72 check_box_mapper_(this)
77 const shared_ptr<sigrok::Device> device =
session_.
device()->device();
81 map<shared_ptr<Channel>, shared_ptr<Signal> > signal_map;
85 for (
const shared_ptr<Signal> &sig : sigs)
86 signal_map[sig->channel()] = sig;
89 for (
auto entry : device->channel_groups()) {
90 shared_ptr<ChannelGroup> group = entry.second;
93 vector< shared_ptr<Signal> > group_sigs;
94 for (
auto channel : group->channels()) {
95 const auto iter = signal_map.find(channel);
97 if (iter == signal_map.end())
100 group_sigs.push_back((*iter).second);
101 signal_map.erase(iter);
108 vector< shared_ptr<Signal> > global_sigs;
109 for (
auto channel : device->channels()) {
110 const map<shared_ptr<Channel>, shared_ptr<Signal> >::
111 const_iterator iter = signal_map.find(channel);
112 if (iter != signal_map.end())
113 global_sigs.push_back((*iter).second);
143 for (map<QCheckBox*, shared_ptr<Signal> >::const_iterator i =
146 const shared_ptr<Signal> sig = (*i).second;
150 (*i).first->setChecked(set);
157 const vector< shared_ptr<pv::view::Signal> > sigs)
164 shared_ptr<Device> binding;
166 binding = shared_ptr<Device>(
new Device(group));
169 if ((!sigs.empty() || (binding && !binding->properties().empty())) &&
172 QString(
"<h3>%1</h3>").arg(group->name().c_str())));
175 QGridLayout *
const channel_grid =
182 binding->add_properties_to_form(&
layout_,
true);
188 const vector< shared_ptr<pv::view::Signal> > sigs)
190 int row = 0, col = 0;
191 QGridLayout *
const grid =
new QGridLayout();
193 for (
const shared_ptr<pv::view::Signal>& sig : sigs) {
196 QCheckBox *
const checkbox =
new QCheckBox(sig->name());
198 connect(checkbox, SIGNAL(toggled(
bool)),
201 grid->addWidget(checkbox, row, col);
218 for (map<QCheckBox*, shared_ptr<Signal> >::const_iterator i =
221 const shared_ptr<Signal> sig = (*i).second;
224 (*i).first->setChecked(sig->enabled());
235 QCheckBox *
const check_box = (QCheckBox*)widget;
239 map< QCheckBox*, shared_ptr<Signal> >::const_iterator iter =
243 const shared_ptr<pv::view::Signal> s = (*iter).second;
246 s->enable(check_box->isChecked());
const std::unordered_set< std::shared_ptr< view::Signal > > signals() const
std::shared_ptr< devices::Device > device() const