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
9#include "app/gfx/bitmap.h"
11#include "app/gui/icons.h"
14#include "imgui/imgui.h"
15
16namespace yaze {
17namespace gui {
18
19// Forward declarations
20class PaletteWidget;
21
22namespace canvas {
23
25 public:
43
44 CanvasContextMenu() = default;
45
47 std::string label;
48 std::string shortcut;
49 std::string icon;
50 std::function<void()> callback;
51 std::function<bool()> enabled_condition = []() { return true; };
52 std::function<bool()> visible_condition = []() { return true; };
53 std::vector<ContextMenuItem> subitems;
54 ImVec4 color = ImVec4(1, 1, 1, 1);
55 bool separator_after = false;
56
57 ContextMenuItem() = default;
58 ContextMenuItem(const std::string& lbl, const std::string& ico,
59 std::function<void()> cb, const std::string& sc = "")
60 : label(lbl), shortcut(sc), icon(ico), callback(std::move(cb)) {}
61 };
62
63 void Initialize(const std::string& canvas_id);
64 void SetUsageMode(CanvasUsage usage);
65 void AddMenuItem(const ContextMenuItem& item);
66 void AddMenuItem(const ContextMenuItem& item, CanvasUsage usage);
67 void ClearMenuItems();
68
69 void Render(const std::string& context_id,
70 const ImVec2& mouse_pos,
71 Rom* rom,
72 const gfx::Bitmap* bitmap,
73 const gfx::SnesPalette* palette,
74 const std::function<void(Command, const canvas::CanvasConfig&)>& command_handler,
75 CanvasConfig current_config);
76
77 bool ShouldShowContextMenu() const;
78 void SetEnabled(bool enabled) { enabled_ = enabled; }
79 bool IsEnabled() const { return enabled_; }
81
82 void SetCanvasState(const ImVec2& canvas_size,
83 const ImVec2& content_size,
84 float global_scale,
85 float grid_step,
86 bool enable_grid,
87 bool enable_hex_labels,
88 bool enable_custom_labels,
89 bool enable_context_menu,
90 bool is_draggable,
91 bool auto_resize,
92 const ImVec2& scrolling);
93
94 private:
95 std::string canvas_id_;
96 bool enabled_ = true;
98
101 float global_scale_ = 1.0f;
102 float grid_step_ = 32.0f;
103 bool enable_grid_ = true;
104 bool enable_hex_labels_ = false;
107 bool is_draggable_ = false;
108 bool auto_resize_ = false;
110
111 std::unique_ptr<PaletteWidget> palette_editor_;
115 bool refresh_graphics_ = false;
116
118
119 std::unordered_map<CanvasUsage, std::vector<ContextMenuItem>> usage_specific_items_;
120 std::vector<ContextMenuItem> global_items_;
121
122 void RenderMenuItem(const ContextMenuItem& item);
123 void RenderMenuSection(const std::string& title,
124 const std::vector<ContextMenuItem>& items);
126 void RenderViewControlsMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
127 CanvasConfig current_config);
128 void RenderCanvasPropertiesMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
129 CanvasConfig current_config);
131 void RenderPaletteOperationsMenu(Rom* rom, gfx::Bitmap* bitmap);
132 void RenderBppOperationsMenu(const gfx::Bitmap* bitmap);
134 void RenderGridControlsMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
135 CanvasConfig current_config);
136 void RenderScalingControlsMenu(const std::function<void(Command, const CanvasConfig&)>& command_handler,
137 CanvasConfig current_config);
138
139 void RenderMaterialIcon(const std::string& icon_name,
140 const ImVec4& color = ImVec4(1, 1, 1, 1));
141 std::string GetUsageModeName(CanvasUsage usage) const;
142 ImVec4 GetUsageModeColor(CanvasUsage usage) const;
143
145 ContextMenuItem CreateViewMenuItem(const std::string& label,
146 const std::string& icon,
147 std::function<void()> callback);
148 ContextMenuItem CreateBitmapMenuItem(const std::string& label,
149 const std::string& icon,
150 std::function<void()> callback);
151 ContextMenuItem CreatePaletteMenuItem(const std::string& label,
152 const std::string& icon,
153 std::function<void()> callback);
154 ContextMenuItem CreateBppMenuItem(const std::string& label,
155 const std::string& icon,
156 std::function<void()> callback);
157 ContextMenuItem CreatePerformanceMenuItem(const std::string& label,
158 const std::string& icon,
159 std::function<void()> callback);
160};
161
162} // namespace canvas
163} // namespace gui
164} // namespace yaze
165
166#endif // YAZE_APP_GUI_CANVAS_CANVAS_CONTEXT_MENU_H
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
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 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 AddMenuItem(const ContextMenuItem &item)
ContextMenuItem CreateBppMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
void RenderScalingControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
ImVec4 GetUsageModeColor(CanvasUsage usage) const
ContextMenuItem CreatePaletteMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
void RenderCanvasPropertiesMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
void RenderBppOperationsMenu(const gfx::Bitmap *bitmap)
ContextMenuItem CreateBitmapMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
void RenderPaletteOperationsMenu(Rom *rom, gfx::Bitmap *bitmap)
void Initialize(const std::string &canvas_id)
std::unique_ptr< PaletteWidget > palette_editor_
void RenderMenuItem(const ContextMenuItem &item)
std::unordered_map< CanvasUsage, std::vector< ContextMenuItem > > usage_specific_items_
ContextMenuItem CreateViewMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
void RenderMaterialIcon(const std::string &icon_name, const ImVec4 &color=ImVec4(1, 1, 1, 1))
void RenderGridControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
void RenderBitmapOperationsMenu(gfx::Bitmap *bitmap)
void RenderViewControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
std::vector< ContextMenuItem > global_items_
void RenderMenuSection(const std::string &title, const std::vector< ContextMenuItem > &items)
ContextMenuItem CreatePerformanceMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
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 canvas::CanvasConfig &)> &command_handler, CanvasConfig current_config)
std::string GetUsageModeName(CanvasUsage usage) const
CanvasUsage
Canvas usage patterns and tracking.
Main namespace for the application.
Canvas configuration options for modals.
ContextMenuItem(const std::string &lbl, const std::string &ico, std::function< void()> cb, const std::string &sc="")