GLayout.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <AK/Badge.h>
  3. #include <AK/OwnPtr.h>
  4. #include <AK/Vector.h>
  5. #include <AK/WeakPtr.h>
  6. #include <LibGUI/GMargins.h>
  7. class GWidget;
  8. class GLayout {
  9. public:
  10. GLayout();
  11. virtual ~GLayout();
  12. void add_widget(GWidget&);
  13. void add_layout(OwnPtr<GLayout>&&);
  14. void add_spacer();
  15. void remove_widget(GWidget&);
  16. virtual void run(GWidget&) = 0;
  17. void notify_adopted(Badge<GWidget>, GWidget&);
  18. void notify_disowned(Badge<GWidget>, GWidget&);
  19. GMargins margins() const { return m_margins; }
  20. void set_margins(const GMargins&);
  21. int spacing() const { return m_spacing; }
  22. void set_spacing(int);
  23. protected:
  24. struct Entry {
  25. enum class Type {
  26. Invalid = 0,
  27. Widget,
  28. Layout,
  29. Spacer,
  30. };
  31. Type type { Type::Invalid };
  32. WeakPtr<GWidget> widget;
  33. OwnPtr<GLayout> layout;
  34. };
  35. void add_entry(Entry&&);
  36. WeakPtr<GWidget> m_owner;
  37. Vector<Entry> m_entries;
  38. GMargins m_margins;
  39. int m_spacing { 3 };
  40. };