Ported configuration manager to Allegro GUI
This commit is contained in:
parent
aad1179e47
commit
d2245f2d45
17 changed files with 500 additions and 143 deletions
265
src/allegro-gui-config-sel.c
Normal file
265
src/allegro-gui-config-sel.c
Normal file
|
|
@ -0,0 +1,265 @@
|
|||
#include "ibm.h"
|
||||
#include "device.h"
|
||||
#include "allegro-main.h"
|
||||
#include "allegro-gui.h"
|
||||
#include "config.h"
|
||||
#undef printf
|
||||
typedef struct config_t
|
||||
{
|
||||
char name[512];
|
||||
struct config_t *next;
|
||||
} config_t;
|
||||
|
||||
static config_t *config_head;
|
||||
|
||||
static char *get_config(int nr);
|
||||
static int get_config_nr();
|
||||
static void free_configs();
|
||||
static void populate_configs();
|
||||
|
||||
static char *list_proc_joystick(int index, int *list_size)
|
||||
{
|
||||
int c = 0;
|
||||
config_t *config = config_head;
|
||||
|
||||
if (index < 0)
|
||||
{
|
||||
while (config)
|
||||
{
|
||||
c++;
|
||||
config = config->next;
|
||||
}
|
||||
|
||||
*list_size = c;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (; c < index; c++)
|
||||
{
|
||||
if (!config)
|
||||
return NULL;
|
||||
config = config->next;
|
||||
}
|
||||
|
||||
if (!config)
|
||||
return NULL;
|
||||
|
||||
return config->name;
|
||||
// return joystick_list[index].name;
|
||||
}
|
||||
|
||||
static char config_name[256];
|
||||
|
||||
static DIALOG new_config_dialog[] =
|
||||
{
|
||||
{d_shadow_box_proc, 0, 0, 480,80,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||
|
||||
{d_button_proc, 240-148, 56, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "OK", 0, 0}, // 1
|
||||
{d_button_proc, 240+4, 56, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Cancel", 0, 0}, // 2
|
||||
|
||||
{d_edit_proc, 8, 32, 464, 16, 0, 0xffffff, 0, 0, 255, 0, config_name, 0, 0}, // 3
|
||||
|
||||
{d_text_proc, 240-29*4, 16, 29*8, 16, 0, 0xffffff, 0, 0, 255, 0, "Please type new config name :", 0, 0},
|
||||
|
||||
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||
};
|
||||
|
||||
static int new_proc(int msg, DIALOG *d, int c)
|
||||
{
|
||||
int ret = d_button_proc(msg, d, c);
|
||||
|
||||
if (ret == D_CLOSE)
|
||||
{
|
||||
int c;
|
||||
|
||||
config_name[0] = 0;
|
||||
new_config_dialog[3].d2 = 0;
|
||||
|
||||
position_dialog(new_config_dialog, SCREEN_W/2 - new_config_dialog[0].w/2, SCREEN_H/2 - new_config_dialog[0].h/2);
|
||||
|
||||
c = popup_dialog(new_config_dialog, 1);
|
||||
|
||||
position_dialog(new_config_dialog, -(SCREEN_W/2 - new_config_dialog[0].w/2), -(SCREEN_H/2 - new_config_dialog[0].h/2));
|
||||
|
||||
if (c == 1)
|
||||
{
|
||||
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, config_name);
|
||||
c = settings_configure();
|
||||
free_configs();
|
||||
populate_configs();
|
||||
return c;
|
||||
}
|
||||
|
||||
return D_O_K;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int config_proc(int msg, DIALOG *d, int c)
|
||||
{
|
||||
int ret = d_button_proc(msg, d, c);
|
||||
|
||||
if (ret == D_CLOSE)
|
||||
{
|
||||
char *name = get_config(get_config_nr());
|
||||
|
||||
if (name)
|
||||
{
|
||||
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, name);
|
||||
loadconfig(NULL);
|
||||
return settings_configure();
|
||||
}
|
||||
|
||||
return D_O_K;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hdd_proc(int msg, DIALOG *d, int c)
|
||||
{
|
||||
int ret = d_button_proc(msg, d, c);
|
||||
|
||||
if (ret == D_CLOSE)
|
||||
{
|
||||
char *name = get_config(get_config_nr());
|
||||
|
||||
if (name)
|
||||
{
|
||||
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, name);
|
||||
loadconfig(NULL);
|
||||
return disc_hdconf();
|
||||
}
|
||||
|
||||
return D_O_K;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static DIALOG config_sel_dialog[] =
|
||||
{
|
||||
{d_shadow_box_proc, 0, 0, 568,372,0,0xffffff,0,0, 0,0,0,0,0}, // 0
|
||||
|
||||
{d_button_proc, 416, 8, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Load", 0, 0}, // 1
|
||||
{d_button_proc, 416, 348, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Quit", 0, 0}, // 2
|
||||
|
||||
{new_proc, 416, 56, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "New...", 0, 0}, // 3
|
||||
{config_proc, 416, 80, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "Configure...", 0, 0}, // 4
|
||||
{hdd_proc, 416, 104, 144, 16, 0, 0xffffff, 0, D_EXIT, 0, 0, "HDD...", 0, 0}, // 5
|
||||
|
||||
{d_list_proc, 8, 8, 400, 356, 0, 0xffffff, 0, 0, 0, 0, list_proc_joystick, 0, 0}, // 6
|
||||
|
||||
{0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
|
||||
};
|
||||
|
||||
static int get_config_nr()
|
||||
{
|
||||
return config_sel_dialog[6].d1;
|
||||
}
|
||||
|
||||
static void populate_configs()
|
||||
{
|
||||
struct al_ffblk info;
|
||||
char cfg[512];
|
||||
config_t *config = NULL;
|
||||
|
||||
strcpy(cfg, pcempath);
|
||||
strcat(cfg, "/configs/*.cfg");
|
||||
printf("cfg %s\n", cfg);
|
||||
if (al_findfirst(cfg, &info, FA_ALL))
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
config_t *old_config = config;
|
||||
char *ext;
|
||||
|
||||
config = malloc(sizeof(config_t));
|
||||
if (old_config)
|
||||
old_config->next = config;
|
||||
else
|
||||
config_head = config;
|
||||
config->next = 0;
|
||||
strcpy(config->name, info.name);
|
||||
|
||||
ext = get_extension(config->name);
|
||||
if (ext && ext[0])
|
||||
{
|
||||
ext--;
|
||||
*ext = 0;
|
||||
}
|
||||
|
||||
printf("Found %s\n", info.name);
|
||||
} while (al_findnext(&info) == 0);
|
||||
|
||||
al_findclose(&info);
|
||||
}
|
||||
|
||||
static char *get_config(int nr)
|
||||
{
|
||||
config_t *config = config_head;
|
||||
int c;
|
||||
|
||||
for (c = 0; c < nr; c++)
|
||||
{
|
||||
if (!config)
|
||||
return NULL;
|
||||
config = config->next;
|
||||
}
|
||||
if (!config)
|
||||
return NULL;
|
||||
|
||||
return config->name;
|
||||
}
|
||||
|
||||
static void free_configs()
|
||||
{
|
||||
config_t *config = config_head;
|
||||
|
||||
while (config)
|
||||
{
|
||||
config_t *old_config = config;
|
||||
|
||||
config = config->next;
|
||||
free(old_config);
|
||||
}
|
||||
}
|
||||
|
||||
int config_sel()
|
||||
{
|
||||
populate_configs();
|
||||
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
|
||||
while (1)
|
||||
{
|
||||
int c;
|
||||
|
||||
position_dialog(config_sel_dialog, SCREEN_W/2 - config_sel_dialog[0].w/2, SCREEN_H/2 - config_sel_dialog[0].h/2);
|
||||
|
||||
c = popup_dialog(config_sel_dialog, 1);
|
||||
|
||||
position_dialog(config_sel_dialog, -(SCREEN_W/2 - config_sel_dialog[0].w/2), -(SCREEN_H/2 - config_sel_dialog[0].h/2));
|
||||
|
||||
if (c == 1)
|
||||
{
|
||||
char *name = get_config(config_sel_dialog[6].d1);
|
||||
|
||||
if (name)
|
||||
{
|
||||
sprintf(config_file_default, "%sconfigs/%s.cfg", pcempath, name);
|
||||
pclog("config_file_default=%s\n", config_file_default);
|
||||
free_configs();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (c == 2)
|
||||
return 1;
|
||||
}
|
||||
|
||||
free_configs();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue