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 12 namespace ui { 13 class Accelerator; 14 } 15 16 namespace views { 17 class FocusManager; 18 } 19 20 namespace athena { 21 22 enum TriggerEvent { 23 TRIGGER_ON_PRESS, 24 TRIGGER_ON_RELEASE, 25 }; 26 27 // Accelerator flags. 28 enum 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 41 struct 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. 52 class ATHENA_EXPORT AcceleratorHandler { 53 public: ~AcceleratorHandler()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 61 class 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 ~AcceleratorManager()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