yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
panel_host.cc
Go to the documentation of this file.
2
4#include "imgui/imgui.h"
5
6namespace yaze {
7namespace editor {
8
10 WindowDescriptor descriptor;
11 descriptor.card_id = definition.id;
12 descriptor.display_name = definition.display_name;
13 descriptor.icon = definition.icon;
14 descriptor.category = definition.category;
15 descriptor.window_title = definition.window_title;
16 descriptor.shortcut_hint = definition.shortcut_hint;
17 descriptor.priority = definition.priority;
18 descriptor.scope = definition.scope;
19 descriptor.window_lifecycle = definition.window_lifecycle;
20 descriptor.context_scope = definition.context_scope;
21 descriptor.presentation = definition.presentation;
22 descriptor.on_show = definition.on_show;
23 descriptor.on_hide = definition.on_hide;
24 descriptor.visibility_flag = definition.visibility_flag;
25 return descriptor;
26}
27
28bool WindowHost::RegisterPanel(size_t session_id,
29 const WindowDefinition& definition) {
30 if (!window_manager_ || definition.id.empty()) {
31 return false;
32 }
33
34 for (const auto& legacy_id : definition.legacy_ids) {
35 RegisterPanelAlias(legacy_id, definition.id);
36 }
37
38 window_manager_->RegisterWindow(session_id, ToDescriptor(definition));
39 if (definition.visible_by_default) {
40 window_manager_->OpenWindow(session_id, definition.id);
41 }
42
43 return true;
44}
45
47 if (!window_manager_) {
48 return false;
49 }
51}
52
54 size_t session_id, const std::vector<WindowDefinition>& definitions) {
55 if (!window_manager_) {
56 return false;
57 }
58
59 bool any_registered = false;
60 for (const auto& definition : definitions) {
61 any_registered = RegisterPanel(session_id, definition) || any_registered;
62 }
63 return any_registered;
64}
65
67 const std::vector<WindowDefinition>& definitions) {
68 if (!window_manager_) {
69 return false;
70 }
72}
73
74void WindowHost::RegisterPanelAlias(const std::string& legacy_id,
75 const std::string& canonical_id) {
76 if (!window_manager_) {
77 return;
78 }
79 window_manager_->RegisterPanelAlias(legacy_id, canonical_id);
80}
81
82bool WindowHost::OpenWindow(size_t session_id, const std::string& window_id) {
83 return window_manager_ && window_manager_->OpenWindow(session_id, window_id);
84}
85
86bool WindowHost::CloseWindow(size_t session_id, const std::string& window_id) {
87 return window_manager_ && window_manager_->CloseWindow(session_id, window_id);
88}
89
90bool WindowHost::ToggleWindow(size_t session_id, const std::string& window_id) {
91 return window_manager_ &&
92 window_manager_->ToggleWindow(session_id, window_id);
93}
94
95bool WindowHost::IsWindowOpen(size_t session_id,
96 const std::string& window_id) const {
97 return window_manager_ &&
98 window_manager_->IsWindowOpen(session_id, window_id);
99}
100
101bool WindowHost::OpenAndFocusWindow(size_t session_id,
102 const std::string& window_id) const {
103 if (!window_manager_) {
104 return false;
105 }
106
107 if (!window_manager_->OpenWindow(session_id, window_id)) {
108 return false;
109 }
110
111 const std::string window_name =
112 window_manager_->GetWorkspaceWindowName(session_id, window_id);
113 if (window_name.empty()) {
114 return false;
115 }
116
117 ImGui::SetWindowFocus(window_name.c_str());
118 return true;
119}
120
121std::string WindowHost::ResolveWindowId(const std::string& window_id) const {
123 : window_id;
124}
125
127 size_t session_id, const std::string& window_id) const {
128 return window_manager_
129 ? window_manager_->GetWorkspaceWindowName(session_id, window_id)
130 : std::string();
131}
132
133} // namespace editor
134} // namespace yaze
bool OpenWindow(size_t session_id, const std::string &window_id)
Definition panel_host.cc:82
static WindowDescriptor ToDescriptor(const WindowDefinition &definition)
Definition panel_host.cc:9
std::string GetWorkspaceWindowName(size_t session_id, const std::string &window_id) const
bool IsWindowOpen(size_t session_id, const std::string &window_id) const
Definition panel_host.cc:95
void RegisterPanelAlias(const std::string &legacy_id, const std::string &canonical_id)
Definition panel_host.cc:74
std::string ResolveWindowId(const std::string &window_id) const
bool OpenAndFocusWindow(size_t session_id, const std::string &window_id) const
bool RegisterPanels(size_t session_id, const std::vector< WindowDefinition > &definitions)
Definition panel_host.cc:53
WorkspaceWindowManager * window_manager_
Definition panel_host.h:98
bool ToggleWindow(size_t session_id, const std::string &window_id)
Definition panel_host.cc:90
bool CloseWindow(size_t session_id, const std::string &window_id)
Definition panel_host.cc:86
bool RegisterPanel(size_t session_id, const WindowDefinition &definition)
Definition panel_host.cc:28
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.
std::string ResolveWindowAlias(const std::string &window_id) const
bool CloseWindow(size_t session_id, const std::string &base_window_id)
void RegisterWindow(size_t session_id, const WindowDescriptor &descriptor)
bool IsWindowOpen(size_t session_id, const std::string &base_window_id) const
bool OpenWindow(size_t session_id, const std::string &base_window_id)
bool ToggleWindow(size_t session_id, const std::string &base_window_id)
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.
Declarative registration contract for editor windows.
Definition panel_host.h:22
WindowContextScope context_scope
Definition panel_host.h:34
std::vector< std::string > legacy_ids
Definition panel_host.h:38
std::function< void()> on_show
Definition panel_host.h:39
WindowPresentationPolicy presentation
Definition panel_host.h:37
std::function< void()> on_hide
Definition panel_host.h:40
WindowLifecycle window_lifecycle
Definition panel_host.h:33
Metadata for a dockable editor window (formerly PanelInfo)