* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-#include "sweeptimingwidget.h"
+#include "sweeptimingwidget.hpp"
+#include <cassert>
#include <cstdlib>
-
#include <vector>
-#include <assert.h>
-
#include <extdef.h>
using std::abs;
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()));
show_none();
}
+void SweepTimingWidget::allow_user_entered_values(bool value)
+{
+ list_.setEditable(value);
+}
+
void SweepTimingWidget::show_none()
{
value_type_ = None;
value_type_ = List;
list_.clear();
- for (size_t i = 0; i < count; i++)
- {
+ for (size_t i = 0; i < count; i++) {
char *const s = sr_si_string_u64(vals[i], suffix_);
- list_.addItem(QString::fromUtf8(s),
- qVariantFromValue(vals[i]));
+ list_.addItem(QString::fromUtf8(s), qVariantFromValue(vals[i]));
g_free(s);
}
uint64_t SweepTimingWidget::value() const
{
- switch(value_type_)
- {
+ switch (value_type_) {
case None:
return 0;
-
case MinMaxStep:
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<uint64_t>() : 0;
+ return (index >= 0) ? list_.itemData(index).value<uint64_t>() : 0;
}
-
default:
// Unexpected value type
- assert(0);
+ assert(false);
return 0;
}
}
{
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<int64_t>());
- 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<int64_t>());
+ if (this_variance < best_variance) {
+ best_variance = this_variance;
+ best_match = i;
+ }
}
- }
- list_.setCurrentIndex(best_match);
+ list_.setCurrentIndex(best_match);
+ }
}
-} // widgets
-} // pv
+} // namespace widgets
+} // namespace pv