1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 7 8 #include "ash/launcher/launcher_alignment_menu.h" 9 #include "ash/launcher/launcher_types.h" 10 #include "base/basictypes.h" 11 #include "base/gtest_prod_util.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "ui/base/models/simple_menu_model.h" 14 15 class ChromeLauncherController; 16 17 namespace aura { 18 class RootWindow; 19 } 20 21 namespace extensions { 22 class ContextMenuMatcher; 23 } 24 25 // Context menu shown for a launcher item. 26 class LauncherContextMenu : public ui::SimpleMenuModel, 27 public ui::SimpleMenuModel::Delegate { 28 public: 29 // |item| is NULL if the context menu is for the launcher (the user right 30 // |clicked on an area with no icons). 31 LauncherContextMenu(ChromeLauncherController* controller, 32 const ash::LauncherItem* item, 33 aura::RootWindow* root_window); 34 // Creates a menu used as a desktop context menu on |root_window|. 35 LauncherContextMenu(ChromeLauncherController* controller, 36 aura::RootWindow* root_window); 37 virtual ~LauncherContextMenu(); 38 39 void Init(); 40 41 // ID of the item we're showing the context menu for. 42 ash::LauncherID id() const { return item_.id; } 43 44 // ui::SimpleMenuModel::Delegate overrides: 45 virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE; 46 virtual string16 GetLabelForCommandId(int command_id) const OVERRIDE; 47 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; 48 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 49 virtual bool GetAcceleratorForCommandId( 50 int command_id, 51 ui::Accelerator* accelerator) OVERRIDE; 52 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 53 54 private: 55 FRIEND_TEST_ALL_PREFIXES( 56 LauncherContextMenuTest, 57 NewIncognitoWindowMenuIsDisabledWhenIncognitoModeOff); 58 FRIEND_TEST_ALL_PREFIXES( 59 LauncherContextMenuTest, 60 NewWindowMenuIsDisabledWhenIncognitoModeForced); 61 62 enum MenuItem { 63 MENU_OPEN_NEW, 64 MENU_CLOSE, 65 MENU_PIN, 66 LAUNCH_TYPE_PINNED_TAB, 67 LAUNCH_TYPE_REGULAR_TAB, 68 LAUNCH_TYPE_FULLSCREEN, 69 LAUNCH_TYPE_WINDOW, 70 MENU_AUTO_HIDE, 71 MENU_NEW_WINDOW, 72 MENU_NEW_INCOGNITO_WINDOW, 73 MENU_ALIGNMENT_MENU, 74 #if defined(OS_CHROMEOS) 75 MENU_CHANGE_WALLPAPER, 76 #endif 77 }; 78 79 // Does |item_| represent a valid item? See description of constructor for 80 // details on why it may not be valid. 81 bool is_valid_item() const { return item_.id != 0; } 82 83 ChromeLauncherController* controller_; 84 85 ash::LauncherItem item_; 86 87 ash::LauncherAlignmentMenu launcher_alignment_menu_; 88 89 scoped_ptr<extensions::ContextMenuMatcher> extension_items_; 90 91 aura::RootWindow* root_window_; 92 93 DISALLOW_COPY_AND_ASSIGN(LauncherContextMenu); 94 }; 95 96 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 97