Menubar.h 924 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2021, sin-ack <sin-ack@protonmail.com>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/Badge.h>
  9. #include <AK/IterationDecision.h>
  10. #include <AK/NonnullRefPtrVector.h>
  11. #include <LibCore/Object.h>
  12. #include <LibGUI/Forward.h>
  13. #include <LibGUI/Menu.h>
  14. namespace GUI {
  15. class Menubar : public Core::Object {
  16. C_OBJECT(Menubar);
  17. public:
  18. ~Menubar() { }
  19. Menu& add_menu(Badge<Window>, String name)
  20. {
  21. auto& menu = add<Menu>(move(name));
  22. m_menus.append(menu);
  23. return menu;
  24. }
  25. void for_each_menu(Function<IterationDecision(Menu&)> callback)
  26. {
  27. for (auto& menu : m_menus) {
  28. if (callback(menu) == IterationDecision::Break) {
  29. return;
  30. }
  31. }
  32. }
  33. private:
  34. Menubar() { }
  35. NonnullRefPtrVector<Menu> m_menus;
  36. };
  37. }