X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fbinding%2Fbinding.cpp;h=9735e14681edaa6d9f1b6bdd642f76ba8db694d8;hb=374c697f74ba8abbfe2a014416eb398bb460d1c3;hp=f2a28d3972b2b59c77f0f98142957a5888c5e5bb;hpb=2ad82c2e40b6865481733913a2c32735602f63c4;p=pulseview.git
diff --git a/pv/binding/binding.cpp b/pv/binding/binding.cpp
index f2a28d3..9735e14 100644
--- a/pv/binding/binding.cpp
+++ b/pv/binding/binding.cpp
@@ -14,24 +14,29 @@
* 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 .
*/
#include
#include
+#include
+#include
+#include
+#include
#include
#include "binding.hpp"
using std::shared_ptr;
+using std::string;
+using std::vector;
namespace pv {
namespace binding {
-const std::vector< std::shared_ptr >& Binding::properties()
+const vector< shared_ptr >& Binding::properties()
{
return properties_;
}
@@ -44,25 +49,56 @@ void Binding::commit()
}
}
-void Binding::add_properties_to_form(QFormLayout *layout,
- bool auto_commit) const
+void Binding::add_properties_to_form(QFormLayout *layout, bool auto_commit)
{
assert(layout);
+ help_labels_.clear();
+
for (shared_ptr p : properties_) {
assert(p);
- QWidget *const widget = p->get_widget(layout->parentWidget(),
- auto_commit);
- if (p->labeled_widget())
+ QWidget *widget;
+ QLabel *help_lbl = nullptr;
+
+ if (p->desc().isEmpty()) {
+ widget = p->get_widget(layout->parentWidget(), auto_commit);
+ } else {
+ QPushButton *help_btn = new QPushButton();
+ help_btn->setFlat(true);
+ help_btn->setIcon(QIcon(":/icons/help-browser.png"));
+ help_btn->setToolTip(p->desc());
+ connect(help_btn, SIGNAL(clicked(bool)),
+ this, SLOT(on_help_clicked()));
+
+ QHBoxLayout *layout = new QHBoxLayout();
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addWidget(p->get_widget(layout->parentWidget(), auto_commit));
+ layout->addWidget(help_btn, 0, Qt::AlignRight);
+
+ widget = new QWidget();
+ widget->setLayout(layout);
+
+ help_lbl = new QLabel(p->desc());
+ help_lbl->setVisible(false);
+ help_lbl->setWordWrap(true);
+ help_labels_[help_btn] = help_lbl;
+ }
+
+ if (p->labeled_widget()) {
layout->addRow(widget);
- else
- layout->addRow(p->name(), widget);
+ } else {
+ auto *lbl = new QLabel(p->name());
+ lbl->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ layout->addRow(lbl, widget);
+ }
+
+ if (help_lbl)
+ layout->addRow(help_lbl);
}
}
-QWidget* Binding::get_property_form(QWidget *parent,
- bool auto_commit) const
+QWidget* Binding::get_property_form(QWidget *parent, bool auto_commit)
{
QWidget *const form = new QWidget(parent);
QFormLayout *const layout = new QFormLayout(form);
@@ -71,6 +107,14 @@ QWidget* Binding::get_property_form(QWidget *parent,
return form;
}
+void Binding::update_property_widgets()
+{
+ for (shared_ptr p : properties_) {
+ assert(p);
+ p->update_widget();
+ }
+}
+
QString Binding::print_gvariant(Glib::VariantBase gvar)
{
QString s;
@@ -79,13 +123,21 @@ QString Binding::print_gvariant(Glib::VariantBase gvar)
s = QString::fromStdString("(null)");
else if (gvar.is_of_type(Glib::VariantType("s")))
s = QString::fromStdString(
- Glib::VariantBase::cast_dynamic>(
- gvar).get());
+ Glib::VariantBase::cast_dynamic>(gvar).get());
else
s = QString::fromStdString(gvar.print());
return s;
}
-} // binding
-} // pv
+void Binding::on_help_clicked()
+{
+ QPushButton *btn = qobject_cast(QObject::sender());
+ assert(btn);
+
+ QLabel *lbl = help_labels_.at(btn);
+ lbl->setVisible(!lbl->isVisible());
+}
+
+} // namespace binding
+} // namespace pv