yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
input.h
Go to the documentation of this file.
1#ifndef YAZE_APP_CORE_INPUT_H
2#define YAZE_APP_CORE_INPUT_H
3
4#define IMGUI_DEFINE_MATH_OPERATORS
5
6#include <cctype>
7#include <cstddef>
8#include <cstdint>
9#include <functional>
10#include <string>
11#include <variant>
12#include <vector>
13
14#include "absl/strings/string_view.h"
15#include "app/gfx/snes_tile.h"
16#include "imgui/imgui.h"
17
18namespace yaze {
19namespace gui {
20
21constexpr ImVec2 kDefaultModalSize = ImVec2(200, 0);
22constexpr ImVec2 kZeroPos = ImVec2(0, 0);
23
24IMGUI_API bool InputHex(const char *label, uint64_t *data);
25IMGUI_API bool InputHex(const char *label, int *data, int num_digits = 4,
26 float input_width = 50.f);
27
28IMGUI_API bool InputHexShort(const char *label, uint32_t *data);
29IMGUI_API bool InputHexWord(const char *label, uint16_t *data,
30 float input_width = 50.f, bool no_step = false);
31IMGUI_API bool InputHexWord(const char *label, int16_t *data,
32 float input_width = 50.f, bool no_step = false);
33IMGUI_API bool InputHexByte(const char *label, uint8_t *data,
34 float input_width = 50.f, bool no_step = false);
35
36IMGUI_API bool InputHexByte(const char *label, uint8_t *data, uint8_t max_value,
37 float input_width = 50.f, bool no_step = false);
38
39IMGUI_API void Paragraph(const std::string &text);
40
41IMGUI_API bool ClickableText(const std::string &text);
42
43IMGUI_API bool ListBox(const char *label, int *current_item,
44 const std::vector<std::string> &items,
45 int height_in_items = -1);
46
47bool InputTileInfo(const char *label, gfx::TileInfo *tile_info);
48
49using ItemLabelFlags = enum ItemLabelFlag {
50 Left = 1u << 0u,
51 Right = 1u << 1u,
52 Default = Left,
53};
54
55IMGUI_API void ItemLabel(absl::string_view title, ItemLabelFlags flags);
56
57IMGUI_API ImGuiID GetID(const std::string &id);
58
59ImGuiKey MapKeyToImGuiKey(char key);
60
61using GuiElement = std::variant<std::function<void()>, std::string>;
62
63struct Table {
64 const char *id;
66 ImGuiTableFlags flags;
67 ImVec2 size;
68 std::vector<std::string> column_labels;
69 std::vector<GuiElement> column_contents;
70};
71
72void AddTableColumn(Table &table, const std::string &label, GuiElement element);
73
74void DrawTable(Table &params);
75
76static std::function<bool()> kDefaultEnabledCondition = []() { return false; };
77
78struct MenuItem {
79 std::string name;
80 std::string shortcut;
81 std::function<void()> callback;
82 std::function<bool()> enabled_condition = kDefaultEnabledCondition;
83 std::vector<MenuItem> subitems;
84};
85using Menu = std::vector<MenuItem>;
86
87void DrawMenu(Menu &params);
88
89static Menu kMainMenu;
90
91constexpr std::string kSeparator = "-";
92
93IMGUI_API bool OpenUrl(const std::string &url);
94
95struct Text {
96 std::string content;
97};
98
99struct Button {
100 std::string label;
101 std::function<void()> callback;
102};
103
104struct Layout {
105 std::vector<std::variant<Text, Button>> elements;
106};
107
108void RenderLayout(const Layout &layout);
109
110} // namespace gui
111} // namespace yaze
112
113#endif
SNES 16-bit tile metadata container.
Definition snes_tile.h:49
constexpr std::string kSeparator
Definition input.h:91
bool ClickableText(const std::string &text)
Definition input.cc:200
void Paragraph(const std::string &text)
Definition input.cc:195
void ItemLabel(absl::string_view title, ItemLabelFlags flags)
Definition input.cc:236
bool InputHexWord(const char *label, uint16_t *data, float input_width, bool no_step)
Definition input.cc:161
void RenderLayout(const Layout &layout)
Definition input.cc:431
bool ListBox(const char *label, int *current_item, const std::vector< std::string > &items, int height_in_items)
Definition input.cc:279
bool InputHexShort(const char *label, uint32_t *data)
Definition input.cc:155
void AddTableColumn(Table &table, const std::string &label, GuiElement element)
Definition input.cc:370
enum ItemLabelFlag { Left=1u<< 0u, Right=1u<< 1u, Default=Left, } ItemLabelFlags
Definition input.h:49
void DrawMenu(Menu &menu)
Definition input.cc:397
void DrawTable(Table &params)
Definition input.cc:376
bool OpenUrl(const std::string &url)
Definition input.cc:426
std::vector< MenuItem > Menu
Definition input.h:85
bool InputHex(const char *label, uint64_t *data)
Definition input.cc:142
bool InputTileInfo(const char *label, gfx::TileInfo *tile_info)
Definition input.cc:291
std::variant< std::function< void()>, std::string > GuiElement
Definition input.h:61
constexpr ImVec2 kZeroPos
Definition input.h:22
constexpr ImVec2 kDefaultModalSize
Definition input.h:21
ImGuiID GetID(const std::string &id)
Definition input.cc:305
ImGuiKey MapKeyToImGuiKey(char key)
Definition input.cc:307
bool InputHexByte(const char *label, uint8_t *data, float input_width, bool no_step)
Definition input.cc:175
Main namespace for the application.
Definition controller.cc:18
std::function< void()> callback
Definition input.h:101
std::string label
Definition input.h:100
std::vector< std::variant< Text, Button > > elements
Definition input.h:105
std::function< void()> callback
Definition input.h:81
std::function< bool()> enabled_condition
Definition input.h:82
std::vector< MenuItem > subitems
Definition input.h:83
std::string shortcut
Definition input.h:80
std::string name
Definition input.h:79
std::vector< std::string > column_labels
Definition input.h:68
std::vector< GuiElement > column_contents
Definition input.h:69
ImVec2 size
Definition input.h:67
int num_columns
Definition input.h:65
const char * id
Definition input.h:64
ImGuiTableFlags flags
Definition input.h:66
std::string content
Definition input.h:96