/****************************************************************************** * 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 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 OpRes AddPanel(gui::PanelType type, gui::Panel* panel); void OpenPanel(gui::PanelType type); void ClosePanel(gui::PanelType type); bool IsOpen(gui::PanelType type); gui::Panel* GetPanel(gui::PanelType type); const ImGuiWindowClass* GetWindowClass() const; // Docking bool IsBottomSplit() const; void SetSplitBottom(bool split_bottom); void ResetDocking(); void OnTick(double delta); void OnRender(lunarium::IGraphics* g); private: Editor* mpEditor; std::string mName; bool mSplitBottom; // If ture the bottom dock node will also be split into left/right bool mResetDockSpace; std::map mPanels; unsigned int mDockSpaceID; ImGuiWindowClass mWindowClass; std::map mDockZoneIDs; private: void DestoryPanels(); void MakeDockSpaces(); }; }} #endif // PANEL_MANAGER_H_