diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
commit | 2362e4fe2905ab75d3230ebc3e307ae53e2b8362 (patch) | |
tree | e6d88357a2021811e0e354f618247217be8bb3da /views/accelerator.h | |
parent | db23ac3e713dc17509b2b15d3ee634968da45715 (diff) | |
download | chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.zip chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.gz chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.bz2 |
Move src/chrome/views to src/views. RS=darin http://crbug.com/11387
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/accelerator.h')
-rw-r--r-- | views/accelerator.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/views/accelerator.h b/views/accelerator.h new file mode 100644 index 0000000..bb8f91f --- /dev/null +++ b/views/accelerator.h @@ -0,0 +1,101 @@ +// Copyright (c) 2006-2008 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. + +// This class describe a keyboard accelerator (or keyboard shortcut). +// Keyboard accelerators are registered with the FocusManager. +// It has a copy constructor and assignment operator so that it can be copied. +// It also defines the < operator so that it can be used as a key in a std::map. +// + +#ifndef VIEWS_ACCELERATOR_H_ +#define VIEWS_ACCELERATOR_H_ + +#include <string> + +#include "views/event.h" + +namespace views { + +class Accelerator { + public: + Accelerator(int keycode, + bool shift_pressed, bool ctrl_pressed, bool alt_pressed) + : key_code_(keycode) { + modifiers_ = 0; + if (shift_pressed) + modifiers_ |= Event::EF_SHIFT_DOWN; + if (ctrl_pressed) + modifiers_ |= Event::EF_CONTROL_DOWN; + if (alt_pressed) + modifiers_ |= Event::EF_ALT_DOWN; + } + + Accelerator(const Accelerator& accelerator) { + key_code_ = accelerator.key_code_; + modifiers_ = accelerator.modifiers_; + } + + ~Accelerator() { }; + + Accelerator& operator=(const Accelerator& accelerator) { + if (this != &accelerator) { + key_code_ = accelerator.key_code_; + modifiers_ = accelerator.modifiers_; + } + return *this; + } + + // We define the < operator so that the KeyboardShortcut can be used as a key + // in a std::map. + bool operator <(const Accelerator& rhs) const { + if (key_code_ != rhs.key_code_) + return key_code_ < rhs.key_code_; + return modifiers_ < rhs.modifiers_; + } + + bool operator ==(const Accelerator& rhs) const { + return (key_code_ == rhs.key_code_) && (modifiers_ == rhs.modifiers_); + } + + bool operator !=(const Accelerator& rhs) const { + return !(*this == rhs); + } + + bool IsShiftDown() const { + return (modifiers_ & Event::EF_SHIFT_DOWN) == Event::EF_SHIFT_DOWN; + } + + bool IsCtrlDown() const { + return (modifiers_ & Event::EF_CONTROL_DOWN) == Event::EF_CONTROL_DOWN; + } + + bool IsAltDown() const { + return (modifiers_ & Event::EF_ALT_DOWN) == Event::EF_ALT_DOWN; + } + + int GetKeyCode() const { + return key_code_; + } + + // Returns a string with the localized shortcut if any. + std::wstring GetShortcutText() const; + + private: + // The window keycode (VK_...). + int key_code_; + + // The state of the Shift/Ctrl/Alt keys (see event.h). + int modifiers_; +}; + +// An interface that classes that want to register for keyboard accelerators +// should implement. +class AcceleratorTarget { + public: + // This method should return true if the accelerator was processed. + virtual bool AcceleratorPressed(const Accelerator& accelerator) = 0; +}; +} + +#endif // VIEWS_ACCELERATOR_H_ |