// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #ifndef K4AWINDOWMANAGER_H #define K4AWINDOWMANAGER_H // Associated header // // System headers // #include #include // Library headers // #include "k4aimgui_all.h" // Project headers // #include "ik4adockcontrol.h" #include "ik4avisualizationwindow.h" #include "k4awindowdock.h" namespace k4aviewer { class K4AWindowManager { public: static K4AWindowManager &Instance(); void SetGLWindowSize(ImVec2 glWindowSize); void SetMenuBarHeight(float menuBarHeight); void AddWindow(std::unique_ptr &&window); void AddWindowGroup(std::vector> &&windowGroup); void ClearFullscreenWindow(); void ClearWindows(); void PushLeftDockControl(std::unique_ptr &&dockControl); void PushBottomDockControl(std::unique_ptr &&dockControl); void ShowAll(); K4AWindowManager(const K4AWindowManager &) = delete; K4AWindowManager &operator=(const K4AWindowManager &) = delete; K4AWindowManager(const K4AWindowManager &&) = delete; K4AWindowManager &operator=(const K4AWindowManager &&) = delete; private: K4AWindowManager() = default; struct WindowListEntry { WindowListEntry() : IsWindowGroup(true) {} WindowListEntry(std::unique_ptr &&window) : IsWindowGroup(false), Window(std::move(window)) { } WindowListEntry(std::vector> &&windowGroup) : IsWindowGroup(true) { for (auto &&windowEntry : windowGroup) { WindowGroup.emplace_back(std::move(windowEntry)); } } bool IsWindowGroup; std::unique_ptr Window; std::vector WindowGroup; }; void ShowWindowArea(ImVec2 windowAreaPosition, ImVec2 windowAreaSize, WindowListEntry *windowList); void ShowWindow(ImVec2 windowAreaPosition, ImVec2 windowAreaSize, IK4AVisualizationWindow *window, bool isMaximized); bool ShowMinMaxButton(const char *minimizeLabel, const char *maximizeLabel, bool isMaximized); ImVec2 m_glWindowSize = { 0, 0 }; float m_menuBarHeight = 0; K4AWindowDock m_leftDock = K4AWindowDock(K4AWindowDock::Edge::Left); K4AWindowDock m_bottomDock = K4AWindowDock(K4AWindowDock::Edge::Bottom); IK4AVisualizationWindow *m_maximizedWindow = nullptr; WindowListEntry m_windows; }; } // namespace k4aviewer #endif