Adds STIL_WAITING to the file browser results

Gui_Panel_Refactor
Joeyrp 4 years ago
parent 72fb87e667
commit 7e6f2907f2

@ -28,23 +28,8 @@ namespace lunarium
memset(mDirNameBuffer, 0, mBufferSize);
memset(mInputBuffer, 0, mBufferSize);
int x,y,n;
// unsigned char* pData = stbi_load("folder16.png", &x, &y, &n, 0);
// mpFolderIcon = new Image(pData, x, y, ImageFormat::RGBA);
// Core::Graphics().RegisterImage(*mpFolderIcon);
// mpFolderIcon->FreeRawData();
mpFolderIcon = DataManager::mFolderIcon;
// unsigned char* pData = stbi_load("new_dir_icon.png", &x, &y, &n, 0);
// mpNewFolderIcon = new Image(pData, x, y, ImageFormat::RGBA);
// Core::Graphics().RegisterImage(*mpNewFolderIcon);
// mpNewFolderIcon->FreeRawData();
mpNewFolderIcon = DataManager::mNewFolderIcon;
// pData = stbi_load("up_arrow_icon.png", &x, &y, &n, 0);
// mpUpFolderIcon = new Image(pData, x, y, ImageFormat::RGBA);
// Core::Graphics().RegisterImage(*mpUpFolderIcon);
// mpUpFolderIcon->FreeRawData();
mpUpFolderIcon = DataManager::mUpArrowIcon;
}
@ -62,6 +47,7 @@ namespace lunarium
return false;
mCurrentDirectory = path;
mResult = Result::STILL_WAITING;
// Get list of items in the current directory
ReloadItems();
@ -169,6 +155,11 @@ namespace lunarium
return mIsOpen;
}
void FileBrowser::Close()
{
mIsOpen = false;
}
void FileBrowser::ReloadItems()
{
mpSelectedItem = nullptr;

@ -45,6 +45,7 @@ namespace lunarium
bool OpenInDirectory(std::filesystem::path path);
bool DoFrame();
bool IsOpen() const;
void Close();
void SetPrompt(std::string prompt);
void AddExtensionFilter(std::string ext);

@ -24,6 +24,14 @@ namespace lunarium { namespace gui
PT_ASSET_BROWSER,
PT_PROPERTIES_VIEW,
PT_EDITOR_CONSOLE,
// Map Editor
PT_MAP_CANVAS,
PT_TILE_PALLET,
PT_TILE_PROPERTIES,
PT_MAP_PROPERTIES,
PT_MAP_PREVIEW,
PT_UNKNOWN,
};

@ -12,7 +12,6 @@
#include <core/core.h>
#include <core/version.h>
#include <utils/logger.h>
#include <gui/file_browser.h>
#include <internal_data/dataManager.h>
#include <gui/dearimgui/imgui.h>
@ -88,8 +87,12 @@ namespace editor
void Editor::OnRender(lunarium::IGraphics* g)
{
DoMainMenu();
DoStatusBar();
mPanelManager.OnRender(g);
//DoStatusBar();
RenderWindow();
//mPanelManager.OnRender(g);
if (mpMapEditor)
{
@ -101,12 +104,9 @@ namespace editor
mAboutPanel.DoFrame();
}
if (mpFileBrowser)
if (mFileBrowser.IsOpen())
{
if (!mpFileBrowser->DoFrame())
{
mpPath = mpFileBrowser->GetSelectedItem();
}
mFileBrowser.DoFrame();
}
}
@ -142,6 +142,30 @@ namespace editor
// HELPER METHODS
////////////////////////////////////////////////////////////
void Editor::RenderWindow()
{
ImGuiViewport* Viewport = ImGui::GetWindowViewport();
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);
mPanelManager.MakeDockSpaces();
ImGui::End();
mPanelManager.RenderPanels();
}
void Editor::DestroyTools()
{
@ -156,26 +180,21 @@ namespace editor
// FILE
if (mDoNewProject)
{
if (!mpFileBrowser)
if (!mFileBrowser.IsOpen())
{
mpFileBrowser = new FileBrowser;
// mpFileBrowser->WarnOnExistingFileSelection(true);
mpFileBrowser->SetSelectionMode(FileBrowser::SelectionMode::FILES_ONLY);
mpFileBrowser->SetPrompt("Pick a location and name for the project");
if (!mpFileBrowser->OpenInDirectory(""))
mFileBrowser.SetSelectionMode(FileBrowser::SelectionMode::FILES_ONLY);
mFileBrowser.SetPrompt("Pick a location and name for the project");
if (!mFileBrowser.OpenInDirectory(""))
{
delete mpFileBrowser;
mpFileBrowser = nullptr;
mDoNewProject = false;
Logger::Log(mLogCat, LogLevel::ERROR, "Could not open the File Browser");
}
}
else
{
if (!mpFileBrowser->IsOpen())
{
if (mpFileBrowser->GetResult() == FileBrowser::Result::OK)
if (mFileBrowser.GetResult() == FileBrowser::Result::OK)
{
mpPath = mFileBrowser.GetSelectedItem();
Logger::Log(mLogCat, LogLevel::INFO, "Generating new project at %s", mpPath->string().c_str());
// Generate new project at mpPath
@ -185,60 +204,48 @@ namespace editor
Logger::Log(mLogCat, LogLevel::ERROR, "Could not create a new project: %s", result.Description);
}
((AssetBrowser*)mPanelManager.GetPanel(PanelType::PT_ASSET_BROWSER))->SetAssetDirectory(*mpPath / std::filesystem::path("contents/assets"));
mDoNewProject = false;
}
else
else if (mFileBrowser.GetResult() == FileBrowser::Result::CANCEL)
{
Logger::Log(mLogCat, LogLevel::INFO, "New Project operation cancelled");
}
mpPath = nullptr;
delete mpFileBrowser;
mpFileBrowser = nullptr;
mDoNewProject = false;
}
}
}
if (mDoOpenProject)
{
if (!mpFileBrowser)
if (!mFileBrowser.IsOpen())
{
mpFileBrowser = new FileBrowser;
// mpFileBrowser->WarnOnExistingFileSelection(true);
mpFileBrowser->SetSelectionMode(FileBrowser::SelectionMode::FILES_ONLY);
mpFileBrowser->SetPrompt("Locate the project to open");
if (!mpFileBrowser->OpenInDirectory(""))
mFileBrowser.SetSelectionMode(FileBrowser::SelectionMode::FILES_ONLY);
mFileBrowser.SetPrompt("Pick a location and name for the project");
if (!mFileBrowser.OpenInDirectory(""))
{
delete mpFileBrowser;
mpFileBrowser = nullptr;
mDoOpenProject = false;
mDoNewProject = false;
Logger::Log(mLogCat, LogLevel::ERROR, "Could not open the File Browser");
}
}
else
{
if (!mpFileBrowser->IsOpen())
{
if (mpFileBrowser->GetResult() == FileBrowser::Result::OK)
if (mFileBrowser.GetResult() == FileBrowser::Result::OK)
{
mpPath = mFileBrowser.GetSelectedItem();
Logger::Log(mLogCat, LogLevel::INFO, "Generating new project at %s", mpPath->string().c_str());
// Generate new project at mpPath
// Open project at mpPath
OpRes result = mProject.LoadProject(*mpPath);
if (Failed(result))
{
Logger::Log(mLogCat, LogLevel::ERROR, "Could not open project: %s -- reason: %s", mpPath->string().c_str(), result.Description);
}
((AssetBrowser*)mPanelManager.GetPanel(PanelType::PT_ASSET_BROWSER))->SetAssetDirectory(mpPath->parent_path() / std::filesystem::path("contents/assets"));
((AssetBrowser*)mPanelManager.GetPanel(PanelType::PT_ASSET_BROWSER))->SetAssetDirectory(*mpPath / std::filesystem::path("contents/assets"));
mDoOpenProject = false;
}
else
else if (mFileBrowser.GetResult() == FileBrowser::Result::CANCEL)
{
Logger::Log(mLogCat, LogLevel::INFO, "New Project operation cancelled");
}
mpPath = nullptr;
delete mpFileBrowser;
mpFileBrowser = nullptr;
Logger::Log(mLogCat, LogLevel::INFO, "Open Project operation cancelled");
mDoOpenProject = false;
}
}

@ -15,6 +15,7 @@
#include "project/project.h"
#include "panel_manager.h"
#include "panels/about.h"
#include <gui/file_browser.h>
#include <filesystem>
#include <map>
@ -59,7 +60,7 @@ namespace lunarium
unsigned int mNextWindowID;
MapEditor* mpMapEditor;
FileBrowser* mpFileBrowser;
FileBrowser mFileBrowser;
const std::filesystem::path* mpPath;
// Non-Docking panels
@ -74,6 +75,8 @@ namespace lunarium
private: // HELPERS
void RenderWindow();
void DoMainMenu();
void DoStatusBar();
void DestroyTools();

@ -141,30 +141,42 @@ namespace lunarium { namespace editor
}
}
void PanelManager::OnRender(lunarium::IGraphics* g)
// void PanelManager::OnRender(lunarium::IGraphics* g)
// {
// // mpMainPanel->DoFrame();
// //ImGuiViewport* Viewport = ImGui::GetMainViewport();
// ImGuiViewport* Viewport = ImGui::GetWindowViewport();
// 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(mName.c_str(), nullptr, WindowFlags);
// ImGui::PopStyleVar(3);
// MakeDockSpaces();
// ImGui::End();
// for (auto iter = mPanels.begin(); iter != mPanels.end(); iter++)
// {
// if (iter->second->IsOpen())
// {
// ImGui::SetNextWindowClass(&mWindowClass);
// iter->second->DoFrame();
// }
// }
// }
void PanelManager::RenderPanels()
{
// mpMainPanel->DoFrame();
//ImGuiViewport* Viewport = ImGui::GetMainViewport();
ImGuiViewport* Viewport = ImGui::GetWindowViewport();
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(mName.c_str(), nullptr, WindowFlags);
ImGui::PopStyleVar(3);
MakeDockSpaces();
ImGui::End();
for (auto iter = mPanels.begin(); iter != mPanels.end(); iter++)
{
if (iter->second->IsOpen())

@ -43,7 +43,8 @@ namespace editor
void ResetDocking();
void OnTick(double delta);
void OnRender(lunarium::IGraphics* g);
void MakeDockSpaces();
void RenderPanels();
private:
Editor* mpEditor;
@ -58,7 +59,6 @@ namespace editor
private:
void DestoryPanels();
void MakeDockSpaces();
};
}}

@ -29,6 +29,10 @@ namespace lunarium { namespace editor
}
mpEditor = editor;
if (Failed(mPanelManager.Initialize(mpEditor, "Map Editor").LogIfFailed(mpEditor->GetLogCat(), "Map Editor - ")))
{
return OpRes::Fail("Could not initialize the panel manager!");
}
Open();
@ -42,10 +46,7 @@ namespace lunarium { namespace editor
void MapEditor::OnTick(double delta)
{
for (int i = 0; i < mPanels.size(); i++)
{
mPanels[i]->Update(delta);
}
mPanelManager.OnTick(delta);
}
bool MapEditor::OnRender(lunarium::IGraphics* g)
@ -56,18 +57,18 @@ namespace lunarium { namespace editor
return false;
}
ImGui::SetNextWindowSize(ImVec2(800, 500), ImGuiCond_FirstUseEver);
if (!ImGui::Begin("Map Editor", &mIsOpen, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBringToFrontOnFocus))
if (!ImGui::Begin("Map Editor", &mIsOpen, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_MenuBar))
{
mPanelManager.MakeDockSpaces();
Close();
ImGui::End();
return false;
}
DoMenu();
for (int i = 0; i < mPanels.size(); i++)
{
mPanels[i]->DoFrame();
}
mPanelManager.RenderPanels();
ImGui::End();
return true;
@ -81,21 +82,11 @@ namespace lunarium { namespace editor
return;
}
for (int i = 0; i < mPanels.size(); i++)
{
mPanels[i]->SetOpen(true);
}
mIsOpen = true;
}
void MapEditor::Close()
{
for (int i = 0; i < mPanels.size(); i++)
{
mPanels[i]->SetOpen(false);
}
mIsOpen = false;
}
@ -124,4 +115,30 @@ namespace lunarium { namespace editor
{
return mMapLoaded;
}
////////////////////////////////////////////////////////////
// HELPERS
////////////////////////////////////////////////////////////
void MapEditor::DoMenu()
{
ImGui::BeginMenuBar();
if (ImGui::BeginMenu("File"))
{
if (ImGui::MenuItem("Exit"))
{
Close();
}
ImGui::EndMenu();
}
ImGui::EndMenuBar();
}
void MapEditor::HandleMenuEvents()
{
}
}}

@ -12,6 +12,7 @@
#include <vector>
#include <string>
#include <utils/opRes.h>
#include "../../panel_manager.h"
namespace lunarium {
class IGraphics;
@ -48,14 +49,12 @@ namespace editor
bool mMapLoaded;
bool mIsDirty;
Editor* mpEditor;
std::vector<gui::Panel*> mPanels;
enum PanelTypes
{
MPPT_MAP_VIEW,
MPPT_TILE_PALLET,
MPPT_PROPERTIES
};
PanelManager mPanelManager;
private:
void DoMenu();
void HandleMenuEvents();
};
}}

Loading…
Cancel
Save