blob: b572c50f753d501de7765fa0c0786b3b9cc74296 [file] [log] [blame]
// Copyright 2014 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 ATHENA_INPUT_PUBLIC_ACCELERATOR_MANAGER_H_
#define ATHENA_INPUT_PUBLIC_ACCELERATOR_MANAGER_H_
#include "athena/athena_export.h"
#include "base/memory/scoped_ptr.h"
#include "ui/events/keycodes/keyboard_codes.h"
namespace ui {
class Accelerator;
}
namespace views {
class FocusManager;
}
namespace athena {
enum TriggerEvent {
TRIGGER_ON_PRESS,
TRIGGER_ON_RELEASE,
};
// Accelerator flags.
enum AcceleratorFlags {
AF_NONE = 0,
// Used for accelerators that should not be fired on auto repeated
// key event, such as toggling fullscrren.
AF_NON_AUTO_REPEATABLE = 1 << 0,
// Most key events are sent to applications first as they may
// want to consume them. Reserverd accelerators are reserved for OS
// and cannot be consumed by apps. (such as window cycling)
AF_RESERVED = 1 << 1,
// Used for accelerators that are useful only in debug mode.
AF_DEBUG = 1 << 2,
};
struct AcceleratorData {
// true if the accelerator should be triggered upon ui::ET_KEY_PRESSED
TriggerEvent trigger_event;
ui::KeyboardCode keycode; // KeyEvent event flags.
int keyevent_flags; // Combination of ui::KeyEventFlags
int command_id; // ID to distinguish
int accelerator_flags; // Combination of AcceleratorFlags;
};
// An interface that implements behavior for the set of
// accelerators.
class ATHENA_EXPORT AcceleratorHandler {
public:
virtual ~AcceleratorHandler() {}
virtual bool IsCommandEnabled(int command_id) const = 0;
virtual bool OnAcceleratorFired(int command_id,
const ui::Accelerator& accelerator) = 0;
};
class ATHENA_EXPORT AcceleratorManager {
public:
// Returns an AccelerarManager for global acelerators.
static AcceleratorManager* Get();
// Creates an AcceleratorManager for application windows that
// define their own accelerators.
static scoped_ptr<AcceleratorManager> CreateForFocusManager(
views::FocusManager* focus_manager);
virtual ~AcceleratorManager() {}
// Tells if the accelerator is registered with the given flag. If
// flags is AF_NONE, it simply tells if the accelerator is
// registered with any flags.
virtual bool IsRegistered(const ui::Accelerator& accelerator,
int flags) const = 0;
// Register accelerators and its handler that will be invoked when
// one of accelerator is fired.
virtual void RegisterAccelerators(const AcceleratorData accelerators[],
size_t num_accelerators,
AcceleratorHandler* handler) = 0;
// Enables/Disables accelerators that has a AF_DEBUG flag.
virtual void SetDebugAcceleratorsEnabled(bool enabled) = 0;
};
} // namespace athena
#endif // ATHENA_INPUT_PUBLIC_ACCELERATOR_MANAGER_H_