yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
editor_card_manager.h
Go to the documentation of this file.
1#ifndef YAZE_APP_GUI_EDITOR_CARD_MANAGER_H
2#define YAZE_APP_GUI_EDITOR_CARD_MANAGER_H
3
4#include <functional>
5#include <memory>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10#include "imgui/imgui.h"
11
12namespace yaze {
13namespace gui {
14
15class EditorCard; // Forward declaration
16
20struct CardInfo {
21 std::string card_id; // Unique identifier (e.g., "dungeon.room_selector")
22 std::string display_name; // Human-readable name (e.g., "Room Selector")
23 std::string icon; // Material icon
24 std::string category; // Category (e.g., "Dungeon", "Graphics", "Palette")
25 std::string shortcut_hint; // Display hint (e.g., "Ctrl+Shift+R")
26 bool* visibility_flag; // Pointer to bool controlling visibility
27 EditorCard* card_instance; // Pointer to actual card (optional)
28 std::function<void()> on_show; // Callback when card is shown
29 std::function<void()> on_hide; // Callback when card is hidden
30 int priority; // Display priority for menus (lower = higher)
31};
32
73 public:
74 static EditorCardManager& Get();
75
76 // Registration
77 void RegisterCard(const CardInfo& info);
78 void UnregisterCard(const std::string& card_id);
79 void ClearAllCards();
80
81 // Card control (programmatic, no GUI)
82 bool ShowCard(const std::string& card_id);
83 bool HideCard(const std::string& card_id);
84 bool ToggleCard(const std::string& card_id);
85 bool IsCardVisible(const std::string& card_id) const;
86
87 // Batch operations
88 void ShowAllCardsInCategory(const std::string& category);
89 void HideAllCardsInCategory(const std::string& category);
90 void ShowOnlyCard(const std::string& card_id); // Hide all others in category
91
92 // Query
93 std::vector<CardInfo> GetCardsInCategory(const std::string& category) const;
94 std::vector<std::string> GetAllCategories() const;
95 const CardInfo* GetCardInfo(const std::string& card_id) const;
96
97 // View menu integration
98 void DrawViewMenuSection(const std::string& category);
99 void DrawViewMenuAll(); // Draw all categories as submenus
100
101 // Compact inline card control for menu bar
102 void DrawCompactCardControl(const std::string& category); // Shows only active editor's cards
103 void DrawInlineCardToggles(const std::string& category); // Minimal inline checkboxes
104
105 // Card browser UI
106 void DrawCardBrowser(bool* p_open); // Visual card browser/toggler
107 void DrawCardBrowserTable(const char* search_filter, const std::string& category_filter);
108 void DrawPresetsTab();
109
110 // Workspace presets
112 std::string name;
113 std::vector<std::string> visible_cards; // Card IDs
114 std::string description;
115 };
116
117 void SavePreset(const std::string& name, const std::string& description = "");
118 bool LoadPreset(const std::string& name);
119 void DeletePreset(const std::string& name);
120 std::vector<WorkspacePreset> GetPresets() const;
121
122 // Quick actions
123 void ShowAll(); // Show all registered cards
124 void HideAll(); // Hide all registered cards
125 void ResetToDefaults(); // Reset to default visibility state
126
127 // Statistics
128 size_t GetCardCount() const { return cards_.size(); }
129 size_t GetVisibleCardCount() const;
130
131 private:
132 EditorCardManager() = default;
136
137 std::unordered_map<std::string, CardInfo> cards_;
138 std::unordered_map<std::string, WorkspacePreset> presets_;
139
140 // Helper methods
141 void SavePresetsToFile();
142 void LoadPresetsFromFile();
143};
144
164 public:
165 CardRegistration() = default;
166 explicit CardRegistration(const std::string& card_id) : card_id_(card_id) {}
167
169 if (!card_id_.empty()) {
171 }
172 }
173
174 // No copy, allow move
177 CardRegistration(CardRegistration&& other) noexcept : card_id_(std::move(other.card_id_)) {
178 other.card_id_.clear();
179 }
181 if (this != &other) {
182 card_id_ = std::move(other.card_id_);
183 other.card_id_.clear();
184 }
185 return *this;
186 }
187
188 private:
189 std::string card_id_;
190};
191
192// Convenience function for registration
195 return CardRegistration(info.card_id);
196}
197
198} // namespace gui
199} // namespace yaze
200
201#endif // YAZE_APP_GUI_EDITOR_CARD_MANAGER_H
202
RAII helper for auto-registering cards.
CardRegistration(const std::string &card_id)
CardRegistration(CardRegistration &&other) noexcept
CardRegistration & operator=(CardRegistration &&other) noexcept
CardRegistration(const CardRegistration &)=delete
CardRegistration & operator=(const CardRegistration &)=delete
Central registry and manager for all editor cards.
void DrawInlineCardToggles(const std::string &category)
bool ShowCard(const std::string &card_id)
void ShowAllCardsInCategory(const std::string &category)
void DrawViewMenuSection(const std::string &category)
bool LoadPreset(const std::string &name)
void HideAllCardsInCategory(const std::string &category)
std::vector< CardInfo > GetCardsInCategory(const std::string &category) const
void UnregisterCard(const std::string &card_id)
bool ToggleCard(const std::string &card_id)
bool IsCardVisible(const std::string &card_id) const
void RegisterCard(const CardInfo &info)
std::vector< WorkspacePreset > GetPresets() const
bool HideCard(const std::string &card_id)
std::unordered_map< std::string, WorkspacePreset > presets_
std::vector< std::string > GetAllCategories() const
void DrawCompactCardControl(const std::string &category)
static EditorCardManager & Get()
EditorCardManager & operator=(const EditorCardManager &)=delete
void ShowOnlyCard(const std::string &card_id)
EditorCardManager(const EditorCardManager &)=delete
std::unordered_map< std::string, CardInfo > cards_
const CardInfo * GetCardInfo(const std::string &card_id) const
void SavePreset(const std::string &name, const std::string &description="")
void DrawCardBrowserTable(const char *search_filter, const std::string &category_filter)
void DeletePreset(const std::string &name)
Draggable, dockable card for editor sub-windows.
CardRegistration RegisterCard(const CardInfo &info)
Main namespace for the application.
Metadata for an editor card.
std::function< void()> on_show
std::function< void()> on_hide