PulseView  unreleased development snapshot
A Qt-based sigrok GUI
string.cpp
Go to the documentation of this file.
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 
30 using std::string;
31 
32 using Glib::ustring;
33 
34 namespace pv {
35 namespace prop {
36 
37 String::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 
46 QWidget* 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 
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 
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 
107 void String::on_text_edited(const QString&)
108 {
109  commit();
110 }
111 
112 } // namespace prop
113 } // namespace pv
String(QString name, QString desc, Getter getter, Setter setter)
Definition: string.cpp:37
void update_widget()
Definition: string.cpp:74
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12358
const Getter getter_
Definition: property.hpp:63
void commit()
Definition: string.cpp:96
QWidget * get_widget(QWidget *parent, bool auto_commit)
Definition: string.cpp:46
void on_text_edited(const QString &)
Definition: string.cpp:107
QLineEdit * line_edit_
Definition: string.hpp:46
const Setter setter_
Definition: property.hpp:64
function< Glib::VariantBase()> Getter
Definition: property.hpp:46
function< void(Glib::VariantBase)> Setter
Definition: property.hpp:47