diff options
author | Andreas Kling <kling@serenityos.org> | 2020-09-15 21:33:37 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-15 21:46:26 +0200 |
commit | e2f32b8f9d4ce0ce8f92d4817273fb9b32cd8ccd (patch) | |
tree | bcc49c2fd5a87ffbfc992d0b1406b4c64e47941b /Libraries/LibGUI/AbstractButton.cpp | |
parent | 1e96e46a8137e297d1d38271373145ac21f4da3e (diff) | |
download | serenity-e2f32b8f9d4ce0ce8f92d4817273fb9b32cd8ccd.zip |
LibCore: Make Core::Object properties more dynamic
Instead of everyone overriding save_to() and set_property() and doing
a pretty asymmetric job of implementing the various properties, let's
add a bit of structure here.
Object properties are now represented by a Core::Property. Properties
are registered with a getter and setter (optional) in constructors.
I've added some convenience macros for creating and registering
properties, but this does still feel a bit bulky. We'll have to
iterate on this and see where it goes.
Diffstat (limited to 'Libraries/LibGUI/AbstractButton.cpp')
-rw-r--r-- | Libraries/LibGUI/AbstractButton.cpp | 36 |
1 files changed, 5 insertions, 31 deletions
diff --git a/Libraries/LibGUI/AbstractButton.cpp b/Libraries/LibGUI/AbstractButton.cpp index a4114bc1b8..ae14dddc42 100644 --- a/Libraries/LibGUI/AbstractButton.cpp +++ b/Libraries/LibGUI/AbstractButton.cpp @@ -39,6 +39,11 @@ AbstractButton::AbstractButton(const StringView& text) m_auto_repeat_timer->on_timeout = [this] { click(); }; + + REGISTER_STRING_PROPERTY("text", text, set_text); + REGISTER_BOOL_PROPERTY("checked", is_checked, set_checked); + REGISTER_BOOL_PROPERTY("checkable", is_checkable, set_checkable); + REGISTER_BOOL_PROPERTY("exclusive", is_exclusive, set_exclusive); } AbstractButton::~AbstractButton() @@ -185,35 +190,4 @@ void AbstractButton::change_event(Event& event) Widget::change_event(event); } -void AbstractButton::save_to(JsonObject& json) -{ - json.set("text", m_text); - json.set("checked", m_checked); - json.set("checkable", m_checkable); - json.set("exclusive", m_exclusive); - Widget::save_to(json); -} - -bool AbstractButton::set_property(const StringView& name, const JsonValue& value) -{ - if (name == "text") { - set_text(value.to_string()); - return true; - } - if (name == "checked") { - set_checked(value.to_bool()); - return true; - } - if (name == "checkable") { - set_checkable(value.to_bool()); - return true; - } - if (name == "exclusive") { - set_exclusive(value.to_bool()); - return true; - } - - return Widget::set_property(name, value); -} - } |