Object.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibGUI/Object.h>
  7. namespace GUI {
  8. Object::Object(Core::EventReceiver* parent)
  9. : Core::EventReceiver(parent)
  10. {
  11. }
  12. Object::~Object() = default;
  13. void Object::register_property(DeprecatedString const& name, Function<JsonValue()> getter, Function<bool(JsonValue const&)> setter)
  14. {
  15. m_properties.set(name, make<Property>(name, move(getter), move(setter)));
  16. }
  17. JsonValue Object::property(DeprecatedString const& name) const
  18. {
  19. auto it = m_properties.find(name);
  20. if (it == m_properties.end())
  21. return JsonValue();
  22. return it->value->get();
  23. }
  24. bool Object::set_property(DeprecatedString const& name, JsonValue const& value)
  25. {
  26. auto it = m_properties.find(name);
  27. if (it == m_properties.end())
  28. return false;
  29. return it->value->set(value);
  30. }
  31. static HashMap<StringView, ObjectClassRegistration*>& object_classes()
  32. {
  33. static HashMap<StringView, ObjectClassRegistration*> s_map;
  34. return s_map;
  35. }
  36. ObjectClassRegistration::ObjectClassRegistration(StringView class_name, Function<ErrorOr<NonnullRefPtr<Object>>()> factory, ObjectClassRegistration* parent_class)
  37. : m_class_name(class_name)
  38. , m_factory(move(factory))
  39. , m_parent_class(parent_class)
  40. {
  41. object_classes().set(class_name, this);
  42. }
  43. bool ObjectClassRegistration::is_derived_from(ObjectClassRegistration const& base_class) const
  44. {
  45. if (&base_class == this)
  46. return true;
  47. if (!m_parent_class)
  48. return false;
  49. return m_parent_class->is_derived_from(base_class);
  50. }
  51. void ObjectClassRegistration::for_each(Function<void(ObjectClassRegistration const&)> callback)
  52. {
  53. for (auto& it : object_classes()) {
  54. callback(*it.value);
  55. }
  56. }
  57. ObjectClassRegistration const* ObjectClassRegistration::find(StringView class_name)
  58. {
  59. return object_classes().get(class_name).value_or(nullptr);
  60. }
  61. }