Horizon
action_catalog.hpp
1 #pragma once
2 #include "core/core.hpp"
3 #include "action.hpp"
4 #include "common/lut.hpp"
5 #include <map>
6 
7 namespace horizon {
9 public:
10  enum Availability {
11  AVAILABLE_IN_SYMBOL = (1 << 0),
12  AVAILABLE_IN_SCHEMATIC = (1 << 1),
13  AVAILABLE_IN_PADSTACK = (1 << 2),
14  AVAILABLE_IN_PACKAGE = (1 << 3),
15  AVAILABLE_IN_BOARD = (1 << 4),
16  AVAILABLE_EVERYWHERE = 0xff,
17  AVAILABLE_LAYERED = AVAILABLE_IN_PACKAGE | AVAILABLE_IN_PADSTACK | AVAILABLE_IN_BOARD,
18  AVAILABLE_IN_PACKAGE_AND_BOARD = AVAILABLE_IN_PACKAGE | AVAILABLE_IN_BOARD,
19  AVAILABLE_IN_SCHEMATIC_AND_BOARD = AVAILABLE_IN_SCHEMATIC | AVAILABLE_IN_BOARD
20  };
21 
22  enum Flags { FLAGS_DEFAULT = 0, FLAGS_IN_TOOL = (1 << 1), FLAGS_NO_POPOVER = (1 << 2) };
23 
24  ActionCatalogItem(const std::string &n, ActionGroup gr, Availability av, Flags fl = FLAGS_DEFAULT)
25  : name(n), group(gr), flags(fl), availability(av){};
26 
27  const std::string name;
28  ActionGroup group;
29  const Flags flags;
30  const Availability availability;
31 };
32 
33 extern const std::map<std::pair<ActionID, ToolID>, ActionCatalogItem> action_catalog;
34 extern const LutEnumStr<ActionID> action_lut;
35 extern const LutEnumStr<ToolID> tool_lut;
36 
37 extern const std::vector<std::pair<ActionGroup, std::string>> action_group_catalog;
38 } // namespace horizon
Definition: action_catalog.hpp:8
Trivial bidirectional map for mapping strings to enums.
Definition: lut.hpp:10
Definition: block.cpp:7