yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tile_selector_widget.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_WIDGETS_TILE_SELECTOR_WIDGET_H
2#define YAZE_APP_GUI_WIDGETS_TILE_SELECTOR_WIDGET_H
3
4#include <string>
5#include <string_view>
6
10#include "imgui/imgui.h"
11
12namespace yaze::gui {
13
20 public:
21 struct Config {
22 int tile_size = 16;
23 float display_scale = 2.0f;
25 int total_tiles = 512;
26 ImVec2 draw_offset = {2.0f, 0.0f};
27 bool show_tile_ids = false;
28 bool enable_drag = false;
29 bool show_hover_tooltip = false;
31 ImVec4 highlight_color = {1.0f, 0.85f, 0.35f, 1.0f};
32 };
33
34 struct RenderResult {
35 bool tile_clicked = false;
36 bool tile_double_clicked = false;
37 bool tile_right_clicked = false;
38 bool selection_changed = false;
39 bool tile_dragging = false;
40 int selected_tile = -1;
41 };
42
43 enum class JumpToTileResult {
44 kSuccess = 0,
47 };
48
49 explicit TileSelectorWidget(std::string widget_id);
50 TileSelectorWidget(std::string widget_id, Config config);
51
52 void AttachCanvas(Canvas* canvas);
53 void SetTileCount(int total_tiles);
55 float display_scale() const { return config_.display_scale; }
57 int tiles_per_row() const { return config_.tiles_per_row; }
58 void SetSelectedTile(int tile_id);
59 int GetSelectedTileID() const { return selected_tile_id_; }
60 int GetMaxTileId() const { return total_tiles_ > 0 ? total_tiles_ - 1 : 0; }
61 ImVec2 GetGridContentSize() const;
64 float GetPreferredViewportWidth() const;
67 static float PreferredViewportWidth(const Config& config,
68 float scrollbar_size);
70 static float CurrentScrollbarSize();
71
72 RenderResult Render(gfx::Bitmap& atlas, bool atlas_ready);
73
79
82 bool DrawFilterBar();
83
89 JumpToTileResult JumpToTileFromInput(std::string_view input);
90
91 void ScrollToTile(int tile_id, bool use_imgui_scroll = true);
92 ImVec2 TileOrigin(int tile_id) const;
93
94 // Range filter accessors (for tests and automation)
96 int filter_range_min() const { return filter_range_min_; }
97 int filter_range_max() const { return filter_range_max_; }
98 void SetRangeFilter(int min_id, int max_id);
99 void ClearRangeFilter();
100
101 private:
102 bool DrawFilterControls();
103 RenderResult HandleInteraction(int tile_display_size);
104 int ResolveTileAtCursor(int tile_display_size) const;
105 void DrawHighlight(int tile_display_size) const;
106 void DrawTileIdLabels(int tile_display_size) const;
107 bool IsValidTileId(int tile_id) const;
108 bool IsInFilterRange(int tile_id) const;
109
110 Canvas* canvas_ = nullptr;
114 std::string widget_id_;
115
116 // Deferred scroll state (for when ScrollToTile is called outside render
117 // context)
118 mutable int pending_scroll_tile_id_ = -1;
119 mutable bool pending_scroll_use_imgui_ = true;
120
121 // Filter bar state
122 char filter_buf_[8] = {};
123
124 // Range filter state
128 char filter_min_buf_[8] = {};
129 char filter_max_buf_[8] = {};
130 // Set when the last range input was invalid (min > max).
132 // Set when both parsed values exceed total_tiles_ so SetRangeFilter returned
133 // without activating (empty interval after clamping).
135 // Status from the most recent jump-to-ID entry attempt.
137};
138
139} // namespace yaze::gui
140
141#endif // YAZE_APP_GUI_WIDGETS_TILE_SELECTOR_WIDGET_H
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:70
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:64
Reusable tile selector built on top of Canvas.
static float PreferredViewportWidth(const Config &config, float scrollbar_size)
JumpToTileResult JumpToTileFromInput(std::string_view input)
int ResolveTileAtCursor(int tile_display_size) const
void SetDisplayScale(float display_scale)
RenderResult Render(gfx::Bitmap &atlas, bool atlas_ready)
static float CurrentScrollbarSize()
Current style scrollbar size, or ImGui's default without a context.
bool IsValidTileId(int tile_id) const
void SetRangeFilter(int min_id, int max_id)
ImVec2 TileOrigin(int tile_id) const
RenderResult HandleInteraction(int tile_display_size)
void ScrollToTile(int tile_id, bool use_imgui_scroll=true)
CanvasMenuItem CopyTileIdMenuItem() const
void DrawTileIdLabels(int tile_display_size) const
void DrawHighlight(int tile_display_size) const
bool IsInFilterRange(int tile_id) const
void SetTilesPerRow(int tiles_per_row)
TileSelectorWidget(std::string widget_id)
Graphical User Interface (GUI) components for the application.
Declarative menu item definition.
Definition canvas_menu.h:64