| // Copyright (c) 2011 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 CHROME_BROWSER_UI_COCOA_ACCELERATORS_COCOA_H_ |
| #define CHROME_BROWSER_UI_COCOA_ACCELERATORS_COCOA_H_ |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #include <map> |
| #include <vector> |
| |
| #include "base/gtest_prod_util.h" |
| #include "ui/base/accelerators/accelerator.h" |
| |
| template <typename T> struct DefaultSingletonTraits; |
| |
| // This class maintains a map of command_ids to Accelerator objects (see |
| // chrome/app/chrome_command_ids.h). Currently, this only lists the commands |
| // that are used in the Wrench menu. |
| // |
| // It is recommended that this class be used as a singleton so that the key map |
| // isn't created multiple places. |
| // |
| // #import "base/memory/singleton.h" |
| // ... |
| // AcceleratorsCocoa* keymap = AcceleratorsCocoa::GetInstance(); |
| // return keymap->GetAcceleratorForCommand(IDC_COPY); |
| // |
| class AcceleratorsCocoa { |
| public: |
| typedef std::map<int, ui::Accelerator> AcceleratorMap; |
| typedef std::vector<ui::Accelerator> AcceleratorVector; |
| typedef AcceleratorMap::const_iterator const_iterator; |
| |
| const_iterator const begin() { return accelerators_.begin(); } |
| const_iterator const end() { return accelerators_.end(); } |
| |
| // Returns NULL if there is no accelerator for the command. |
| const ui::Accelerator* GetAcceleratorForCommand(int command_id); |
| // Searches the list of accelerators without a command_id for an accelerator |
| // that matches the given |key_equivalent| and |modifiers|. |
| const ui::Accelerator* GetAcceleratorForHotKey(NSString* key_equivalent, |
| NSUInteger modifiers) const; |
| |
| // Returns the singleton instance. |
| static AcceleratorsCocoa* GetInstance(); |
| |
| private: |
| friend struct DefaultSingletonTraits<AcceleratorsCocoa>; |
| FRIEND_TEST_ALL_PREFIXES(AcceleratorsCocoaBrowserTest, |
| MappingAcceleratorsInMainMenu); |
| |
| AcceleratorsCocoa(); |
| ~AcceleratorsCocoa(); |
| |
| // A map from command_id to Accelerator. The accelerator is fully filled out, |
| // and its platform_accelerator is also fully filled out. |
| // Contains accelerators from both the wrench menu and the main menu. |
| AcceleratorMap accelerators_; |
| // A list of accelerators used in the main menu that have no associated |
| // command_id. The accelerator is fully filled out, and its |
| // platform_accelerator is also fully filled out. |
| AcceleratorVector accelerator_vector_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AcceleratorsCocoa); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_COCOA_ACCELERATORS_COCOA_H_ |