1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:07:35 +00:00

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.
This commit is contained in:
Andreas Kling 2020-09-15 21:33:37 +02:00
parent 1e96e46a81
commit e2f32b8f9d
23 changed files with 373 additions and 250 deletions

View file

@ -109,11 +109,18 @@ public:
SizePolicy size_policy(Orientation orientation) { return orientation == Orientation::Horizontal ? m_horizontal_size_policy : m_vertical_size_policy; }
void set_size_policy(SizePolicy horizontal_policy, SizePolicy vertical_policy);
void set_size_policy(Orientation, SizePolicy);
void set_horizontal_size_policy(SizePolicy policy) { set_size_policy(policy, vertical_size_policy()); }
void set_vertical_size_policy(SizePolicy policy) { set_size_policy(horizontal_size_policy(), policy); }
Gfx::IntSize preferred_size() const { return m_preferred_size; }
void set_preferred_size(const Gfx::IntSize&);
void set_preferred_size(int width, int height) { set_preferred_size({ width, height }); }
int preferred_width() const { return preferred_size().width(); }
int preferred_height() const { return preferred_size().height(); }
void set_preferred_width(int w) { set_preferred_size(w, preferred_height()); }
void set_preferred_height(int h) { set_preferred_size(preferred_width(), h); }
bool has_tooltip() const { return !m_tooltip.is_empty(); }
String tooltip() const { return m_tooltip; }
void set_tooltip(const StringView&);
@ -261,8 +268,6 @@ public:
virtual bool is_radio_button() const { return false; }
virtual bool is_abstract_button() const { return false; }
virtual void save_to(AK::JsonObject&) override;
void do_layout();
Gfx::Palette palette() const;
@ -317,8 +322,6 @@ protected:
virtual void did_begin_inspection() override;
virtual void did_end_inspection() override;
virtual bool set_property(const StringView& name, const JsonValue& value) override;
private:
void handle_paint_event(PaintEvent&);
void handle_resize_event(ResizeEvent&);