// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_SHELL_CONTEXT_MENU_H_
#define ASH_SHELL_CONTEXT_MENU_H_

#include "base/memory/scoped_ptr.h"
#include "ui/base/models/simple_menu_model.h"

namespace gfx {
class Point;
class Size;
}

namespace views {
class MenuRunner;
class Widget;
}

namespace ash {
namespace internal {

class ShellContextMenu : public ui::SimpleMenuModel::Delegate {
 public:
  ShellContextMenu();
  virtual ~ShellContextMenu();

  // Shows the context menu when right click on background.
  void ShowMenu(views::Widget* widget, const gfx::Point& location);

  // ui::SimpleMenuModel::Delegate overrides:
  virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
  virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
  virtual void ExecuteCommand(int command_id) OVERRIDE;
  virtual bool GetAcceleratorForCommandId(
      int command_id,
      ui::Accelerator* accelerator) OVERRIDE;

 private:
  enum MenuItem {
    MENU_CHANGE_WALLPAPER,
  };

  scoped_ptr<views::MenuRunner> menu_runner_;

  DISALLOW_COPY_AND_ASSIGN(ShellContextMenu);
};

}  // namespace internal
}  // namespace ash

#endif  // ASH_SHELL_CONTEXT_MENU_H_
