]> sigrok.org Git - pulseview.git/blame - pv/prop/string.cpp
Backport recent changes from mainline.
[pulseview.git] / pv / prop / string.cpp
CommitLineData
7112a458
JH
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
efdec55a 17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
7112a458
JH
18 */
19
eb8269e3 20#include <cassert>
7112a458 21
3782d860 22#include <QDebug>
4e5a4405 23#include <QLineEdit>
7112a458
JH
24#include <QSpinBox>
25
3782d860
UH
26#include <libsigrokcxx/libsigrokcxx.hpp>
27
2acdb232 28#include "string.hpp"
7112a458 29
e8d00928
ML
30using std::string;
31
32using Glib::ustring;
33
7112a458
JH
34namespace pv {
35namespace prop {
36
37String::String(QString name,
9a267f8d 38 QString desc,
7112a458
JH
39 Getter getter,
40 Setter setter) :
9a267f8d 41 Property(name, desc, getter, setter),
4c60462b 42 line_edit_(nullptr)
7112a458
JH
43{
44}
45
b1fe148e 46QWidget* String::get_widget(QWidget *parent, bool auto_commit)
7112a458 47{
8dbbc7f0
JH
48 if (line_edit_)
49 return line_edit_;
7112a458 50
8dbbc7f0 51 if (!getter_)
4c60462b 52 return nullptr;
c542721b 53
3782d860
UH
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());
4c60462b 60 return nullptr;
3782d860 61 }
e8d00928 62
8dbbc7f0 63 line_edit_ = new QLineEdit(parent);
3782d860
UH
64
65 update_widget();
7112a458 66
b1fe148e 67 if (auto_commit)
8dbbc7f0 68 connect(line_edit_, SIGNAL(textEdited(const QString&)),
b1fe148e
JH
69 this, SLOT(on_text_edited(const QString&)));
70
8dbbc7f0 71 return line_edit_;
7112a458
JH
72}
73
3782d860
UH
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
7112a458
JH
96void String::commit()
97{
8dbbc7f0 98 assert(setter_);
7112a458 99
8dbbc7f0 100 if (!line_edit_)
7112a458
JH
101 return;
102
8dbbc7f0
JH
103 QByteArray ba = line_edit_->text().toLocal8Bit();
104 setter_(Glib::Variant<ustring>::create(ba.data()));
7112a458
JH
105}
106
b1fe148e
JH
107void String::on_text_edited(const QString&)
108{
109 commit();
110}
111
870ea3db
UH
112} // namespace prop
113} // namespace pv