yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
popup_manager.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_POPUP_MANAGER_H
2#define YAZE_APP_EDITOR_POPUP_MANAGER_H
3
4#include <cstddef>
5#include <cstdint>
6#include <functional>
7#include <string>
8#include <unordered_map>
9
10#include "absl/status/status.h"
11
12namespace yaze {
13namespace editor {
14
15// Forward declaration
16class EditorManager;
17
23enum class PopupType {
24 kInfo, // Information display (About, ROM Info, etc.)
25 kHelp, // Help documentation (Getting Started, etc.)
26 kSettings, // Settings dialogs (Display Settings, etc.)
27 kFileOperation, // File operations (Save As, New Project, etc.)
28 kConfirmation, // Confirmation dialogs (Layout Reset, etc.)
29 kWarning, // Warning messages (Session Limit, etc.)
30 kEditor // Editor-specific dialogs
31};
32
38 const char* id; // Unique constant identifier
39 const char* display_name; // Human-readable name for UI
40 PopupType type; // Type classification
41 bool allow_resize; // Whether popup can be resized
42 std::function<void()> draw_function; // Drawing callback (set at runtime)
43};
44
50 std::string name;
52 bool is_visible = false;
53 bool allow_resize = false;
54 std::function<void()> draw_function;
55 uint64_t shown_order = 0; // Set by Show(); the newest visible popup is drawn
56};
57
62namespace PopupID {
63// File Operations
64constexpr const char* kSaveAs = "Save As..";
65constexpr const char* kSaveScope = "Save Scope";
66constexpr const char* kNewProject = "New Project";
67constexpr const char* kManageProject = "Manage Project";
68constexpr const char* kRomBackups = "ROM Backups";
69
70// Information
71constexpr const char* kAbout = "About";
72constexpr const char* kRomInfo = "ROM Information";
73constexpr const char* kSupportedFeatures = "Supported Features";
74constexpr const char* kStatus = "Status";
75
76// Help Documentation
77constexpr const char* kGettingStarted = "Getting Started";
78constexpr const char* kAsarIntegration = "Asar Integration";
79constexpr const char* kBuildInstructions = "Build Instructions";
80constexpr const char* kCLIUsage = "CLI Usage";
81constexpr const char* kTroubleshooting = "Troubleshooting";
82constexpr const char* kContributing = "Contributing";
83constexpr const char* kWhatsNew = "What's New";
84constexpr const char* kOpenRomHelp = "Open a ROM";
85constexpr const char* kComingFromZScream = "Coming from ZScream";
86
87// Settings
88constexpr const char* kDisplaySettings = "Display Settings";
89constexpr const char* kFeatureFlags = "Feature Flags";
90
91// Workspace
92constexpr const char* kWorkspaceHelp = "Workspace Help";
93constexpr const char* kSessionLimitWarning = "Session Limit Warning";
94constexpr const char* kLayoutResetConfirm = "Reset Layout Confirmation";
95constexpr const char* kLayoutPresets = "Layout Presets";
96constexpr const char* kSessionManager = "Session Manager";
97
98// Debug/Testing
99constexpr const char* kDataIntegrity = "Data Integrity Check";
100
101// Editor safety confirmations
102constexpr const char* kDungeonPotItemSaveConfirm =
103 "Dungeon Pot Item Save Confirmation";
104constexpr const char* kRomWriteConfirm = "ROM Write Confirmation";
105constexpr const char* kWriteConflictWarning = "Write Conflict Warning";
106constexpr const char* kUnsavedSessionChanges =
107 "Unsaved Session Changes Confirmation";
108
109// Future expansion
110constexpr const char* kQuickExport = "Quick Export";
111constexpr const char* kAssetImport = "Asset Import";
112constexpr const char* kScriptGenerator = "Script Generator";
113} // namespace PopupID
114
115// ImGui popup manager.
117 public:
118 PopupManager(EditorManager* editor_manager);
119
120 // Initialize popups
121 void Initialize();
122
123 // Draw all popups
124 void DrawPopups();
125
126 // Show a specific popup
127 void Show(const char* name);
128
129 // Registers or replaces a popup. Initialize() registers the built-in ones.
130 void RegisterPopup(const std::string& name, PopupType type,
131 std::function<void()> draw_function,
132 bool allow_resize = false);
133
134 // Hide a specific popup
135 void Hide(const char* name);
136
137 // Check if a popup is visible
138 bool IsVisible(const char* name) const;
139
140 // Set the status for status popup
141 void SetStatus(const absl::Status& status);
142
143 // Get the current status
144 absl::Status GetStatus() const { return status_; }
145
146 private:
147 // Helper function to begin a centered popup
148 bool BeginCentered(const char* name);
149
150 // Draw the about popup
151 void DrawAboutPopup();
152
153 // Draw the ROM info popup
154 void DrawRomInfoPopup();
155
156 // Draw the status popup
157 void DrawStatusPopup();
158
159 // Draw the save as popup
160 void DrawSaveAsPopup();
161 void ResetSaveAsState();
162 void DrawSaveScopePopup();
163
164 // Draw the new project popup
165 void DrawNewProjectPopup();
166
167 // Draw the supported features popup
169
170 // Draw the open ROM help popup
172
173 // Draw the manage project popup
175
176 // Help Documentation popups
180 void DrawCLIUsagePopup();
183 void DrawWhatsNewPopup();
185
186 // Workspace-related popups
192
193 // Settings popups (accessible without ROM)
196
197 // Debug/Testing popups
204
205 struct SaveAsState {
206 bool initialized = false;
207 std::size_t session_id = 0;
208 std::string source_path;
209 std::string folder;
210 std::string filename;
211 std::string error;
213
215 std::unordered_map<std::string, PopupParams> popups_;
216 uint64_t next_shown_order_ = 1;
217 absl::Status status_;
218 bool show_status_ = false;
219 absl::Status prev_status_;
220};
221
222} // namespace editor
223} // namespace yaze
224
225#endif // YAZE_APP_EDITOR_POPUP_MANAGER_H
The EditorManager controls the main editor window and manages the various editor classes.
void SetStatus(const absl::Status &status)
absl::Status GetStatus() const
bool IsVisible(const char *name) const
void Show(const char *name)
void Hide(const char *name)
struct yaze::editor::PopupManager::SaveAsState save_as_
PopupManager(EditorManager *editor_manager)
std::unordered_map< std::string, PopupParams > popups_
void RegisterPopup(const std::string &name, PopupType type, std::function< void()> draw_function, bool allow_resize=false)
EditorManager * editor_manager_
bool BeginCentered(const char *name)
String constants for all popup identifiers to prevent typos.
constexpr const char * kRomInfo
constexpr const char * kLayoutPresets
constexpr const char * kSaveScope
constexpr const char * kAbout
constexpr const char * kSessionManager
constexpr const char * kTroubleshooting
constexpr const char * kAssetImport
constexpr const char * kRomBackups
constexpr const char * kWhatsNew
constexpr const char * kStatus
constexpr const char * kSupportedFeatures
constexpr const char * kDataIntegrity
constexpr const char * kComingFromZScream
constexpr const char * kQuickExport
constexpr const char * kManageProject
constexpr const char * kNewProject
constexpr const char * kSaveAs
constexpr const char * kDisplaySettings
constexpr const char * kSessionLimitWarning
constexpr const char * kCLIUsage
constexpr const char * kScriptGenerator
constexpr const char * kLayoutResetConfirm
constexpr const char * kWriteConflictWarning
constexpr const char * kAsarIntegration
constexpr const char * kOpenRomHelp
constexpr const char * kFeatureFlags
constexpr const char * kDungeonPotItemSaveConfirm
constexpr const char * kGettingStarted
constexpr const char * kContributing
constexpr const char * kUnsavedSessionChanges
constexpr const char * kBuildInstructions
constexpr const char * kWorkspaceHelp
constexpr const char * kRomWriteConfirm
PopupType
Type classification for popups to enable future filtering and organization.
Complete definition of a popup including metadata.
std::function< void()> draw_function
Runtime state for a registered popup.
std::function< void()> draw_function