Mercurial > repos > blastem
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")) { |