102 Patches: Detours to the Rescue
C reference for DttR maintainers and modders.
Loading...
Searching...
No Matches
gui_dialogs.c
Go to the documentation of this file.
1#include "gui_internal.h"
2
3static const SDL_DialogFileFilter ISO_FILE_FILTERS[] = {
4 {"ISO images", "iso"},
5};
6
7static const SDL_DialogFileFilter LOG_FILE_FILTERS[] = {
8 {"Log files", "log"},
9 {"Text files", "txt"},
10};
11
13 return ctx ? ctx->window : NULL;
14}
15
16static const char *optional_path(const char *path) {
17 return path && path[0] ? path : NULL;
18}
19
20static void open_file_dialog(
23 SDL_DialogFileCallback callback,
24 const SDL_DialogFileFilter *filters,
25 int filter_count,
26 const char *path
27) {
29 callback,
30 state,
32 filters,
33 filter_count,
34 path,
35 false
36 );
37}
38
41 char *path,
42 size_t path_size,
43 const char *const *filelist,
44 const char *open_failure_status,
45 const char *selected_status
46) {
47 if (!state) {
48 return;
49 }
50
51 if (!filelist) {
52 set_status(state, open_failure_status);
53 return;
54 }
55
56 if (!filelist[0]) {
57 return;
58 }
59
60 if (!path || path_size == 0) {
61 return;
62 }
63
64 if (!DTTR_Path_CopyString(path, path_size, filelist[0])) {
65 set_status(state, "Selected path is too long.");
66 return;
67 }
68
69 set_status(state, selected_status);
70}
71
72static void SDLCALL
73pcdogs_path_dialog_callback(void *userdata, const char *const *filelist, int) {
76 state,
77 state ? state->config.pcdogs_path : NULL,
78 state ? sizeof(state->config.pcdogs_path) : 0,
79 filelist,
80 "Failed to open path dialog.",
81 "Selected game path."
82 );
83}
84
86 const char *path = state ? optional_path(state->config.pcdogs_path) : NULL;
89 state,
91 path,
92 false
93 );
94}
95
97 const char *path = state ? optional_path(state->config.pcdogs_path) : NULL;
99 ctx,
100 state,
103 (int)SDL_arraysize(ISO_FILE_FILTERS),
104 path
105 );
106}
107
108static void SDLCALL
109log_file_path_dialog_callback(void *userdata, const char *const *filelist, int) {
112 state,
113 state ? state->config.log_file_path : NULL,
114 state ? sizeof(state->config.log_file_path) : 0,
115 filelist,
116 "Failed to open log file dialog.",
117 "Selected log file path."
118 );
119}
120
122 const char *path = state ? optional_path(state->config.log_file_path) : NULL;
124 ctx,
125 state,
128 (int)SDL_arraysize(LOG_FILE_FILTERS),
129 path
130 );
131}
const DTTR_BackendState * state
void void * ctx
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
struct SDL_Window SDL_Window
Definition dttr_mods.h:19
bool DTTR_Path_CopyString(char *out, size_t out_size, const char *value)
Definition path.c:68
void DTTR_SDL_ShowOpenFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location, bool allow_many)
Definition sdl.c:158
void DTTR_SDL_ShowOpenFolderDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const char *default_location, bool allow_many)
Definition sdl.c:143
static void apply_dialog_selection(config_ui_state *state, char *path, size_t path_size, const char *const *filelist, const char *open_failure_status, const char *selected_status)
Definition gui_dialogs.c:39
static const SDL_DialogFileFilter LOG_FILE_FILTERS[]
Definition gui_dialogs.c:7
static const SDL_DialogFileFilter ISO_FILE_FILTERS[]
Definition gui_dialogs.c:3
static void open_file_dialog(const DTTR_ImGuiDialogContext *ctx, config_ui_state *state, SDL_DialogFileCallback callback, const SDL_DialogFileFilter *filters, int filter_count, const char *path)
Definition gui_dialogs.c:20
static SDL_Window * dialog_parent_window(const DTTR_ImGuiDialogContext *ctx)
Definition gui_dialogs.c:12
static void SDLCALL log_file_path_dialog_callback(void *userdata, const char *const *filelist, int)
void open_log_file_dialog(const DTTR_ImGuiDialogContext *ctx, config_ui_state *state)
static const char * optional_path(const char *path)
Definition gui_dialogs.c:16
static void SDLCALL pcdogs_path_dialog_callback(void *userdata, const char *const *filelist, int)
Definition gui_dialogs.c:73
void open_pcdogs_iso_dialog(const DTTR_ImGuiDialogContext *ctx, config_ui_state *state)
Definition gui_dialogs.c:96
void open_pcdogs_dir_dialog(const DTTR_ImGuiDialogContext *ctx, config_ui_state *state)
Definition gui_dialogs.c:85
void set_status(config_ui_state *state, const char *status)
Definition gui_state.c:96