1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Extract file selector functionality.

This commit is contained in:
Bartosz Taudul
2022-10-05 22:50:17 +02:00
parent 5940af8995
commit 3ca61ad227
8 changed files with 103 additions and 54 deletions
+54
View File
@@ -0,0 +1,54 @@
#include "TracyFileselector.hpp"
#ifndef TRACY_NO_FILESELECTOR
# include "../nfd/nfd.h"
#endif
namespace tracy::Fileselector
{
void Init()
{
#ifndef TRACY_NO_FILESELECTOR
NFD_Init();
#endif
}
void Shutdown()
{
#ifndef TRACY_NO_FILESELECTOR
NFD_Quit();
#endif
}
std::string OpenFile( const char* ext, const char* desc )
{
std::string ret;
#ifndef TRACY_NO_FILESELECTOR
nfdu8filteritem_t filter = { desc, ext };
nfdu8char_t* fn;
if( NFD_OpenDialogU8( &fn, &filter, 1, nullptr ) == NFD_OKAY )
{
ret.assign( fn );
NFD_FreePathU8( fn );
}
#endif
return ret;
}
std::string SaveFile( const char* ext, const char* desc )
{
std::string ret;
#ifndef TRACY_NO_FILESELECTOR
nfdu8filteritem_t filter = { desc, ext };
nfdu8char_t* fn;
if( NFD_SaveDialogU8( &fn, &filter, 1, nullptr, nullptr ) == NFD_OKAY )
{
ret.assign( fn );
NFD_FreePathU8( fn );
}
#endif
return ret;
}
}
+17
View File
@@ -0,0 +1,17 @@
#ifndef __TRACYFILESELECTOR_HPP__
#define __TRACYFILESELECTOR_HPP__
#include <string>
namespace tracy::Fileselector
{
void Init();
void Shutdown();
std::string OpenFile( const char* ext, const char* desc );
std::string SaveFile( const char* ext, const char* desc );
}
#endif
+6 -12
View File
@@ -7,6 +7,7 @@
#include "imgui.h"
#include "TracyCharUtil.hpp"
#include "TracyColor.hpp"
#include "TracyFileselector.hpp"
#include "TracyFilesystem.hpp"
#include "TracyImGui.hpp"
#include "TracyMicroArchitecture.hpp"
@@ -19,10 +20,6 @@
#include "IconsFontAwesome6.h"
#ifndef TRACY_NO_FILESELECTOR
# include "../nfd/nfd.h"
#endif
namespace tracy
{
@@ -5359,14 +5356,12 @@ void SourceView::Save( const Worker& worker, size_t start, size_t stop )
assert( start < m_asm.size() );
assert( start < stop );
nfdu8filteritem_t filter = { "Assembly file", "asm" };
nfdu8char_t* fn;
auto res = NFD_SaveDialogU8( &fn, &filter, 1, nullptr, nullptr );
if( res == NFD_OKAY )
auto fn = Fileselector::SaveFile( "asm", "Assembly file" );
if( !fn.empty() )
{
FILE* f = nullptr;
const auto sz = strlen( fn );
if( sz < 5 || memcmp( fn + sz - 4, ".asm", 4 ) != 0 )
const auto sz = fn.size();
if( sz < 5 || memcmp( fn.c_str() + sz - 4, ".asm", 4 ) != 0 )
{
char tmp[1024];
sprintf( tmp, "%s.asm", fn );
@@ -5374,7 +5369,7 @@ void SourceView::Save( const Worker& worker, size_t start, size_t stop )
}
else
{
f = fopen( fn, "wb" );
f = fopen( fn.c_str(), "wb" );
}
if( f )
{
@@ -5435,7 +5430,6 @@ void SourceView::Save( const Worker& worker, size_t start, size_t stop )
}
fclose( f );
}
NFD_FreePathU8( fn );
}
}
#endif
+4 -10
View File
@@ -1,11 +1,8 @@
#include <numeric>
#ifndef TRACY_NO_FILESELECTOR
# include "../nfd/nfd.h"
#endif
#include "TracyImGui.hpp"
#include "TracyFileRead.hpp"
#include "TracyFileselector.hpp"
#include "TracyPrint.hpp"
#include "TracyView.hpp"
@@ -152,14 +149,12 @@ void View::DrawCompare()
ImGui::TextWrapped( "Please load a second trace to compare results." );
if( ImGui::Button( ICON_FA_FOLDER_OPEN " Open second trace" ) && !m_compare.loadThread.joinable() )
{
nfdu8filteritem_t filter = { "Tracy Profiler trace file", "tracy" };
nfdu8char_t* fn;
auto res = NFD_OpenDialogU8( &fn, &filter, 1, nullptr );
if( res == NFD_OKAY )
auto fn = Fileselector::OpenFile( "tracy", "Tracy Profiler trace file" );
if( !fn.empty() )
{
try
{
auto f = std::shared_ptr<tracy::FileRead>( tracy::FileRead::Open( fn ) );
auto f = std::shared_ptr<tracy::FileRead>( tracy::FileRead::Open( fn.c_str() ) );
if( f )
{
m_compare.loadThread = std::thread( [this, f] {
@@ -184,7 +179,6 @@ void View::DrawCompare()
{
m_compare.badVer.state = BadVersionState::ReadError;
}
NFD_FreePathU8( fn );
}
}
tracy::BadVersion( m_compare.badVer, m_bigFont );
+8 -16
View File
@@ -1,7 +1,4 @@
#ifndef TRACY_NO_FILESELECTOR
# include "../nfd/nfd.h"
#endif
#include "TracyFileselector.hpp"
#include "TracyImGui.hpp"
#include "TracyPrint.hpp"
#include "TracyTexture.hpp"
@@ -125,28 +122,23 @@ bool View::DrawConnection()
if( ImGui::Button( ICON_FA_FLOPPY_DISK " Save trace" ) && m_saveThreadState.load( std::memory_order_relaxed ) == SaveThreadState::Inert )
{
#ifndef TRACY_NO_FILESELECTOR
nfdu8filteritem_t filter = { "Tracy Profiler trace file", "tracy" };
nfdu8char_t* fn;
auto res = NFD_SaveDialogU8( &fn, &filter, 1, nullptr, nullptr );
if( res == NFD_OKAY )
auto fn = Fileselector::SaveFile( "tracy", "Tracy Profiler trace file" );
if( !fn.empty() )
#else
const char* fn = "trace.tracy";
std::string fn = "trace.tracy";
#endif
{
const auto sz = strlen( fn );
if( sz < 7 || memcmp( fn + sz - 6, ".tracy", 6 ) != 0 )
const auto sz = fn.size();
if( sz < 7 || memcmp( fn.c_str() + sz - 6, ".tracy", 6 ) != 0 )
{
char tmp[1024];
sprintf( tmp, "%s.tracy", fn );
sprintf( tmp, "%s.tracy", fn.c_str() );
m_filenameStaging = tmp;
}
else
{
m_filenameStaging = fn;
m_filenameStaging = std::move( fn );
}
#ifndef TRACY_NO_FILESELECTOR
NFD_FreePathU8( fn );
#endif
}
}