X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Flogicsignal.cpp;h=58eaac9317c3694625d0757eb5cf2264ea9a5918;hb=b485408f20c39ae8d05372a5faffe15653c74705;hp=18619289e71f9fc357e6b1bfae65ae6b2b1af92e;hpb=5b5fa4da3b7112414b9f51e6626ae7f4bf606f02;p=pulseview.git diff --git a/pv/view/logicsignal.cpp b/pv/view/logicsignal.cpp index 18619289..58eaac93 100644 --- a/pv/view/logicsignal.cpp +++ b/pv/view/logicsignal.cpp @@ -33,11 +33,12 @@ #include #include +#include #include #include #include -#include +#include using std::deque; using std::max; @@ -49,7 +50,6 @@ using std::vector; using sigrok::Channel; using sigrok::ConfigKey; -using sigrok::Device; using sigrok::Error; using sigrok::Trigger; using sigrok::TriggerStage; @@ -99,7 +99,7 @@ QCache LogicSignal::pixmap_cache_; LogicSignal::LogicSignal( pv::Session &session, - shared_ptr device, + shared_ptr device, shared_ptr channel, shared_ptr data) : Signal(session, channel), @@ -140,6 +140,11 @@ shared_ptr LogicSignal::logic_data() const return data_; } +void LogicSignal::set_logic_data(std::shared_ptr data) +{ + data_ = data; +} + std::pair LogicSignal::v_extents() const { return make_pair(-SignalHeight - SignalMargin, SignalMargin); @@ -316,14 +321,23 @@ void LogicSignal::init_trigger_actions(QWidget *parent) const vector LogicSignal::get_trigger_types() const { - try { - const Glib::VariantContainerBase gvar = - device_->config_list(ConfigKey::TRIGGER_MATCH); - return Glib::VariantBase::cast_dynamic< - Glib::Variant>>(gvar).get(); - } catch (Error e) { - return vector(); + const auto sr_dev = device_->device(); + const auto keys = sr_dev->config_keys(ConfigKey::DEVICE_OPTIONS); + const auto iter = keys.find(ConfigKey::TRIGGER_MATCH); + if (iter != keys.end() && + (*iter).second.find(sigrok::LIST) != (*iter).second.end()) { + try { + const Glib::VariantContainerBase gvar = + sr_dev->config_list(ConfigKey::TRIGGER_MATCH); + return Glib::VariantBase::cast_dynamic< + Glib::Variant>>(gvar).get(); + } catch (Error e) { + // Failed to enumerate triggers + (void)e; + } } + + return vector(); } QAction* LogicSignal::action_from_trigger_type(const TriggerMatchType *type) @@ -376,21 +390,23 @@ void LogicSignal::populate_popup_form(QWidget *parent, QFormLayout *form) { Signal::populate_popup_form(parent, form); - trigger_bar_ = new QToolBar(parent); - init_trigger_actions(trigger_bar_); - trigger_bar_->addAction(trigger_none_); - trigger_none_->setChecked(!trigger_match_); - const vector trig_types = get_trigger_types(); - for (auto type_id : trig_types) { - const TriggerMatchType *const type = - TriggerMatchType::get(type_id); - QAction *const action = action_from_trigger_type(type); - trigger_bar_->addAction(action); - action->setChecked(trigger_match_ == type); - } - form->addRow(tr("Trigger"), trigger_bar_); + if (!trig_types.empty()) { + trigger_bar_ = new QToolBar(parent); + init_trigger_actions(trigger_bar_); + trigger_bar_->addAction(trigger_none_); + trigger_none_->setChecked(!trigger_match_); + + for (auto type_id : trig_types) { + const TriggerMatchType *const type = + TriggerMatchType::get(type_id); + QAction *const action = action_from_trigger_type(type); + trigger_bar_->addAction(action); + action->setChecked(trigger_match_ == type); + } + form->addRow(tr("Trigger"), trigger_bar_); + } } void LogicSignal::modify_trigger() @@ -422,7 +438,7 @@ void LogicSignal::modify_trigger() new_trigger->stages().empty() ? nullptr : new_trigger); if (owner_) - owner_->appearance_changed(false, true); + owner_->row_item_appearance_changed(false, true); } const QIcon* LogicSignal::get_icon(const char *path)