aboutsummaryrefslogtreecommitdiff
path: root/src/osx/gui/Menu.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/osx/gui/Menu.mm')
-rw-r--r--src/osx/gui/Menu.mm180
1 files changed, 0 insertions, 180 deletions
diff --git a/src/osx/gui/Menu.mm b/src/osx/gui/Menu.mm
deleted file mode 100644
index 5d0fd4d5..00000000
--- a/src/osx/gui/Menu.mm
+++ /dev/null
@@ -1,180 +0,0 @@
-#include "cru/osx/gui/Menu.h"
-#import "MenuPrivate.h"
-
-#include "KeyboardPrivate.h"
-#include "cru/common/platform/osx/Convert.h"
-
-#import <AppKit/NSApplication.h>
-
-namespace cru::platform::gui::osx {
-using platform::osx::Convert;
-
-namespace {
-std::unique_ptr<OsxMenu> application_menu = nullptr;
-}
-
-namespace details {
-OsxMenuItemPrivate::OsxMenuItemPrivate(OsxMenuItem* d) {
- d_ = d;
- sub_menu_ = new OsxMenu(d->GetUiApplication());
- sub_menu_->p_->SetParentItem(d);
- handler_ = [[CruOsxMenuItemClickHandler alloc] init:this];
-}
-
-OsxMenuItemPrivate::~OsxMenuItemPrivate() { delete sub_menu_; }
-
-void OsxMenuItemPrivate::AttachToNative(NSMenuItem* native_menu_item, bool check_submenu) {
- Expects(sub_menu_);
-
- menu_item_ = native_menu_item;
- [native_menu_item setTarget:handler_];
- [native_menu_item setAction:@selector(handleClick)];
- if (check_submenu && [native_menu_item hasSubmenu]) {
- sub_menu_->p_->AttachToNative([native_menu_item submenu]);
- }
-}
-
-OsxMenuPrivate::OsxMenuPrivate(OsxMenu* d) { d_ = d; }
-
-OsxMenuPrivate::~OsxMenuPrivate() {
- for (auto item : items_) {
- delete item;
- }
-}
-
-void OsxMenuPrivate::AttachToNative(NSMenu* native_menu) {
- menu_ = native_menu;
-
- auto item_count = [native_menu numberOfItems];
- for (int i = 0; i < item_count; i++) {
- auto native_item = [native_menu itemAtIndex:i];
- auto item = new OsxMenuItem(d_->GetUiApplication());
- item->p_->SetParentMenu(d_);
- item->p_->AttachToNative(native_item, true);
- items_.push_back(item);
- }
-}
-}
-
-OsxMenuItem::OsxMenuItem(IUiApplication* ui_application) : OsxGuiResource(ui_application) {
- p_ = new details::OsxMenuItemPrivate(this);
-}
-
-OsxMenuItem::~OsxMenuItem() { delete p_; }
-
-String OsxMenuItem::GetTitle() { return Convert((CFStringRef)[p_->menu_item_ title]); }
-
-void OsxMenuItem::SetTitle(String title) { [p_->menu_item_ setTitle:(NSString*)Convert(title)]; }
-
-bool OsxMenuItem::IsEnabled() { return [p_->menu_item_ isEnabled]; }
-
-void OsxMenuItem::SetEnabled(bool enabled) { [p_->menu_item_ setEnabled:enabled]; }
-
-IMenu* OsxMenuItem::GetParentMenu() { return p_->parent_menu_; }
-
-IMenu* OsxMenuItem::GetSubmenu() { return p_->sub_menu_; }
-
-void OsxMenuItem::SetKeyboardShortcut(KeyCode key, KeyModifier modifiers) {
- [p_->menu_item_ setKeyEquivalent:ConvertKeyCodeToKeyEquivalent(key)];
- [p_->menu_item_ setKeyEquivalentModifierMask:ConvertKeyModifier(modifiers)];
-}
-
-void OsxMenuItem::DeleteKeyboardShortcut() {
- [p_->menu_item_ setKeyEquivalent:@""];
- [p_->menu_item_ setKeyEquivalentModifierMask:0];
-}
-
-void OsxMenuItem::SetOnClickHandler(std::function<void()> handler) {
- p_->on_click_handler_ = std::move(handler);
-}
-
-OsxMenu* OsxMenu::CreateOrGetApplicationMenu(IUiApplication* ui_application) {
- if (application_menu) {
- return application_menu.get();
- }
-
- NSMenu* native_main_menu = [[NSMenu alloc] init];
- [NSApp setMainMenu:native_main_menu];
- [native_main_menu setAutoenablesItems:NO];
-
- application_menu.reset(new OsxMenu(ui_application));
- application_menu->p_->AttachToNative(native_main_menu);
-
- application_menu->CreateItemAt(0);
-
- return application_menu.get();
-}
-
-OsxMenu::OsxMenu(IUiApplication* ui_application) : OsxGuiResource(ui_application) {
- p_ = new details::OsxMenuPrivate(this);
-}
-
-OsxMenu::~OsxMenu() { delete p_; }
-
-IMenuItem* OsxMenu::GetItemAt(int index) {
- if (index < 0 || index >= p_->items_.size()) {
- return nullptr;
- }
-
- return p_->items_[index];
-}
-
-int OsxMenu::GetItemCount() { return p_->items_.size(); }
-
-IMenuItem* OsxMenu::CreateItemAt(int index) {
- if (index < 0) index = 0;
- if (index > p_->items_.size()) index = p_->items_.size();
-
- if (p_->parent_item_ && p_->items_.empty()) {
- Expects(p_->menu_ == nullptr);
- p_->menu_ = [[NSMenu alloc] init];
- [p_->menu_ setAutoenablesItems:NO];
- [p_->parent_item_->p_->GetNative() setSubmenu:p_->menu_];
- }
-
- auto native_item = [[NSMenuItem alloc] init];
- [p_->menu_ insertItem:native_item atIndex:index];
-
- auto item = new OsxMenuItem(GetUiApplication());
- item->p_->SetParentMenu(this);
- item->p_->AttachToNative(native_item, false);
- p_->items_.insert(p_->items_.begin() + index, item);
-
- return item;
-}
-
-void OsxMenu::RemoveItemAt(int index) {
- if (index < 0 || index >= p_->items_.size()) {
- return;
- }
-
- auto item = p_->items_[index];
- [p_->menu_ removeItem:item->p_->GetNative()];
- p_->items_.erase(p_->items_.begin() + index);
-
- delete item;
-
- if (p_->items_.empty() && p_->parent_item_) {
- Expects(p_->menu_ != nullptr);
- [p_->parent_item_->p_->GetNative() setSubmenu:nullptr];
- p_->menu_ = nullptr;
- }
-}
-}
-
-@implementation CruOsxMenuItemClickHandler {
- cru::platform::gui::osx::details::OsxMenuItemPrivate* p_;
-}
-
-- (id)init:(cru::platform::gui::osx::details::OsxMenuItemPrivate*)p {
- p_ = p;
- return self;
-}
-
-- (void)handleClick {
- if (p_->GetOnClickHandler()) {
- p_->GetOnClickHandler()();
- }
-}
-
-@end