static txt_widget_t *IWADSelector(void) { txt_dropdown_list_t *dropdown; txt_widget_t *result; int installed_iwads; int num_iwads; unsigned int i; // Find out what WADs are installed installed_iwads = FindInstalledIWADs(); // Build a list of the descriptions for all installed IWADs num_iwads = 0; for (i=0; i<arrlen(iwads); ++i) { if (installed_iwads & iwads[i].mask) { found_iwads[num_iwads] = iwads[i].description; ++num_iwads; } } // If no IWADs are found, provide Doom 2 as an option, but // we're probably screwed. if (num_iwads == 0) { found_iwads[0] = "Doom 2"; num_iwads = 1; } // Build a dropdown list of IWADs if (num_iwads < 2) { // We have only one IWAD. Show as a label. result = (txt_widget_t *) TXT_NewLabel(found_iwads[0]); } else { // Dropdown list allowing IWAD to be selected. dropdown = TXT_NewDropdownList(&found_iwad_selected, found_iwads, num_iwads); TXT_SignalConnect(dropdown, "changed", IWADSelected, NULL); result = (txt_widget_t *) dropdown; } // Select first in the list. found_iwad_selected = 0; IWADSelected(NULL, NULL); return result; }
static txt_widget_t *IWADSelector(void) { txt_dropdown_list_t *dropdown; txt_widget_t *result; int num_iwads; unsigned int i; // Find out what WADs are installed found_iwads = GetIwads(); // Build a list of the descriptions for all installed IWADs num_iwads = 0; for (i=0; found_iwads[i] != NULL; ++i) { ++num_iwads; } iwad_labels = malloc(sizeof(*iwad_labels) * num_iwads); for (i=0; i < num_iwads; ++i) { iwad_labels[i] = found_iwads[i]->description; } // If no IWADs are found, provide Doom 2 as an option, but // we're probably screwed. if (num_iwads == 0) { found_iwads = GetFallbackIwadList(); num_iwads = 1; } // Build a dropdown list of IWADs if (num_iwads < 2) { // We have only one IWAD. Show as a label. result = (txt_widget_t *) TXT_NewLabel(found_iwads[0]->description); } else { // Dropdown list allowing IWAD to be selected. dropdown = TXT_NewDropdownList(&found_iwad_selected, iwad_labels, num_iwads); TXT_SignalConnect(dropdown, "changed", IWADSelected, NULL); result = (txt_widget_t *) dropdown; } // The first time the dialog is opened, found_iwad_selected=-1, // so select the first IWAD in the list. Don't lose the setting // if we close and reopen the dialog. if (found_iwad_selected < 0 || found_iwad_selected >= num_iwads) { found_iwad_selected = 0; } IWADSelected(NULL, NULL); return result; }