X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fpopups%2Fchannels.cpp;h=ee0daedf4b1035f76c6d6346dc9a59616be8db49;hb=aca64cac30aadeee90510958b081cd385221b258;hp=1e4bc5789dca0188291bb8639572059dec6df779;hpb=6ac6242b25cfbd4df14abe7580adc9d0f4cffe43;p=pulseview.git diff --git a/pv/popups/channels.cpp b/pv/popups/channels.cpp index 1e4bc57..ee0daed 100644 --- a/pv/popups/channels.cpp +++ b/pv/popups/channels.cpp @@ -27,18 +27,27 @@ #include "channels.h" -#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::vector; +using sigrok::Channel; +using sigrok::ChannelGroup; +using sigrok::Device; + using pv::view::Signal; namespace pv { @@ -55,33 +64,27 @@ Channels::Channels(SigSession &session, QWidget *parent) : // Create the 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); + shared_ptr device = _session.device(); + assert(device); // Collect a set of signals - map > signal_map; - const vector< shared_ptr > sigs = _session.get_signals(); + map, shared_ptr > signal_map; + + shared_lock lock(_session.signals_mutex()); + const vector< 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,12 +99,9 @@ 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); @@ -148,7 +148,7 @@ void Channels::set_all_channels(bool set) _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; @@ -158,14 +158,13 @@ void Channels::populate_group(const sr_channel_group *group, // popup. shared_ptr binding; if (group) - binding = shared_ptr(new DeviceOptions( - _session.get_device(), group)); + binding = shared_ptr(new DeviceOptions(group)); // Create a title if the group is going to have any content if ((!sigs.empty() || (binding && !binding->properties().empty())) && - group && group->name) + group) _layout.addRow(new QLabel( - QString("

%1

").arg(group->name))); + QString("

%1

").arg(group->name().c_str()))); // Create the channel group grid QGridLayout *const channel_grid = @@ -190,7 +189,7 @@ QGridLayout* Channels::create_channel_group_grid( { assert(sig); - QCheckBox *const checkbox = new QCheckBox(sig->get_name()); + QCheckBox *const checkbox = new QCheckBox(sig->name()); _check_box_mapper.setMapping(checkbox, checkbox); connect(checkbox, SIGNAL(toggled(bool)), &_check_box_mapper, SLOT(map()));