void ScrollingMenu(void) { txt_window_t *window; txt_button_t *button; txt_table_t *table; window = TXT_NewWindow("Scrollable menu"); table = TXT_NewTable(1); TXT_AddWidgets(table, TXT_NewButton("Configure display"), TXT_NewButton("Configure joystick"), TXT_NewButton("Configure keyboard"), TXT_NewButton("Configure mouse"), TXT_NewButton("Configure sound"), TXT_NewStrut(0, 1), button = TXT_NewButton("Save Parameters and launch DOOM"), TXT_NewStrut(0, 1), TXT_NewButton("Start a network game"), TXT_NewButton("Join a network game"), TXT_NewButton("Multiplayer configuration"), NULL); TXT_SignalConnect(button, "pressed", PwnBox, NULL); TXT_AddWidget(window, TXT_NewScrollPane(0, 6, table)); }
static void OpenSelectorWindow(txt_dropdown_list_t *list) { txt_window_t *window; int i; // Open a simple window with no title bar or action buttons. window = TXT_NewWindow(NULL); TXT_SetWindowAction(window, TXT_HORIZ_LEFT, NULL); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, NULL); TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, NULL); // Position the window so that the currently selected item appears // over the top of the list widget. TXT_SetWindowPosition(window, TXT_HORIZ_LEFT, TXT_VERT_TOP, list->widget.x - 2, SelectorWindowY(list)); // Add a button to the window for each option in the list. for (i=0; i<list->num_values; ++i) { txt_button_t *button; callback_data_t *data; button = TXT_NewButton(list->values[i]); TXT_AddWidget(window, button); // Callback struct data = malloc(sizeof(callback_data_t)); data->list = list; data->window = window; data->item = i; // When the button is pressed, invoke the button press callback TXT_SignalConnect(button, "pressed", ItemSelected, data); // When the window is closed, free back the callback struct TXT_SignalConnect(window, "closed", FreeCallbackData, data); // Is this the currently-selected value? If so, select the button // in the window as the default. if (i == *list->variable) { TXT_SelectWidget(window, button); } } // Catch presses of escape in this window and close it. TXT_SetKeyListener(window, SelectorWindowListener, NULL); }
txt_button_t *TXT_NewButton2(char *label, TxtWidgetSignalFunc func, void *user_data) { txt_button_t *button; button = TXT_NewButton(label); TXT_SignalConnect(button, "pressed", func, user_data); return button; }
static void LevelSelectDialog(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) { txt_window_t *window; txt_table_t *table; txt_button_t *button; iwad_t *iwad; char buf[10]; int x, y; int l; int i; window = TXT_NewWindow("Select level"); table = TXT_NewTable(4); TXT_AddWidget(window, table); if (warptype == WARP_DOOM1) { // ExMy levels iwad = GetCurrentIWAD(); for (i=0; i<4 * 9; ++i) { x = (i % 4) + 1; y = (i / 4) + 1; // chex.wad only has E1M1-E1M5. if (iwad->mask == IWAD_CHEX && (x > 1 || y > 5)) { continue; } // doom1.wad only has E1 if (iwad->mask == IWAD_DOOM1 && x > 1) { continue; } sprintf(buf, " E%iM%i ", x, y); button = TXT_NewButton(buf); TXT_SignalConnect(button, "pressed", SetDoom1Warp, (void *) (x * 10 + y)); TXT_SignalConnect(button, "pressed", CloseLevelSelectDialog, window); TXT_AddWidget(table, button); if (warpepisode == x && warpmap == y) { TXT_SelectWidget(table, button); } } } else { for (i=0; i<32; ++i) { x = i % 4; y = i / 4; l = x * 8 + y + 1; sprintf(buf, " MAP%02i ", l); button = TXT_NewButton(buf); TXT_SignalConnect(button, "pressed", SetDoom2Warp, (void *) l); TXT_SignalConnect(button, "pressed", CloseLevelSelectDialog, window); TXT_AddWidget(table, button); if (warpmap == l) { TXT_SelectWidget(table, button); } } } }
static void LevelSelectDialog(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(user_data)) { txt_window_t *window; txt_button_t *button; const iwad_t *iwad; char buf[10]; int episodes; intptr_t x, y; intptr_t l; int i; window = TXT_NewWindow("Select level"); iwad = GetCurrentIWAD(); if (warptype == WARP_ExMy) { episodes = D_GetNumEpisodes(iwad->mission, iwad->mode); TXT_SetTableColumns(window, episodes); // ExMy levels for (y=1; y<10; ++y) { for (x=1; x<=episodes; ++x) { if (IsChexQuest(iwad) && (x > 1 || y > 5)) { continue; } if (!D_ValidEpisodeMap(iwad->mission, iwad->mode, x, y)) { TXT_AddWidget(window, NULL); continue; } M_snprintf(buf, sizeof(buf), " E%" PRIiPTR "M%" PRIiPTR " ", x, y); button = TXT_NewButton(buf); TXT_SignalConnect(button, "pressed", SetExMyWarp, (void *) (x * 10 + y)); TXT_SignalConnect(button, "pressed", CloseLevelSelectDialog, window); TXT_AddWidget(window, button); if (warpepisode == x && warpmap == y) { TXT_SelectWidget(window, button); } } } } else { TXT_SetTableColumns(window, 6); for (i=0; i<60; ++i) { x = i % 6; y = i / 6; l = x * 10 + y + 1; if (!D_ValidEpisodeMap(iwad->mission, iwad->mode, 1, l)) { TXT_AddWidget(window, NULL); continue; } M_snprintf(buf, sizeof(buf), " MAP%02" PRIiPTR " ", l); button = TXT_NewButton(buf); TXT_SignalConnect(button, "pressed", SetMAPxyWarp, (void *) l); TXT_SignalConnect(button, "pressed", CloseLevelSelectDialog, window); TXT_AddWidget(window, button); if (warpmap == l) { TXT_SelectWidget(window, button); } } } }
void ConfigJoystick(void) { txt_window_t *window; txt_table_t *button_table, *axis_table; txt_table_t *joystick_table; window = TXT_NewWindow("Gamepad/Joystick configuration"); TXT_AddWidgets(window, TXT_NewCheckBox("Enable gamepad/joystick", &usejoystick), joystick_table = TXT_NewTable(2), TXT_NewSeparator("Axes"), axis_table = TXT_NewTable(2), TXT_NewSeparator("Buttons"), button_table = TXT_NewTable(4), NULL); TXT_SetColumnWidths(axis_table, 20, 15); TXT_AddWidgets(axis_table, TXT_NewLabel("Forward/backward"), y_axis_widget = TXT_NewJoystickAxis(&joystick_y_axis, &joystick_y_invert, JOYSTICK_AXIS_VERTICAL), TXT_NewLabel("Turn left/right"), x_axis_widget = TXT_NewJoystickAxis(&joystick_x_axis, &joystick_x_invert, JOYSTICK_AXIS_HORIZONTAL), TXT_NewLabel("Strafe left/right"), TXT_NewJoystickAxis(&joystick_strafe_axis, &joystick_strafe_invert, JOYSTICK_AXIS_HORIZONTAL), NULL); TXT_SetColumnWidths(joystick_table, 20, 15); TXT_AddWidgets(joystick_table, TXT_NewLabel("Current controller"), joystick_button = TXT_NewButton("zzzz"), NULL); TXT_SetColumnWidths(button_table, 16, 12, 14, 11); AddJoystickControl(button_table, "Fire/Attack", &joybfire); AddJoystickControl(button_table, "Strafe Left", &joybstrafeleft); AddJoystickControl(button_table, "Use", &joybuse); AddJoystickControl(button_table, "Strafe Right", &joybstraferight); AddJoystickControl(button_table, "Previous weapon", &joybprevweapon); AddJoystickControl(button_table, "Strafe", &joybstrafe); AddJoystickControl(button_table, "Next weapon", &joybnextweapon); // High values of joybspeed are used to activate the "always run mode" // trick in Vanilla Doom. If this has been enabled, not only is the // joybspeed value meaningless, but the control itself is useless. if (joybspeed < 20) { AddJoystickControl(button_table, "Speed", &joybspeed); } if (gamemission == hexen || gamemission == strife) { AddJoystickControl(button_table, "Jump", &joybjump); } AddJoystickControl(button_table, "Activate menu", &joybmenu); TXT_SignalConnect(joystick_button, "pressed", CalibrateJoystick, NULL); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction()); SetJoystickButtonLabel(); }
void SetupWindow(void) { txt_window_t *window; txt_table_t *table; txt_table_t *rightpane; txt_checkbox_t *cheesy_checkbox; txt_window_action_t *pwn; txt_label_t *toplabel; char buf[100]; int i; window = TXT_NewWindow("Window test"); TXT_AddWidget(window, TXT_NewSeparator("Main section")); table = TXT_NewTable(3); toplabel = TXT_NewLabel("This is a multiline label.\n" "A single label object contains \n" "all three of these lines.\n"); TXT_AddWidget(window, toplabel); TXT_SetWidgetAlign(toplabel, TXT_HORIZ_CENTER); //TXT_AddWidget(window, TXT_NewScrollPane(15, 4, table)); TXT_AddWidget(window, table); for (i=0; i<5; ++i) { sprintf(buf, "Option %i in a table:", i + 1); TXT_AddWidget(table, TXT_NewLabel(buf)); sprintf(buf, " Button %i-1 ", i + 1); TXT_AddWidget(table, TXT_NewButton(buf)); sprintf(buf, " Button %i-2 ", i + 1); TXT_AddWidget(table, TXT_NewButton(buf)); } TXT_AddWidget(window, TXT_NewStrut(0, 1)); value_label = TXT_NewLabel(""); TXT_AddWidget(window, value_label); table = TXT_NewTable(2); TXT_AddWidget(window, table); TXT_SetWidgetAlign(table, TXT_HORIZ_CENTER); cheesy_checkbox = TXT_NewCheckBox("Cheesy", &cheesy); TXT_AddWidget(table, cheesy_checkbox); TXT_SignalConnect(cheesy_checkbox, "changed", UpdateLabel, NULL); rightpane = TXT_NewTable(1); TXT_AddWidget(table, rightpane); for (i=0; i<3; ++i) { txt_radiobutton_t *rbut; rbut = TXT_NewRadioButton(radio_values[i], &radiobutton_value, i); TXT_AddWidget(rightpane, rbut); TXT_SignalConnect(rbut, "selected", UpdateLabel, NULL); } UpdateLabel(NULL, NULL); TXT_AddWidget(window, TXT_NewButton2("Close Window", CloseWindow, NULL)); pwn = TXT_NewWindowAction(KEY_F1, "PWN!"); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, pwn); TXT_SignalConnect(pwn, "pressed", PwnBox, NULL); firstwin = window; }
void ConfigJoystick(void) { txt_window_t *window; txt_table_t *button_table; txt_table_t *joystick_table; if (!joystick_initted) { joystick_initted = SDL_Init(SDL_INIT_JOYSTICK) >= 0; } window = TXT_NewWindow("Gamepad/Joystick configuration"); TXT_AddWidgets(window, TXT_NewCheckBox("Enable gamepad/joystick", &usejoystick), joystick_table = TXT_NewTable(2), TXT_NewSeparator("Buttons"), button_table = TXT_NewTable(2), NULL); TXT_SetColumnWidths(joystick_table, 20, 15); TXT_AddWidgets(joystick_table, TXT_NewLabel("Current controller"), joystick_button = TXT_NewButton("zzzz"), NULL); TXT_SetColumnWidths(button_table, 20, 15); AddJoystickControl(button_table, "Fire/Attack", &joybfire); AddJoystickControl(button_table, "Use", &joybuse); // High values of joybspeed are used to activate the "always run mode" // trick in Vanilla Doom. If this has been enabled, not only is the // joybspeed value meaningless, but the control itself is useless. if (joybspeed < 20) { AddJoystickControl(button_table, "Speed", &joybspeed); } AddJoystickControl(button_table, "Strafe", &joybstrafe); AddJoystickControl(button_table, "Strafe Left", &joybstrafeleft); AddJoystickControl(button_table, "Strafe Right", &joybstraferight); AddJoystickControl(button_table, "Previous weapon", &joybprevweapon); AddJoystickControl(button_table, "Next weapon", &joybnextweapon); if (gamemission == hexen || gamemission == strife) { AddJoystickControl(button_table, "Jump", &joybjump); } AddJoystickControl(button_table, "Activate menu", &joybmenu); TXT_SignalConnect(joystick_button, "pressed", CalibrateJoystick, NULL); TXT_SignalConnect(window, "closed", JoystickWindowClosed, NULL); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, TestConfigAction()); SetJoystickButtonLabel(); }