/****************************************************************************** * File - panel_manager.h * Author - Joey Pollack * Date - 2022/02/07 (y/m/d) * Mod Date - 2022/02/07 (y/m/d) * Description - Manage the editor panels ******************************************************************************/ #ifndef PANEL_MANAGER_H_ #define PANEL_MANAGER_H_ #include #include #include #include #include struct ImGuiWindowClass; namespace lunarium{ class IGraphics; namespace editor { class Editor; class PanelManager { public: PanelManager(); OpRes Initialize(Editor* editor, std::string name, bool split_bottom = false); void Shutdown(); // Panel interface [[nodiscard]] OpRes AddPanel(gui::Panel* panel, uint32_t& id); void OpenPanel(uint32_t id); void ClosePanel(uint32_t id); bool IsOpen(uint32_t id); gui::Panel* GetPanel(uint32_t id); const ImGuiWindowClass* GetWindowClass() const; // Docking bool IsBottomSplit() const; void SetSplitBottom(bool split_bottom); void ResetDocking(); void OnTick(double delta); void MakeDockSpaces(); void RenderPanels(); private: Editor* mpEditor; std::string mName; bool mSplitBottom; // If true the bottom dock node will also be split into left/right bool mResetDockSpace; std::vector mPanels; std::map mPanelsByName; unsigned int mDockSpaceID; ImGuiWindowClass mWindowClass; std::map mDockZoneIDs; private: void DestoryPanels(); }; }} #endif // PANEL_MANAGER_H_