1#ifndef APP_EDITOR_SYSTEM_PANEL_MANAGER_H_
2#define APP_EDITOR_SYSTEM_PANEL_MANAGER_H_
8#include <unordered_map>
9#include <unordered_set>
15#ifndef YAZE_ENABLE_CARD_SHIM_DEPRECATION
16#define YAZE_ENABLE_CARD_SHIM_DEPRECATION 1
19#if YAZE_ENABLE_CARD_SHIM_DEPRECATION && defined(__has_cpp_attribute)
20#if __has_cpp_attribute(deprecated)
21#define YAZE_CARD_SHIM_DEPRECATED(msg) [[deprecated(msg)]]
23#define YAZE_CARD_SHIM_DEPRECATED(msg)
26#define YAZE_CARD_SHIM_DEPRECATED(msg)
112 void RegisterPanel(
size_t session_id,
const std::string& card_id,
113 const std::string& display_name,
const std::string& icon,
114 const std::string& category,
115 const std::string& shortcut_hint =
"",
int priority = 50,
116 std::function<
void()> on_show =
nullptr,
117 std::function<
void()> on_hide =
nullptr,
118 bool visible_by_default =
false);
120 void UnregisterPanel(
size_t session_id,
const std::string& base_card_id);
172 const std::string& to_category);
178 bool ShowPanel(
size_t session_id,
const std::string& base_card_id);
179 bool HidePanel(
size_t session_id,
const std::string& base_card_id);
180 bool TogglePanel(
size_t session_id,
const std::string& base_card_id);
181 bool IsPanelVisible(
size_t session_id,
const std::string& base_card_id)
const;
192 void ShowOnlyPanel(
size_t session_id,
const std::string& base_card_id);
200 const std::string& category)
const;
203 const std::string& base_card_id)
const;
236 const std::vector<PanelDescriptor>& cards);
333 std::function<
void(
bool,
bool)> cb) {
368 void SavePreset(
const std::string& name,
const std::string& description =
"");
371 std::vector<WorkspacePreset>
GetPresets()
const;
391 void ShowAll(
size_t session_id);
392 void HideAll(
size_t session_id);
408 std::string
MakePanelId(
size_t session_id,
const std::string& base_id)
const;
465 const std::string& root_path =
"");
470 std::function<
void(
const std::string& category,
const std::string& path)>
480 bool IsFavorite(
const std::string& card_id)
const;
489 void SetPanelPinned(
size_t session_id,
const std::string& base_card_id,
bool pinned);
490 bool IsPanelPinned(
size_t session_id,
const std::string& base_card_id)
const;
493 void SetPanelPinned(
const std::string& base_card_id,
bool pinned);
527 std::unordered_map<std::string, PanelDescriptor>
cards_;
551 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>
555 std::unordered_map<std::string, WorkspacePreset>
presets_;
595 std::unordered_map<std::string, std::unique_ptr<FileBrowser>>
604 const std::string& base_id)
const;
613#undef YAZE_CARD_SHIM_DEPRECATED
Base interface for all logical panel components.
File system browser for the sidebar.
Central registry for all editor cards with session awareness and dependency injection.
std::vector< std::string > GetPinnedPanels() const
void TriggerShowCommandPalette()
void ToggleSidebarVisibility()
void SetUndoCallback(std::function< void()> cb)
std::function< void(bool visible, bool expanded)> on_sidebar_state_changed_
size_t GetSessionCount() const
size_t GetVisiblePanelCount(size_t session_id) const
void SetShowCommandPaletteCallback(std::function< void()> cb)
void ShowOnlyPanel(size_t session_id, const std::string &base_card_id)
std::unordered_map< std::string, bool > centralized_visibility_
void SetOpenRomCallback(std::function< void()> cb)
std::function< void()> on_show_settings_
void SetEmulatorVisibilityChangedCallback(std::function< void(bool)> cb)
void AddToRecent(const std::string &card_id)
void SetOnCategorySelectedCallback(std::function< void(const std::string &)> callback)
void SetSidebarStateChangedCallback(std::function< void(bool, bool)> cb)
std::unordered_map< std::string, std::unique_ptr< EditorPanel > > panel_instances_
bool * GetVisibilityFlag(const std::string &base_card_id)
std::function< void(const std::string &) on_category_selected_)
void ShowAllPanelsInCategory(const std::string &category)
void RegisterSession(size_t session_id)
std::function< void()> on_redo_
void SetFileBrowserPath(const std::string &category, const std::string &path)
void TriggerCategorySelected(const std::string &category)
bool ShouldPrefixPanels() const
EditorPanel * GetEditorPanel(const std::string &panel_id)
Get an EditorPanel instance by ID.
void SetShowPanelBrowserCallback(std::function< void()> cb)
std::function< void()> on_show_shortcuts_
void SetShowSearchCallback(std::function< void()> cb)
void OnEditorSwitch(const std::string &from_category, const std::string &to_category)
Handle editor/category switching for panel visibility.
void UnregisterSessionPanels(size_t session_id)
void SetActiveSession(size_t session_id)
bool TogglePanel(size_t session_id, const std::string &base_card_id)
const PanelDescriptor * GetPanelDescriptor(size_t session_id, const std::string &base_card_id) const
void SetCategoryChangedCallback(std::function< void(const std::string &)> cb)
void HideAllPanelsInCategory(const std::string &category)
std::unordered_map< std::string, std::string > panel_resource_types_
void TriggerPanelClicked(const std::string &category)
void TriggerShowShortcuts()
std::unordered_map< size_t, std::vector< std::string > > session_cards_
void ToggleEmulatorVisible()
PanelManager & operator=(PanelManager &&)=delete
void TogglePanelExpanded()
std::vector< std::string > GetPanelsInSession(size_t session_id) const
void HandleSidebarKeyboardNav(size_t session_id, const std::vector< PanelDescriptor > &cards)
Handle keyboard navigation in sidebar (click-to-focus modal)
std::vector< std::string > GetAllCategories() const
static constexpr size_t kMaxRecentPanels
bool * GetVisibilityFlag(size_t session_id, const std::string &base_card_id)
void UnregisterSession(size_t session_id)
void HideAllPanelsInSession(size_t session_id)
bool HasFileBrowser(const std::string &category) const
PanelManager & operator=(const PanelManager &)=delete
bool SidebarHasFocus() const
std::function< void(bool)> on_emulator_visibility_changed_
void UnregisterPanelsWithPrefix(const std::string &prefix)
void SetOnPanelClickedCallback(std::function< void(const std::string &)> callback)
std::function< void(const std::string &, const std::string &) on_file_clicked_)
int GetFocusedPanelIndex() const
std::vector< std::string > recent_cards_
std::vector< PanelDescriptor > GetPanelsInCategory(size_t session_id, const std::string &category) const
void SetShowShortcutsCallback(std::function< void()> cb)
std::function< void()> on_undo_
bool ShowPanel(size_t session_id, const std::string &base_card_id)
std::string MakePanelId(size_t session_id, const std::string &base_id) const
std::unordered_map< std::string, PanelDescriptor > cards_
void UnregisterPanel(const std::string &base_card_id)
std::unordered_map< std::string, bool > pinned_panels_
bool IsPanelExpanded() const
static CategoryTheme GetCategoryTheme(const std::string &category)
void RegisterPanel(size_t session_id, const PanelDescriptor &base_info)
std::string GetActiveCategory() const
bool IsPanelVisible(size_t session_id, const std::string &base_card_id) const
bool LoadPreset(const std::string &name)
void EnableFileBrowser(const std::string &category, const std::string &root_path="")
void SetShowEmulatorCallback(std::function< void()> cb)
PanelManager(const PanelManager &)=delete
std::function< void()> on_show_command_palette_
static constexpr float GetCollapsedSidebarWidth()
std::function< void()> on_show_help_
PanelValidationResult ValidatePanel(const std::string &card_id) const
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > session_card_mapping_
void DeletePreset(const std::string &name)
std::vector< std::string > recent_categories_
bool IsEmulatorVisible() const
PanelManager(PanelManager &&)=delete
void DisableFileBrowser(const std::string &category)
std::function< void(const std::string &) on_card_clicked_)
std::unordered_map< std::string, std::unique_ptr< FileBrowser > > category_file_browsers_
std::function< void()> on_open_rom_
std::string GetPrefixedPanelId(size_t session_id, const std::string &base_id) const
void SetPanelExpanded(bool expanded)
std::function< void()> on_show_emulator_
static constexpr float GetSidebarWidth()
const std::unordered_set< std::string > & GetFavoritePanels() const
void TriggerShowPanelBrowser()
std::unordered_set< std::string > active_editor_categories_
void SetShowSettingsCallback(std::function< void()> cb)
const std::vector< std::string > & GetRecentPanels() const
void UnregisterPanel(size_t session_id, const std::string &base_card_id)
void DrawAllVisiblePanels()
Draw all visible EditorPanel instances (central drawing)
void ResetToDefaults(size_t session_id)
static constexpr size_t kMaxRecentCategories
bool IsSidebarVisible() const
void UnregisterEditorPanel(const std::string &panel_id)
Unregister and destroy an EditorPanel instance.
bool IsPanelVisible(const std::string &base_card_id) const
void ShowAllPanelsInCategory(size_t session_id, const std::string &category)
std::vector< PanelValidationResult > ValidatePanels() const
void MarkPanelUsed(const std::string &panel_id)
Mark a panel as recently used (for LRU)
void SetEmulatorVisible(bool visible)
std::unordered_map< std::string, std::list< std::string > > resource_panels_
std::function< void()> on_show_panel_browser_
size_t GetPanelCount() const
void SetRedoCallback(std::function< void()> cb)
void EnforceResourceLimits(const std::string &resource_type)
Enforce limits on resource panels (LRU eviction)
std::function< void()> on_save_rom_
static std::string GetCategoryIcon(const std::string &category)
void UpdateSessionCount()
static constexpr const char * kDashboardCategory
static constexpr float GetSidePanelWidth()
bool IsPanelPinned(size_t session_id, const std::string &base_card_id) const
void TriggerShowSettings()
const std::unordered_map< std::string, PanelDescriptor > & GetAllPanelDescriptors() const
Get all panel descriptors (for layout designer, panel browser, etc.)
void RegisterPanel(const PanelDescriptor &base_info)
void SetSidebarVisible(bool visible)
void SetSaveRomCallback(std::function< void()> cb)
bool HidePanel(const std::string &base_card_id)
FileBrowser * GetFileBrowser(const std::string &category)
void SetShowHelpCallback(std::function< void()> cb)
void ToggleFavorite(const std::string &card_id)
void SetActiveCategory(const std::string &category)
bool ShowPanel(const std::string &base_card_id)
void RegisterEditorPanel(std::unique_ptr< EditorPanel > panel)
Register an EditorPanel instance for central drawing.
void SavePreset(const std::string &name, const std::string &description="")
bool HidePanel(size_t session_id, const std::string &base_card_id)
void LoadPresetsFromFile()
std::function< void()> on_show_search_
void SetFileClickedCallback(std::function< void(const std::string &category, const std::string &path)> callback)
std::vector< WorkspacePreset > GetPresets() const
std::unordered_set< std::string > favorite_cards_
size_t GetActiveSessionId() const
void SetPanelPinned(size_t session_id, const std::string &base_card_id, bool pinned)
bool IsFavorite(const std::string &card_id) const
void HideAllPanelsInCategory(size_t session_id, const std::string &category)
void TriggerShowEmulator()
std::unordered_map< std::string, WorkspacePreset > presets_
std::string active_category_
std::function< void(const std::string &) on_category_changed_)
void ShowAllPanelsInSession(size_t session_id)
Draggable, dockable panel for editor sub-windows.
Metadata for an editor panel (formerly PanelInfo)
std::string disabled_tooltip
std::function< void()> on_show
std::string GetWindowTitle() const
Get the effective window title for DockBuilder.
std::string shortcut_hint
ShortcutScope shortcut_scope
std::function< bool()> enabled_condition
std::function< void()> on_hide
Get the expressive theme color for a category.
std::string expected_title
std::vector< std::string > visible_cards