Panel names, and dock zones are now retrievable from any panel
Panel Manager uses a map to store the dock zone idsGui_Panel_Refactor
parent
ed030afcea
commit
307892cb51
@ -1,248 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* File - mainPanel.cpp
|
|
||||||
* Author - Joey Pollack
|
|
||||||
* Date - 2021/11/01 (y/m/d)
|
|
||||||
* Mod Date - 2021/11/01 (y/m/d)
|
|
||||||
* Description - The main window for the editor.
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include "mainPanel.h"
|
|
||||||
|
|
||||||
#include "../editor.h"
|
|
||||||
#include <core/core.h>
|
|
||||||
#include <dearimgui/imgui.h>
|
|
||||||
#include <dearimgui/imgui_internal.h> // To use the DockWindowXXX methods
|
|
||||||
#include <utils/logger.h>
|
|
||||||
#include "../panel_manager.h"
|
|
||||||
|
|
||||||
namespace lunarium
|
|
||||||
{
|
|
||||||
namespace editor
|
|
||||||
{
|
|
||||||
MainPanel* MainPanel::mpInstance = nullptr;
|
|
||||||
MainPanel::MainPanel()
|
|
||||||
: Panel(PT_MAIN, true), mpEditor(nullptr), mResetDockSpace(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MainPanel& MainPanel::GetInstance()
|
|
||||||
{
|
|
||||||
if (!mpInstance)
|
|
||||||
{
|
|
||||||
mpInstance = new MainPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *mpInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MainPanel::FreeInstance()
|
|
||||||
{
|
|
||||||
delete mpInstance;
|
|
||||||
mpInstance = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainPanel::SetEditor(Editor* e)
|
|
||||||
{
|
|
||||||
mpEditor = e;
|
|
||||||
}
|
|
||||||
|
|
||||||
const MainPanel::DockSpaces& MainPanel::GetDockSpaces() const
|
|
||||||
{
|
|
||||||
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);
|
|
||||||
|
|
||||||
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, WindowFlags))
|
|
||||||
{
|
|
||||||
MakeDockSpaces();
|
|
||||||
ImGui::End();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::PopStyleVar( 3 );
|
|
||||||
|
|
||||||
MakeDockSpaces();
|
|
||||||
|
|
||||||
// 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();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainPanel::MakeDockSpaces()
|
|
||||||
{
|
|
||||||
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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainPanel::DoMainMenu()
|
|
||||||
{
|
|
||||||
ImGui::BeginMainMenuBar();
|
|
||||||
|
|
||||||
// File
|
|
||||||
if (ImGui::BeginMenu("File"))
|
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("New Project"))
|
|
||||||
{
|
|
||||||
mpEditor->NewProject();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Open Project"))
|
|
||||||
{
|
|
||||||
mpEditor->OpenProject();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Save Project"))
|
|
||||||
{
|
|
||||||
mpEditor->SaveProject();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Save Project As"))
|
|
||||||
{
|
|
||||||
mpEditor->SaveAs();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::Separator();
|
|
||||||
|
|
||||||
if (ImGui::MenuItem("Exit"))
|
|
||||||
{
|
|
||||||
mpEditor->Exit();
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Windows"))
|
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("Reset Window Docking"))
|
|
||||||
{
|
|
||||||
ResetDockSpace();
|
|
||||||
PanelManager::GetInstance().ResetDocking();
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tools
|
|
||||||
if (ImGui::BeginMenu("Tools"))
|
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("Map Editor"))
|
|
||||||
{
|
|
||||||
mpEditor->OpenMapEditor();
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: If map editor is open show it's menu
|
|
||||||
if (mpEditor->IsToolOpen(ToolType::TT_MAP_EDITOR))
|
|
||||||
{
|
|
||||||
if (ImGui::BeginMenu("Map Editor"))
|
|
||||||
{
|
|
||||||
if (ImGui::BeginMenu("Windows"))
|
|
||||||
{
|
|
||||||
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Settings"))
|
|
||||||
{
|
|
||||||
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Help"))
|
|
||||||
{
|
|
||||||
if (ImGui::MenuItem("About"))
|
|
||||||
{
|
|
||||||
mpEditor->ShowAboutPanel();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::EndMainMenuBar();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* File - mainPanel.h
|
|
||||||
* Author - Joey Pollack
|
|
||||||
* Date - 2021/11/01 (y/m/d)
|
|
||||||
* Mod Date - 2021/11/01 (y/m/d)
|
|
||||||
* Description - The main window for the editor.
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#ifndef PANEL_MAIN_H_
|
|
||||||
#define PANEL_MAIN_H_
|
|
||||||
|
|
||||||
#include "iPanel.h"
|
|
||||||
|
|
||||||
namespace lunarium
|
|
||||||
{
|
|
||||||
namespace editor
|
|
||||||
{
|
|
||||||
class Editor;
|
|
||||||
class MainPanel : public Panel
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
struct DockSpaces
|
|
||||||
{
|
|
||||||
unsigned int Main;
|
|
||||||
unsigned int Left;
|
|
||||||
unsigned int Right;
|
|
||||||
unsigned int Center;
|
|
||||||
// unsigned int Top;
|
|
||||||
unsigned int Bottom;
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
|
||||||
MainPanel();
|
|
||||||
static MainPanel& GetInstance();
|
|
||||||
static void FreeInstance();
|
|
||||||
|
|
||||||
void SetEditor(Editor* e);
|
|
||||||
const DockSpaces& GetDockSpaces() const;
|
|
||||||
void ResetDockSpace();
|
|
||||||
|
|
||||||
// Returns false if the window is closed
|
|
||||||
bool DoFrame();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static MainPanel* mpInstance;
|
|
||||||
MainPanel(const MainPanel&) = delete;
|
|
||||||
MainPanel& operator=(const MainPanel&) = delete;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Editor* mpEditor;
|
|
||||||
DockSpaces mDockSpaces;
|
|
||||||
bool mResetDockSpace;
|
|
||||||
|
|
||||||
private: // HELPERS
|
|
||||||
void DoMainMenu();
|
|
||||||
void MakeDockSpaces();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // PANEL_MAIN_H_
|
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* File - panel_defs.h
|
||||||
|
* Author - Joey Pollack
|
||||||
|
* Date - 2022/02/08 (y/m/d)
|
||||||
|
* Mod Date - 2022/02/08 (y/m/d)
|
||||||
|
* Description - Common definitions for the panel system
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef PANEL_DEFS_H_
|
||||||
|
#define PANEL_DEFS_H_
|
||||||
|
|
||||||
|
namespace lunarium { namespace editor
|
||||||
|
{
|
||||||
|
enum PanelType
|
||||||
|
{
|
||||||
|
PT_MAIN,
|
||||||
|
PT_ABOUT,
|
||||||
|
PT_WORLD_TREE,
|
||||||
|
PT_WORLD_VIEW,
|
||||||
|
PT_ASSET_BROWSER,
|
||||||
|
PT_PROPERTIES_VIEW,
|
||||||
|
PT_CONSOLE,
|
||||||
|
PT_UNKNOWN,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum PanelDockZone
|
||||||
|
{
|
||||||
|
DDZ_LEFT,
|
||||||
|
DDZ_CENTER,
|
||||||
|
DDZ_RIGHT,
|
||||||
|
DDZ_BOTTOM,
|
||||||
|
DDZ_NONE
|
||||||
|
};
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
#endif // PANEL_DEFS_H_
|
||||||
Loading…
Reference in New Issue