summaryrefslogtreecommitdiff
path: root/Libraries/LibGUI/AbstractButton.cpp
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-09-15 21:33:37 +0200
committerAndreas Kling <kling@serenityos.org>2020-09-15 21:46:26 +0200
commite2f32b8f9d4ce0ce8f92d4817273fb9b32cd8ccd (patch)
treebcc49c2fd5a87ffbfc992d0b1406b4c64e47941b /Libraries/LibGUI/AbstractButton.cpp
parent1e96e46a8137e297d1d38271373145ac21f4da3e (diff)
downloadserenity-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.cpp36
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);
-}
-
}