| // Copyright 2013 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/shell/browser/shell_browser_main_parts.h" |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #include "base/apple/bundle_locations.h" |
| |
| namespace { |
| |
| NSMenuItem* CreateMenuItem(NSString* title, |
| SEL action, |
| NSString* key_equivalent) { |
| return [[NSMenuItem alloc] initWithTitle:title |
| action:action |
| keyEquivalent:key_equivalent]; |
| } |
| |
| // The App Menu refers to the menu titled "Content Shell". |
| NSMenu* BuildAppMenu() { |
| // The title is not used, as the title will always be the name of the app. |
| NSMenu* menu = [[NSMenu alloc] initWithTitle:@""]; |
| |
| NSMenuItem* item = |
| CreateMenuItem(@"Hide Content Shell", @selector(hide:), @"h"); |
| [menu addItem:item]; |
| |
| item = |
| CreateMenuItem(@"Hide Others", @selector(hideOtherApplications:), @"h"); |
| item.keyEquivalentModifierMask = |
| NSEventModifierFlagOption | NSEventModifierFlagCommand; |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Show All", @selector(unhideAllApplications:), @""); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Quit Content Shell", @selector(terminate:), @"q"); |
| [menu addItem:item]; |
| |
| return menu; |
| } |
| |
| NSMenu* BuildFileMenu() { |
| NSMenu* menu = [[NSMenu alloc] initWithTitle:@"File"]; |
| NSMenuItem* item = CreateMenuItem(@"New", @selector(newDocument:), @"n"); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Close", @selector(performClose:), @"w"); |
| [menu addItem:item]; |
| return menu; |
| } |
| |
| NSMenu* BuildEditMenu() { |
| NSMenu* menu = [[NSMenu alloc] initWithTitle:@"Edit"]; |
| |
| NSMenuItem* item = CreateMenuItem(@"Undo", @selector(undo:), @"z"); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Redo", @selector(redo:), @"Z"); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Cut", @selector(cut:), @"x"); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Copy", @selector(copy:), @"c"); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Paste", @selector(paste:), @"v"); |
| [menu addItem:item]; |
| |
| item = CreateMenuItem(@"Select All", @selector(selectAll:), @"a"); |
| [menu addItem:item]; |
| return menu; |
| } |
| |
| NSMenu* BuildViewMenu() { |
| // AppKit auto-populates this menu. |
| NSMenu* menu = [[NSMenu alloc] initWithTitle:@"View"]; |
| return menu; |
| } |
| |
| NSMenu* BuildDebugMenu() { |
| NSMenu* menu = [[NSMenu alloc] initWithTitle:@"Debug"]; |
| |
| NSMenuItem* item = |
| CreateMenuItem(@"Show Developer Tools", @selector(showDevTools:), @""); |
| [menu addItem:item]; |
| return menu; |
| } |
| |
| NSMenu* BuildWindowMenu() { |
| NSMenu* menu = [[NSMenu alloc] initWithTitle:@"Window"]; |
| |
| NSMenuItem* item = |
| CreateMenuItem(@"Minimize", @selector(performMiniaturize:), @"m"); |
| [menu addItem:item]; |
| item = CreateMenuItem(@"Zoom", @selector(performZoom:), @""); |
| [menu addItem:item]; |
| item = CreateMenuItem(@"Bring All To Front", @selector(arrangeInFront:), @""); |
| [menu addItem:item]; |
| return menu; |
| } |
| |
| NSMenu* BuildMainMenu() { |
| NSMenu* main_menu = [[NSMenu alloc] initWithTitle:@""]; |
| |
| using Builder = NSMenu* (*)(); |
| static const Builder kBuilderFuncs[] = {&BuildAppMenu, &BuildFileMenu, |
| &BuildEditMenu, &BuildViewMenu, |
| &BuildDebugMenu, &BuildWindowMenu}; |
| for (auto* builder : kBuilderFuncs) { |
| NSMenuItem* item = [[NSMenuItem alloc] initWithTitle:@"" |
| action:nullptr |
| keyEquivalent:@""]; |
| item.submenu = builder(); |
| [main_menu addItem:item]; |
| } |
| return main_menu; |
| } |
| |
| } // namespace |
| |
| namespace content { |
| |
| void ShellBrowserMainParts::PreCreateMainMessageLoop() { |
| NSMenu* main_menu = BuildMainMenu(); |
| [NSApplication.sharedApplication setMainMenu:main_menu]; |
| } |
| |
| } // namespace content |