1// Copyright 2014 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 ATHENA_INPUT_PUBLIC_ACCELERATOR_MANAGER_H_ 6#define ATHENA_INPUT_PUBLIC_ACCELERATOR_MANAGER_H_ 7 8#include "athena/athena_export.h" 9#include "base/memory/scoped_ptr.h" 10#include "ui/events/keycodes/keyboard_codes.h" 11 12namespace ui { 13class Accelerator; 14} 15 16namespace views { 17class FocusManager; 18} 19 20namespace athena { 21 22enum TriggerEvent { 23 TRIGGER_ON_PRESS, 24 TRIGGER_ON_RELEASE, 25}; 26 27// Accelerator flags. 28enum AcceleratorFlags { 29 AF_NONE = 0, 30 // Used for accelerators that should not be fired on auto repeated 31 // key event, such as toggling fullscrren. 32 AF_NON_AUTO_REPEATABLE = 1 << 0, 33 // Most key events are sent to applications first as they may 34 // want to consume them. Reserverd accelerators are reserved for OS 35 // and cannot be consumed by apps. (such as window cycling) 36 AF_RESERVED = 1 << 1, 37 // Used for accelerators that are useful only in debug mode. 38 AF_DEBUG = 1 << 2, 39}; 40 41struct AcceleratorData { 42 // true if the accelerator should be triggered upon ui::ET_KEY_PRESSED 43 TriggerEvent trigger_event; 44 ui::KeyboardCode keycode; // KeyEvent event flags. 45 int keyevent_flags; // Combination of ui::KeyEventFlags 46 int command_id; // ID to distinguish 47 int accelerator_flags; // Combination of AcceleratorFlags; 48}; 49 50// An interface that implements behavior for the set of 51// accelerators. 52class ATHENA_EXPORT AcceleratorHandler { 53 public: 54 virtual ~AcceleratorHandler() {} 55 56 virtual bool IsCommandEnabled(int command_id) const = 0; 57 virtual bool OnAcceleratorFired(int command_id, 58 const ui::Accelerator& accelerator) = 0; 59}; 60 61class ATHENA_EXPORT AcceleratorManager { 62 public: 63 // Returns an AccelerarManager for global acelerators. 64 static AcceleratorManager* Get(); 65 66 // Creates an AcceleratorManager for application windows that 67 // define their own accelerators. 68 static scoped_ptr<AcceleratorManager> CreateForFocusManager( 69 views::FocusManager* focus_manager); 70 71 virtual ~AcceleratorManager() {} 72 73 // Tells if the accelerator is registered with the given flag. If 74 // flags is AF_NONE, it simply tells if the accelerator is 75 // registered with any flags. 76 virtual bool IsRegistered(const ui::Accelerator& accelerator, 77 int flags) const = 0; 78 79 // Register accelerators and its handler that will be invoked when 80 // one of accelerator is fired. 81 virtual void RegisterAccelerators(const AcceleratorData accelerators[], 82 size_t num_accelerators, 83 AcceleratorHandler* handler) = 0; 84 85 // Enables/Disables accelerators that has a AF_DEBUG flag. 86 virtual void SetDebugAcceleratorsEnabled(bool enabled) = 0; 87}; 88 89} // namespace athena 90 91#endif // ATHENA_INPUT_PUBLIC_ACCELERATOR_MANAGER_H_ 92