1#ifndef YAZE_APP_EDITOR_SYSTEM_EDITOR_CARD_REGISTRY_H_
2#define YAZE_APP_EDITOR_SYSTEM_EDITOR_CARD_REGISTRY_H_
7#include <unordered_map>
10#include "imgui/imgui.h"
136 const std::string& card_id,
137 const std::string& display_name,
138 const std::string& icon,
139 const std::string& category,
140 const std::string& shortcut_hint =
"",
142 std::function<
void()> on_show =
nullptr,
143 std::function<
void()> on_hide =
nullptr,
144 bool visible_by_default =
false);
151 void UnregisterCard(
size_t session_id,
const std::string& base_card_id);
176 bool ShowCard(
size_t session_id,
const std::string& base_card_id);
181 bool HideCard(
size_t session_id,
const std::string& base_card_id);
186 bool ToggleCard(
size_t session_id,
const std::string& base_card_id);
191 bool IsCardVisible(
size_t session_id,
const std::string& base_card_id)
const;
226 void ShowOnlyCard(
size_t session_id,
const std::string& base_card_id);
241 std::vector<CardInfo>
GetCardsInCategory(
size_t session_id,
const std::string& category)
const;
282 const std::string& category,
283 const std::vector<std::string>& active_categories = {},
284 std::function<void(
const std::string&)> on_category_switch =
nullptr,
285 std::function<void()> on_collapse =
nullptr);
322 void SavePreset(
const std::string& name,
const std::string& description =
"");
325 std::vector<WorkspacePreset>
GetPresets()
const;
331 void ShowAll(
size_t session_id);
332 void HideAll(
size_t session_id);
357 std::string
MakeCardId(
size_t session_id,
const std::string& base_id)
const;
453 const std::vector<std::string>& active_categories = {},
454 std::function<void(
const std::string&)> on_category_switch =
nullptr,
455 std::function<void()> on_collapse =
nullptr) {
461 std::unordered_map<std::string, CardInfo>
cards_;
477 std::unordered_map<std::string, WorkspacePreset>
presets_;
486 std::string
GetPrefixedCardId(
size_t session_id,
const std::string& base_id)
const;
Central registry for all editor cards with session awareness and dependency injection.
void ShowAllCardsInCategory(const std::string &category)
Show all cards in category for active session (convenience)
size_t GetSessionCount() const
size_t GetCardCount() const
bool * GetVisibilityFlag(size_t session_id, const std::string &base_card_id)
Get visibility flag pointer for a card.
size_t GetVisibleCardCount(size_t session_id) const
EditorCardRegistry(EditorCardRegistry &&)=delete
void DrawCardMenuItem(const CardInfo &info)
std::string active_category_
void HideAllCardsInSession(size_t session_id)
Hide all cards in a specific session.
std::unordered_map< std::string, bool > centralized_visibility_
void DrawSidebar(size_t session_id, const std::string &category, const std::vector< std::string > &active_categories={}, std::function< void(const std::string &)> on_category_switch=nullptr, std::function< void()> on_collapse=nullptr)
Draw sidebar for a category with session filtering.
bool IsCardVisible(size_t session_id, const std::string &base_card_id) const
Check if a card is currently visible.
std::vector< std::string > GetCardsInSession(size_t session_id) const
Get all cards registered for a session.
const CardInfo * GetCardInfo(size_t session_id, const std::string &base_card_id) const
Get card metadata.
void UnregisterSession(size_t session_id)
Unregister a session and all its cards.
std::string MakeCardId(size_t session_id, const std::string &base_id) const
Generate session-aware card ID.
void DrawSidebar(const std::string &category, const std::vector< std::string > &active_categories={}, std::function< void(const std::string &)> on_category_switch=nullptr, std::function< void()> on_collapse=nullptr)
Draw sidebar for active session (convenience)
void DrawCardBrowser(bool *p_open)
Draw card browser for active session (convenience)
EditorCardRegistry & operator=(const EditorCardRegistry &)=delete
void SetActiveSession(size_t session_id)
Set the currently active session.
std::unordered_map< std::string, CardInfo > cards_
void LoadPresetsFromFile()
bool HideCard(size_t session_id, const std::string &base_card_id)
Hide a card programmatically.
void ShowAllCardsInCategory(size_t session_id, const std::string &category)
Show all cards in a category for a session.
void UpdateSessionCount()
void ShowAll()
Show all cards for active session (convenience)
void DrawViewMenuSection(size_t session_id, const std::string &category)
Draw view menu section for a category.
bool LoadPreset(const std::string &name)
void ClearAllCards()
Remove all registered cards (use with caution)
EditorCardRegistry & operator=(EditorCardRegistry &&)=delete
void ShowOnlyCard(size_t session_id, const std::string &base_card_id)
Show only one card, hiding all others in its category.
EditorCardRegistry(const EditorCardRegistry &)=delete
void RegisterCard(size_t session_id, const CardInfo &base_info)
Register a card for a specific session.
void ShowAllCardsInSession(size_t session_id)
Show all cards in a specific session.
bool HideCard(const std::string &base_card_id)
Hide card in active session (convenience)
std::unordered_map< size_t, std::vector< std::string > > session_cards_
bool ToggleCard(size_t session_id, const std::string &base_card_id)
Toggle a card's visibility.
void HideAllCardsInCategory(const std::string &category)
Hide all cards in category for active session (convenience)
bool ShouldPrefixCards() const
Check if card IDs should be prefixed.
std::vector< CardInfo > GetCardsInCategory(size_t session_id, const std::string &category) const
Get cards in a specific category for a session.
bool ShowCard(const std::string &base_card_id)
Show card in active session (convenience)
void DrawViewMenuAll(size_t session_id)
Draw all categories as view menu submenus.
void DrawInlineCardToggles(size_t session_id, const std::string &category)
Draw minimal inline card toggles.
void UnregisterCardsWithPrefix(const std::string &prefix)
Unregister all cards with a given prefix.
void UnregisterCard(size_t session_id, const std::string &base_card_id)
Unregister a specific card.
void SavePreset(const std::string &name, const std::string &description="")
~EditorCardRegistry()=default
void RegisterCard(const CardInfo &base_info)
Register card for active session (convenience)
void RegisterSession(size_t session_id)
Register a new session in the registry.
bool IsCardVisible(const std::string &base_card_id) const
Check if card is visible in active session (convenience)
void SetActiveCategory(const std::string &category)
Set active category (for sidebar)
void DeletePreset(const std::string &name)
EditorCardRegistry()=default
bool * GetVisibilityFlag(const std::string &base_card_id)
Get visibility flag for active session (convenience)
std::string GetPrefixedCardId(size_t session_id, const std::string &base_id) const
void DrawCardBrowser(size_t session_id, bool *p_open)
Draw visual card browser/toggler.
static constexpr size_t kMaxRecentCategories
std::vector< std::string > GetAllCategories() const
Get all registered categories across all sessions.
std::vector< WorkspacePreset > GetPresets() const
std::vector< std::string > recent_categories_
void DrawCardInSidebar(const CardInfo &info, bool is_active)
void HideAll()
Hide all cards for active session (convenience)
void DrawCompactCardControl(size_t session_id, const std::string &category)
Draw compact card control for active editor's cards.
std::unordered_map< std::string, WorkspacePreset > presets_
void ResetToDefaults(size_t session_id)
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > session_card_mapping_
void HideAllCardsInCategory(size_t session_id, const std::string &category)
Hide all cards in a category for a session.
bool ShowCard(size_t session_id, const std::string &base_card_id)
Show a card programmatically.
static constexpr float GetSidebarWidth()
std::string GetActiveCategory() const
Get active category (for sidebar)
void UnregisterSessionCards(size_t session_id)
Draggable, dockable card for editor sub-windows.
Main namespace for the application.
Metadata for an editor card.
std::function< void()> on_hide
std::function< void()> on_show
std::string shortcut_hint
EditorCard * card_instance
std::vector< std::string > visible_cards