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 <cstddef>
7#include <cstdint>
8#include <functional>
9#include <optional>
10#include <string>
11#include <variant>
12#include <vector>
13
14#include "absl/strings/str_cat.h"
15#include "absl/strings/string_view.h"
16#include "app/gfx/snes_tile.h"
17#include "imgui/imgui.h"
18
19namespace yaze {
20namespace gui {
21
22constexpr ImVec2 kDefaultModalSize = ImVec2(200, 0);
23constexpr ImVec2 kZeroPos = ImVec2(0, 0);
24
25IMGUI_API bool InputHex(const char *label, uint64_t *data);
26IMGUI_API bool InputHex(const char *label, int *data, int num_digits = 4,
27 float input_width = 50.f);
28
29IMGUI_API bool InputHexShort(const char *label, uint32_t *data);
30IMGUI_API bool InputHexWord(const char *label, uint16_t *data,
31 float input_width = 50.f, bool no_step = false);
32IMGUI_API bool InputHexWord(const char *label, int16_t *data,
33 float input_width = 50.f, bool no_step = false);
34IMGUI_API bool InputHexByte(const char *label, uint8_t *data,
35 float input_width = 50.f, bool no_step = false);
36
37IMGUI_API bool InputHexByte(const char *label, uint8_t *data, uint8_t max_value,
38 float input_width = 50.f, bool no_step = false);
39
40IMGUI_API void Paragraph(const std::string &text);
41
42IMGUI_API bool ClickableText(const std::string &text);
43
44IMGUI_API bool ListBox(const char *label, int *current_item,
45 const std::vector<std::string> &items,
46 int height_in_items = -1);
47
48bool InputTileInfo(const char *label, gfx::TileInfo *tile_info);
49
50using ItemLabelFlags = enum ItemLabelFlag {
51 Left = 1u << 0u,
52 Right = 1u << 1u,
53 Default = Left,
54};
55
56IMGUI_API void ItemLabel(absl::string_view title, ItemLabelFlags flags);
57
58IMGUI_API ImGuiID GetID(const std::string &id);
59
60ImGuiKey MapKeyToImGuiKey(char key);
61
62using GuiElement = std::variant<std::function<void()>, std::string>;
63
64struct Table {
65 const char *id;
67 ImGuiTableFlags flags;
68 ImVec2 size;
69 std::vector<std::string> column_labels;
70 std::vector<GuiElement> column_contents;
71};
72
73void AddTableColumn(Table &table, const std::string &label, GuiElement element);
74
75void DrawTable(Table &params);
76
77static std::function<bool()> kDefaultEnabledCondition = []() { return false; };
78
79struct MenuItem {
80 std::string name;
81 std::string shortcut;
82 std::function<void()> callback;
83 std::function<bool()> enabled_condition = kDefaultEnabledCondition;
84 std::vector<MenuItem> subitems;
85};
86using Menu = std::vector<MenuItem>;
87
88void DrawMenu(Menu &params);
89
90static Menu kMainMenu;
91
92constexpr std::string kSeparator = "-";
93
94} // namespace gui
95} // namespace yaze
96
97#endif
SNES 16-bit tile metadata container.
Definition snes_tile.h:49
constexpr std::string kSeparator
Definition input.h:92
bool ClickableText(const std::string &text)
Definition input.cc:192
void Paragraph(const std::string &text)
Definition input.cc:187
void ItemLabel(absl::string_view title, ItemLabelFlags flags)
Definition input.cc:203
bool InputHexWord(const char *label, uint16_t *data, float input_width, bool no_step)
Definition input.cc:153
bool ListBox(const char *label, int *current_item, const std::vector< std::string > &items, int height_in_items)
Definition input.cc:246
bool InputHexShort(const char *label, uint32_t *data)
Definition input.cc:147
void AddTableColumn(Table &table, const std::string &label, GuiElement element)
Definition input.cc:337
enum ItemLabelFlag { Left=1u<< 0u, Right=1u<< 1u, Default=Left, } ItemLabelFlags
Definition input.h:50
void DrawMenu(Menu &menu)
Definition input.cc:364
void DrawTable(Table &params)
Definition input.cc:343
std::vector< MenuItem > Menu
Definition input.h:86
bool InputHex(const char *label, uint64_t *data)
Definition input.cc:134
bool InputTileInfo(const char *label, gfx::TileInfo *tile_info)
Definition input.cc:258
std::variant< std::function< void()>, std::string > GuiElement
Definition input.h:62
constexpr ImVec2 kZeroPos
Definition input.h:23
constexpr ImVec2 kDefaultModalSize
Definition input.h:22
ImGuiID GetID(const std::string &id)
Definition input.cc:272
ImGuiKey MapKeyToImGuiKey(char key)
Definition input.cc:274
bool InputHexByte(const char *label, uint8_t *data, float input_width, bool no_step)
Definition input.cc:167
Main namespace for the application.
Definition controller.cc:18
std::function< void()> callback
Definition input.h:82
std::function< bool()> enabled_condition
Definition input.h:83
std::vector< MenuItem > subitems
Definition input.h:84
std::string shortcut
Definition input.h:81
std::string name
Definition input.h:80
std::vector< std::string > column_labels
Definition input.h:69
std::vector< GuiElement > column_contents
Definition input.h:70
ImVec2 size
Definition input.h:68
int num_columns
Definition input.h:66
const char * id
Definition input.h:65
ImGuiTableFlags flags
Definition input.h:67