yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::gui::TileSelectorWidget Class Reference

Reusable tile selector built on top of Canvas. More...

#include <tile_selector_widget.h>

Collaboration diagram for yaze::gui::TileSelectorWidget:

Classes

struct  Config
 
struct  RenderResult
 

Public Types

enum class  JumpToTileResult { kSuccess = 0 , kInvalidFormat , kOutOfRange }
 

Public Member Functions

 TileSelectorWidget (std::string widget_id)
 
 TileSelectorWidget (std::string widget_id, Config config)
 
void AttachCanvas (Canvas *canvas)
 
void SetTileCount (int total_tiles)
 
void SetDisplayScale (float display_scale)
 
float display_scale () const
 
void SetTilesPerRow (int tiles_per_row)
 
int tiles_per_row () const
 
void SetSelectedTile (int tile_id)
 
int GetSelectedTileID () const
 
int GetMaxTileId () const
 
ImVec2 GetGridContentSize () const
 
float GetPreferredViewportWidth () const
 
RenderResult Render (gfx::Bitmap &atlas, bool atlas_ready)
 
CanvasMenuItem CopyTileIdMenuItem () const
 
bool DrawFilterBar ()
 
JumpToTileResult JumpToTileFromInput (std::string_view input)
 
void ScrollToTile (int tile_id, bool use_imgui_scroll=true)
 
ImVec2 TileOrigin (int tile_id) const
 
bool has_active_range_filter () const
 
int filter_range_min () const
 
int filter_range_max () const
 
void SetRangeFilter (int min_id, int max_id)
 
void ClearRangeFilter ()
 

Static Public Member Functions

static float PreferredViewportWidth (const Config &config, float scrollbar_size)
 
static float CurrentScrollbarSize ()
 Current style scrollbar size, or ImGui's default without a context.
 

Private Member Functions

bool DrawFilterControls ()
 
RenderResult HandleInteraction (int tile_display_size)
 
int ResolveTileAtCursor (int tile_display_size) const
 
void DrawHighlight (int tile_display_size) const
 
void DrawTileIdLabels (int tile_display_size) const
 
bool IsValidTileId (int tile_id) const
 
bool IsInFilterRange (int tile_id) const
 

Private Attributes

Canvas * canvas_ = nullptr
 
Config config_ {}
 
int selected_tile_id_ = 0
 
int total_tiles_ = 0
 
std::string widget_id_
 
int pending_scroll_tile_id_ = -1
 
bool pending_scroll_use_imgui_ = true
 
char filter_buf_ [8] = {}
 
bool filter_range_active_ = false
 
int filter_range_min_ = 0
 
int filter_range_max_ = 0
 
char filter_min_buf_ [8] = {}
 
char filter_max_buf_ [8] = {}
 
bool filter_range_error_ = false
 
bool filter_out_of_range_ = false
 
JumpToTileResult last_jump_result_ = JumpToTileResult::kSuccess
 

Detailed Description

Reusable tile selector built on top of Canvas.

Minimal mutable state, designed for reuse across editors and automation.

Definition at line 19 of file tile_selector_widget.h.

Member Enumeration Documentation

◆ JumpToTileResult

Enumerator
kSuccess 
kInvalidFormat 
kOutOfRange 

Definition at line 43 of file tile_selector_widget.h.

Constructor & Destructor Documentation

◆ TileSelectorWidget() [1/2]

yaze::gui::TileSelectorWidget::TileSelectorWidget ( std::string widget_id)
explicit

Definition at line 68 of file tile_selector_widget.cc.

◆ TileSelectorWidget() [2/2]

yaze::gui::TileSelectorWidget::TileSelectorWidget ( std::string widget_id,
Config config )

Definition at line 73 of file tile_selector_widget.cc.

Member Function Documentation

◆ AttachCanvas()

void yaze::gui::TileSelectorWidget::AttachCanvas ( Canvas * canvas)

◆ SetTileCount()

void yaze::gui::TileSelectorWidget::SetTileCount ( int total_tiles)

◆ SetDisplayScale()

void yaze::gui::TileSelectorWidget::SetDisplayScale ( float display_scale)

Definition at line 93 of file tile_selector_widget.cc.

References config_, yaze::gui::TileSelectorWidget::Config::display_scale, and display_scale().

Referenced by yaze::editor::MenuTilemapEditorUI::DrawTilePicker().

Here is the call graph for this function:

◆ display_scale()

float yaze::gui::TileSelectorWidget::display_scale ( ) const
inline

◆ SetTilesPerRow()

void yaze::gui::TileSelectorWidget::SetTilesPerRow ( int tiles_per_row)

Definition at line 99 of file tile_selector_widget.cc.

References config_, yaze::gui::TileSelectorWidget::Config::tiles_per_row, and tiles_per_row().

Referenced by yaze::editor::MenuTilemapEditorUI::DrawTilePicker().

Here is the call graph for this function:

◆ tiles_per_row()

int yaze::gui::TileSelectorWidget::tiles_per_row ( ) const
inline

Definition at line 57 of file tile_selector_widget.h.

References config_, and yaze::gui::TileSelectorWidget::Config::tiles_per_row.

Referenced by SetTilesPerRow().

◆ SetSelectedTile()

◆ GetSelectedTileID()

◆ GetMaxTileId()

int yaze::gui::TileSelectorWidget::GetMaxTileId ( ) const
inline

Definition at line 60 of file tile_selector_widget.h.

References total_tiles_.

Referenced by DrawFilterControls().

◆ GetGridContentSize()

◆ GetPreferredViewportWidth()

float yaze::gui::TileSelectorWidget::GetPreferredViewportWidth ( ) const

Grid width plus the current style's vertical scrollbar. This is the width of the scrolling grid child, not of any surrounding panel.

Definition at line 145 of file tile_selector_widget.cc.

References config_, CurrentScrollbarSize(), and PreferredViewportWidth().

Here is the call graph for this function:

◆ PreferredViewportWidth()

float yaze::gui::TileSelectorWidget::PreferredViewportWidth ( const Config & config,
float scrollbar_size )
static

Same as GetPreferredViewportWidth() for a config that has no widget yet (panels report their preferred dock width before the widget exists).

Definition at line 138 of file tile_selector_widget.cc.

Referenced by GetPreferredViewportWidth(), and yaze::editor::Tile16SelectorView::GetPreferredWidth().

◆ CurrentScrollbarSize()

float yaze::gui::TileSelectorWidget::CurrentScrollbarSize ( )
static

◆ Render()

◆ CopyTileIdMenuItem()

CanvasMenuItem yaze::gui::TileSelectorWidget::CopyTileIdMenuItem ( ) const

"Copy Tile ID" item for the attached canvas's editor menu. Right-click selects the tile under the cursor, so the item copies the selected tile ID ("0x01A") at click time. Callers add it next to their own items, after ClearContextMenuItems(), so nothing accumulates across frames.

Definition at line 242 of file tile_selector_widget.cc.

References yaze::gui::CanvasMenuItem::enabled_condition, ICON_MD_CONTENT_COPY, IsValidTileId(), and selected_tile_id_.

Here is the call graph for this function:

◆ DrawFilterBar()

bool yaze::gui::TileSelectorWidget::DrawFilterBar ( )

Draw a lookup/filter popup button beside the grid controls. Returns true if the user jumped to a tile (selection + scroll triggered).

Definition at line 377 of file tile_selector_widget.cc.

References DrawFilterControls(), filter_range_active_, ICON_MD_FILTER_ALT, ICON_MD_SEARCH, yaze::gui::WidgetIdRegistry::Instance(), yaze::gui::WidgetIdRegistry::RegisterWidget(), and widget_id_.

Referenced by yaze::editor::Tile16Editor::UpdateBlockset().

Here is the call graph for this function:

◆ JumpToTileFromInput()

TileSelectorWidget::JumpToTileResult yaze::gui::TileSelectorWidget::JumpToTileFromInput ( std::string_view input)

Parse a tile ID string and jump selection to that tile. Accepted forms:

  • Hex (default): "1A", "0x1A"
  • Decimal (explicit): "d:26" Returns a parse/result status for UI and automation.

Definition at line 358 of file tile_selector_widget.cc.

References IsValidTileId(), kInvalidFormat, kOutOfRange, kSuccess, last_jump_result_, ScrollToTile(), and selected_tile_id_.

Referenced by DrawFilterControls().

Here is the call graph for this function:

◆ ScrollToTile()

void yaze::gui::TileSelectorWidget::ScrollToTile ( int tile_id,
bool use_imgui_scroll = true )

Definition at line 335 of file tile_selector_widget.cc.

References canvas_, IsValidTileId(), pending_scroll_tile_id_, and pending_scroll_use_imgui_.

Referenced by DrawFilterControls(), and JumpToTileFromInput().

Here is the call graph for this function:

◆ TileOrigin()

ImVec2 yaze::gui::TileSelectorWidget::TileOrigin ( int tile_id) const

◆ has_active_range_filter()

bool yaze::gui::TileSelectorWidget::has_active_range_filter ( ) const
inline

Definition at line 95 of file tile_selector_widget.h.

References filter_range_active_.

◆ filter_range_min()

int yaze::gui::TileSelectorWidget::filter_range_min ( ) const
inline

Definition at line 96 of file tile_selector_widget.h.

References filter_range_min_.

◆ filter_range_max()

int yaze::gui::TileSelectorWidget::filter_range_max ( ) const
inline

Definition at line 97 of file tile_selector_widget.h.

References filter_range_max_.

◆ SetRangeFilter()

void yaze::gui::TileSelectorWidget::SetRangeFilter ( int min_id,
int max_id )

◆ ClearRangeFilter()

void yaze::gui::TileSelectorWidget::ClearRangeFilter ( )

◆ DrawFilterControls()

◆ HandleInteraction()

◆ ResolveTileAtCursor()

int yaze::gui::TileSelectorWidget::ResolveTileAtCursor ( int tile_display_size) const
private

◆ DrawHighlight()

void yaze::gui::TileSelectorWidget::DrawHighlight ( int tile_display_size) const
private

◆ DrawTileIdLabels()

void yaze::gui::TileSelectorWidget::DrawTileIdLabels ( int tile_display_size) const
private

Definition at line 331 of file tile_selector_widget.cc.

Referenced by Render().

◆ IsValidTileId()

bool yaze::gui::TileSelectorWidget::IsValidTileId ( int tile_id) const
private

◆ IsInFilterRange()

bool yaze::gui::TileSelectorWidget::IsInFilterRange ( int tile_id) const
private

Definition at line 600 of file tile_selector_widget.cc.

References filter_range_active_, filter_range_max_, and filter_range_min_.

Referenced by HandleInteraction().

Member Data Documentation

◆ canvas_

Canvas* yaze::gui::TileSelectorWidget::canvas_ = nullptr
private

◆ config_

◆ selected_tile_id_

int yaze::gui::TileSelectorWidget::selected_tile_id_ = 0
private

◆ total_tiles_

int yaze::gui::TileSelectorWidget::total_tiles_ = 0
private

◆ widget_id_

std::string yaze::gui::TileSelectorWidget::widget_id_
private

Definition at line 114 of file tile_selector_widget.h.

Referenced by DrawFilterBar(), and DrawFilterControls().

◆ pending_scroll_tile_id_

int yaze::gui::TileSelectorWidget::pending_scroll_tile_id_ = -1
mutableprivate

Definition at line 118 of file tile_selector_widget.h.

Referenced by Render(), and ScrollToTile().

◆ pending_scroll_use_imgui_

bool yaze::gui::TileSelectorWidget::pending_scroll_use_imgui_ = true
mutableprivate

Definition at line 119 of file tile_selector_widget.h.

Referenced by Render(), and ScrollToTile().

◆ filter_buf_

char yaze::gui::TileSelectorWidget::filter_buf_[8] = {}
private

Definition at line 122 of file tile_selector_widget.h.

Referenced by DrawFilterControls().

◆ filter_range_active_

bool yaze::gui::TileSelectorWidget::filter_range_active_ = false
private

◆ filter_range_min_

int yaze::gui::TileSelectorWidget::filter_range_min_ = 0
private

◆ filter_range_max_

int yaze::gui::TileSelectorWidget::filter_range_max_ = 0
private

◆ filter_min_buf_

char yaze::gui::TileSelectorWidget::filter_min_buf_[8] = {}
private

Definition at line 128 of file tile_selector_widget.h.

Referenced by DrawFilterControls().

◆ filter_max_buf_

char yaze::gui::TileSelectorWidget::filter_max_buf_[8] = {}
private

Definition at line 129 of file tile_selector_widget.h.

Referenced by DrawFilterControls().

◆ filter_range_error_

bool yaze::gui::TileSelectorWidget::filter_range_error_ = false
private

Definition at line 131 of file tile_selector_widget.h.

Referenced by ClearRangeFilter(), DrawFilterControls(), and SetRangeFilter().

◆ filter_out_of_range_

bool yaze::gui::TileSelectorWidget::filter_out_of_range_ = false
private

Definition at line 134 of file tile_selector_widget.h.

Referenced by ClearRangeFilter(), and DrawFilterControls().

◆ last_jump_result_

JumpToTileResult yaze::gui::TileSelectorWidget::last_jump_result_ = JumpToTileResult::kSuccess
private

The documentation for this class was generated from the following files: