file dialog extracted
This commit is contained in:
parent
826ac4d769
commit
2de319ce5a
8
Makefile
8
Makefile
|
@ -257,11 +257,13 @@ SDL_NET = \
|
||||||
bin/SDLnetselect.o \
|
bin/SDLnetselect.o \
|
||||||
bin/net.o
|
bin/net.o
|
||||||
|
|
||||||
|
FILE_DIALOG = \
|
||||||
|
bin/file_dialog.o
|
||||||
|
|
||||||
TIC_O=\
|
TIC_O=\
|
||||||
bin/studio.o \
|
bin/studio.o \
|
||||||
bin/console.o \
|
bin/console.o \
|
||||||
bin/run.o \
|
bin/run.o \
|
||||||
bin/file_dialog.o \
|
|
||||||
bin/md5.o \
|
bin/md5.o \
|
||||||
bin/gif.o \
|
bin/gif.o \
|
||||||
bin/fs.o \
|
bin/fs.o \
|
||||||
|
@ -320,8 +322,8 @@ emscripten:
|
||||||
wasm:
|
wasm:
|
||||||
$(EMS_CC) $(SOURCES) $(TIC80_SRC) $(OPT) $(INCLUDES) $(EMS_OPT) -s WASM=1 $(EMS_LINKER_FLAGS) -o build/html/tic.js
|
$(EMS_CC) $(SOURCES) $(TIC80_SRC) $(OPT) $(INCLUDES) $(EMS_OPT) -s WASM=1 $(EMS_LINKER_FLAGS) -o build/html/tic.js
|
||||||
|
|
||||||
mingw: $(STUDIO_DLL) $(SDL_NET) bin/main.o bin/res.o
|
mingw: $(STUDIO_DLL) $(SDL_NET) $(FILE_DIALOG) bin/main.o bin/res.o
|
||||||
$(CC) bin/main.o bin/res.o $(STUDIO_A) $(SDL_NET) $(OPT) $(INCLUDES) $(MINGW_LINKER_FLAGS) -o $(MINGW_OUTPUT)
|
$(CC) bin/main.o bin/res.o $(STUDIO_A) $(SDL_NET) $(FILE_DIALOG) $(OPT) $(INCLUDES) $(MINGW_LINKER_FLAGS) -o $(MINGW_OUTPUT)
|
||||||
|
|
||||||
mingw-pro:
|
mingw-pro:
|
||||||
$(eval OPT += $(OPT_PRO))
|
$(eval OPT += $(OPT_PRO))
|
||||||
|
|
|
@ -280,7 +280,6 @@
|
||||||
<ClCompile Include="..\..\..\src\config.c" />
|
<ClCompile Include="..\..\..\src\config.c" />
|
||||||
<ClCompile Include="..\..\..\src\console.c" />
|
<ClCompile Include="..\..\..\src\console.c" />
|
||||||
<ClCompile Include="..\..\..\src\dialog.c" />
|
<ClCompile Include="..\..\..\src\dialog.c" />
|
||||||
<ClCompile Include="..\..\..\src\ext\file_dialog.c" />
|
|
||||||
<ClCompile Include="..\..\..\src\ext\gif.c" />
|
<ClCompile Include="..\..\..\src\ext\gif.c" />
|
||||||
<ClCompile Include="..\..\..\src\ext\md5.c" />
|
<ClCompile Include="..\..\..\src\ext\md5.c" />
|
||||||
<ClCompile Include="..\..\..\src\fs.c" />
|
<ClCompile Include="..\..\..\src\fs.c" />
|
||||||
|
|
|
@ -63,9 +63,6 @@
|
||||||
<ClCompile Include="..\..\..\src\world.c">
|
<ClCompile Include="..\..\..\src\world.c">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\src\ext\file_dialog.c">
|
|
||||||
<Filter>src\ext</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\..\src\ext\md5.c">
|
<ClCompile Include="..\..\..\src\ext\md5.c">
|
||||||
<Filter>src\ext</Filter>
|
<Filter>src\ext</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
<ClCompile Include="..\..\..\3rd-party\SDL2_net-2.0.1\SDLnet.c" />
|
<ClCompile Include="..\..\..\3rd-party\SDL2_net-2.0.1\SDLnet.c" />
|
||||||
<ClCompile Include="..\..\..\3rd-party\SDL2_net-2.0.1\SDLnetselect.c" />
|
<ClCompile Include="..\..\..\3rd-party\SDL2_net-2.0.1\SDLnetselect.c" />
|
||||||
<ClCompile Include="..\..\..\3rd-party\SDL2_net-2.0.1\SDLnetTCP.c" />
|
<ClCompile Include="..\..\..\3rd-party\SDL2_net-2.0.1\SDLnetTCP.c" />
|
||||||
|
<ClCompile Include="..\..\..\src\ext\file_dialog.c" />
|
||||||
<ClCompile Include="..\..\..\src\main.c" />
|
<ClCompile Include="..\..\..\src\main.c" />
|
||||||
<ClCompile Include="..\..\..\src\net.c" />
|
<ClCompile Include="..\..\..\src\net.c" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
<ClCompile Include="..\..\..\src\net.c">
|
<ClCompile Include="..\..\..\src\net.c">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\ext\file_dialog.c">
|
||||||
|
<Filter>src\ext</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="icon.ico">
|
<Image Include="icon.ico">
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
#if defined(__TIC_WINDOWS__)
|
#if defined(__WINDOWS__)
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
|
@ -104,7 +104,7 @@ void file_dialog_save(file_dialog_save_callback callback, const char* name, cons
|
||||||
fwrite(buffer, 1, size, file);
|
fwrite(buffer, 1, size, file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
#if !defined(__TIC_WINDOWS__)
|
#if !defined(__WINDOWS__)
|
||||||
chmod(filename, mode);
|
chmod(filename, mode);
|
||||||
#endif
|
#endif
|
||||||
callback(true, data);
|
callback(true, data);
|
||||||
|
@ -115,40 +115,6 @@ void file_dialog_save(file_dialog_save_callback callback, const char* name, cons
|
||||||
callback(false, data);
|
callback(false, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <shlobj.h>
|
|
||||||
|
|
||||||
const char* folder_dialog(void* data)
|
|
||||||
{
|
|
||||||
|
|
||||||
BROWSEINFOW bi = { 0 };
|
|
||||||
bi.lpszTitle = L"Browse for folder...";
|
|
||||||
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
|
|
||||||
bi.lParam = (LPARAM) NULL;
|
|
||||||
|
|
||||||
LPITEMIDLIST pidl = SHBrowseForFolderW ( &bi );
|
|
||||||
|
|
||||||
if ( pidl != 0 )
|
|
||||||
{
|
|
||||||
wchar_t path[MAX_PATH];
|
|
||||||
SHGetPathFromIDListW (pidl, path);
|
|
||||||
|
|
||||||
LPMALLOC imalloc = NULL;
|
|
||||||
if ( SUCCEEDED( SHGetMalloc ( &imalloc )) )
|
|
||||||
{
|
|
||||||
imalloc->lpVtbl->Free (imalloc, pidl );
|
|
||||||
imalloc->lpVtbl->Release (imalloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
static char result[MAX_PATH];
|
|
||||||
strcpy(result, StringToUTF8(path));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(__EMSCRIPTEN__)
|
#elif defined(__EMSCRIPTEN__)
|
||||||
|
|
||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
|
|
|
@ -34,7 +34,6 @@ typedef void(*file_dialog_save_callback)(bool result, void* data);
|
||||||
|
|
||||||
void file_dialog_load(file_dialog_load_callback callback, void* data);
|
void file_dialog_load(file_dialog_load_callback callback, void* data);
|
||||||
void file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
|
void file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
|
||||||
const char* folder_dialog(void* data);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
8
src/fs.c
8
src/fs.c
|
@ -300,7 +300,7 @@ void fsAddFile(FileSystem* fs, AddCallback callback, void* data)
|
||||||
|
|
||||||
*addFileData = (AddFileData) { fs, callback, data };
|
*addFileData = (AddFileData) { fs, callback, data };
|
||||||
|
|
||||||
file_dialog_load(&onAddFile, addFileData);
|
_file_dialog_load(&onAddFile, addFileData);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -432,7 +432,7 @@ void fsGetFileData(GetCallback callback, const char* name, void* buffer, size_t
|
||||||
GetFileData* command = (GetFileData*)malloc(sizeof(GetFileData));
|
GetFileData* command = (GetFileData*)malloc(sizeof(GetFileData));
|
||||||
*command = (GetFileData) {callback, data, buffer};
|
*command = (GetFileData) {callback, data, buffer};
|
||||||
|
|
||||||
file_dialog_save(onGetFile, name, buffer, size, command, mode);
|
_file_dialog_save(onGetFile, name, buffer, size, command, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -456,7 +456,7 @@ void fsOpenFileData(OpenCallback callback, void* data)
|
||||||
|
|
||||||
*command = (OpenFileData){callback, data};
|
*command = (OpenFileData){callback, data};
|
||||||
|
|
||||||
file_dialog_load(onOpenFileData, command);
|
_file_dialog_load(onOpenFileData, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fsGetFile(FileSystem* fs, GetCallback callback, const char* name, void* data)
|
void fsGetFile(FileSystem* fs, GetCallback callback, const char* name, void* data)
|
||||||
|
@ -470,7 +470,7 @@ void fsGetFile(FileSystem* fs, GetCallback callback, const char* name, void* dat
|
||||||
*command = (GetFileData) {callback, data, buffer};
|
*command = (GetFileData) {callback, data, buffer};
|
||||||
|
|
||||||
s32 mode = fsGetMode(fs, name);
|
s32 mode = fsGetMode(fs, name);
|
||||||
file_dialog_save(onGetFile, name, buffer, size, command, mode);
|
_file_dialog_save(onGetFile, name, buffer, size, command, mode);
|
||||||
}
|
}
|
||||||
else callback(FS_FILE_NOT_DOWNLOADED, data);
|
else callback(FS_FILE_NOT_DOWNLOADED, data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -904,6 +904,9 @@ static System sysHandlers =
|
||||||
.netGetRequest = netGetRequest,
|
.netGetRequest = netGetRequest,
|
||||||
.createNet = createNet,
|
.createNet = createNet,
|
||||||
.closeNet = closeNet,
|
.closeNet = closeNet,
|
||||||
|
|
||||||
|
.file_dialog_load = file_dialog_load,
|
||||||
|
.file_dialog_save = file_dialog_save,
|
||||||
};
|
};
|
||||||
|
|
||||||
s32 main(s32 argc, char **argv)
|
s32 main(s32 argc, char **argv)
|
||||||
|
|
12
src/studio.c
12
src/studio.c
|
@ -3128,4 +3128,14 @@ Net* _createNet()
|
||||||
void _closeNet(Net* net)
|
void _closeNet(Net* net)
|
||||||
{
|
{
|
||||||
return studioImpl.system->closeNet(net);
|
return studioImpl.system->closeNet(net);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _file_dialog_load(file_dialog_load_callback callback, void* data)
|
||||||
|
{
|
||||||
|
studioImpl.system->file_dialog_load(callback, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode)
|
||||||
|
{
|
||||||
|
studioImpl.system->file_dialog_save(callback, name, buffer, size, data, mode);
|
||||||
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
|
#include "ext/file_dialog.h"
|
||||||
|
|
||||||
#define TIC_LOCAL ".local/"
|
#define TIC_LOCAL ".local/"
|
||||||
#define TIC_CACHE TIC_LOCAL "cache/"
|
#define TIC_CACHE TIC_LOCAL "cache/"
|
||||||
|
@ -232,6 +233,9 @@ typedef struct
|
||||||
Net* (*createNet)();
|
Net* (*createNet)();
|
||||||
void (*closeNet)(Net* net);
|
void (*closeNet)(Net* net);
|
||||||
|
|
||||||
|
void (*file_dialog_load)(file_dialog_load_callback callback, void* data);
|
||||||
|
void (*file_dialog_save)(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
|
||||||
|
|
||||||
} System;
|
} System;
|
||||||
|
|
||||||
TIC80_API Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* appFolder, System* system);
|
TIC80_API Studio* studioInit(s32 argc, char **argv, s32 samplerate, const char* appFolder, System* system);
|
||||||
|
@ -254,3 +258,6 @@ void _netDirRequest(Net* net, const char* path, ListCallback callback, void* dat
|
||||||
void* _netGetRequest(Net* net, const char* path, s32* size);
|
void* _netGetRequest(Net* net, const char* path, s32* size);
|
||||||
Net* _createNet();
|
Net* _createNet();
|
||||||
void _closeNet(Net* net);
|
void _closeNet(Net* net);
|
||||||
|
|
||||||
|
void _file_dialog_load(file_dialog_load_callback callback, void* data);
|
||||||
|
void _file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode);
|
||||||
|
|
Loading…
Reference in New Issue