yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
shortcut_manager.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_SYSTEM_SHORTCUT_MANAGER_H
2#define YAZE_APP_EDITOR_SYSTEM_SHORTCUT_MANAGER_H
3
4#include <functional>
5#include <string>
6#include <vector>
7#include <unordered_map>
8
9// Must define before including imgui.h
10#ifndef IMGUI_DEFINE_MATH_OPERATORS
11#define IMGUI_DEFINE_MATH_OPERATORS
12#endif
13
14#include "imgui/imgui.h"
15
16namespace yaze {
17namespace editor {
18
19struct Shortcut {
20 std::string name;
21 std::vector<ImGuiKey> keys;
22 std::function<void()> callback;
23};
24
25std::vector<ImGuiKey> ParseShortcut(const std::string &shortcut);
26
27std::string PrintShortcut(const std::vector<ImGuiKey> &keys);
28
30 public:
31 void RegisterShortcut(const std::string &name,
32 const std::vector<ImGuiKey> &keys) {
33 shortcuts_[name] = {name, keys};
34 }
35 void RegisterShortcut(const std::string &name,
36 const std::vector<ImGuiKey> &keys,
37 std::function<void()> callback) {
38 shortcuts_[name] = {name, keys, callback};
39 }
40
41 void RegisterShortcut(const std::string &name, ImGuiKey key,
42 std::function<void()> callback) {
43 shortcuts_[name] = {name, {key}, callback};
44 }
45
46 void ExecuteShortcut(const std::string &name) const {
47 shortcuts_.at(name).callback();
48 }
49
50 // Access the shortcut and print the readable name of the shortcut for menus
51 const Shortcut &GetShortcut(const std::string &name) const {
52 return shortcuts_.at(name);
53 }
54
55 // Get shortcut callback function
56 std::function<void()> GetCallback(const std::string &name) const {
57 return shortcuts_.at(name).callback;
58 }
59
60 const std::string GetKeys(const std::string &name) const {
61 return PrintShortcut(shortcuts_.at(name).keys);
62 }
63
64 auto GetShortcuts() const { return shortcuts_; }
65
66 // Convenience methods for registering common shortcuts
68 std::function<void()> save_callback,
69 std::function<void()> open_callback,
70 std::function<void()> close_callback,
71 std::function<void()> find_callback,
72 std::function<void()> settings_callback);
73
75 std::function<void()> focus_left,
76 std::function<void()> focus_right,
77 std::function<void()> focus_up,
78 std::function<void()> focus_down,
79 std::function<void()> close_window,
80 std::function<void()> split_horizontal,
81 std::function<void()> split_vertical);
82
83 private:
84 std::unordered_map<std::string, Shortcut> shortcuts_;
85};
86
87void ExecuteShortcuts(const ShortcutManager &shortcut_manager);
88
89} // namespace editor
90} // namespace yaze
91
92#endif // YAZE_APP_EDITOR_SYSTEM_SHORTCUT_MANAGER_H
const Shortcut & GetShortcut(const std::string &name) const
const std::string GetKeys(const std::string &name) const
void RegisterShortcut(const std::string &name, ImGuiKey key, std::function< void()> callback)
std::function< void()> GetCallback(const std::string &name) const
void RegisterStandardShortcuts(std::function< void()> save_callback, std::function< void()> open_callback, std::function< void()> close_callback, std::function< void()> find_callback, std::function< void()> settings_callback)
void RegisterShortcut(const std::string &name, const std::vector< ImGuiKey > &keys, std::function< void()> callback)
void RegisterWindowNavigationShortcuts(std::function< void()> focus_left, std::function< void()> focus_right, std::function< void()> focus_up, std::function< void()> focus_down, std::function< void()> close_window, std::function< void()> split_horizontal, std::function< void()> split_vertical)
void ExecuteShortcut(const std::string &name) const
std::unordered_map< std::string, Shortcut > shortcuts_
void RegisterShortcut(const std::string &name, const std::vector< ImGuiKey > &keys)
std::vector< ImGuiKey > ParseShortcut(const std::string &shortcut)
std::string PrintShortcut(const std::vector< ImGuiKey > &keys)
void ExecuteShortcuts(const ShortcutManager &shortcut_manager)
Main namespace for the application.
Definition controller.cc:20
std::function< void()> callback
std::vector< ImGuiKey > keys