Horizon
action.hpp
1 #pragma once
2 #include <string>
3 #include <vector>
4 #include <gdk/gdk.h>
5 #include <functional>
6 
7 namespace horizon {
8 
9 enum class ToolID;
10 enum class ActionID;
11 
12 using ActionToolID = std::pair<ActionID, ToolID>;
13 
14 enum class ActionGroup {
15  ALL,
16  UNKNOWN,
17  CLIPBOARD,
18  UNDO,
19  MOVE,
20  GRAPHICS,
21  SCHEMATIC,
22  SYMBOL,
23  PACKAGE,
24  PADSTACK,
25  BOARD,
26  LAYER,
27  SELECTION,
28  RULES,
29  VIEW,
30  FRAME,
31  GROUP_TAG,
32  SEARCH,
33  EXPORT_IMPORT,
34  TUNING,
35  VIEW_3D,
36 };
37 
38 using KeySequenceItem = std::pair<unsigned int, GdkModifierType>;
39 using KeySequence = std::vector<KeySequenceItem>;
40 
41 std::string key_sequence_item_to_string(const KeySequenceItem &it);
42 std::string key_sequence_to_string(const KeySequence &keys);
43 std::string key_sequence_to_string_short(const KeySequence &keys);
44 
45 std::string key_sequences_to_string(const std::vector<KeySequence> &seqs);
46 
47 enum class KeyMatchResult { NONE, PREFIX, COMPLETE };
48 KeyMatchResult key_sequence_match(const KeySequence &keys_current, const KeySequence &keys_from_action);
49 
51 public:
52  ActionConnection(ActionToolID id, std::function<void(const ActionConnection &)> c)
53  : action_id(id.first), tool_id(id.second), cb(c)
54  {
55  }
56 
57  const ActionID action_id;
58  const ToolID tool_id;
59  std::vector<KeySequence> key_sequences;
60  std::function<void(const ActionConnection &)> cb;
61 };
62 
63 ActionToolID make_action(ActionID id);
64 ActionToolID make_action(ToolID id);
65 
66 } // namespace horizon
Definition: action.hpp:50