yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_context_menu.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_CANVAS_CANVAS_CONTEXT_MENU_H
2#define YAZE_APP_GUI_CANVAS_CANVAS_CONTEXT_MENU_H
3
4#include <functional>
5#include <string>
6#include <unordered_map>
7#include <vector>
8
13#include "app/gui/core/icons.h"
15#include "imgui/imgui.h"
16
17namespace yaze {
18namespace gui {
19
20// Forward declarations
21class PaletteEditorWidget;
22class Canvas;
23
25 public:
43
44 CanvasContextMenu() = default;
45
46 // Phase 4: Use unified CanvasMenuItem from canvas_menu.h
48
49 void Initialize(const std::string& canvas_id);
50 void SetUsageMode(CanvasUsage usage);
51 void AddMenuItem(const CanvasMenuItem& item);
52 void AddMenuItem(const CanvasMenuItem& item, CanvasUsage usage);
53 void ClearMenuItems();
54
55 // Phase 4: Render with editor menu integration and priority ordering
56 void Render(
57 const std::string& context_id, const ImVec2& mouse_pos, Rom* rom,
58 const gfx::Bitmap* bitmap, const gfx::SnesPalette* palette,
59 const std::function<void(Command, const CanvasConfig&)>& command_handler,
60 CanvasConfig current_config, Canvas* canvas);
61
62 bool ShouldShowContextMenu() const;
63 void SetEnabled(bool enabled) { enabled_ = enabled; }
64 bool IsEnabled() const { return enabled_; }
66
67 void SetCanvasState(const ImVec2& canvas_size, const ImVec2& content_size,
68 float global_scale, float grid_step, bool enable_grid,
69 bool enable_hex_labels, bool enable_custom_labels,
70 bool enable_context_menu, bool is_draggable,
71 bool auto_resize, const ImVec2& scrolling);
72
73 private:
74 std::string canvas_id_;
75 bool enabled_ = true;
77
80 float global_scale_ = 1.0f;
81 float grid_step_ = 32.0f;
82 bool enable_grid_ = true;
83 bool enable_hex_labels_ = false;
86 bool is_draggable_ = false;
87 bool auto_resize_ = false;
88 ImVec2 scrolling_;
89
90 std::unique_ptr<PaletteEditorWidget> palette_editor_;
92 uint64_t edit_palette_index_ = 0;
94 bool refresh_graphics_ = false;
95
97
98 std::unordered_map<CanvasUsage, std::vector<CanvasMenuItem>>
100 std::vector<CanvasMenuItem> global_items_;
101
102 void RenderMenuItem(
103 const CanvasMenuItem& item,
104 std::function<void(const std::string&, std::function<void()>)>
105 popup_callback);
107 const std::string& title, const std::vector<CanvasMenuItem>& items,
108 std::function<void(const std::string&, std::function<void()>)>
109 popup_callback);
111 std::function<void(const std::string&, std::function<void()>)>
112 popup_callback);
114 const std::function<void(Command, const CanvasConfig&)>& command_handler,
115 CanvasConfig current_config);
117 const std::function<void(Command, const CanvasConfig&)>& command_handler,
118 CanvasConfig current_config);
120 void RenderPaletteOperationsMenu(Rom* rom, gfx::Bitmap* bitmap);
121 void RenderBppOperationsMenu(const gfx::Bitmap* bitmap);
124 const std::function<void(Command, const CanvasConfig&)>& command_handler,
125 CanvasConfig current_config);
127 const std::function<void(Command, const CanvasConfig&)>& command_handler,
128 CanvasConfig current_config);
129
130 void RenderMaterialIcon(const std::string& icon_name,
131 const ImVec4& color = ImVec4(1, 1, 1, 1));
132 std::string GetUsageModeName(CanvasUsage usage) const;
133 ImVec4 GetUsageModeColor(CanvasUsage usage) const;
134
136 CanvasMenuItem CreateViewMenuItem(const std::string& label,
137 const std::string& icon,
138 std::function<void()> callback);
139 CanvasMenuItem CreateBitmapMenuItem(const std::string& label,
140 const std::string& icon,
141 std::function<void()> callback);
142 CanvasMenuItem CreatePaletteMenuItem(const std::string& label,
143 const std::string& icon,
144 std::function<void()> callback);
145 CanvasMenuItem CreateBppMenuItem(const std::string& label,
146 const std::string& icon,
147 std::function<void()> callback);
148 CanvasMenuItem CreatePerformanceMenuItem(const std::string& label,
149 const std::string& icon,
150 std::function<void()> callback);
151};
152
153} // namespace gui
154} // namespace yaze
155
156#endif // YAZE_APP_GUI_CANVAS_CANVAS_CONTEXT_MENU_H
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:24
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:67
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
void RenderBppOperationsMenu(const gfx::Bitmap *bitmap)
CanvasMenuItem CreatePaletteMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
void Initialize(const std::string &canvas_id)
std::unique_ptr< PaletteEditorWidget > palette_editor_
void SetUsageMode(CanvasUsage usage)
std::unordered_map< CanvasUsage, std::vector< CanvasMenuItem > > usage_specific_items_
void RenderMenuItem(const CanvasMenuItem &item, std::function< void(const std::string &, std::function< void()>)> popup_callback)
void SetCanvasState(const ImVec2 &canvas_size, const ImVec2 &content_size, float global_scale, float grid_step, bool enable_grid, bool enable_hex_labels, bool enable_custom_labels, bool enable_context_menu, bool is_draggable, bool auto_resize, const ImVec2 &scrolling)
void RenderScalingControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
void RenderMaterialIcon(const std::string &icon_name, const ImVec4 &color=ImVec4(1, 1, 1, 1))
void RenderUsageSpecificMenu(std::function< void(const std::string &, std::function< void()>)> popup_callback)
void RenderViewControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
CanvasMenuItem CreateBppMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
std::string GetUsageModeName(CanvasUsage usage) const
ImVec4 GetUsageModeColor(CanvasUsage usage) const
void RenderCanvasPropertiesMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
void RenderMenuSection(const std::string &title, const std::vector< CanvasMenuItem > &items, std::function< void(const std::string &, std::function< void()>)> popup_callback)
void RenderGridControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
std::vector< CanvasMenuItem > global_items_
void RenderPaletteOperationsMenu(Rom *rom, gfx::Bitmap *bitmap)
void AddMenuItem(const CanvasMenuItem &item)
void Render(const std::string &context_id, const ImVec2 &mouse_pos, Rom *rom, const gfx::Bitmap *bitmap, const gfx::SnesPalette *palette, const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config, Canvas *canvas)
CanvasMenuItem CreateBitmapMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
CanvasMenuItem CreateViewMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
void RenderBitmapOperationsMenu(gfx::Bitmap *bitmap)
CanvasMenuItem CreatePerformanceMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:150
CanvasUsage
Canvas usage patterns and tracking.
Unified configuration for canvas display and interaction.
Declarative menu item definition.
Definition canvas_menu.h:64