|
|
|
@ -23,33 +23,16 @@ using namespace lunarium::gui;
|
|
|
|
|
|
|
|
|
|
|
|
namespace lunarium { namespace editor
|
|
|
|
namespace lunarium { namespace editor
|
|
|
|
{
|
|
|
|
{
|
|
|
|
PanelManager* PanelManager::mpInstance = nullptr;
|
|
|
|
|
|
|
|
PanelManager& PanelManager::GetInstance()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!mpInstance)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
mpInstance = new PanelManager();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return *mpInstance;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PanelManager::FreeInstance()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
delete mpInstance;
|
|
|
|
|
|
|
|
mpInstance = nullptr;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PanelManager::PanelManager()
|
|
|
|
PanelManager::PanelManager()
|
|
|
|
: mpEditor(nullptr), mResetDockSpace(false)
|
|
|
|
: mpEditor(nullptr), mResetDockSpace(false), mDockSpaceID(0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
OpRes PanelManager::Initialize(Editor* editor)
|
|
|
|
OpRes PanelManager::Initialize(Editor* editor, std::string name)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mpEditor = editor;
|
|
|
|
mpEditor = editor;
|
|
|
|
|
|
|
|
mName = name;
|
|
|
|
|
|
|
|
|
|
|
|
memset(&mWindowClass, 0, sizeof(ImGuiWindowClass));
|
|
|
|
memset(&mWindowClass, 0, sizeof(ImGuiWindowClass));
|
|
|
|
mWindowClass.ClassId = mpEditor->GetNextWindowID();
|
|
|
|
mWindowClass.ClassId = mpEditor->GetNextWindowID();
|
|
|
|
@ -59,8 +42,6 @@ namespace lunarium { namespace editor
|
|
|
|
mResetDockSpace = true;
|
|
|
|
mResetDockSpace = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CreatePanels();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return OpRes::OK();
|
|
|
|
return OpRes::OK();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -69,6 +50,19 @@ namespace lunarium { namespace editor
|
|
|
|
DestoryPanels();
|
|
|
|
DestoryPanels();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OpRes PanelManager::AddPanel(gui::PanelType type, gui::Panel* panel)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (GetPanel(type))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return OpRes::Fail("Cannot add panel - panel already exists. Panel Name: %s", panel->GetName());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mPanels[type] = panel;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return OpRes::OK();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void PanelManager::OpenPanel(PanelType type)
|
|
|
|
void PanelManager::OpenPanel(PanelType type)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Panel* p = GetPanel(type);
|
|
|
|
Panel* p = GetPanel(type);
|
|
|
|
@ -139,7 +133,8 @@ namespace lunarium { namespace editor
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// mpMainPanel->DoFrame();
|
|
|
|
// mpMainPanel->DoFrame();
|
|
|
|
|
|
|
|
|
|
|
|
ImGuiViewport* Viewport = ImGui::GetMainViewport();
|
|
|
|
//ImGuiViewport* Viewport = ImGui::GetMainViewport();
|
|
|
|
|
|
|
|
ImGuiViewport* Viewport = ImGui::GetWindowViewport();
|
|
|
|
ImGui::SetNextWindowPos( Viewport->WorkPos );
|
|
|
|
ImGui::SetNextWindowPos( Viewport->WorkPos );
|
|
|
|
ImGui::SetNextWindowSize( Viewport->WorkSize );
|
|
|
|
ImGui::SetNextWindowSize( Viewport->WorkSize );
|
|
|
|
ImGui::SetNextWindowViewport( Viewport->ID );
|
|
|
|
ImGui::SetNextWindowViewport( Viewport->ID );
|
|
|
|
@ -151,7 +146,7 @@ namespace lunarium { namespace editor
|
|
|
|
ImGui::PushStyleVar( ImGuiStyleVar_WindowBorderSize, 0.0f );
|
|
|
|
ImGui::PushStyleVar( ImGuiStyleVar_WindowBorderSize, 0.0f );
|
|
|
|
ImGui::PushStyleVar( ImGuiStyleVar_WindowPadding, ImVec2( 0.0f, 0.0f ) );
|
|
|
|
ImGui::PushStyleVar( ImGuiStyleVar_WindowPadding, ImVec2( 0.0f, 0.0f ) );
|
|
|
|
|
|
|
|
|
|
|
|
ImGui::Begin("Lunarium Editor", nullptr, WindowFlags);
|
|
|
|
ImGui::Begin(mName.c_str(), nullptr, WindowFlags);
|
|
|
|
ImGui::PopStyleVar(3);
|
|
|
|
ImGui::PopStyleVar(3);
|
|
|
|
|
|
|
|
|
|
|
|
MakeDockSpaces();
|
|
|
|
MakeDockSpaces();
|
|
|
|
@ -171,36 +166,27 @@ namespace lunarium { namespace editor
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
// HELPER METHODS
|
|
|
|
// HELPER METHODS
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
void PanelManager::CreatePanels()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
mPanels[PanelType::PT_ABOUT] = new AboutPanel;
|
|
|
|
|
|
|
|
mPanels[PanelType::PT_ASSET_BROWSER] = new AssetBrowser("");
|
|
|
|
|
|
|
|
mPanels[PanelType::PT_WORLD_TREE] = new WorldTree();
|
|
|
|
|
|
|
|
mPanels[PanelType::PT_WORLD_VIEW] = new WorldView();
|
|
|
|
|
|
|
|
mPanels[PanelType::PT_PROPERTIES_VIEW] = new PropertiesView();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PanelManager::DestoryPanels()
|
|
|
|
void PanelManager::DestoryPanels()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
delete mPanels[PanelType::PT_ABOUT];
|
|
|
|
for (auto iter = mPanels.begin(); iter != mPanels.end(); iter++)
|
|
|
|
delete mPanels[PanelType::PT_ASSET_BROWSER];
|
|
|
|
{
|
|
|
|
delete mPanels[PanelType::PT_WORLD_TREE];
|
|
|
|
delete iter->second;
|
|
|
|
delete mPanels[PanelType::PT_WORLD_VIEW];
|
|
|
|
}
|
|
|
|
delete mPanels[PanelType::PT_PROPERTIES_VIEW];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mPanels.clear();
|
|
|
|
mPanels.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void PanelManager::MakeDockSpaces()
|
|
|
|
void PanelManager::MakeDockSpaces()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ImGuiViewport* Viewport = ImGui::GetMainViewport();
|
|
|
|
//ImGuiViewport* Viewport = ImGui::GetMainViewport();
|
|
|
|
|
|
|
|
ImGuiViewport* Viewport = ImGui::GetWindowViewport();
|
|
|
|
ImGuiID windowID = mpEditor->GetNextWindowID();
|
|
|
|
ImGuiID windowID = mpEditor->GetNextWindowID();
|
|
|
|
mDockSpaceID = ImGui::DockSpace(ImGui::GetID("Lunarium Editor Dockspace"), ImVec2(0, 0), 0, &mWindowClass);
|
|
|
|
std::string dock_name = mName;
|
|
|
|
|
|
|
|
dock_name += " DockSpace";
|
|
|
|
|
|
|
|
mDockSpaceID = ImGui::DockSpace(ImGui::GetID(dock_name.c_str()), ImVec2(0, 0), 0, &mWindowClass);
|
|
|
|
if (!ImGui::DockBuilderGetNode(mDockSpaceID) || mResetDockSpace)
|
|
|
|
if (!ImGui::DockBuilderGetNode(mDockSpaceID) || mResetDockSpace)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Logger::Log(mpEditor->GetLogCat(), LogLevel::INFO, "Resetting Dockspaces");
|
|
|
|
Logger::Log(mpEditor->GetLogCat(), LogLevel::INFO_VERBOSE, "Resetting Dockspace: %s", dock_name.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mResetDockSpace = false;
|
|
|
|
mResetDockSpace = false;
|
|
|
|
ImGui::DockBuilderRemoveNode(mDockSpaceID);
|
|
|
|
ImGui::DockBuilderRemoveNode(mDockSpaceID);
|
|
|
|
|