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
11#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(const std::string& context_id,
57 const ImVec2& mouse_pos,
58 Rom* rom,
59 const gfx::Bitmap* bitmap,
60 const gfx::SnesPalette* palette,
61 const std::function<void(Command, const CanvasConfig&)>& command_handler,
62 CanvasConfig current_config,
63 Canvas* canvas);
64
65 bool ShouldShowContextMenu() const;
66 void SetEnabled(bool enabled) { enabled_ = enabled; }
67 bool IsEnabled() const { return enabled_; }
69
70 void SetCanvasState(const ImVec2& canvas_size,
71 const ImVec2& content_size,
72 float global_scale,
73 float grid_step,
74 bool enable_grid,
75 bool enable_hex_labels,
76 bool enable_custom_labels,
77 bool enable_context_menu,
78 bool is_draggable,
79 bool auto_resize,
80 const ImVec2& scrolling);
81
82 private:
83 std::string canvas_id_;
84 bool enabled_ = true;
86
89 float global_scale_ = 1.0f;
90 float grid_step_ = 32.0f;
91 bool enable_grid_ = true;
92 bool enable_hex_labels_ = false;
95 bool is_draggable_ = false;
96 bool auto_resize_ = false;
97 ImVec2 scrolling_;
98
99 std::unique_ptr<PaletteEditorWidget> palette_editor_;
103 bool refresh_graphics_ = false;
104
106
107 std::unordered_map<CanvasUsage, std::vector<CanvasMenuItem>> usage_specific_items_;
108 std::vector<CanvasMenuItem> global_items_;
109
110 void RenderMenuItem(const CanvasMenuItem& item,
111 std::function<void(const std::string&, std::function<void()>)> popup_callback);
112 void RenderMenuSection(const std::string& title,
113 const std::vector<CanvasMenuItem>& items,
114 std::function<void(const std::string&, std::function<void()>)> popup_callback);
115 void RenderUsageSpecificMenu(std::function<void(const std::string&, std::function<void()>)> popup_callback);
116 void RenderViewControlsMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
117 CanvasConfig current_config);
118 void RenderCanvasPropertiesMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
119 CanvasConfig current_config);
121 void RenderPaletteOperationsMenu(Rom* rom, gfx::Bitmap* bitmap);
122 void RenderBppOperationsMenu(const gfx::Bitmap* bitmap);
124 void RenderGridControlsMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
125 CanvasConfig current_config);
126 void RenderScalingControlsMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
127 CanvasConfig current_config);
128
129 void RenderMaterialIcon(const std::string& icon_name,
130 const ImVec4& color = ImVec4(1, 1, 1, 1));
131 std::string GetUsageModeName(CanvasUsage usage) const;
132 ImVec4 GetUsageModeColor(CanvasUsage usage) const;
133
135 CanvasMenuItem CreateViewMenuItem(const std::string& label,
136 const std::string& icon,
137 std::function<void()> callback);
138 CanvasMenuItem CreateBitmapMenuItem(const std::string& label,
139 const std::string& icon,
140 std::function<void()> callback);
141 CanvasMenuItem CreatePaletteMenuItem(const std::string& label,
142 const std::string& icon,
143 std::function<void()> callback);
144 CanvasMenuItem CreateBppMenuItem(const std::string& label,
145 const std::string& icon,
146 std::function<void()> callback);
147 CanvasMenuItem CreatePerformanceMenuItem(const std::string& label,
148 const std::string& icon,
149 std::function<void()> callback);
150};
151
152} // namespace gui
153} // namespace yaze
154
155#endif // YAZE_APP_GUI_CANVAS_CANVAS_CONTEXT_MENU_H
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:74
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:66
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:59
CanvasUsage
Canvas usage patterns and tracking.
Main namespace for the application.
Definition controller.cc:20
Unified configuration for canvas display and interaction.
Declarative menu item definition.
Definition canvas_menu.h:63