GMenu.h 949 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #pragma once
  2. #include <AK/Function.h>
  3. #include <AK/NonnullOwnPtrVector.h>
  4. #include <AK/NonnullRefPtr.h>
  5. #include <LibCore/CObject.h>
  6. #include <LibGUI/GMenuItem.h>
  7. class GAction;
  8. class Point;
  9. class GMenu final : public CObject {
  10. C_OBJECT(GMenu)
  11. public:
  12. explicit GMenu(const StringView& name = "");
  13. virtual ~GMenu() override;
  14. static GMenu* from_menu_id(int);
  15. const String& name() const { return m_name; }
  16. GAction* action_at(int);
  17. void add_action(NonnullRefPtr<GAction>);
  18. void add_separator();
  19. void add_submenu(NonnullRefPtr<GMenu>);
  20. void popup(const Point& screen_position);
  21. void dismiss();
  22. Function<void(unsigned)> on_item_activation;
  23. private:
  24. friend class GMenuBar;
  25. int menu_id() const { return m_menu_id; }
  26. int realize_menu();
  27. void unrealize_menu();
  28. void realize_if_needed();
  29. int m_menu_id { -1 };
  30. String m_name;
  31. NonnullOwnPtrVector<GMenuItem> m_items;
  32. };