Home | History | Annotate | Download | only in launcher
      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