GLayout.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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::insert_widget_before(GWidget& widget, GWidget& before_widget)
  47. {
  48. Entry entry;
  49. entry.type = Entry::Type::Widget;
  50. entry.widget = widget.make_weak_ptr();
  51. m_entries.insert_before_matching(move(entry), [&](auto& existing_entry) {
  52. return existing_entry.type == Entry::Type::Widget && existing_entry.widget.ptr() == &before_widget;
  53. });
  54. if (m_owner)
  55. m_owner->notify_layout_changed({});
  56. }
  57. void GLayout::remove_widget(GWidget& widget)
  58. {
  59. m_entries.remove_first_matching([&](auto& entry) {
  60. return entry.widget == &widget;
  61. });
  62. if (m_owner)
  63. m_owner->notify_layout_changed({});
  64. }
  65. void GLayout::set_spacing(int spacing)
  66. {
  67. if (m_spacing == spacing)
  68. return;
  69. m_spacing = spacing;
  70. if (m_owner)
  71. m_owner->notify_layout_changed({});
  72. }
  73. void GLayout::set_margins(const GMargins& margins)
  74. {
  75. if (m_margins == margins)
  76. return;
  77. m_margins = margins;
  78. if (m_owner)
  79. m_owner->notify_layout_changed({});
  80. }