15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ash/shelf/shelf_alignment_menu.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shelf/shelf_item_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/gtest_prod_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/simple_menu_model.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeLauncherController; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ash { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShelfItemDelegate; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class Window; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContextMenuMatcher; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Context menu shown for a launcher item. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LauncherContextMenu : public ui::SimpleMenuModel, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ui::SimpleMenuModel::Delegate { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |item| is NULL if the context menu is for the launcher (the user right 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |clicked on an area with no icons). 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LauncherContextMenu(ChromeLauncherController* controller, 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const ash::ShelfItem* item, 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Creates a menu used by item created by ShelfWindowWatcher. 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LauncherContextMenu(ChromeLauncherController* controller, 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfItemDelegate* item_delegate, 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfItem* item, 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::Window* root_window); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a menu used as a desktop context menu on |root_window|. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LauncherContextMenu(ChromeLauncherController* controller, 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~LauncherContextMenu(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ID of the item we're showing the context menu for. 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfID id() const { return item_.id; } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ui::SimpleMenuModel::Delegate overrides: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsItemForCommandIdDynamic(int command_id) const OVERRIDE; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual base::string16 GetLabelForCommandId(int command_id) const OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE; 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool IsCommandIdVisible(int command_id) const OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetAcceleratorForCommandId( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int command_id, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator* accelerator) OVERRIDE; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES( 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LauncherContextMenuTest, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NewIncognitoWindowMenuIsDisabledWhenIncognitoModeOff); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES( 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LauncherContextMenuTest, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NewWindowMenuIsDisabledWhenIncognitoModeForced); 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FRIEND_TEST_ALL_PREFIXES( 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LauncherContextMenuTest, 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) AutoHideOptionInMaximizedMode); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum MenuItem { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_OPEN_NEW, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_CLOSE, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_PIN, 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MENU_INSTALL, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_TYPE_PINNED_TAB, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_TYPE_REGULAR_TAB, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_TYPE_FULLSCREEN, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_TYPE_WINDOW, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_AUTO_HIDE, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_NEW_WINDOW, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_NEW_INCOGNITO_WINDOW, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_ALIGNMENT_MENU, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MENU_CHANGE_WALLPAPER, 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Does |item_| represent a valid item? See description of constructor for 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // details on why it may not be valid. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_valid_item() const { return item_.id != 0; } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeLauncherController* controller_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfItem item_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ash::ShelfAlignmentMenu shelf_alignment_menu_; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<extensions::ContextMenuMatcher> extension_items_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Not owned. 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfItemDelegate* item_delegate_; 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LauncherContextMenu); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_CONTEXT_MENU_H_ 116