#ifndef ASH_PUBLIC_CPP_ACCELERATOR_KEYCODE_LOOKUP_CACHE_H_
#define ASH_PUBLIC_CPP_ACCELERATOR_KEYCODE_LOOKUP_CACHE_H_
#include <map>
#include <string>
#include "ash/public/cpp/ash_public_export.h"
#include "ui/base/ime/ash/input_method_manager.h"
#include "ui/events/keycodes/dom/dom_code.h"
#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes_posix.h"
namespace ash {
class ASH_PUBLIC_EXPORT AcceleratorKeycodeLookupCache
: public input_method::InputMethodManager::Observer {
public:
struct KeyCodeLookupEntry {
ui::DomCode dom_code;
ui::DomKey dom_key;
ui::KeyboardCode resulting_key_code;
std::u16string key_display;
};
static AcceleratorKeycodeLookupCache* Get();
AcceleratorKeycodeLookupCache();
AcceleratorKeycodeLookupCache(const AcceleratorKeycodeLookupCache&) = delete;
AcceleratorKeycodeLookupCache& operator=(
const AcceleratorKeycodeLookupCache&) = delete;
~AcceleratorKeycodeLookupCache() override;
void InputMethodChanged(input_method::InputMethodManager* manager,
Profile* profile,
bool show_message) override;
std::optional<KeyCodeLookupEntry> Find(ui::KeyboardCode key_code,
bool remap_positional_key);
void InsertOrAssign(ui::KeyboardCode key_code,
bool remap_positional_key,
ui::DomCode dom_code,
ui::DomKey dom_key,
ui::KeyboardCode resulting_key_code,
std::u16string description);
void Clear();
private:
friend class AcceleratorKeycodeLookupCacheTest;
std::map<std::pair<ui::KeyboardCode, bool>, KeyCodeLookupEntry>
key_code_to_cache_entry_;
};
}
#endif