|
|
|
|
@ -13,6 +13,7 @@
|
|
|
|
|
#include <dearimgui/imgui.h>
|
|
|
|
|
#include <dearimgui/imgui_internal.h> // To use the DockWindowXXX methods
|
|
|
|
|
#include <utils/logger.h>
|
|
|
|
|
#include "../panel_manager.h"
|
|
|
|
|
|
|
|
|
|
namespace lunarium
|
|
|
|
|
{
|
|
|
|
|
@ -20,7 +21,7 @@ namespace editor
|
|
|
|
|
{
|
|
|
|
|
MainPanel* MainPanel::mpInstance = nullptr;
|
|
|
|
|
MainPanel::MainPanel()
|
|
|
|
|
: Panel(PT_MAIN, true), mpEditor(nullptr)
|
|
|
|
|
: Panel(PT_MAIN, true), mpEditor(nullptr), mResetDockSpace(false)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -52,64 +53,104 @@ namespace editor
|
|
|
|
|
return mDockSpaces;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainPanel::ResetDockSpace()
|
|
|
|
|
{
|
|
|
|
|
mResetDockSpace = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MainPanel::DoFrame()
|
|
|
|
|
{
|
|
|
|
|
if (!mIsOpen)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DoMainMenu();
|
|
|
|
|
|
|
|
|
|
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 ) );
|
|
|
|
|
|
|
|
|
|
Core::MainWindow().GetFramebufferSize(&mWidth, &mHeight);
|
|
|
|
|
Core::MainWindow().GetPosition(&mX, &mY);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Core::MainWindow().GetFramebufferSize(&mWidth, &mHeight);
|
|
|
|
|
// Core::MainWindow().GetPosition(&mX, &mY);
|
|
|
|
|
|
|
|
|
|
float double_frame_height = ImGui::GetFrameHeight() * 2;
|
|
|
|
|
|
|
|
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
|
|
|
|
ImGui::SetNextWindowSize(ImVec2(mWidth, mHeight - double_frame_height), ImGuiCond_Always);
|
|
|
|
|
ImGui::SetNextWindowPos(ImVec2(mX, mY + ImGui::GetFrameHeight()), ImGuiCond_Always);
|
|
|
|
|
if (!ImGui::Begin("Lunarium Editor", &mIsOpen, ImGuiWindowFlags_NoCollapse
|
|
|
|
|
| ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
|
|
|
|
|
| ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoBringToFrontOnFocus))
|
|
|
|
|
// ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
|
|
|
|
// ImGui::SetNextWindowSize(ImVec2(mWidth, mHeight - double_frame_height), ImGuiCond_Always);
|
|
|
|
|
// ImGui::SetNextWindowPos(ImVec2(mX, mY + ImGui::GetFrameHeight()), ImGuiCond_Always);
|
|
|
|
|
if (!ImGui::Begin("Lunarium Editor", &mIsOpen, WindowFlags))
|
|
|
|
|
{
|
|
|
|
|
MakeDockSpaces();
|
|
|
|
|
ImGui::End();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ImGui::PopStyleVar( 3 );
|
|
|
|
|
|
|
|
|
|
MakeDockSpaces();
|
|
|
|
|
|
|
|
|
|
ImGui::PopStyleVar();
|
|
|
|
|
// ImGui::PopStyleVar();
|
|
|
|
|
ImGui::End();
|
|
|
|
|
|
|
|
|
|
// STATUS BAR
|
|
|
|
|
const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
|
|
|
|
ImGui::SetNextWindowViewport(viewport->ID);
|
|
|
|
|
ImGui::SetNextWindowSize(ImVec2(mWidth, ImGui::GetFrameHeight() - 15.0f), ImGuiCond_Always);
|
|
|
|
|
ImGui::SetNextWindowPos(ImVec2(mX, mY + (mHeight - ImGui::GetFrameHeight() - 8.0f)), ImGuiCond_Always);
|
|
|
|
|
ImGui::Begin("status bar", &mIsOpen, ImGuiWindowFlags_NoCollapse
|
|
|
|
|
| ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
|
|
|
|
|
| ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoDocking );
|
|
|
|
|
|
|
|
|
|
if (ImGui::BeginTable("status", 3, ImGuiTableFlags_BordersInnerV))
|
|
|
|
|
{
|
|
|
|
|
ImGui::AlignTextToFramePadding();
|
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
|
ImGui::Text("Lunarium");
|
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
|
ImGui::Text("Testing");
|
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
|
ImGui::Text("Status Bar");
|
|
|
|
|
ImGui::EndTable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ImGui::End();
|
|
|
|
|
// // STATUS BAR
|
|
|
|
|
// const ImGuiViewport* viewport = ImGui::GetMainViewport();
|
|
|
|
|
// ImGui::SetNextWindowViewport(viewport->ID);
|
|
|
|
|
// ImGui::SetNextWindowSize(ImVec2(mWidth, ImGui::GetFrameHeight() - 15.0f), ImGuiCond_Always);
|
|
|
|
|
// ImGui::SetNextWindowPos(ImVec2(mX, mY + (mHeight - ImGui::GetFrameHeight() - 8.0f)), ImGuiCond_Always);
|
|
|
|
|
// ImGui::Begin("status bar", &mIsOpen, ImGuiWindowFlags_NoCollapse
|
|
|
|
|
// | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
|
|
|
|
|
// | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoDocking );
|
|
|
|
|
|
|
|
|
|
// if (ImGui::BeginTable("status", 3, ImGuiTableFlags_BordersInnerV))
|
|
|
|
|
// {
|
|
|
|
|
// ImGui::AlignTextToFramePadding();
|
|
|
|
|
// ImGui::TableNextColumn();
|
|
|
|
|
// ImGui::Text("Lunarium");
|
|
|
|
|
// ImGui::TableNextColumn();
|
|
|
|
|
// ImGui::Text("Testing");
|
|
|
|
|
// ImGui::TableNextColumn();
|
|
|
|
|
// ImGui::Text("Status Bar");
|
|
|
|
|
// ImGui::EndTable();
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// ImGui::End();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainPanel::MakeDockSpaces()
|
|
|
|
|
{
|
|
|
|
|
mDockSpaces.Main = ImGui::DockSpace(ImGui::GetID("Lunarium Editor"));
|
|
|
|
|
ImGuiViewport* Viewport = ImGui::GetMainViewport();
|
|
|
|
|
mDockSpaces.Main = ImGui::DockSpace(ImGui::GetID("Lunarium Editor Dockspace"), Viewport->Size);
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//ImGui::DockSpace(mDockSpaces.Main);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -151,7 +192,11 @@ namespace editor
|
|
|
|
|
|
|
|
|
|
if (ImGui::BeginMenu("Windows"))
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (ImGui::MenuItem("Reset Window Docking"))
|
|
|
|
|
{
|
|
|
|
|
ResetDockSpace();
|
|
|
|
|
PanelManager::GetInstance().ResetDocking();
|
|
|
|
|
}
|
|
|
|
|
ImGui::EndMenu();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|