// 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 CHROME_BROWSER_UI_VIEWS_ACCELERATOR_TABLE_H_
#define CHROME_BROWSER_UI_VIEWS_ACCELERATOR_TABLE_H_

#include <vector>

#include "chrome/browser/ui/host_desktop.h"
#include "chrome/browser/ui/views/chrome_views_export.h"
#include "ui/base/keycodes/keyboard_codes.h"

namespace ui {
class Accelerator;
}

// This contains the list of accelerators for the Aura implementation.
namespace chrome {

struct AcceleratorMapping {
  ui::KeyboardCode keycode;
  int modifiers;
  int command_id;
};

// Returns a list of accelerator mapping information for accelerators
// handled by Chrome but excluding accelerators handled by Ash.
CHROME_VIEWS_EXPORT std::vector<AcceleratorMapping> GetAcceleratorList();

// Returns true if the desktop host type indicates Ash and if the
// command id has an associated accelerator which is handled by
// Ash. If the return is true the accelerator is returned via the
// second argument.
CHROME_VIEWS_EXPORT bool GetAshAcceleratorForCommandId(
    int command_id,
    HostDesktopType host_desktop_type,
    ui::Accelerator* accelerator);

// Returns true if the command id has an associated standard
// accelerator like cut, copy and paste. If the return is true the
// accelerator is returned via the second argument.
CHROME_VIEWS_EXPORT bool GetStandardAcceleratorForCommandId(
    int command_id,
    ui::Accelerator* accelerator);

}  // namespace chrome

#endif  // CHROME_BROWSER_UI_VIEWS_ACCELERATOR_TABLE_H_
