command.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 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 CHROME_COMMON_EXTENSIONS_COMMAND_H_
6#define CHROME_COMMON_EXTENSIONS_COMMAND_H_
7
8#include <string>
9#include <map>
10
11#include "base/string16.h"
12#include "ui/base/accelerators/accelerator.h"
13
14namespace base {
15class DictionaryValue;
16}
17
18namespace extensions {
19class Extension;
20}
21
22namespace extensions {
23
24class Command {
25 public:
26  Command();
27  Command(const std::string& command_name,
28          const string16& description,
29          const std::string& accelerator);
30  ~Command();
31
32  // The platform value for the Command.
33  static std::string CommandPlatform();
34
35  // Parse a string as an accelerator. If the accelerator is unparsable then
36  // a generic ui::Accelerator object will be returns (with key_code Unknown).
37  static ui::Accelerator StringToAccelerator(const std::string& accelerator);
38
39  // Parse the command.
40  bool Parse(const base::DictionaryValue* command,
41             const std::string& command_name,
42             int index,
43             string16* error);
44
45  // Convert a Command object from |extension| to a DictionaryValue.
46  // |active| specifies whether the command is active or not.
47  base::DictionaryValue* ToValue(
48      const Extension* extension, bool active) const;
49
50  // Accessors:
51  const std::string& command_name() const { return command_name_; }
52  const ui::Accelerator& accelerator() const { return accelerator_; }
53  const string16& description() const { return description_; }
54
55  // Setter:
56  void set_accelerator(ui::Accelerator accelerator) {
57    accelerator_ = accelerator;
58  }
59
60 private:
61  std::string command_name_;
62  ui::Accelerator accelerator_;
63  string16 description_;
64};
65
66// A mapping of command name (std::string) to a command object.
67typedef std::map<std::string, Command> CommandMap;
68
69}  // namespace extensions
70
71#endif  // CHROME_COMMON_EXTENSIONS_COMMAND_H_
72