You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lunarium_OLD/src/run_modes/editor/panel_manager.cpp

162 lines
3.8 KiB
C++

/******************************************************************************
* File - panel_manager.cpp
* Author - Joey Pollack
* Date - 2022/02/07 (y/m/d)
* Mod Date - 2022/02/07 (y/m/d)
* Description - Manage the editor panels
******************************************************************************/
#include "panel_manager.h"
#include "editor.h"
#include <utils/logger.h>
// Panels
#include "panels/about.h"
#include "panels/assetBrowser.h"
#include "panels/worldTree.h"
#include "panels/worldView.h"
#include "panels/propertiesView.h"
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()
: mpEditor(nullptr), mpMainPanel(nullptr)
{
}
OpRes PanelManager::Initialize(Editor* editor)
{
mpEditor = editor;
mpMainPanel = &MainPanel::GetInstance();
mpMainPanel->SetEditor(mpEditor);
CreatePanels();
return OpRes::OK();
}
void PanelManager::Shutdown()
{
DestoryPanels();
MainPanel::FreeInstance();
}
void PanelManager::OpenPanel(PanelType type)
{
Panel* p = GetPanel(type);
if (!p || p->IsOpen())
{
return;
}
p->SetOpen(true);
}
void PanelManager::ClosePanel(PanelType type)
{
Panel* p = GetPanel(type);
if (!p || !p->IsOpen())
{
return;
}
p->SetOpen(false);
}
bool PanelManager::IsOpen(PanelType type)
{
Panel* p = GetPanel(type);
if (!p)
{
return false;
}
return p->IsOpen();
}
Panel* PanelManager::GetPanel(PanelType type)
{
auto iter = mPanels.find(type);
if (iter != mPanels.end())
{
return iter->second;
}
Logger::Log(mpEditor->GetLogCat(), LogLevel::WARNING, "Requested panel not found: %d", type);
return nullptr;
}
const MainPanel::DockSpaces& PanelManager::GetDockSpaces() const
{
return mpMainPanel->GetDockSpaces();
}
void PanelManager::OnTick(double delta)
{
for (auto iter = mPanels.begin(); iter != mPanels.end(); iter++)
{
if (iter->second->IsOpen())
{
iter->second->Update(delta);
}
}
}
void PanelManager::OnRender(lunarium::IGraphics* g)
{
mpMainPanel->DoFrame();
for (auto iter = mPanels.begin(); iter != mPanels.end(); iter++)
{
if (iter->second->IsOpen())
{
iter->second->DoFrame();
}
}
}
////////////////////////////////////////////////////////////
// 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()
{
delete mPanels[PanelType::PT_ABOUT];
delete mPanels[PanelType::PT_ASSET_BROWSER];
delete mPanels[PanelType::PT_WORLD_TREE];
delete mPanels[PanelType::PT_WORLD_VIEW];
delete mPanels[PanelType::PT_PROPERTIES_VIEW];
mPanels.clear();
}
}}