@ -25,6 +25,8 @@
// Tools
# include "tools/map_editor/map_editor.h"
# include <nfd.hpp>
using namespace lunarium : : gui ;
// ERROR LOG MACRO
@ -37,7 +39,7 @@ namespace editor
uint32_t Editor : : LogCat = - 1 ;
Editor : : Editor ( )
: m pPath( nullptr ) , m DoNewProject( false ) , mDoOpenProject ( false ) ,
: m DoNewProject( false ) , mDoOpenProject ( false ) ,
mDoSaveProject ( false ) , mDoSaveAs ( false ) , mNextWindowID ( 0 ) , mpMapEditor ( nullptr )
{
}
@ -109,11 +111,6 @@ namespace editor
{
mAboutPanel . DoFrame ( ) ;
}
if ( mFileBrowser . IsOpen ( ) )
{
mFileBrowser . DoFrame ( ) ;
}
}
uint32_t Editor : : GetLogCat ( ) const
@ -192,77 +189,6 @@ namespace editor
void Editor : : HandleMenuEvents ( )
{
///////////////////////////
// FILE
if ( mDoNewProject )
{
if ( mFileBrowser . GetResult ( ) = = FileBrowser : : Result : : OK )
{
mpPath = mFileBrowser . GetSelectedItem ( ) ;
Logger : : Info ( LogCat , " Generating new project at %s " , mpPath - > string ( ) . c_str ( ) ) ;
// Generate new project at mpPath
OpRes result = mProject . GenerateProject ( mpPath - > filename ( ) . string ( ) , mpPath - > parent_path ( ) ) ;
if ( Failed ( result ) )
{
Logger : : Error ( LogCat , " Could not create a new project: %s " , result . Description ) ;
}
( ( AssetBrowser * ) mPanelManager . GetPanel ( mPanels . AssetBrowser ) ) - > SetAssetDirectory ( * mpPath / std : : filesystem : : path ( " contents/assets " ) ) ;
mDoNewProject = false ;
}
else if ( mFileBrowser . GetResult ( ) = = FileBrowser : : Result : : CANCEL )
{
Logger : : Info ( LogCat , " New Project operation cancelled " ) ;
mDoNewProject = false ;
}
}
if ( mDoOpenProject )
{
if ( mFileBrowser . GetResult ( ) = = FileBrowser : : Result : : OK )
{
mpPath = mFileBrowser . GetSelectedItem ( ) ;
Logger : : Info ( LogCat , " Opening project: %s " , mpPath - > string ( ) . c_str ( ) ) ;
// Open project at mpPath
if ( Failed ( mProject . LoadProject ( * mpPath ) . LogIfFailed ( Editor : : LogCat ) ) )
{
mDoOpenProject = false ;
return ;
}
( ( AssetBrowser * ) mPanelManager . GetPanel ( mPanels . AssetBrowser ) ) - > SetAssetDirectory ( mpPath - > parent_path ( ) / std : : filesystem : : path ( " contents/assets " ) ) ;
mDoOpenProject = false ;
}
else if ( mFileBrowser . GetResult ( ) = = FileBrowser : : Result : : CANCEL )
{
Logger : : Info ( LogCat , " Open Project operation cancelled " ) ;
mDoOpenProject = false ;
}
}
if ( mDoSaveProject )
{
if ( ! mProject . IsLoaded ( ) )
{
mDoSaveAs = true ;
mDoSaveProject = false ;
}
else
{
mProject . SaveProject ( ) ;
mDoSaveProject = false ;
}
}
if ( mDoSaveAs )
{
mDoSaveAs = false ;
}
///////////////////////////
}
////////////////////////////////////////////////////////////
@ -277,37 +203,87 @@ namespace editor
{
if ( ImGui : : MenuItem ( " New Project " ) )
{
mDoNewProject = true ;
mFileBrowser . SetSelectionMode ( FileBrowser : : SelectionMode : : FILES_ONLY ) ;
mFileBrowser . SetPrompt ( " Pick a location and name for the project " ) ;
if ( ! mFileBrowser . OpenInDirectory ( " " ) )
NFD : : Guard nfdGuard ;
// auto-freeing memory
NFD : : UniquePath outPath ;
// prepare filters for the dialog
nfdfilteritem_t filterItem [ 1 ] = { { " Lunarium Project File " , " lproj " } } ;
// show the dialog
nfdresult_t result = NFD : : SaveDialog ( outPath , filterItem , 1 ) ;
if ( result = = NFD_OKAY )
{
std : : filesystem : : path the_path = outPath . get ( ) ;
Logger : : Info ( LogCat , " Generating new project at %s " , the_path . string ( ) . c_str ( ) ) ;
OpRes result = mProject . GenerateProject ( the_path . filename ( ) . string ( ) , the_path . parent_path ( ) ) ;
if ( Failed ( result ) )
{
Logger : : Error ( LogCat , " Could not create a new project: %s " , result . Description ) ;
}
else
{
( ( AssetBrowser * ) mPanelManager . GetPanel ( mPanels . AssetBrowser ) ) - >
SetAssetDirectory ( the_path . parent_path ( ) / std : : filesystem : : path ( " contents/assets " ) ) ;
}
}
else if ( result = = NFD_CANCEL )
{
Logger : : Info ( LogCat , " User cancelled project create " ) ;
}
else
{
mDoNewProject = false ;
Logger : : Error ( LogCat , " Could not open the File Browser " ) ;
Logger : : Error ( LogCat , " Error getting project file location: %s " , NFD : : GetError ( ) ) ;
}
}
if ( ImGui : : MenuItem ( " Open Project " ) )
{
mDoOpenProject = true ;
mFileBrowser . SetSelectionMode ( FileBrowser : : SelectionMode : : FILES_ONLY ) ;
mFileBrowser . SetPrompt ( " Pick a location and name for the project " ) ;
if ( ! mFileBrowser . OpenInDirectory ( " " ) )
NFD : : Guard nfdGuard ;
// auto-freeing memory
NFD : : UniquePath outPath ;
// prepare filters for the dialog
nfdfilteritem_t filterItem [ 1 ] = { { " Lunarium Project File " , " lproj " } } ;
// show the dialog
nfdresult_t result = NFD : : OpenDialog ( outPath , filterItem , 1 ) ;
if ( result = = NFD_OKAY )
{
std : : filesystem : : path the_path = outPath . get ( ) ;
Logger : : Info ( LogCat , " Opening project: %s " , the_path . string ( ) . c_str ( ) ) ;
// Open project at mpPath
if ( Failed ( mProject . LoadProject ( the_path ) . LogIfFailed ( Editor : : LogCat ) ) )
{
Logger : : Error ( LogCat , " Failed to load project: %s " , the_path . string ( ) . c_str ( ) ) ;
}
else
{
( ( AssetBrowser * ) mPanelManager . GetPanel ( mPanels . AssetBrowser ) ) - >
SetAssetDirectory ( the_path . parent_path ( ) / std : : filesystem : : path ( " contents/assets " ) ) ;
}
}
else if ( result = = NFD_CANCEL )
{
Logger : : Info ( LogCat , " User cancelled project open " ) ;
}
else
{
mDoOpenProject = false ;
Logger : : Error ( LogCat , " Could not open the File Browser " ) ;
Logger : : Error ( LogCat , " Error getting project file location: %s " , NFD : : GetError ( ) ) ;
}
}
if ( ImGui : : MenuItem ( " Save Project " ) )
{
mDoSaveProject = true ;
}
if ( ImGui : : MenuItem ( " Save Project As " ) )
{
mDoSaveAs = true ;
mProject . SaveProject ( ) ;
}
ImGui : : Separator ( ) ;