yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
window_delegate.cc
Go to the documentation of this file.
2
3#include <filesystem>
4#include <fstream>
5#include <sstream>
6
7#include "absl/strings/str_format.h"
8#include "imgui/imgui.h"
9
10namespace yaze {
11namespace editor {
12
14 // This is a placeholder - actual implementation would need to track
15 // all registered windows and set their visibility flags
16 printf("[WindowDelegate] ShowAllWindows() - %zu windows registered\n",
17 registered_windows_.size());
18}
19
21 // This is a placeholder - actual implementation would need to track
22 // all registered windows and set their visibility flags
23 printf("[WindowDelegate] HideAllWindows() - %zu windows registered\n",
24 registered_windows_.size());
25}
26
27void WindowDelegate::ShowWindow(const std::string& window_id) {
28 if (IsWindowRegistered(window_id)) {
29 printf("[WindowDelegate] ShowWindow: %s\n", window_id.c_str());
30 // Actual implementation would set window visibility flag
31 }
32}
33
34void WindowDelegate::HideWindow(const std::string& window_id) {
35 if (IsWindowRegistered(window_id)) {
36 printf("[WindowDelegate] HideWindow: %s\n", window_id.c_str());
37 // Actual implementation would set window visibility flag
38 }
39}
40
41void WindowDelegate::ToggleWindow(const std::string& window_id) {
42 if (IsWindowRegistered(window_id)) {
43 printf("[WindowDelegate] ToggleWindow: %s\n", window_id.c_str());
44 // Actual implementation would toggle window visibility flag
45 }
46}
47
48bool WindowDelegate::IsWindowVisible(const std::string& window_id) const {
49 if (!IsWindowRegistered(window_id)) {
50 return false;
51 }
52 // Actual implementation would check window visibility flag
53 return true; // Placeholder
54}
55
56void WindowDelegate::FocusWindow(const std::string& window_id) {
57 if (IsWindowRegistered(window_id)) {
58 printf("[WindowDelegate] FocusWindow: %s\n", window_id.c_str());
59 // Actual implementation would bring window to front and focus it
60 }
61}
62
63void WindowDelegate::MaximizeWindow(const std::string& window_id) {
64 if (IsWindowRegistered(window_id)) {
65 printf("[WindowDelegate] MaximizeWindow: %s\n", window_id.c_str());
66 // Actual implementation would maximize the window
67 }
68}
69
70void WindowDelegate::RestoreWindow(const std::string& window_id) {
71 if (IsWindowRegistered(window_id)) {
72 printf("[WindowDelegate] RestoreWindow: %s\n", window_id.c_str());
73 // Actual implementation would restore the window from maximized state
74 }
75}
76
77void WindowDelegate::CenterWindow(const std::string& window_id) {
78 if (IsWindowRegistered(window_id)) {
79 printf("[WindowDelegate] CenterWindow: %s\n", window_id.c_str());
80 // Actual implementation would center the window on screen
81 }
82}
83
84void WindowDelegate::DockWindow(const std::string& window_id,
85 ImGuiDir dock_direction) {
86 if (IsWindowRegistered(window_id)) {
87 printf("[WindowDelegate] DockWindow: %s to direction %d\n",
88 window_id.c_str(), static_cast<int>(dock_direction));
89 // Actual implementation would dock the window
90 }
91}
92
93void WindowDelegate::UndockWindow(const std::string& window_id) {
94 if (IsWindowRegistered(window_id)) {
95 printf("[WindowDelegate] UndockWindow: %s\n", window_id.c_str());
96 // Actual implementation would undock the window
97 }
98}
99
100void WindowDelegate::SetDockSpace(const std::string& dock_space_id,
101 const ImVec2& size) {
102 printf("[WindowDelegate] SetDockSpace: %s (%.1f x %.1f)\n",
103 dock_space_id.c_str(), size.x, size.y);
104 // Actual implementation would create/configure dock space
105}
106
107absl::Status WindowDelegate::SaveLayout(const std::string& preset_name) {
108 if (preset_name.empty()) {
109 return absl::InvalidArgumentError("Layout preset name cannot be empty");
110 }
111
112 std::string file_path = GetLayoutFilePath(preset_name);
113
114 try {
115 // Create directory if it doesn't exist
116 std::filesystem::path dir = std::filesystem::path(file_path).parent_path();
117 if (!std::filesystem::exists(dir)) {
118 std::filesystem::create_directories(dir);
119 }
120
121 // Save layout data (placeholder implementation)
122 std::ofstream file(file_path);
123 if (!file.is_open()) {
124 return absl::InternalError(
125 absl::StrFormat("Failed to open layout file: %s", file_path));
126 }
127
128 file << "# YAZE Layout Preset: " << preset_name << "\n";
129 file << "# Generated by WindowDelegate\n";
130 file << "# TODO: Implement actual layout serialization\n";
131
132 file.close();
133
134 printf("[WindowDelegate] Saved layout: %s\n", preset_name.c_str());
135 return absl::OkStatus();
136
137 } catch (const std::exception& e) {
138 return absl::InternalError(
139 absl::StrFormat("Failed to save layout: %s", e.what()));
140 }
141}
142
143absl::Status WindowDelegate::LoadLayout(const std::string& preset_name) {
144 if (preset_name.empty()) {
145 return absl::InvalidArgumentError("Layout preset name cannot be empty");
146 }
147
148 std::string file_path = GetLayoutFilePath(preset_name);
149
150 try {
151 if (!std::filesystem::exists(file_path)) {
152 return absl::NotFoundError(
153 absl::StrFormat("Layout file not found: %s", file_path));
154 }
155
156 std::ifstream file(file_path);
157 if (!file.is_open()) {
158 return absl::InternalError(
159 absl::StrFormat("Failed to open layout file: %s", file_path));
160 }
161
162 // Load layout data (placeholder implementation)
163 std::string line;
164 while (std::getline(file, line)) {
165 // TODO: Parse and apply layout data
166 }
167
168 file.close();
169
170 printf("[WindowDelegate] Loaded layout: %s\n", preset_name.c_str());
171 return absl::OkStatus();
172
173 } catch (const std::exception& e) {
174 return absl::InternalError(
175 absl::StrFormat("Failed to load layout: %s", e.what()));
176 }
177}
178
180 printf("[WindowDelegate] ResetLayout()\n");
181 // Load default ImGui layout
182 ImGui::LoadIniSettingsFromMemory(nullptr);
183 return absl::OkStatus();
184}
185
186std::vector<std::string> WindowDelegate::GetAvailableLayouts() const {
187 std::vector<std::string> layouts;
188
189 try {
190 // Look for layout files in config directory
191 std::string config_dir = "config/layouts"; // TODO: Use proper config path
192 if (std::filesystem::exists(config_dir)) {
193 for (const auto& entry :
194 std::filesystem::directory_iterator(config_dir)) {
195 if (entry.is_regular_file() && entry.path().extension() == ".ini") {
196 layouts.push_back(entry.path().stem().string());
197 }
198 }
199 }
200 } catch (const std::exception& e) {
201 printf("[WindowDelegate] Error scanning layouts: %s\n", e.what());
202 }
203
204 return layouts;
205}
206
207std::vector<std::string> WindowDelegate::GetVisibleWindows() const {
208 std::vector<std::string> visible;
209 // TODO: Implement actual visibility checking
210 return visible;
211}
212
213std::vector<std::string> WindowDelegate::GetHiddenWindows() const {
214 std::vector<std::string> hidden;
215 // TODO: Implement actual visibility checking
216 return hidden;
217}
218
219ImVec2 WindowDelegate::GetWindowSize(const std::string& window_id) const {
220 if (!IsWindowRegistered(window_id)) {
221 return ImVec2(0, 0);
222 }
223 // TODO: Implement actual size retrieval
224 return ImVec2(400, 300); // Placeholder
225}
226
227ImVec2 WindowDelegate::GetWindowPosition(const std::string& window_id) const {
228 if (!IsWindowRegistered(window_id)) {
229 return ImVec2(0, 0);
230 }
231 // TODO: Implement actual position retrieval
232 return ImVec2(100, 100); // Placeholder
233}
234
235void WindowDelegate::ShowWindowsInCategory(const std::string& category) {
236 printf("[WindowDelegate] ShowWindowsInCategory: %s\n", category.c_str());
237 // TODO: Implement category-based window showing
238}
239
240void WindowDelegate::HideWindowsInCategory(const std::string& category) {
241 printf("[WindowDelegate] HideWindowsInCategory: %s\n", category.c_str());
242 // TODO: Implement category-based window hiding
243}
244
245void WindowDelegate::ShowOnlyWindow(const std::string& window_id) {
246 printf("[WindowDelegate] ShowOnlyWindow: %s\n", window_id.c_str());
247 // TODO: Implement show-only functionality
248}
249
250void WindowDelegate::RegisterWindow(const std::string& window_id,
251 const std::string& category) {
252 WindowInfo info;
253 info.id = window_id;
254 info.category = category;
255 info.is_registered = true;
256
257 registered_windows_[window_id] = info;
258 printf("[WindowDelegate] Registered window: %s (category: %s)\n",
259 window_id.c_str(), category.c_str());
260}
261
262void WindowDelegate::UnregisterWindow(const std::string& window_id) {
263 auto it = registered_windows_.find(window_id);
264 if (it != registered_windows_.end()) {
265 registered_windows_.erase(it);
266 printf("[WindowDelegate] Unregistered window: %s\n", window_id.c_str());
267 }
268}
269
271 printf("[WindowDelegate] LoadDeveloperLayout()\n");
272 // TODO: Implement developer-specific layout
273}
274
276 printf("[WindowDelegate] LoadDesignerLayout()\n");
277 // TODO: Implement designer-specific layout
278}
279
281 printf("[WindowDelegate] LoadModderLayout()\n");
282 // TODO: Implement modder-specific layout
283}
284
286 printf("[WindowDelegate] LoadMinimalLayout()\n");
287 // TODO: Implement minimal layout
288}
289
290bool WindowDelegate::IsWindowRegistered(const std::string& window_id) const {
291 auto it = registered_windows_.find(window_id);
292 return it != registered_windows_.end() && it->second.is_registered;
293}
294
296 const std::string& preset_name) const {
297 // TODO: Use proper config directory path
298 return absl::StrFormat("config/layouts/%s.ini", preset_name);
299}
300
301void WindowDelegate::ApplyLayoutToWindow(const std::string& window_id,
302 const std::string& layout_data) {
303 if (IsWindowRegistered(window_id)) {
304 printf("[WindowDelegate] ApplyLayoutToWindow: %s\n", window_id.c_str());
305 // TODO: Implement layout application
306 }
307}
308
310 ImGui::SaveIniSettingsToDisk("yaze_workspace.ini");
311 printf("[WindowDelegate] Workspace layout saved to yaze_workspace.ini\n");
312}
313
315 ImGui::LoadIniSettingsFromDisk("yaze_workspace.ini");
316 printf("[WindowDelegate] Workspace layout loaded from yaze_workspace.ini\n");
317}
318
320 // Request layout rebuild - the actual reset is handled by LayoutManager
321 // Do NOT use LoadIniSettingsFromMemory(nullptr) as it causes crashes
322 printf("[WindowDelegate] Workspace layout reset requested\n");
323}
324
325} // namespace editor
326} // namespace yaze
327
std::vector< std::string > GetVisibleWindows() const
void SetDockSpace(const std::string &dock_space_id, const ImVec2 &size=ImVec2(0, 0))
bool IsWindowVisible(const std::string &window_id) const
void UnregisterWindow(const std::string &window_id)
void RegisterWindow(const std::string &window_id, const std::string &category="")
std::unordered_map< std::string, WindowInfo > registered_windows_
void RestoreWindow(const std::string &window_id)
void MaximizeWindow(const std::string &window_id)
std::string GetLayoutFilePath(const std::string &preset_name) const
void ShowWindow(const std::string &window_id)
void HideWindow(const std::string &window_id)
std::vector< std::string > GetAvailableLayouts() const
ImVec2 GetWindowSize(const std::string &window_id) const
void ToggleWindow(const std::string &window_id)
void UndockWindow(const std::string &window_id)
absl::Status SaveLayout(const std::string &preset_name)
void ShowOnlyWindow(const std::string &window_id)
void ShowWindowsInCategory(const std::string &category)
bool IsWindowRegistered(const std::string &window_id) const
void HideWindowsInCategory(const std::string &category)
void CenterWindow(const std::string &window_id)
ImVec2 GetWindowPosition(const std::string &window_id) const
void ApplyLayoutToWindow(const std::string &window_id, const std::string &layout_data)
absl::Status LoadLayout(const std::string &preset_name)
void DockWindow(const std::string &window_id, ImGuiDir dock_direction)
std::vector< std::string > GetHiddenWindows() const
void FocusWindow(const std::string &window_id)