Object.cpp 883 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "Object.h"
  2. #include "Event.h"
  3. #include <AK/Assertions.h>
  4. Object::Object(Object* parent)
  5. : m_parent(parent)
  6. {
  7. if (m_parent)
  8. m_parent->addChild(*this);
  9. }
  10. Object::~Object()
  11. {
  12. if (m_parent)
  13. m_parent->removeChild(*this);
  14. auto childrenToDelete = std::move(m_children);
  15. for (auto* child : childrenToDelete)
  16. delete child;
  17. }
  18. void Object::event(Event& event)
  19. {
  20. switch (event.type()) {
  21. case Event::Invalid:
  22. ASSERT_NOT_REACHED();
  23. break;
  24. default:
  25. break;
  26. }
  27. }
  28. void Object::addChild(Object& object)
  29. {
  30. m_children.append(&object);
  31. }
  32. void Object::removeChild(Object& object)
  33. {
  34. // Oh geez, Vector needs a remove() huh...
  35. Vector<Object*> newList;
  36. for (auto* child : m_children) {
  37. if (child != &object)
  38. newList.append(child);
  39. }
  40. m_children = std::move(newList);
  41. }