From f1b58d8d8c2707a4f4c12428891d09be79f02aca Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 14 Apr 2019 04:14:23 +0200 Subject: [PATCH] VisualBuilder: Let's have getters and setters for properties. --- Applications/VisualBuilder/VBProperty.cpp | 9 +++++++++ Applications/VisualBuilder/VBProperty.h | 8 ++++++++ Applications/VisualBuilder/VBWidgetRegistry.cpp | 10 +++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Applications/VisualBuilder/VBProperty.cpp b/Applications/VisualBuilder/VBProperty.cpp index bb0b3becfd..e8c5ab20d6 100644 --- a/Applications/VisualBuilder/VBProperty.cpp +++ b/Applications/VisualBuilder/VBProperty.cpp @@ -6,6 +6,15 @@ VBProperty::VBProperty(const String& name, const GVariant& value) { } +VBProperty::VBProperty(const String& name, Function&& getter, Function&& setter) + : m_name(name) + , m_getter(move(getter)) + , m_setter(move(setter)) +{ + ASSERT(m_getter); + ASSERT(m_setter); +} + VBProperty::~VBProperty() { } diff --git a/Applications/VisualBuilder/VBProperty.h b/Applications/VisualBuilder/VBProperty.h index 9825e78fb9..8ad14747d3 100644 --- a/Applications/VisualBuilder/VBProperty.h +++ b/Applications/VisualBuilder/VBProperty.h @@ -1,11 +1,15 @@ #pragma once #include +#include #include +class GWidget; + class VBProperty { public: VBProperty(const String& name, const GVariant& value); + VBProperty(const String& name, Function&& getter, Function&& setter); ~VBProperty(); String name() const { return m_name; } @@ -15,8 +19,12 @@ public: bool is_readonly() const { return m_readonly; } void set_readonly(bool b) { m_readonly = b; } + void sync(); + private: String m_name; GVariant m_value; + Function m_getter; + Function m_setter; bool m_readonly { false }; }; diff --git a/Applications/VisualBuilder/VBWidgetRegistry.cpp b/Applications/VisualBuilder/VBWidgetRegistry.cpp index 8ce03439ca..85bc6cb444 100644 --- a/Applications/VisualBuilder/VBWidgetRegistry.cpp +++ b/Applications/VisualBuilder/VBWidgetRegistry.cpp @@ -76,11 +76,15 @@ static GWidget* build_gwidget(VBWidgetType type, GWidget* parent) GWidget* VBWidgetRegistry::build_gwidget(VBWidgetType type, GWidget* parent, Vector>& properties) { auto* gwidget = ::build_gwidget(type, parent); - auto add_property = [&properties] (const String& name, const GVariant& value = { }, bool is_readonly = false) { + auto add_readonly_property = [&properties] (const String& name, const GVariant& value) { auto property = make(name, value); - property->set_readonly(is_readonly); + property->set_readonly(true); properties.append(move(property)); }; - add_property("class", to_class_name(type), true); + auto add_property = [&properties] (const String& name, Function&& getter, Function&& setter) { + auto property = make(name, move(getter), move(setter)); + properties.append(move(property)); + }; + add_readonly_property("class", to_class_name(type)); return gwidget; }