GLayout.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include <LibGUI/GLayout.h>
  2. #include <LibGUI/GWidget.h>
  3. GLayout::GLayout()
  4. {
  5. }
  6. GLayout::~GLayout()
  7. {
  8. }
  9. void GLayout::notify_adopted(Badge<GWidget>, GWidget& widget)
  10. {
  11. if (m_owner == &widget)
  12. return;
  13. m_owner = widget.make_weak_ptr();
  14. }
  15. void GLayout::notify_disowned(Badge<GWidget>, GWidget& widget)
  16. {
  17. ASSERT(m_owner == &widget);
  18. m_owner.clear();
  19. }
  20. void GLayout::add_entry(Entry&& entry)
  21. {
  22. m_entries.append(move(entry));
  23. if (m_owner)
  24. m_owner->notify_layout_changed({});
  25. }
  26. void GLayout::add_spacer()
  27. {
  28. Entry entry;
  29. entry.type = Entry::Type::Spacer;
  30. add_entry(move(entry));
  31. }
  32. void GLayout::add_layout(OwnPtr<GLayout>&& layout)
  33. {
  34. Entry entry;
  35. entry.type = Entry::Type::Layout;
  36. entry.layout = move(layout);
  37. add_entry(move(entry));
  38. }
  39. void GLayout::add_widget(GWidget& widget)
  40. {
  41. Entry entry;
  42. entry.type = Entry::Type::Widget;
  43. entry.widget = widget.make_weak_ptr();
  44. add_entry(move(entry));
  45. }
  46. void GLayout::remove_widget(GWidget& widget)
  47. {
  48. m_entries.remove_first_matching([&](auto& entry) {
  49. return entry.widget == &widget;
  50. });
  51. if (m_owner)
  52. m_owner->notify_layout_changed({});
  53. }
  54. void GLayout::set_spacing(int spacing)
  55. {
  56. if (m_spacing == spacing)
  57. return;
  58. m_spacing = spacing;
  59. if (m_owner)
  60. m_owner->notify_layout_changed({});
  61. }
  62. void GLayout::set_margins(const GMargins& margins)
  63. {
  64. if (m_margins == margins)
  65. return;
  66. m_margins = margins;
  67. if (m_owner)
  68. m_owner->notify_layout_changed({});
  69. }