X-Git-Url: http://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fwidgets%2Fsweeptimingwidget.cpp;fp=pv%2Fwidgets%2Fsweeptimingwidget.cpp;h=12f5969eb707c9997c212e1d39f838541c1f5588;hp=b4943225dd8d44ddae54fad59b7231e70a8c6e3f;hb=bc4b9ccfc78d9d0987525360fa6d93bed681951a;hpb=1ae18301848d741a7a17888af9e1b10171a6ccc4 diff --git a/pv/widgets/sweeptimingwidget.cpp b/pv/widgets/sweeptimingwidget.cpp index b4943225..12f5969e 100644 --- a/pv/widgets/sweeptimingwidget.cpp +++ b/pv/widgets/sweeptimingwidget.cpp @@ -47,6 +47,9 @@ SweepTimingWidget::SweepTimingWidget(const char *suffix, connect(&list_, SIGNAL(currentIndexChanged(int)), this, SIGNAL(value_changed())); + connect(&list_, SIGNAL(editTextChanged(const QString&)), + this, SIGNAL(value_changed())); + connect(&value_, SIGNAL(editingFinished()), this, SIGNAL(value_changed())); @@ -58,6 +61,11 @@ SweepTimingWidget::SweepTimingWidget(const char *suffix, show_none(); } +void SweepTimingWidget::allow_user_entered_values(bool value) +{ + list_.setEditable(value); +} + void SweepTimingWidget::show_none() { value_type_ = None; @@ -144,9 +152,14 @@ uint64_t SweepTimingWidget::value() const return (uint64_t)value_.value(); case List: { + if (list_.isEditable()) { + uint64_t value; + sr_parse_sizestring(list_.currentText().toUtf8().data(), &value); + return value; + } + const int index = list_.currentIndex(); - return (index >= 0) ? list_.itemData( - index).value() : 0; + return (index >= 0) ? list_.itemData(index).value() : 0; } default: // Unexpected value type @@ -159,19 +172,25 @@ void SweepTimingWidget::set_value(uint64_t value) { value_.setValue(value); - int best_match = list_.count() - 1; - int64_t best_variance = INT64_MAX; - - for (int i = 0; i < list_.count(); i++) { - const int64_t this_variance = abs( - (int64_t)value - list_.itemData(i).value()); - if (this_variance < best_variance) { - best_variance = this_variance; - best_match = i; + if (list_.isEditable()) { + char *const s = sr_si_string_u64(value, suffix_); + list_.lineEdit()->setText(QString::fromUtf8(s)); + g_free(s); + } else { + int best_match = list_.count() - 1; + int64_t best_variance = INT64_MAX; + + for (int i = 0; i < list_.count(); i++) { + const int64_t this_variance = abs( + (int64_t)value - list_.itemData(i).value()); + if (this_variance < best_variance) { + best_variance = this_variance; + best_match = i; + } } - } - list_.setCurrentIndex(best_match); + list_.setCurrentIndex(best_match); + } } } // namespace widgets