1#ifndef YAZE_APP_EDITOR_SYSTEM_WORKSPACE_WINDOW_MANAGER_H_
2#define YAZE_APP_EDITOR_SYSTEM_WORKSPACE_WINDOW_MANAGER_H_
10#include <unordered_map>
11#include <unordered_set>
19#ifndef YAZE_ENABLE_CARD_SHIM_DEPRECATION
20#define YAZE_ENABLE_CARD_SHIM_DEPRECATION 1
23#if YAZE_ENABLE_CARD_SHIM_DEPRECATION && defined(__has_cpp_attribute)
24#if __has_cpp_attribute(deprecated)
25#define YAZE_CARD_SHIM_DEPRECATED(msg) [[deprecated(msg)]]
27#define YAZE_CARD_SHIM_DEPRECATED(msg)
30#define YAZE_CARD_SHIM_DEPRECATED(msg)
44class ResourceWindowContent;
105 const std::string label =
172 const std::string& canonical_base_id);
174 const std::string& canonical_base_id) {
187 void RegisterPanel(
size_t session_id,
const std::string& card_id,
188 const std::string& display_name,
const std::string& icon,
189 const std::string& category,
190 const std::string& shortcut_hint =
"",
int priority = 50,
191 std::function<
void()> on_show =
nullptr,
192 std::function<
void()> on_hide =
nullptr,
193 bool visible_by_default =
false);
196 const std::string& display_name,
const std::string& icon,
197 const std::string& category,
198 const std::string& shortcut_hint =
"",
int priority = 50,
199 std::function<
void()> on_show =
nullptr,
200 std::function<
void()> on_hide =
nullptr,
201 bool visible_by_default =
false) {
202 RegisterPanel(session_id, window_id, display_name, icon, category,
203 shortcut_hint, priority, std::move(on_show),
204 std::move(on_hide), visible_by_default);
207 void UnregisterPanel(
size_t session_id,
const std::string& base_card_id);
296 const std::string& to_category);
302 bool OpenWindow(
size_t session_id,
const std::string& base_window_id) {
305 bool CloseWindow(
size_t session_id,
const std::string& base_window_id) {
308 bool ToggleWindow(
size_t session_id,
const std::string& base_window_id) {
312 const std::string& base_window_id)
const {
316 const std::string& base_window_id) {
328 void ShowOnlyWindow(
size_t session_id,
const std::string& base_window_id);
359 size_t session_id,
const std::string& category)
const {
367 size_t session_id,
const std::string& base_window_id)
const {
375 const std::unordered_map<std::string, WindowDescriptor>&
404 const std::vector<std::string>& window_ids) {
414 size_t session_id)
const;
422 size_t session_id,
const std::unordered_map<std::string, bool>& state,
423 bool publish_events =
false);
442 const std::string& base_window_id)
const {
457 if (viewport_width <= 0.0f) {
463 if (viewport_width < 900.0f) {
464 const float preferred = viewport_width * 0.50f;
465 const float min_width = std::max(220.0f, viewport_width * 0.40f);
466 const float max_width =
467 std::max(min_width, std::min(380.0f, viewport_width * 0.58f));
468 return std::clamp(preferred, min_width, max_width);
471 if (viewport_width < 1200.0f) {
472 const float preferred = viewport_width * 0.34f;
473 const float min_width = 300.0f;
474 const float max_width = std::min(420.0f, viewport_width * 0.42f);
475 return std::clamp(preferred, min_width, max_width);
480 if (viewport_width < 1400.0f) {
481 const float preferred = viewport_width * 0.25f;
482 const float min_width = 300.0f;
483 const float max_width = 380.0f;
484 return std::clamp(preferred, min_width, max_width);
488 const float max_width = viewport_width * 0.30f;
489 if (max_width > 0.0f && width > max_width) {
519 std::function<
void(
float)> cb) {
523 std::function<
void(
float)> cb) {
527 "Use GetDefaultWindowBrowserCategoryWidth() instead.")
528 static constexpr
float GetDefaultPanelBrowserCategoryWidth() {
554 const std::vector<WindowDescriptor>& cards);
739 void SavePreset(
const std::string& name,
const std::string& description =
"");
742 std::vector<WorkspacePreset>
GetPresets()
const;
762 void ShowAll(
size_t session_id);
763 void HideAll(
size_t session_id);
785 std::string
MakeWindowId(
size_t session_id,
const std::string& base_id)
const;
786 std::string
MakeWindowId(
size_t session_id,
const std::string& base_id,
789 std::
string MakePanelId(
size_t session_id, const std::
string& base_id)
const {
793 std::
string MakePanelId(
size_t session_id, const std::
string& base_id,
855 std::function<
void(
const std::string&)> callback) {
859 std::function<
void(
const std::string&)> callback) {
874 const std::string& root_path =
"");
879 std::function<
void(
const std::string& category,
const std::string& path)>
901 size_t session_id,
const std::string& category)
const {
918 const std::string& base_window_id)
const {
958 const std::string& base_panel_id);
960 const std::string& prefixed_panel_id,
961 const std::string& base_panel_id)
const;
966 return static_cast<size_t>(scope);
971 const std::string& old_key,
972 const std::string& new_key);
975 const std::string& prefixed_id)
const;
981 size_t session_id)
const;
984 const std::unordered_map<std::string, std::string>*
987 const std::string& prefixed_window_id,
988 const std::string& base_window_id,
989 const std::string& category,
991 bool OpenWindowImpl(
size_t session_id,
const std::string& base_card_id);
992 bool CloseWindowImpl(
size_t session_id,
const std::string& base_card_id);
995 const std::string& base_card_id)
const;
999 size_t session_id,
const std::string& category)
const;
1002 const std::vector<std::string>& panel_ids);
1004 size_t session_id,
const std::string& base_card_id)
const;
1006 const std::string& base_card_id)
const;
1010 size_t session_id,
const std::string& category)
const;
1018 const std::string& base_card_id)
const;
1021 const std::string& base_card_id,
1022 const std::string& prefixed_id);
1031 const std::list<std::string>& panel_ids)
const;
1034 const std::string& prefixed_id)
const;
1052 std::unordered_map<std::string, std::unique_ptr<WindowContent>>
instances;
1056 std::unordered_map<std::string, std::string>
aliases;
1071 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>
1073 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>
1075 std::unordered_map<size_t,
1086 std::unordered_map<std::string, WindowDescriptor>&
cards_ =
1088 std::unordered_map<std::string, std::unique_ptr<WindowContent>>&
1110 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>&
1112 std::unordered_map<size_t, std::unordered_map<std::string, std::string>>&
1120 std::unordered_map<std::string, WorkspacePreset>
presets_;
1139 std::unordered_map<std::string, std::unique_ptr<FileBrowser>>
1155 const std::string& base_id)
const;
1159 const std::string& panel_id);
1168#undef YAZE_CARD_SHIM_DEPRECATED
void Publish(const T &event)
Interface for editor classes.
File system browser for the sidebar.
Base class for windows that edit specific ROM resources.
Base interface for all logical window content components.
Central registry for all editor cards with session awareness and dependency injection.
void HideAllPanelsInCategory(size_t session_id, const std::string &category)
void ResetSidePanelWidth(bool notify=true)
void EnableFileBrowser(const std::string &category, const std::string &root_path="")
void TriggerPanelClicked(const std::string &category)
size_t GetSessionCount() const
void RegisterPanel(size_t session_id, const WindowDescriptor &base_info)
bool IsWindowPinnedImpl(size_t session_id, const std::string &base_card_id) const
void TriggerShowWindowBrowser()
void SavePreset(const std::string &name, const std::string &description="")
std::vector< std::string > GetWindowsInSessionImpl(size_t session_id) const
void SetVisibleWindows(size_t session_id, const std::vector< std::string > &window_ids)
Set which panels should be visible for a session.
bool IsWindowOpen(const std::string &base_window_id) const
int GetFocusedWindowIndex() const
void SetActiveSidePanelWidth(float width, float viewport_width=0.0f, bool notify=true)
void HideAllWindowsInCategory(size_t session_id, const std::string &category)
int GetFocusedPanelIndex() const
size_t GetVisiblePanelCount(size_t session_id) const
bool CloseWindowImpl(size_t session_id, const std::string &base_card_id)
std::string GetContextKey(size_t session_id, WindowContextScope scope) const
size_t GetResourceWindowLimit(const std::string &resource_type) const
void SetEventBus(EventBus *event_bus)
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > & session_reverse_card_mapping_
std::string GetWorkspaceWindowName(size_t session_id, const std::string &base_window_id) const
Resolve the exact ImGui window name for a panel by base ID.
void ShowAllPanelsInCategory(size_t session_id, const std::string &category)
static SidePanelWidthBounds GetSidePanelWidthBounds(float viewport_width)
size_t GetActiveSessionId() const
void SetSidebarVisible(bool visible, bool notify=true)
void DeletePreset(const std::string &name)
std::vector< WindowDescriptor > GetWindowsInCategory(size_t session_id, const std::string &category) const
void TriggerShowShortcuts()
std::vector< WorkspacePreset > GetPresets() const
void ResetToDefaults(size_t session_id)
void UnregisterWindowContent(const std::string &window_id)
Unregister and destroy a WindowContent instance.
std::unordered_map< std::string, std::string > * FindSessionWindowMapping(size_t session_id)
std::string SelectResourceWindowForEviction(const std::list< std::string > &panel_ids) const
void ShowAllPanelsInSession(size_t session_id)
void RegisterRegistryWindowsForSession(size_t session_id)
bool * GetVisibilityFlag(size_t session_id, const std::string &base_card_id)
void UntrackResourceWindow(const std::string &panel_id)
std::string ResolveBaseWindowId(const std::string &panel_id) const
void RegisterWindow(const WindowDescriptor &descriptor)
void SetEditorResolver(std::function< Editor *(const std::string &)> resolver)
std::unordered_map< std::string, WindowDescriptor > & cards_
WindowBrowserState browser_state_
std::string GetPrefixedWindowId(size_t session_id, const std::string &base_id) const
std::string ResolveWindowAlias(const std::string &window_id) const
bool SidebarHasFocus() const
void RestoreVisibilityState(size_t session_id, const std::unordered_map< std::string, bool > &state, bool publish_events=false)
Restore panel visibility state from persistence.
bool LoadPreset(const std::string &name)
void HideAllPanelsInSession(size_t session_id)
static float GetSidePanelWidthForViewport(float viewport_width)
std::string MakePanelId(size_t session_id, const std::string &base_id) const
void SetPanelBrowserCategoryWidthChangedCallback(std::function< void(float)> cb)
std::vector< std::string > * FindSessionWindowIds(size_t session_id)
const WindowDescriptor * GetWindowDescriptor(size_t session_id, const std::string &base_window_id) const
void ToggleSidebarExpanded()
void ApplyContextPolicy(size_t session_id, WindowContextScope scope, const std::string &old_key, const std::string &new_key)
const WindowDescriptor * GetWindowDescriptorImpl(size_t session_id, const std::string &base_card_id) const
WorkspaceWindowManager(WorkspaceWindowManager &&)=delete
std::vector< std::string > GetWindowsInSession(size_t session_id) const
bool CloseWindow(const std::string &base_window_id)
void RememberPinnedStateForRemovedWindow(size_t session_id, const std::string &base_card_id, const std::string &prefixed_id)
void ToggleSidebarVisibility()
std::string GetBaseIdForPrefixedId(size_t session_id, const std::string &prefixed_id) const
static CategoryTheme GetCategoryTheme(const std::string &category)
void RegisterWindowAlias(const std::string &legacy_base_id, const std::string &canonical_base_id)
WorkspaceWindowManager & operator=(const WorkspaceWindowManager &)=delete
FileBrowser * GetFileBrowser(const std::string &category)
std::unordered_map< std::string, std::string > & panel_resource_types_
std::vector< WindowDescriptor > GetWindowsInCategoryImpl(size_t session_id, const std::string &category) const
const std::unordered_map< std::string, WindowDescriptor > & GetAllWindowDescriptors() const
Get all panel descriptors (for layout designer, panel browser, etc.)
bool IsSidebarExpanded() const
std::unordered_map< std::string, bool > & centralized_visibility_
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > & session_card_mapping_
std::unordered_map< std::string, bool > & pending_pinned_base_ids_
void SetPanelExpanded(bool expanded, bool notify=true)
void MarkPanelUsed(const std::string &panel_id)
Mark a panel as recently used (for LRU)
bool IsWindowPinned(const std::string &base_window_id) const
void DisableFileBrowser(const std::string &category)
std::function< void(const std::string &, const std::string &) on_file_clicked_)
void TriggerShowAgentChatSidebar()
void TrackPanelForSession(size_t session_id, const std::string &base_id, const std::string &panel_id)
void SetWindowPinned(size_t session_id, const std::string &base_window_id, bool pinned)
bool CloseWindow(size_t session_id, const std::string &base_window_id)
std::unordered_map< std::string, std::list< std::string > > & resource_panels_
void TriggerShowPanelBrowser()
WindowSessionState session_state_
std::vector< std::string > GetAllWindowCategories() const
void TrackResourceWindow(const std::string &panel_id, ResourceWindowContent *resource_panel)
std::vector< std::string > GetAllWindowCategories(size_t session_id) const
std::vector< std::string > GetAllCategories() const
void SetActiveCategory(const std::string &category, bool notify=true)
float GetWindowBrowserCategoryWidth() const
void SetSidebarStateChangedCallback(std::function< void(bool, bool)> cb)
size_t GetPanelCount() const
std::string GetWorkspaceWindowName(const WindowDescriptor &descriptor) const
void TriggerShowCommandPalette()
std::vector< std::string > GetPinnedWindowsImpl() const
void RegisterRegistryWindowContent(std::unique_ptr< WindowContent > window)
Register a ContentRegistry-managed WindowContent instance.
static std::string GetCategoryIcon(const std::string &category)
void UnregisterPanel(size_t session_id, const std::string &base_card_id)
WorkspaceWindowManager()=default
void TriggerWindowClicked(const std::string &category)
void ShowOnlyWindow(size_t session_id, const std::string &base_window_id)
std::string GetActiveCategory() const
bool IsFavorite(const std::string &card_id) const
void RegisterWindowContent(std::unique_ptr< WindowContent > window)
Register a WindowContent instance for central drawing.
std::function< Editor *(const std::string &) editor_resolver_)
static constexpr float GetCollapsedSidebarWidth()
static constexpr const char * kDashboardCategory
std::unordered_map< std::string, WorkspacePreset > presets_
void EnforceResourceLimits(const std::string &resource_type)
Enforce limits on resource panels (LRU eviction)
bool HasFileBrowser(const std::string &category) const
YAZE_CARD_SHIM_DEPRECATED("Use GetDefaultWindowBrowserCategoryWidth() instead.") static const expr float GetDefaultPanelBrowserCategoryWidth()
WindowDescriptor * FindDescriptorByPrefixedId(const std::string &prefixed_id)
std::vector< std::string > GetVisibleWindowIds(size_t session_id) const
Get list of currently visible panel IDs for a session.
void SetPanelBrowserCategoryWidth(float width, bool notify=true)
void RegisterWindow(size_t session_id, const WindowDescriptor &descriptor)
bool IsWindowVisibleImpl(size_t session_id, const std::string &base_card_id) const
void SetStoredSidePanelWidth(float width, bool notify=false)
void DrawAllVisiblePanels()
Draw all visible WindowContent instances (central drawing)
std::unordered_map< std::string, std::unique_ptr< WindowContent > > & panel_instances_
static constexpr float GetSidePanelWidth()
void SetVisibleWindowsImpl(size_t session_id, const std::vector< std::string > &panel_ids)
void RegisterRegistryWindow(std::unique_ptr< WindowContent > window)
std::unordered_set< std::string > & registry_panel_ids_
size_t GetWindowCount() const
bool IsPanelExpanded() const
std::vector< std::string > GetVisibleWindowIdsImpl(size_t session_id) const
void SetWindowPinnedImpl(size_t session_id, const std::string &base_card_id, bool pinned)
void MarkWindowRecentlyUsedImpl(const std::string &card_id)
bool ToggleWindowImpl(size_t session_id, const std::string &base_card_id)
std::unordered_map< size_t, std::vector< std::string > > & session_cards_
std::vector< std::string > GetPinnedWindows(size_t session_id) const
void HideAllWindowsInCategory(const std::string &category)
uint64_t GetWindowMRUTime(const std::string &window_id) const
size_t GetVisibleWindowCount(size_t session_id) const
bool IsWindowOpen(size_t session_id, const std::string &base_window_id) const
void EnforceResourceWindowLimits(const std::string &resource_type)
void ShowOnlyPanel(size_t session_id, const std::string &base_card_id)
void TriggerShowEmulator()
std::string ResolvePanelAlias(const std::string &panel_id) const
Resolve a panel ID through the alias table.
void TriggerShowAgentProposalsSidebar()
std::unordered_map< std::string, std::string > * FindSessionReverseWindowMapping(size_t session_id)
void SetActiveSession(size_t session_id)
bool OpenWindow(const std::string &base_window_id)
std::string GetWindowNameImpl(size_t session_id, const std::string &base_card_id) const
void SetCategoryChangedCallback(std::function< void(const std::string &)> cb)
void SetFileBrowserPath(const std::string &category, const std::string &path)
std::unordered_map< std::string, uint64_t > & last_used_at_
void SetWindowBrowserCategoryWidthChangedCallback(std::function< void(float)> cb)
float GetActiveSidePanelWidth(float viewport_width) const
std::string MakeWindowId(size_t session_id, const std::string &base_id) const
static constexpr float GetSidebarWidth()
std::vector< WindowDescriptor > GetWindowsSortedByMRUImpl(size_t session_id, const std::string &category) const
bool * GetWindowVisibilityFlag(const std::string &base_window_id)
void SetOnWindowCategorySelectedCallback(std::function< void(const std::string &)> callback)
void TriggerCategorySelected(const std::string &category)
std::unordered_map< std::string, bool > SerializeVisibilityState(size_t session_id) const
Serialize panel visibility state for persistence.
void SetOnWindowClickedCallback(std::function< void(const std::string &)> callback)
~WorkspaceWindowManager()=default
ResourceWindowState resource_state_
void HandleSidebarKeyboardNav(size_t session_id, const std::vector< WindowDescriptor > &cards)
Handle keyboard navigation in sidebar (click-to-focus modal)
bool ShouldPrefixPanels() const
void OnEditorSwitch(const std::string &from_category, const std::string &to_category)
Handle editor/category switching for panel visibility.
bool OpenWindow(size_t session_id, const std::string &base_window_id)
void UnregisterSession(size_t session_id)
void HideAllWindowsInSession(size_t session_id)
uint64_t GetWindowMRUTimeImpl(const std::string &card_id) const
void ToggleFavorite(const std::string &card_id)
void DrawVisibleWindows()
std::vector< WindowValidationResult > ValidateWindows() const
void UpdateSessionCount()
static constexpr float GetDefaultWindowBrowserCategoryWidth()
float GetPanelBrowserCategoryWidth() const
std::vector< std::string > GetPinnedWindows() const
std::vector< WindowDescriptor > GetWindowsSortedByMRU(size_t session_id, const std::string &category) const
void RegisterWindow(size_t session_id, const std::string &window_id, const std::string &display_name, const std::string &icon, const std::string &category, const std::string &shortcut_hint="", int priority=50, std::function< void()> on_show=nullptr, std::function< void()> on_hide=nullptr, bool visible_by_default=false)
void ShowAllWindowsInCategory(const std::string &category)
std::unordered_map< std::string, std::string > & panel_id_aliases_
void TriggerShowSettings()
std::unordered_map< std::string, bool > & pinned_panels_
bool IsWindowPinned(size_t session_id, const std::string &base_window_id) const
void SetSidePanelWidthChangedCallback(std::function< void(float)> cb)
void RegisterSession(size_t session_id)
void ShowAllWindowsInSession(size_t session_id)
WorkspaceWindowManager(const WorkspaceWindowManager &)=delete
void TriggerWindowCategorySelected(const std::string &category)
WindowContent * GetWindowContent(const std::string &window_id)
Get a WindowContent instance by ID.
bool ToggleWindow(size_t session_id, const std::string &base_window_id)
void SetWindowBrowserCategoryWidth(float width, bool notify=true)
void RegisterRegistryWindowContentsForSession(size_t session_id)
Register descriptors for all registry window contents in a session.
void SetFileClickedCallback(std::function< void(const std::string &category, const std::string &path)> callback)
void LoadPresetsFromFile()
size_t GetRegistryWindowCount() const
size_t GetRegistryWindowContentCount() const
Returns the number of window contents registered via ContentRegistry.
void UnregisterPanel(const std::string &base_card_id)
std::unordered_map< std::string, bool > SerializePinnedState() const
Serialize pinned panel state for persistence.
bool IsSidebarVisible() const
void SetSidebarExpanded(bool expanded, bool notify=true)
WorkspaceWindowManager & operator=(WorkspaceWindowManager &&)=delete
std::unordered_map< size_t, std::unordered_map< WindowContextScope, std::string, WindowContextScopeHash > > & session_context_keys_
void UnregisterWindow(const std::string &base_window_id)
WindowContent * FindPanelInstance(const std::string &prefixed_panel_id, const std::string &base_panel_id)
WindowRegistryState registry_state_
void RegisterPanel(const WindowDescriptor &base_info)
void UnregisterSessionPanels(size_t session_id)
void UnregisterPanelsWithPrefix(const std::string &prefix)
bool * GetWindowVisibilityFlag(size_t session_id, const std::string &base_window_id)
void TriggerResetLayout()
void SetContextKey(size_t session_id, WindowContextScope scope, std::string key)
Set a string key for a given context scope (room/selection/etc)
float GetStoredSidePanelWidth() const
void ToggleWindowImplExpanded()
WindowValidationResult ValidateWindow(const std::string &card_id) const
void PublishWindowVisibilityChanged(size_t session_id, const std::string &prefixed_window_id, const std::string &base_window_id, const std::string &category, bool visible) const
void RegisterPanelDescriptorForSession(size_t session_id, const WindowContent &panel)
bool OpenWindowImpl(size_t session_id, const std::string &base_card_id)
void ShowAllWindowsInCategory(size_t session_id, const std::string &category)
void UnregisterWindow(size_t session_id, const std::string &base_window_id)
void RestorePinnedState(const std::unordered_map< std::string, bool > &state)
Restore pinned panel state from persistence.
void RegisterPanelAlias(const std::string &legacy_base_id, const std::string &canonical_base_id)
Register a legacy panel ID alias that resolves to a canonical ID.
void MarkWindowRecentlyUsed(const std::string &window_id)
void SetWindowPinned(const std::string &base_window_id, bool pinned)
std::unordered_set< std::string > & global_panel_ids_
Draggable, dockable panel for editor sub-windows.
WindowContextScope
Optional context binding for a window's behavior within an editor.
WindowLifecycle
Defines lifecycle behavior for editor windows.
@ EditorBound
Hidden when switching editors (default)
WindowScope
Defines whether a window is session-scoped or global.
static UIActionRequestEvent Redo(size_t session=0)
static UIActionRequestEvent ShowCommandPalette(size_t session=0)
static UIActionRequestEvent SaveRom(size_t session=0)
static UIActionRequestEvent Create(Action act, size_t session=0)
static UIActionRequestEvent Undo(size_t session=0)
static UIActionRequestEvent ShowSettings(size_t session=0)
static UIActionRequestEvent ShowAgentProposalsSidebar(size_t session=0)
static UIActionRequestEvent ShowAgentChatSidebar(size_t session=0)
static UIActionRequestEvent OpenRom(size_t session=0)
static UIActionRequestEvent ShowEmulator(size_t session=0)
Metadata for a dockable editor window (formerly PanelInfo)
std::function< void()> on_show
ShortcutScope shortcut_scope
std::string shortcut_hint
std::string workflow_group
std::function< void()> on_hide
WindowContextScope context_scope
std::string disabled_tooltip
std::string workflow_description
std::string workflow_label
std::string GetWindowTitle() const
Get the effective window title for DockBuilder.
std::string GetImGuiWindowName() const
Build the exact ImGui window name used by PanelWindow::Begin.
std::function< bool()> enabled_condition
WindowLifecycle window_lifecycle
Get the expressive theme color for a category.
std::unordered_map< std::string, std::string > window_type_by_id
std::unordered_map< std::string, std::list< std::string > > window_ids_by_type
std::function< void(bool visible, bool expanded)> on_sidebar_state_changed
std::function< void(float width)> on_window_browser_width_changed
std::function< void(const std::string &) on_window_clicked)
std::string active_category
float window_browser_category_width
static constexpr size_t kMaxRecentCategories
std::vector< std::string > recent_categories
std::function< void(float width)> on_sidebar_width_changed
std::function< void(const std::string &) on_category_selected)
std::unordered_map< std::string, std::unique_ptr< FileBrowser > > category_file_browsers
std::function< void(const std::string &) on_category_changed)
size_t operator()(WindowContextScope scope) const noexcept
std::unordered_map< std::string, std::string > aliases
std::unordered_map< std::string, std::unique_ptr< WindowContent > > instances
std::unordered_map< std::string, bool > centralized_visibility
std::unordered_set< std::string > registry_ids
std::unordered_set< std::string > global_ids
std::unordered_map< std::string, WindowDescriptor > descriptors
std::unordered_map< size_t, std::unordered_map< WindowContextScope, std::string, WindowContextScopeHash > > session_context_keys
std::unordered_map< std::string, bool > pinned_windows
std::unordered_map< size_t, std::vector< std::string > > session_windows
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > session_reverse_window_mapping
std::unordered_map< size_t, std::unordered_map< std::string, std::string > > session_window_mapping
std::unordered_map< std::string, bool > pending_pinned_base_ids
std::unordered_map< std::string, uint64_t > last_used_at
std::string expected_title
std::vector< std::string > visible_cards
#define YAZE_CARD_SHIM_DEPRECATED(msg)