mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:07:35 +00:00
LibGUI+LibCore: Move GML property system from LibCore to LibGUI
Since Core::Object properties are really only used by GML now that the Inspector is long gone, there's no need for these to pollute Core::Object. This patch adds a new GUI::Object class to hold properties, and makes it the new base class of GUI::Window, GUI::Widget and GUI::Layout. The "instantiate an object by name" mechanism that GML uses is also hoisted into GUI::Object as well.
This commit is contained in:
parent
9f6ceff7cf
commit
405187993a
19 changed files with 376 additions and 335 deletions
|
@ -27,17 +27,6 @@ Object::Object(Object* parent)
|
|||
all_objects().append(*this);
|
||||
if (m_parent)
|
||||
m_parent->add_child(*this);
|
||||
|
||||
REGISTER_READONLY_STRING_PROPERTY("class_name", class_name);
|
||||
REGISTER_DEPRECATED_STRING_PROPERTY("name", name, set_name);
|
||||
|
||||
register_property(
|
||||
"address", [this] { return FlatPtr(this); },
|
||||
[](auto&) { return false; });
|
||||
|
||||
register_property(
|
||||
"parent", [this] { return FlatPtr(this->parent()); },
|
||||
[](auto&) { return false; });
|
||||
}
|
||||
|
||||
Object::~Object()
|
||||
|
@ -176,22 +165,6 @@ void Object::deferred_invoke(Function<void()> invokee)
|
|||
Core::deferred_invoke([invokee = move(invokee), strong_this = NonnullRefPtr(*this)] { invokee(); });
|
||||
}
|
||||
|
||||
JsonValue Object::property(DeprecatedString const& name) const
|
||||
{
|
||||
auto it = m_properties.find(name);
|
||||
if (it == m_properties.end())
|
||||
return JsonValue();
|
||||
return it->value->get();
|
||||
}
|
||||
|
||||
bool Object::set_property(DeprecatedString const& name, JsonValue const& value)
|
||||
{
|
||||
auto it = m_properties.find(name);
|
||||
if (it == m_properties.end())
|
||||
return false;
|
||||
return it->value->set(value);
|
||||
}
|
||||
|
||||
bool Object::is_ancestor_of(Object const& other) const
|
||||
{
|
||||
if (&other == this)
|
||||
|
@ -241,48 +214,9 @@ void Object::decrement_inspector_count(Badge<InspectorServerConnection>)
|
|||
did_end_inspection();
|
||||
}
|
||||
|
||||
void Object::register_property(DeprecatedString const& name, Function<JsonValue()> getter, Function<bool(JsonValue const&)> setter)
|
||||
{
|
||||
m_properties.set(name, make<Property>(name, move(getter), move(setter)));
|
||||
}
|
||||
|
||||
void Object::set_event_filter(Function<bool(Core::Event&)> filter)
|
||||
{
|
||||
m_event_filter = move(filter);
|
||||
}
|
||||
|
||||
static HashMap<StringView, ObjectClassRegistration*>& object_classes()
|
||||
{
|
||||
static HashMap<StringView, ObjectClassRegistration*> s_map;
|
||||
return s_map;
|
||||
}
|
||||
|
||||
ObjectClassRegistration::ObjectClassRegistration(StringView class_name, Function<ErrorOr<NonnullRefPtr<Object>>()> factory, ObjectClassRegistration* parent_class)
|
||||
: m_class_name(class_name)
|
||||
, m_factory(move(factory))
|
||||
, m_parent_class(parent_class)
|
||||
{
|
||||
object_classes().set(class_name, this);
|
||||
}
|
||||
|
||||
bool ObjectClassRegistration::is_derived_from(ObjectClassRegistration const& base_class) const
|
||||
{
|
||||
if (&base_class == this)
|
||||
return true;
|
||||
if (!m_parent_class)
|
||||
return false;
|
||||
return m_parent_class->is_derived_from(base_class);
|
||||
}
|
||||
|
||||
void ObjectClassRegistration::for_each(Function<void(ObjectClassRegistration const&)> callback)
|
||||
{
|
||||
for (auto& it : object_classes()) {
|
||||
callback(*it.value);
|
||||
}
|
||||
}
|
||||
|
||||
ObjectClassRegistration const* ObjectClassRegistration::find(StringView class_name)
|
||||
{
|
||||
return object_classes().get(class_name).value_or(nullptr);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue