comparison nuklear_ui/blastem_nuklear.c @ 1900:93960907807a

Added UI for selecting configured model
author Michael Pavone <pavone@retrodev.com>
date Sun, 16 Feb 2020 10:33:20 -0800
parents e07fc3d473b2
children ee178f08611b
comparison
equal deleted inserted replaced
1899:789746b1a1b3 1900:93960907807a
1829 pop_view(); 1829 pop_view();
1830 } 1830 }
1831 nk_end(context); 1831 nk_end(context);
1832 } 1832 }
1833 } 1833 }
1834 typedef struct {
1835 const char **models;
1836 const char **names;
1837 uint32_t num_models;
1838 uint32_t storage;
1839 } model_foreach_state;
1840 void model_iter(char *key, tern_val val, uint8_t valtype, void *data)
1841 {
1842 if (valtype != TVAL_NODE) {
1843 return;
1844 }
1845 model_foreach_state *state = data;
1846 if (state->num_models == state->storage) {
1847 state->storage *= 2;
1848 state->models = realloc(state->models, state->storage * sizeof(char *));
1849 state->names = realloc(state->names, state->storage * sizeof(char *));
1850 }
1851 char *def = strdup(key);
1852 state->models[state->num_models] = def;
1853 state->names[state->num_models++] = tern_find_ptr_default(val.ptrval, "name", def);
1854 }
1855
1856 typedef struct {
1857 const char **models;
1858 const char **names;
1859 } models;
1860
1861 models get_models(uint32_t *num_out)
1862 {
1863 tern_node *systems = get_systems_config();
1864 model_foreach_state state = {
1865 .models = calloc(4, sizeof(char *)),
1866 .names = calloc(4, sizeof(char *)),
1867 .num_models = 0,
1868 .storage = 4
1869 };
1870 tern_foreach(systems, model_iter, &state);
1871 *num_out = state.num_models;
1872 return (models){
1873 .models = state.models,
1874 .names = state.names
1875 };
1876 }
1877
1834 void view_system_settings(struct nk_context *context) 1878 void view_system_settings(struct nk_context *context)
1835 { 1879 {
1836 const char *sync_opts[] = { 1880 const char *sync_opts[] = {
1837 "video", 1881 "video",
1838 "audio" 1882 "audio"
1851 const uint32_t num_regions = sizeof(regions)/sizeof(*regions); 1895 const uint32_t num_regions = sizeof(regions)/sizeof(*regions);
1852 static int32_t selected_region = -1; 1896 static int32_t selected_region = -1;
1853 if (selected_region < 0) { 1897 if (selected_region < 0) {
1854 selected_region = find_match(region_codes, num_regions, "system\0default_region\0", "U"); 1898 selected_region = find_match(region_codes, num_regions, "system\0default_region\0", "U");
1855 } 1899 }
1900 static const char **model_opts;
1901 static const char **model_names;
1902 static uint32_t num_models;
1903 if (!model_opts) {
1904 models m = get_models(&num_models);
1905 model_opts = m.models;
1906 model_names = m.names;
1907 }
1908 static int32_t selected_model = -1;
1909 if (selected_model < 0) {
1910 selected_model = find_match(model_opts, num_models, "system\0model\0", "md1va3");
1911 }
1912
1856 const char *formats[] = { 1913 const char *formats[] = {
1857 "native", 1914 "native",
1858 "gst" 1915 "gst"
1859 }; 1916 };
1860 const uint32_t num_formats = sizeof(formats)/sizeof(*formats); 1917 const uint32_t num_formats = sizeof(formats)/sizeof(*formats);
1861 int32_t selected_format = -1; 1918 static int32_t selected_format = -1;
1862 if (selected_format < 0) { 1919 if (selected_format < 0) {
1863 selected_format = find_match(formats, num_formats, "ui\0state_format\0", "native"); 1920 selected_format = find_match(formats, num_formats, "ui\0state_format\0", "native");
1864 } 1921 }
1865 const char *ram_inits[] = { 1922 const char *ram_inits[] = {
1866 "zero", 1923 "zero",
1906 settings_int_property(context, "68000 Clock Divider", "", "clocks\0m68k_divider\0", 7, 1, 53); 1963 settings_int_property(context, "68000 Clock Divider", "", "clocks\0m68k_divider\0", 7, 1, 53);
1907 settings_toggle(context, "Remember ROM Path", "ui\0remember_path\0", 1); 1964 settings_toggle(context, "Remember ROM Path", "ui\0remember_path\0", 1);
1908 settings_toggle(context, "Save config with EXE", "ui\0config_in_exe_dir\0", 0); 1965 settings_toggle(context, "Save config with EXE", "ui\0config_in_exe_dir\0", 0);
1909 settings_string(context, "Game Save Path", "ui\0save_path\0", "$USERDATA/blastem/$ROMNAME"); 1966 settings_string(context, "Game Save Path", "ui\0save_path\0", "$USERDATA/blastem/$ROMNAME");
1910 selected_region = settings_dropdown_ex(context, "Default Region", region_codes, regions, num_regions, selected_region, "system\0default_region\0"); 1967 selected_region = settings_dropdown_ex(context, "Default Region", region_codes, regions, num_regions, selected_region, "system\0default_region\0");
1968 selected_model = settings_dropdown_ex(context, "Model", model_opts, model_names, num_models, selected_model, "system\0model\0");
1911 selected_format = settings_dropdown(context, "Save State Format", formats, num_formats, selected_format, "ui\0state_format\0"); 1969 selected_format = settings_dropdown(context, "Save State Format", formats, num_formats, selected_format, "ui\0state_format\0");
1912 selected_init = settings_dropdown(context, "Initial RAM Value", ram_inits, num_inits, selected_init, "system\0ram_init\0"); 1970 selected_init = settings_dropdown(context, "Initial RAM Value", ram_inits, num_inits, selected_init, "system\0ram_init\0");
1913 selected_io_1 = settings_dropdown_ex(context, "IO Port 1 Device", io_opts_1, device_type_names, num_io, selected_io_1, "io\0devices\0""1\0"); 1971 selected_io_1 = settings_dropdown_ex(context, "IO Port 1 Device", io_opts_1, device_type_names, num_io, selected_io_1, "io\0devices\0""1\0");
1914 selected_io_2 = settings_dropdown_ex(context, "IO Port 2 Device", io_opts_2, device_type_names, num_io, selected_io_2, "io\0devices\0""2\0"); 1972 selected_io_2 = settings_dropdown_ex(context, "IO Port 2 Device", io_opts_2, device_type_names, num_io, selected_io_2, "io\0devices\0""2\0");
1915 if (nk_button_label(context, "Back")) { 1973 if (nk_button_label(context, "Back")) {