X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Ftoolbars%2Fmainbar.cpp;h=9fcb42d123ec4a64af1da0d18cc1898d6a21d0e9;hp=3c8b71e2f7b59a8162fcf39f23135c2d819cd46b;hb=a20c1fcc6c86659439a368f4d56c1b60c70dc62c;hpb=5e685656d6686eb66a39450d1b324f6382fc60c5 diff --git a/pv/toolbars/mainbar.cpp b/pv/toolbars/mainbar.cpp index 3c8b71e..9fcb42d 100644 --- a/pv/toolbars/mainbar.cpp +++ b/pv/toolbars/mainbar.cpp @@ -302,6 +302,21 @@ void MainBar::update_sample_rate_selector() const shared_ptr sr_dev = device->device(); + sample_rate_.allow_user_entered_values(false); + if (sr_dev->config_check(ConfigKey::EXTERNAL_CLOCK, Capability::GET)) { + try { + auto gvar = sr_dev->config_get(ConfigKey::EXTERNAL_CLOCK); + if (gvar.gobj()) { + bool value = Glib::VariantBase::cast_dynamic>( + gvar).get(); + sample_rate_.allow_user_entered_values(value); + } + } catch (Error& error) { + // Do nothing + } + } + + if (sr_dev->config_check(ConfigKey::SAMPLERATE, Capability::LIST)) { try { gvar_dict = sr_dev->config_list(ConfigKey::SAMPLERATE); @@ -494,8 +509,8 @@ void MainBar::commit_sample_rate() const shared_ptr sr_dev = device->device(); sample_rate = sample_rate_.value(); - if (sample_rate == 0) - return; + if (sample_rate < 0) + sample_rate_.set_value(0); try { sr_dev->config_set(ConfigKey::SAMPLERATE, @@ -592,9 +607,9 @@ void MainBar::export_file(shared_ptr format, bool selection_only) const pv::util::Timestamp& end_time = trace_view->cursors()->second()->time(); const uint64_t start_sample = (uint64_t)max( - (double)0, start_time.convert_to() * samplerate); + 0.0, start_time.convert_to() * samplerate); const uint64_t end_sample = (uint64_t)max( - (double)0, end_time.convert_to() * samplerate); + 0.0, end_time.convert_to() * samplerate); if ((start_sample == 0) && (end_sample == 0)) { // Both cursors are negative and were clamped to 0 @@ -729,6 +744,10 @@ void MainBar::on_sample_rate_changed() void MainBar::on_config_changed() { + // We want to also call update_sample_rate_selector() here in case + // the user changed the SR_CONF_EXTERNAL_CLOCK option. However, + // commit_sample_rate() does this already, so we don't call it here + commit_sample_count(); commit_sample_rate(); }