1 #pragma once
2 #include "action.hpp"
3 #include "common/lut.hpp"
4 #include <map>
5 
6 namespace horizon {
7 class ActionCatalogItem {
8 public:
9     enum Availability {
10         AVAILABLE_IN_SYMBOL = (1 << 0),
11         AVAILABLE_IN_SCHEMATIC = (1 << 1),
12         AVAILABLE_IN_PADSTACK = (1 << 2),
13         AVAILABLE_IN_PACKAGE = (1 << 3),
14         AVAILABLE_IN_BOARD = (1 << 4),
15         AVAILABLE_IN_FRAME = (1 << 5),
16         AVAILABLE_IN_DECAL = (1 << 6),
17         AVAILABLE_IN_3D = (1 << 8),
18         AVAILABLE_EVERYWHERE = 0xff,
19         AVAILABLE_EVERYWHERE_3D = 0x1ff,
20         AVAILABLE_LAYERED = AVAILABLE_IN_PACKAGE | AVAILABLE_IN_PADSTACK | AVAILABLE_IN_BOARD | AVAILABLE_IN_DECAL,
21         AVAILABLE_IN_PACKAGE_AND_BOARD = AVAILABLE_IN_PACKAGE | AVAILABLE_IN_BOARD,
22         AVAILABLE_IN_SCHEMATIC_AND_BOARD = AVAILABLE_IN_SCHEMATIC | AVAILABLE_IN_BOARD
23     };
24 
25     enum Flags {
26         FLAGS_DEFAULT = 0,
27         FLAGS_IN_TOOL = (1 << 1),
28         FLAGS_NO_POPOVER = (1 << 2),
29         FLAGS_NO_MENU = (1 << 3),
30         FLAGS_SPECIFIC = (1 << 4),
31         FLAGS_NO_PREFERENCES = (1 << 5),
32     };
33 
ActionCatalogItem(const std::string & n,ActionGroup gr,int av,int fl=FLAGS_DEFAULT)34     ActionCatalogItem(const std::string &n, ActionGroup gr, int av, int fl = FLAGS_DEFAULT)
35         : name(n), group(gr), flags(static_cast<Flags>(fl)), availability(static_cast<Availability>(av)){};
36 
37     const std::string name;
38     ActionGroup group;
39     const Flags flags;
40     const Availability availability;
41 };
42 
43 extern const std::map<ActionToolID, ActionCatalogItem> action_catalog;
44 extern const LutEnumStr<ActionID> action_lut;
45 extern const LutEnumStr<ToolID> tool_lut;
46 
47 extern const std::vector<std::pair<ActionGroup, std::string>> action_group_catalog;
48 } // namespace horizon
49