]> sigrok.org Git - pulseview.git/blame_incremental - pv/prop/string.cpp
Backport recent changes from mainline.
[pulseview.git] / pv / prop / string.cpp
... / ...
CommitLineData
1/*
2 * This file is part of the PulseView project.
3 *
4 * Copyright (C) 2013 Joel Holdsworth <joel@airwebreathe.org.uk>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <cassert>
21
22#include <QDebug>
23#include <QLineEdit>
24#include <QSpinBox>
25
26#include <libsigrokcxx/libsigrokcxx.hpp>
27
28#include "string.hpp"
29
30using std::string;
31
32using Glib::ustring;
33
34namespace pv {
35namespace prop {
36
37String::String(QString name,
38 QString desc,
39 Getter getter,
40 Setter setter) :
41 Property(name, desc, getter, setter),
42 line_edit_(nullptr)
43{
44}
45
46QWidget* String::get_widget(QWidget *parent, bool auto_commit)
47{
48 if (line_edit_)
49 return line_edit_;
50
51 if (!getter_)
52 return nullptr;
53
54 try {
55 Glib::VariantBase variant = getter_();
56 if (!variant.gobj())
57 return nullptr;
58 } catch (const sigrok::Error &e) {
59 qWarning() << tr("Querying config key %1 resulted in %2").arg(name_, e.what());
60 return nullptr;
61 }
62
63 line_edit_ = new QLineEdit(parent);
64
65 update_widget();
66
67 if (auto_commit)
68 connect(line_edit_, SIGNAL(textEdited(const QString&)),
69 this, SLOT(on_text_edited(const QString&)));
70
71 return line_edit_;
72}
73
74void String::update_widget()
75{
76 if (!line_edit_)
77 return;
78
79 Glib::VariantBase variant;
80
81 try {
82 variant = getter_();
83 } catch (const sigrok::Error &e) {
84 qWarning() << tr("Querying config key %1 resulted in %2").arg(name_, e.what());
85 return;
86 }
87
88 assert(variant.gobj());
89
90 string value = Glib::VariantBase::cast_dynamic<Glib::Variant<ustring>>(
91 variant).get();
92
93 line_edit_->setText(QString::fromStdString(value));
94}
95
96void String::commit()
97{
98 assert(setter_);
99
100 if (!line_edit_)
101 return;
102
103 QByteArray ba = line_edit_->text().toLocal8Bit();
104 setter_(Glib::Variant<ustring>::create(ba.data()));
105}
106
107void String::on_text_edited(const QString&)
108{
109 commit();
110}
111
112} // namespace prop
113} // namespace pv