X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fpopups%2Fchannels.cpp;h=bffd0dfefbb15e6182b6c4ed54ee5ae9ac3dbd27;hp=1e4bc5789dca0188291bb8639572059dec6df779;hb=35750e4dc619d538f105ed024f3a72b630108234;hpb=6ac6242b25cfbd4df14abe7580adc9d0f4cffe43 diff --git a/pv/popups/channels.cpp b/pv/popups/channels.cpp index 1e4bc578..bffd0dfe 100644 --- a/pv/popups/channels.cpp +++ b/pv/popups/channels.cpp @@ -20,68 +20,80 @@ #include +#ifdef _WIN32 +// Windows: Avoid boost/thread namespace pollution (which includes windows.h). +#define NOGDI +#define NORESOURCE +#endif +#include +#include + #include #include #include #include -#include "channels.h" +#include "channels.hpp" + +#include +#include +#include +#include -#include -#include -#include -#include +#include using namespace Qt; +using boost::shared_lock; +using boost::shared_mutex; +using std::lock_guard; using std::map; +using std::mutex; using std::set; using std::shared_ptr; +using std::unordered_set; using std::vector; +using sigrok::Channel; +using sigrok::ChannelGroup; +using sigrok::Device; + using pv::view::Signal; namespace pv { namespace popups { -Channels::Channels(SigSession &session, QWidget *parent) : +Channels::Channels(Session &session, QWidget *parent) : Popup(parent), - _session(session), - _updating_channels(false), - _enable_all_channels(tr("Enable All"), this), - _disable_all_channels(tr("Disable All"), this), - _check_box_mapper(this) + session_(session), + updating_channels_(false), + enable_all_channels_(tr("Enable All"), this), + disable_all_channels_(tr("Disable All"), this), + check_box_mapper_(this) { // Create the layout - setLayout(&_layout); + setLayout(&layout_); - shared_ptr dev_inst = _session.get_device(); - assert(dev_inst); - const sr_dev_inst *const sdi = dev_inst->dev_inst(); - assert(sdi); + const shared_ptr device = session_.device()->device(); + assert(device); // Collect a set of signals - map > signal_map; - const vector< shared_ptr > sigs = _session.get_signals(); + map, shared_ptr > signal_map; + + const unordered_set< shared_ptr > sigs(session_.signals()); for (const shared_ptr &sig : sigs) signal_map[sig->channel()] = sig; // Populate channel groups - for (const GSList *g = sdi->channel_groups; g; g = g->next) + for (auto entry : device->channel_groups()) { - const sr_channel_group *const group = - (const sr_channel_group*)g->data; - assert(group); - - // Make a set of signals and remove these signals from the + shared_ptr group = entry.second; + // Make a set of signals, and removed this signals from the // signal map. vector< shared_ptr > group_sigs; - for (const GSList *p = group->channels; p; p = p->next) + for (auto channel : group->channels()) { - const sr_channel *const channel = (const sr_channel*)p->data; - assert(channel); - const auto iter = signal_map.find(channel); if (iter == signal_map.end()) @@ -96,47 +108,44 @@ Channels::Channels(SigSession &session, QWidget *parent) : // Make a vector of the remaining channels vector< shared_ptr > global_sigs; - for (const GSList *p = sdi->channels; p; p = p->next) + for (auto channel : device->channels()) { - const sr_channel *const channel = (const sr_channel*)p->data; - assert(channel); - - const map >:: + const map, shared_ptr >:: const_iterator iter = signal_map.find(channel); if (iter != signal_map.end()) global_sigs.push_back((*iter).second); } // Create a group - populate_group(NULL, global_sigs); + populate_group(nullptr, global_sigs); // Create the enable/disable all buttons - connect(&_enable_all_channels, SIGNAL(clicked()), + connect(&enable_all_channels_, SIGNAL(clicked()), this, SLOT(enable_all_channels())); - connect(&_disable_all_channels, SIGNAL(clicked()), + connect(&disable_all_channels_, SIGNAL(clicked()), this, SLOT(disable_all_channels())); - _enable_all_channels.setFlat(true); - _disable_all_channels.setFlat(true); + enable_all_channels_.setFlat(true); + disable_all_channels_.setFlat(true); - _buttons_bar.addWidget(&_enable_all_channels); - _buttons_bar.addWidget(&_disable_all_channels); - _buttons_bar.addStretch(1); + buttons_bar_.addWidget(&enable_all_channels_); + buttons_bar_.addWidget(&disable_all_channels_); + buttons_bar_.addStretch(1); - _layout.addRow(&_buttons_bar); + layout_.addRow(&buttons_bar_); // Connect the check-box signal mapper - connect(&_check_box_mapper, SIGNAL(mapped(QWidget*)), + connect(&check_box_mapper_, SIGNAL(mapped(QWidget*)), this, SLOT(on_channel_checked(QWidget*))); } void Channels::set_all_channels(bool set) { - _updating_channels = true; + updating_channels_ = true; for (map >::const_iterator i = - _check_box_signal_map.begin(); - i != _check_box_signal_map.end(); i++) + check_box_signal_map_.begin(); + i != check_box_signal_map_.end(); i++) { const shared_ptr sig = (*i).second; assert(sig); @@ -145,38 +154,37 @@ void Channels::set_all_channels(bool set) (*i).first->setChecked(set); } - _updating_channels = false; + updating_channels_ = false; } -void Channels::populate_group(const sr_channel_group *group, +void Channels::populate_group(shared_ptr group, const vector< shared_ptr > sigs) { - using pv::prop::binding::DeviceOptions; + using pv::binding::Device; // Only bind options if this is a group. We don't do it for general // options, because these properties are shown in the device config // popup. - shared_ptr binding; + shared_ptr binding; if (group) - binding = shared_ptr(new DeviceOptions( - _session.get_device(), group)); + binding = shared_ptr(new Device(group)); // Create a title if the group is going to have any content if ((!sigs.empty() || (binding && !binding->properties().empty())) && - group && group->name) - _layout.addRow(new QLabel( - QString("

%1

").arg(group->name))); + group) + layout_.addRow(new QLabel( + QString("

%1

").arg(group->name().c_str()))); // Create the channel group grid QGridLayout *const channel_grid = create_channel_group_grid(sigs); - _layout.addRow(channel_grid); + layout_.addRow(channel_grid); // Create the channel group options if (binding) { - binding->add_properties_to_form(&_layout, true); - _group_bindings.push_back(binding); + binding->add_properties_to_form(&layout_, true); + group_bindings_.push_back(binding); } } @@ -190,16 +198,16 @@ QGridLayout* Channels::create_channel_group_grid( { assert(sig); - QCheckBox *const checkbox = new QCheckBox(sig->get_name()); - _check_box_mapper.setMapping(checkbox, checkbox); + QCheckBox *const checkbox = new QCheckBox(sig->name()); + check_box_mapper_.setMapping(checkbox, checkbox); connect(checkbox, SIGNAL(toggled(bool)), - &_check_box_mapper, SLOT(map())); + &check_box_mapper_, SLOT(map())); grid->addWidget(checkbox, row, col); - _check_box_signal_map[checkbox] = sig; + check_box_signal_map_[checkbox] = sig; - if(++col >= 8) + if (++col >= 8) col = 0, row++; } @@ -210,11 +218,11 @@ void Channels::showEvent(QShowEvent *e) { pv::widgets::Popup::showEvent(e); - _updating_channels = true; + updating_channels_ = true; for (map >::const_iterator i = - _check_box_signal_map.begin(); - i != _check_box_signal_map.end(); i++) + check_box_signal_map_.begin(); + i != check_box_signal_map_.end(); i++) { const shared_ptr sig = (*i).second; assert(sig); @@ -222,12 +230,12 @@ void Channels::showEvent(QShowEvent *e) (*i).first->setChecked(sig->enabled()); } - _updating_channels = false; + updating_channels_ = false; } void Channels::on_channel_checked(QWidget *widget) { - if (_updating_channels) + if (updating_channels_) return; QCheckBox *const check_box = (QCheckBox*)widget; @@ -235,8 +243,8 @@ void Channels::on_channel_checked(QWidget *widget) // Look up the signal of this check-box map< QCheckBox*, shared_ptr >::const_iterator iter = - _check_box_signal_map.find((QCheckBox*)check_box); - assert(iter != _check_box_signal_map.end()); + check_box_signal_map_.find((QCheckBox*)check_box); + assert(iter != check_box_signal_map_.end()); const shared_ptr s = (*iter).second; assert(s);