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 <optional>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10#include "app/gfx/core/bitmap.h"
14#include "app/gui/core/icons.h"
16#include "imgui/imgui.h"
17
18namespace yaze {
19namespace gui {
20
21// Forward declarations
22class PaletteEditorWidget;
23class Canvas;
24
26 public:
44
45 CanvasContextMenu() = default;
46
47 // Phase 4: Use unified CanvasMenuItem from canvas_menu.h
49
50 void Initialize(const std::string& canvas_id);
51 void SetUsageMode(CanvasUsage usage);
52 void AddMenuItem(const CanvasMenuItem& item);
53 void AddMenuItem(const CanvasMenuItem& item, CanvasUsage usage);
54 void ClearMenuItems();
55
56 // Phase 4: Render with editor menu integration and priority ordering
57 void Render(
58 const std::string& context_id, const ImVec2& mouse_pos, Rom* rom,
59 const gfx::Bitmap* bitmap, const gfx::SnesPalette* palette,
60 const std::function<void(Command, const CanvasConfig&)>& command_handler,
61 CanvasConfig current_config, Canvas* canvas);
62
63 bool ShouldShowContextMenu() const;
64 void SetEnabled(bool enabled) { enabled_ = enabled; }
65 bool IsEnabled() const { return enabled_; }
67 std::optional<ImVec2> context_open_screen_position() const {
69 }
70
71 void SetCanvasState(const ImVec2& canvas_size, const ImVec2& content_size,
72 float global_scale, float grid_step, bool enable_grid,
73 bool enable_hex_labels, bool enable_custom_labels,
74 bool enable_context_menu, bool is_draggable,
75 bool auto_resize, const ImVec2& scrolling);
76
77 private:
78 std::string canvas_id_;
79 bool enabled_ = true;
81
84 float global_scale_ = 1.0f;
85 float grid_step_ = 32.0f;
86 bool enable_grid_ = true;
87 bool enable_hex_labels_ = false;
90 bool is_draggable_ = false;
91 bool auto_resize_ = false;
92 ImVec2 scrolling_;
93 std::optional<ImVec2> context_open_screen_position_;
94
95 std::unique_ptr<PaletteEditorWidget> palette_editor_;
97 uint64_t edit_palette_index_ = 0;
99 bool refresh_graphics_ = false;
100
102
103 std::unordered_map<CanvasUsage, std::vector<CanvasMenuItem>>
105 std::vector<CanvasMenuItem> global_items_;
106
107 void RenderMenuItem(
108 const CanvasMenuItem& item,
109 std::function<void(const std::string&, std::function<void()>)>
110 popup_callback);
112 const std::string& title, const std::vector<CanvasMenuItem>& items,
113 std::function<void(const std::string&, std::function<void()>)>
114 popup_callback);
116 std::function<void(const std::string&, std::function<void()>)>
117 popup_callback);
119 const std::function<void(Command, const CanvasConfig&)>& command_handler,
120 CanvasConfig current_config);
122 void RenderPaletteOperationsMenu(Rom* rom, gfx::Bitmap* bitmap);
124
125 void RenderMaterialIcon(const std::string& icon_name,
126 const ImVec4& color = ImVec4(1, 1, 1, 1));
127 std::string GetUsageModeName(CanvasUsage usage) const;
128 ImVec4 GetUsageModeColor(CanvasUsage usage) const;
129
131};
132
133} // namespace gui
134} // namespace yaze
135
136#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:28
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:69
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
void Initialize(const std::string &canvas_id)
std::optional< ImVec2 > context_open_screen_position() const
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 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)
std::string GetUsageModeName(CanvasUsage usage) const
ImVec4 GetUsageModeColor(CanvasUsage usage) const
void RenderMenuSection(const std::string &title, const std::vector< CanvasMenuItem > &items, std::function< void(const std::string &, std::function< void()>)> popup_callback)
std::vector< CanvasMenuItem > global_items_
void RenderPaletteOperationsMenu(Rom *rom, gfx::Bitmap *bitmap)
std::optional< ImVec2 > context_open_screen_position_
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)
void RenderBitmapOperationsMenu(gfx::Bitmap *bitmap)
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:64
CanvasUsage
Canvas usage patterns and tracking.
Unified configuration for canvas display and interaction.
Declarative menu item definition.
Definition canvas_menu.h:64