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
"
10
#include "
app/gfx/snes_palette.h
"
11
#include "
app/gui/icons.h
"
12
#include "
app/gui/canvas/canvas_modals.h
"
13
#include "
canvas_usage_tracker.h
"
14
#include "imgui/imgui.h"
15
16
namespace
yaze
{
17
namespace
gui {
18
19
// Forward declarations
20
class
PaletteWidget;
21
22
namespace
canvas {
23
24
class
CanvasContextMenu
{
25
public
:
26
enum class
Command
{
27
kNone
,
28
kResetView
,
29
kZoomToFit
,
30
kZoomIn
,
31
kZoomOut
,
32
kToggleGrid
,
33
kToggleHexLabels
,
34
kToggleCustomLabels
,
35
kToggleContextMenu
,
36
kToggleAutoResize
,
37
kToggleDraggable
,
38
kOpenAdvancedProperties
,
39
kOpenScalingControls
,
40
kSetGridStep
,
41
kSetScale
,
42
};
43
44
CanvasContextMenu
() =
default
;
45
46
struct
ContextMenuItem
{
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_
; }
80
CanvasUsage
GetUsageMode
()
const
{
return
current_usage_
; }
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
;
97
CanvasUsage
current_usage_
=
CanvasUsage::kTilePainting
;
98
99
ImVec2
canvas_size_
;
100
ImVec2
content_size_
;
101
float
global_scale_
= 1.0f;
102
float
grid_step_
= 32.0f;
103
bool
enable_grid_
=
true
;
104
bool
enable_hex_labels_
=
false
;
105
bool
enable_custom_labels_
=
false
;
106
bool
enable_context_menu_
=
true
;
107
bool
is_draggable_
=
false
;
108
bool
auto_resize_
=
false
;
109
ImVec2
scrolling_
;
110
111
std::unique_ptr<PaletteWidget>
palette_editor_
;
112
uint64_t
edit_palette_group_name_index_
= 0;
113
uint64_t
edit_palette_index_
= 0;
114
uint64_t
edit_palette_sub_index_
= 0;
115
bool
refresh_graphics_
=
false
;
116
117
void
DrawROMPaletteSelector
();
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);
125
void
RenderUsageSpecificMenu
();
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);
130
void
RenderBitmapOperationsMenu
(
gfx::Bitmap
* bitmap);
131
void
RenderPaletteOperationsMenu
(
Rom
* rom,
gfx::Bitmap
* bitmap);
132
void
RenderBppOperationsMenu
(
const
gfx::Bitmap
* bitmap);
133
void
RenderPerformanceMenu
();
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
144
void
CreateDefaultMenuItems
();
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
bitmap.h
canvas_modals.h
canvas_usage_tracker.h
yaze::Rom
The Rom class is used to load, save, and modify Rom data.
Definition
rom.h:71
yaze::gfx::Bitmap
Represents a bitmap image optimized for SNES ROM hacking.
Definition
bitmap.h:66
yaze::gfx::SnesPalette
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
Definition
snes_palette.h:127
yaze::gui::canvas::CanvasContextMenu
Definition
canvas_context_menu.h:24
yaze::gui::canvas::CanvasContextMenu::SetCanvasState
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)
Definition
canvas_context_menu.cc:135
yaze::gui::canvas::CanvasContextMenu::SetEnabled
void SetEnabled(bool enabled)
Definition
canvas_context_menu.h:78
yaze::gui::canvas::CanvasContextMenu::refresh_graphics_
bool refresh_graphics_
Definition
canvas_context_menu.h:115
yaze::gui::canvas::CanvasContextMenu::RenderPerformanceMenu
void RenderPerformanceMenu()
Definition
canvas_context_menu.cc:379
yaze::gui::canvas::CanvasContextMenu::AddMenuItem
void AddMenuItem(const ContextMenuItem &item)
Definition
canvas_context_menu.cc:53
yaze::gui::canvas::CanvasContextMenu::CreateBppMenuItem
ContextMenuItem CreateBppMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
Definition
canvas_context_menu.cc:561
yaze::gui::canvas::CanvasContextMenu::RenderScalingControlsMenu
void RenderScalingControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
Definition
canvas_context_menu.cc:422
yaze::gui::canvas::CanvasContextMenu::is_draggable_
bool is_draggable_
Definition
canvas_context_menu.h:107
yaze::gui::canvas::CanvasContextMenu::GetUsageModeColor
ImVec4 GetUsageModeColor(CanvasUsage usage) const
Definition
canvas_context_menu.cc:476
yaze::gui::canvas::CanvasContextMenu::edit_palette_index_
uint64_t edit_palette_index_
Definition
canvas_context_menu.h:113
yaze::gui::canvas::CanvasContextMenu::CreatePaletteMenuItem
ContextMenuItem CreatePaletteMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
Definition
canvas_context_menu.cc:555
yaze::gui::canvas::CanvasContextMenu::RenderCanvasPropertiesMenu
void RenderCanvasPropertiesMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
Definition
canvas_context_menu.cc:260
yaze::gui::canvas::CanvasContextMenu::scrolling_
ImVec2 scrolling_
Definition
canvas_context_menu.h:109
yaze::gui::canvas::CanvasContextMenu::CanvasContextMenu
CanvasContextMenu()=default
yaze::gui::canvas::CanvasContextMenu::RenderBppOperationsMenu
void RenderBppOperationsMenu(const gfx::Bitmap *bitmap)
Definition
canvas_context_menu.cc:363
yaze::gui::canvas::CanvasContextMenu::CreateBitmapMenuItem
ContextMenuItem CreateBitmapMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
Definition
canvas_context_menu.cc:549
yaze::gui::canvas::CanvasContextMenu::Command
Command
Definition
canvas_context_menu.h:26
yaze::gui::canvas::CanvasContextMenu::Command::kZoomIn
@ kZoomIn
yaze::gui::canvas::CanvasContextMenu::Command::kOpenAdvancedProperties
@ kOpenAdvancedProperties
yaze::gui::canvas::CanvasContextMenu::Command::kToggleGrid
@ kToggleGrid
yaze::gui::canvas::CanvasContextMenu::Command::kSetScale
@ kSetScale
yaze::gui::canvas::CanvasContextMenu::Command::kNone
@ kNone
yaze::gui::canvas::CanvasContextMenu::Command::kResetView
@ kResetView
yaze::gui::canvas::CanvasContextMenu::Command::kToggleDraggable
@ kToggleDraggable
yaze::gui::canvas::CanvasContextMenu::Command::kToggleAutoResize
@ kToggleAutoResize
yaze::gui::canvas::CanvasContextMenu::Command::kToggleCustomLabels
@ kToggleCustomLabels
yaze::gui::canvas::CanvasContextMenu::Command::kZoomOut
@ kZoomOut
yaze::gui::canvas::CanvasContextMenu::Command::kToggleHexLabels
@ kToggleHexLabels
yaze::gui::canvas::CanvasContextMenu::Command::kToggleContextMenu
@ kToggleContextMenu
yaze::gui::canvas::CanvasContextMenu::Command::kSetGridStep
@ kSetGridStep
yaze::gui::canvas::CanvasContextMenu::Command::kOpenScalingControls
@ kOpenScalingControls
yaze::gui::canvas::CanvasContextMenu::Command::kZoomToFit
@ kZoomToFit
yaze::gui::canvas::CanvasContextMenu::RenderPaletteOperationsMenu
void RenderPaletteOperationsMenu(Rom *rom, gfx::Bitmap *bitmap)
Definition
canvas_context_menu.cc:323
yaze::gui::canvas::CanvasContextMenu::Initialize
void Initialize(const std::string &canvas_id)
Definition
canvas_context_menu.cc:26
yaze::gui::canvas::CanvasContextMenu::enabled_
bool enabled_
Definition
canvas_context_menu.h:96
yaze::gui::canvas::CanvasContextMenu::grid_step_
float grid_step_
Definition
canvas_context_menu.h:102
yaze::gui::canvas::CanvasContextMenu::palette_editor_
std::unique_ptr< PaletteWidget > palette_editor_
Definition
canvas_context_menu.h:111
yaze::gui::canvas::CanvasContextMenu::RenderMenuItem
void RenderMenuItem(const ContextMenuItem &item)
Definition
canvas_context_menu.cc:159
yaze::gui::canvas::CanvasContextMenu::usage_specific_items_
std::unordered_map< CanvasUsage, std::vector< ContextMenuItem > > usage_specific_items_
Definition
canvas_context_menu.h:119
yaze::gui::canvas::CanvasContextMenu::content_size_
ImVec2 content_size_
Definition
canvas_context_menu.h:100
yaze::gui::canvas::CanvasContextMenu::CreateViewMenuItem
ContextMenuItem CreateViewMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
Definition
canvas_context_menu.cc:543
yaze::gui::canvas::CanvasContextMenu::canvas_size_
ImVec2 canvas_size_
Definition
canvas_context_menu.h:99
yaze::gui::canvas::CanvasContextMenu::auto_resize_
bool auto_resize_
Definition
canvas_context_menu.h:108
yaze::gui::canvas::CanvasContextMenu::enable_custom_labels_
bool enable_custom_labels_
Definition
canvas_context_menu.h:105
yaze::gui::canvas::CanvasContextMenu::enable_context_menu_
bool enable_context_menu_
Definition
canvas_context_menu.h:106
yaze::gui::canvas::CanvasContextMenu::enable_grid_
bool enable_grid_
Definition
canvas_context_menu.h:103
yaze::gui::canvas::CanvasContextMenu::global_scale_
float global_scale_
Definition
canvas_context_menu.h:101
yaze::gui::canvas::CanvasContextMenu::RenderMaterialIcon
void RenderMaterialIcon(const std::string &icon_name, const ImVec4 &color=ImVec4(1, 1, 1, 1))
Definition
canvas_context_menu.cc:444
yaze::gui::canvas::CanvasContextMenu::canvas_id_
std::string canvas_id_
Definition
canvas_context_menu.h:95
yaze::gui::canvas::CanvasContextMenu::DrawROMPaletteSelector
void DrawROMPaletteSelector()
Definition
canvas_context_menu.cc:357
yaze::gui::canvas::CanvasContextMenu::RenderGridControlsMenu
void RenderGridControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
Definition
canvas_context_menu.cc:399
yaze::gui::canvas::CanvasContextMenu::RenderBitmapOperationsMenu
void RenderBitmapOperationsMenu(gfx::Bitmap *bitmap)
Definition
canvas_context_menu.cc:289
yaze::gui::canvas::CanvasContextMenu::RenderViewControlsMenu
void RenderViewControlsMenu(const std::function< void(Command, const CanvasConfig &)> &command_handler, CanvasConfig current_config)
Definition
canvas_context_menu.cc:220
yaze::gui::canvas::CanvasContextMenu::IsEnabled
bool IsEnabled() const
Definition
canvas_context_menu.h:79
yaze::gui::canvas::CanvasContextMenu::global_items_
std::vector< ContextMenuItem > global_items_
Definition
canvas_context_menu.h:120
yaze::gui::canvas::CanvasContextMenu::RenderMenuSection
void RenderMenuSection(const std::string &title, const std::vector< ContextMenuItem > &items)
Definition
canvas_context_menu.cc:193
yaze::gui::canvas::CanvasContextMenu::enable_hex_labels_
bool enable_hex_labels_
Definition
canvas_context_menu.h:104
yaze::gui::canvas::CanvasContextMenu::ClearMenuItems
void ClearMenuItems()
Definition
canvas_context_menu.cc:61
yaze::gui::canvas::CanvasContextMenu::ShouldShowContextMenu
bool ShouldShowContextMenu() const
Definition
canvas_context_menu.cc:131
yaze::gui::canvas::CanvasContextMenu::CreatePerformanceMenuItem
ContextMenuItem CreatePerformanceMenuItem(const std::string &label, const std::string &icon, std::function< void()> callback)
Definition
canvas_context_menu.cc:567
yaze::gui::canvas::CanvasContextMenu::Render
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)
Definition
canvas_context_menu.cc:66
yaze::gui::canvas::CanvasContextMenu::RenderUsageSpecificMenu
void RenderUsageSpecificMenu()
Definition
canvas_context_menu.cc:203
yaze::gui::canvas::CanvasContextMenu::edit_palette_group_name_index_
uint64_t edit_palette_group_name_index_
Definition
canvas_context_menu.h:112
yaze::gui::canvas::CanvasContextMenu::CreateDefaultMenuItems
void CreateDefaultMenuItems()
Definition
canvas_context_menu.cc:491
yaze::gui::canvas::CanvasContextMenu::edit_palette_sub_index_
uint64_t edit_palette_sub_index_
Definition
canvas_context_menu.h:114
yaze::gui::canvas::CanvasContextMenu::current_usage_
CanvasUsage current_usage_
Definition
canvas_context_menu.h:97
yaze::gui::canvas::CanvasContextMenu::GetUsageModeName
std::string GetUsageModeName(CanvasUsage usage) const
Definition
canvas_context_menu.cc:461
yaze::gui::canvas::CanvasContextMenu::SetUsageMode
void SetUsageMode(CanvasUsage usage)
Definition
canvas_context_menu.cc:49
yaze::gui::canvas::CanvasContextMenu::GetUsageMode
CanvasUsage GetUsageMode() const
Definition
canvas_context_menu.h:80
icons.h
yaze::gui::canvas::CanvasUsage
CanvasUsage
Canvas usage patterns and tracking.
Definition
canvas_usage_tracker.h:18
yaze::gui::canvas::CanvasUsage::kTilePainting
@ kTilePainting
yaze
Main namespace for the application.
Definition
asar_wrapper.cc:14
snes_palette.h
yaze::gui::canvas::CanvasConfig
Canvas configuration options for modals.
Definition
canvas_modals.h:25
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem
Definition
canvas_context_menu.h:46
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::color
ImVec4 color
Definition
canvas_context_menu.h:54
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::enabled_condition
std::function< bool()> enabled_condition
Definition
canvas_context_menu.h:51
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::callback
std::function< void()> callback
Definition
canvas_context_menu.h:50
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::ContextMenuItem
ContextMenuItem(const std::string &lbl, const std::string &ico, std::function< void()> cb, const std::string &sc="")
Definition
canvas_context_menu.h:58
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::label
std::string label
Definition
canvas_context_menu.h:47
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::shortcut
std::string shortcut
Definition
canvas_context_menu.h:48
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::subitems
std::vector< ContextMenuItem > subitems
Definition
canvas_context_menu.h:53
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::separator_after
bool separator_after
Definition
canvas_context_menu.h:55
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::icon
std::string icon
Definition
canvas_context_menu.h:49
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::ContextMenuItem
ContextMenuItem()=default
yaze::gui::canvas::CanvasContextMenu::ContextMenuItem::visible_condition
std::function< bool()> visible_condition
Definition
canvas_context_menu.h:52
src
app
gui
canvas
canvas_context_menu.h
Generated by
1.9.8