* 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 <http://www.gnu.org/licenses/>.
*/
#include <cassert>
#include <QFormLayout>
+#include <QHBoxLayout>
+#include <QIcon>
+#include <QLabel>
+#include <QPushButton>
#include <pv/prop/property.hpp>
#include "binding.hpp"
using std::shared_ptr;
+using std::string;
+using std::vector;
namespace pv {
namespace binding {
-const std::vector< std::shared_ptr<prop::Property> >& Binding::properties()
+const vector< shared_ptr<prop::Property> >& Binding::properties()
{
return properties_;
}
}
}
-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<pv::prop::Property> 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);
return form;
}
+void Binding::update_property_widgets()
+{
+ for (shared_ptr<pv::prop::Property> p : properties_) {
+ assert(p);
+ p->update_widget();
+ }
+}
+
QString Binding::print_gvariant(Glib::VariantBase gvar)
{
QString s;
s = QString::fromStdString("(null)");
else if (gvar.is_of_type(Glib::VariantType("s")))
s = QString::fromStdString(
- Glib::VariantBase::cast_dynamic<Glib::Variant<std::string>>(
- gvar).get());
+ Glib::VariantBase::cast_dynamic<Glib::Variant<string>>(gvar).get());
else
s = QString::fromStdString(gvar.print());
return s;
}
-} // binding
-} // pv
+void Binding::on_help_clicked()
+{
+ QPushButton *btn = qobject_cast<QPushButton*>(QObject::sender());
+ assert(btn);
+
+ QLabel *lbl = help_labels_.at(btn);
+ lbl->setVisible(!lbl->isVisible());
+}
+
+} // namespace binding
+} // namespace pv