diff options
Diffstat (limited to 'include/cru/osx/gui/Menu.h')
-rw-r--r-- | include/cru/osx/gui/Menu.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/include/cru/osx/gui/Menu.h b/include/cru/osx/gui/Menu.h new file mode 100644 index 00000000..c5cc756a --- /dev/null +++ b/include/cru/osx/gui/Menu.h @@ -0,0 +1,67 @@ +#pragma once +#include "Resource.h" + +#include "cru/platform/gui/Menu.h" + +namespace cru::platform::gui::osx { +namespace details { +struct OsxMenuItemPrivate; +struct OsxMenuPrivate; +} // namespace details + +class OsxMenu; + +class OsxMenuItem : public OsxGuiResource, public virtual IMenuItem { + friend OsxMenu; + friend details::OsxMenuPrivate; + + private: + explicit OsxMenuItem(IUiApplication* ui_application); + + public: + CRU_DELETE_COPY(OsxMenuItem) + CRU_DELETE_MOVE(OsxMenuItem) + + ~OsxMenuItem() override; + + public: + String GetTitle() override; + void SetTitle(String title) override; + bool IsEnabled() override; + void SetEnabled(bool enabled) override; + IMenu* GetParentMenu() override; + IMenu* GetSubmenu() override; + void SetKeyboardShortcut(KeyCode key, KeyModifier modifiers) override; + void DeleteKeyboardShortcut() override; + void SetOnClickHandler(std::function<void()> handler) override; + + private: + details::OsxMenuItemPrivate* p_; +}; + +class OsxMenu : public OsxGuiResource, public virtual IMenu { + friend OsxMenuItem; + friend details::OsxMenuPrivate; + friend details::OsxMenuItemPrivate; + + private: + explicit OsxMenu(IUiApplication* ui_application); + + public: + static OsxMenu* CreateOrGetApplicationMenu(IUiApplication* ui_application); + + CRU_DELETE_COPY(OsxMenu) + CRU_DELETE_MOVE(OsxMenu) + + ~OsxMenu() override; + + public: + IMenuItem* GetItemAt(int index) override; + int GetItemCount() override; + IMenuItem* CreateItemAt(int index) override; + void RemoveItemAt(int index) override; + + private: + details::OsxMenuPrivate* p_; +}; +} // namespace cru::platform::gui::osx |