static void GenerateModesTable(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(modes_table)) { TXT_CAST_ARG(txt_table_t, modes_table); char buf[15]; screen_mode_t *modes; txt_radiobutton_t *rbutton; int i; // Pick which modes list to use if (fullscreen) { if (screen_modes_fullscreen == NULL) { BuildFullscreenModesList(); } modes = screen_modes_fullscreen; } else if (aspect_ratio_correct) { modes = screen_modes_scaled; } else { modes = screen_modes_unscaled; } // Build the table TXT_ClearTable(modes_table); TXT_SetColumnWidths(modes_table, 14, 14, 14, 14, 14); for (i=0; modes[i].w != 0; ++i) { // Skip bad fullscreen modes if (fullscreen && !GoodFullscreenMode(&modes[i])) { continue; } sprintf(buf, "%ix%i", modes[i].w, modes[i].h); rbutton = TXT_NewRadioButton(buf, &vidmode, i); TXT_AddWidget(modes_table, rbutton); TXT_SignalConnect(rbutton, "selected", ModeSelected, &modes[i]); } // Find the nearest mode in the list that matches the current // settings vidmode = FindBestMode(modes); if (vidmode > 0) { screen_width = modes[vidmode].w; screen_height = modes[vidmode].h; } }
static void BuildWindow(void) { char buf[50]; txt_table_t *table; int i; TXT_ClearTable(window); table = TXT_NewTable(3); TXT_AddWidget(window, table); // Add spacers TXT_AddWidget(table, NULL); TXT_AddWidget(table, TXT_NewStrut(25, 1)); TXT_AddWidget(table, TXT_NewStrut(17, 1)); // Player labels for (i = 0; i < net_client_wait_data.max_players; ++i) { sprintf(buf, " %i. ", i + 1); TXT_AddWidget(table, TXT_NewLabel(buf)); player_labels[i] = TXT_NewLabel(""); ip_labels[i] = TXT_NewLabel(""); TXT_AddWidget(table, player_labels[i]); TXT_AddWidget(table, ip_labels[i]); } drone_label = TXT_NewLabel(""); TXT_AddWidget(window, drone_label); }
static void GenerateSizesTable(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(sizes_table)) { TXT_CAST_ARG(txt_table_t, sizes_table); window_size_t *sizes; boolean have_size; int i; // Pick which window sizes list to use if (aspect_ratio_correct == 1) { sizes = window_sizes_scaled; } else { sizes = window_sizes_unscaled; } // Build the table TXT_ClearTable(sizes_table); TXT_SetColumnWidths(sizes_table, 14, 14, 14); TXT_AddWidget(sizes_table, TXT_NewSeparator("Window size")); have_size = false; for (i = 0; sizes[i].w != 0; ++i) { TXT_AddWidget(sizes_table, SizeSelectButton(&sizes[i])); have_size = have_size || window_width == sizes[i].w; } // Windows can be any arbitrary size. We key off the width of the // window in pixels. If the current size is not in the list of // standard (integer multiply) sizes, create a special button to // mean "the current window size". if (!have_size) { static window_size_t current_size; current_size.w = window_width; current_size.h = window_height; TXT_AddWidget(sizes_table, SizeSelectButton(¤t_size)); } }
static void UpdateExtraTable(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(extra_table)) { TXT_CAST_ARG(txt_table_t, extra_table); TXT_ClearTable(extra_table); switch (snd_musicmode) { case MUSICMODE_OPL: TXT_AddWidgets(extra_table, TXT_NewLabel("OPL type"), OPLTypeSelector(), NULL); break; case MUSICMODE_GUS: TXT_AddWidgets(extra_table, TXT_NewLabel("GUS patch path:"), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewFileSelector(&gus_patch_path, 34, "Select path to GUS patches", TXT_DIRECTORY), TXT_TABLE_OVERFLOW_RIGHT, NULL); break; case MUSICMODE_NATIVE: TXT_AddWidgets(extra_table, TXT_NewLabel("Timidity configuration file:"), TXT_TABLE_OVERFLOW_RIGHT, TXT_NewFileSelector(&timidity_cfg_path, 34, "Select Timidity config file", cfg_extension), TXT_TABLE_OVERFLOW_RIGHT, NULL); break; default: break; } }
static void TXT_TableDestructor(TXT_UNCAST_ARG(table)) { TXT_CAST_ARG(txt_table_t, table); TXT_ClearTable(table); }