X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fbinding%2Fbinding.cpp;h=9735e14681edaa6d9f1b6bdd642f76ba8db694d8;hp=00399c1db212ced92570957d45a3e0e984adf73d;hb=4e2195c8d934f7f874b612eaace8c6849e8b475d;hpb=870ea3dbf35b182e120c5d84ab89bf9cb7691232 diff --git a/pv/binding/binding.cpp b/pv/binding/binding.cpp index 00399c1..9735e14 100644 --- a/pv/binding/binding.cpp +++ b/pv/binding/binding.cpp @@ -20,6 +20,10 @@ #include #include +#include +#include +#include +#include #include @@ -45,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); @@ -72,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; @@ -80,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; } +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