@ -9,6 +9,9 @@
# include "panel_manager.h"
# include "panel_manager.h"
# include "editor.h"
# include "editor.h"
# include <utils/logger.h>
# include <utils/logger.h>
# include <dearimgui/imgui.h>
# include <dearimgui/imgui_internal.h> // To use the DockWindowXXX methods
# include <filesystem>
// Panels
// Panels
# include "panels/about.h"
# include "panels/about.h"
@ -38,7 +41,7 @@ namespace lunarium { namespace editor
PanelManager : : PanelManager ( )
PanelManager : : PanelManager ( )
: mpEditor ( nullptr ) , m pMainPanel( nullptr )
: mpEditor ( nullptr ) , m ResetDockSpace( false )
{
{
}
}
@ -48,9 +51,14 @@ namespace lunarium { namespace editor
mpEditor = editor ;
mpEditor = editor ;
mpMainPanel = & MainPanel : : GetInstance ( ) ;
//mpMainPanel = &MainPanel::GetInstance();
mpMainPanel - > SetEditor ( mpEditor ) ;
// mpMainPanel->SetEditor(mpEditor);
mpMainPanel - > ResetDockSpace ( ) ;
//mpMainPanel->ResetDockSpace();
if ( ! std : : filesystem : : exists ( " imgui.ini " ) )
{
mResetDockSpace = true ;
}
CreatePanels ( ) ;
CreatePanels ( ) ;
@ -60,7 +68,7 @@ namespace lunarium { namespace editor
void PanelManager : : Shutdown ( )
void PanelManager : : Shutdown ( )
{
{
DestoryPanels ( ) ;
DestoryPanels ( ) ;
MainPanel : : FreeInstance ( ) ;
//MainPanel::FreeInstance();
}
}
void PanelManager : : OpenPanel ( PanelType type )
void PanelManager : : OpenPanel ( PanelType type )
@ -108,20 +116,14 @@ namespace lunarium { namespace editor
return nullptr ;
return nullptr ;
}
}
const MainPanel : : DockSpaces & PanelManager : : GetDockSpaces ( ) const
const PanelManager : : DockSpaces & PanelManager : : GetDockSpaces ( ) const
{
{
return m pMainPanel- > Get DockSpaces( ) ;
return m DockSpaces;
}
}
void PanelManager : : ResetDocking ( )
void PanelManager : : ResetDocking ( )
{
{
for ( auto iter = mPanels . begin ( ) ; iter ! = mPanels . end ( ) ; iter + + )
mResetDockSpace = true ;
{
if ( iter - > second - > IsOpen ( ) )
{
iter - > second - > ForceDock ( ) ;
}
}
}
}
void PanelManager : : OnTick ( double delta )
void PanelManager : : OnTick ( double delta )
@ -137,7 +139,26 @@ namespace lunarium { namespace editor
void PanelManager : : OnRender ( lunarium : : IGraphics * g )
void PanelManager : : OnRender ( lunarium : : IGraphics * g )
{
{
mpMainPanel - > DoFrame ( ) ;
// mpMainPanel->DoFrame();
ImGuiViewport * Viewport = ImGui : : GetMainViewport ( ) ;
ImGui : : SetNextWindowPos ( Viewport - > WorkPos ) ;
ImGui : : SetNextWindowSize ( Viewport - > WorkSize ) ;
ImGui : : SetNextWindowViewport ( Viewport - > ID ) ;
ImGuiWindowFlags WindowFlags = 0 ;
WindowFlags | = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDocking ;
WindowFlags | = ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus ;
ImGui : : PushStyleVar ( ImGuiStyleVar_WindowRounding , 0.0f ) ;
ImGui : : PushStyleVar ( ImGuiStyleVar_WindowBorderSize , 0.0f ) ;
ImGui : : PushStyleVar ( ImGuiStyleVar_WindowPadding , ImVec2 ( 0.0f , 0.0f ) ) ;
ImGui : : Begin ( " Lunarium Editor " , nullptr , WindowFlags ) ;
ImGui : : PopStyleVar ( 3 ) ;
MakeDockSpaces ( ) ;
ImGui : : End ( ) ;
for ( auto iter = mPanels . begin ( ) ; iter ! = mPanels . end ( ) ; iter + + )
for ( auto iter = mPanels . begin ( ) ; iter ! = mPanels . end ( ) ; iter + + )
{
{
@ -171,4 +192,30 @@ namespace lunarium { namespace editor
mPanels . clear ( ) ;
mPanels . clear ( ) ;
}
}
void PanelManager : : MakeDockSpaces ( )
{
ImGuiViewport * Viewport = ImGui : : GetMainViewport ( ) ;
mDockSpaces . Main = ImGui : : DockSpace ( ImGui : : GetID ( " Lunarium Editor Dockspace " ) ) ;
if ( ! ImGui : : DockBuilderGetNode ( mDockSpaces . Main ) | | mResetDockSpace )
{
Logger : : Log ( mpEditor - > GetLogCat ( ) , LogLevel : : INFO , " Resetting Dockspaces " ) ;
mResetDockSpace = false ;
ImGui : : DockBuilderRemoveNode ( mDockSpaces . Main ) ;
ImGui : : DockBuilderAddNode ( mDockSpaces . Main , ImGuiDockNodeFlags_DockSpace ) ;
ImGui : : DockBuilderSetNodeSize ( mDockSpaces . Main , Viewport - > Size ) ;
//ImGui::DockBuilderSetNodePos(mDockSpaces.Main, Viewport->WorkPos);
ImGui : : DockBuilderSplitNode ( mDockSpaces . Main , ImGuiDir_Left , 0.25f , & mDockSpaces . Left , & mDockSpaces . Center ) ;
ImGui : : DockBuilderSplitNode ( mDockSpaces . Center , ImGuiDir_Right , 0.25f , & mDockSpaces . Right , & mDockSpaces . Center ) ;
ImGui : : DockBuilderSplitNode ( mDockSpaces . Center , ImGuiDir_Down , 0.25f , & mDockSpaces . Bottom , & mDockSpaces . Center ) ;
ImGui : : DockBuilderFinish ( mDockSpaces . Main ) ;
// Dock Panels
ImGui : : DockBuilderDockWindow ( " World View " , mDockSpaces . Center ) ;
}
}
} }
} }