diff options
Diffstat (limited to 'textscreen/examples')
-rw-r--r-- | textscreen/examples/Makefile.am | 11 | ||||
-rw-r--r-- | textscreen/examples/calculator.c | 160 | ||||
-rw-r--r-- | textscreen/examples/guitest.c | 201 |
3 files changed, 372 insertions, 0 deletions
diff --git a/textscreen/examples/Makefile.am b/textscreen/examples/Makefile.am new file mode 100644 index 00000000..001416c5 --- /dev/null +++ b/textscreen/examples/Makefile.am @@ -0,0 +1,11 @@ + +AM_CFLAGS = @SDL_CFLAGS@ -I.. -I../../src + +noinst_PROGRAMS=guitest calculator + +guitest_LDADD = @LDFLAGS@ @SDL_LIBS@ ../libtextscreen.a +guitest_SOURCES = guitest.c + +calculator_LDADD = @LDFLAGS@ @SDL_LIBS@ ../libtextscreen.a +calculator_SOURCES = calculator.c + diff --git a/textscreen/examples/calculator.c b/textscreen/examples/calculator.c new file mode 100644 index 00000000..d51d4f9c --- /dev/null +++ b/textscreen/examples/calculator.c @@ -0,0 +1,160 @@ + +#include <stdio.h> +#include <string.h> +#include "txt_button.h" +#include "txt_desktop.h" +#include "txt_label.h" + +typedef enum +{ + OP_NONE, + OP_PLUS, + OP_MINUS, + OP_MULT, + OP_DIV, +} operator_t; + +int starting_input = 0; +int input_value = 0; +txt_label_t *input_box; +int first_operand; +operator_t operator = OP_NONE; + +void UpdateInputBox(void) +{ + char buf[20]; + + sprintf(buf, " %i", input_value); + TXT_SetLabel(input_box, buf); +} + +void InsertNumber(TXT_UNCAST_ARG(button), TXT_UNCAST_ARG(value)) +{ + TXT_CAST_ARG(int, value); + + if (starting_input) + { + input_value = 0; + starting_input = 0; + } + + input_value *= 10; + input_value += *value; + UpdateInputBox(); +} + +void AddNumberButton(txt_table_t *table, int value) +{ + txt_button_t *button; + char buf[10]; + int *val_copy; + + val_copy = malloc(sizeof(int)); + *val_copy = value; + + sprintf(buf, " %i ", value); + + button = TXT_NewButton(buf); + TXT_AddWidget(table, button); + TXT_SignalConnect(button, "pressed", InsertNumber, val_copy); +} + +void Operator(TXT_UNCAST_ARG(button), TXT_UNCAST_ARG(op)) +{ + TXT_CAST_ARG(operator_t, op); + + first_operand = input_value; + operator = *op; + starting_input = 1; +} + +void AddOperatorButton(txt_table_t *table, char *label, operator_t op) +{ + txt_button_t *button; + char buf[10]; + operator_t *op_copy; + + op_copy = malloc(sizeof(operator_t)); + *op_copy = op; + + sprintf(buf, " %s ", label); + button = TXT_NewButton(buf); + + TXT_AddWidget(table, button); + TXT_SignalConnect(button, "pressed", Operator, op_copy); +} + +void Calculate(TXT_UNCAST_ARG(button), void *unused) +{ + switch (operator) + { + case OP_PLUS: + input_value = first_operand + input_value; + break; + case OP_MINUS: + input_value = first_operand - input_value; + break; + case OP_MULT: + input_value = first_operand * input_value; + break; + case OP_DIV: + input_value = first_operand / input_value; + break; + } + + UpdateInputBox(); + + operator = OP_NONE; + starting_input = 1; +} + +void BuildGUI() +{ + txt_window_t *window; + txt_table_t *table; + txt_button_t *equals_button; + + window = TXT_NewWindow("Calculator"); + + TXT_AddWidget(window, TXT_NewSeparator(NULL)); + input_box = TXT_NewLabel("asdf"); + TXT_AddWidget(window, input_box); + TXT_AddWidget(window, TXT_NewSeparator(NULL)); + TXT_AddWidget(window, TXT_NewLabel("")); + + table = TXT_NewTable(4); + TXT_AddWidget(window, table); + + AddNumberButton(table, 7); + AddNumberButton(table, 8); + AddNumberButton(table, 9); + AddOperatorButton(table, "*", OP_MULT); + AddNumberButton(table, 4); + AddNumberButton(table, 5); + AddNumberButton(table, 6); + AddOperatorButton(table, "-", OP_MINUS); + AddNumberButton(table, 1); + AddNumberButton(table, 2); + AddNumberButton(table, 3); + AddOperatorButton(table, "+", OP_PLUS); + AddNumberButton(table, 0); + TXT_AddWidget(table, TXT_NewLabel("")); + equals_button = TXT_NewButton(" = "); + TXT_SignalConnect(equals_button, "pressed", Calculate, NULL); + TXT_AddWidget(table, equals_button); + AddOperatorButton(table, "/", OP_DIV); + + TXT_AddWidget(window, TXT_NewLabel("")); + UpdateInputBox(); +} + +int main() +{ + TXT_Init(); + TXT_SetDesktopTitle("Calculator demo"); + + BuildGUI(); + + TXT_GUIMainLoop(); +} + diff --git a/textscreen/examples/guitest.c b/textscreen/examples/guitest.c new file mode 100644 index 00000000..23df5282 --- /dev/null +++ b/textscreen/examples/guitest.c @@ -0,0 +1,201 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "doomkeys.h" + +#include "txt_main.h" + +#include "txt_checkbox.h" +#include "txt_button.h" +#include "txt_desktop.h" +#include "txt_inputbox.h" +#include "txt_label.h" +#include "txt_radiobutton.h" +#include "txt_separator.h" +#include "txt_table.h" +#include "txt_window.h" + +enum +{ + RADIO_VALUE_BADGER, + RADIO_VALUE_MUSHROOM, + RADIO_VALUE_SNAKE, +}; +char *radio_values[] = { "Badger", "Mushroom", "Snake" }; +char *textbox_value = NULL; +int numbox_value = 0; +int radiobutton_value; +txt_label_t *value_label; +txt_window_t *firstwin; +int cheesy; + +void ClosePwnBox(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(window)) +{ + TXT_CAST_ARG(txt_window_t, window); + + TXT_CloseWindow(window); +} + +void PwnBox(TXT_UNCAST_ARG(widget), void *user_data) +{ + txt_window_t *window; + txt_window_action_t *close_button; + + window = TXT_NewWindow("Pwned!"); + TXT_AddWidget(window, TXT_NewLabel(" BOOM! HEADSHOT! ")); + + close_button = TXT_NewWindowAction(KEY_ENTER, "Close"); + TXT_SignalConnect(close_button, "pressed", ClosePwnBox, window); + + TXT_SetWindowAction(window, TXT_HORIZ_LEFT, NULL); + TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, close_button); +} + +void UpdateLabel(TXT_UNCAST_ARG(widget), void *user_data) +{ + char buf[40]; + + strcpy(buf, " Current value: "); + if (cheesy) + { + strcat(buf, "Cheesy "); + } + strcat(buf, radio_values[radiobutton_value]); + strcat(buf, "\n"); + + TXT_SetLabel(value_label, buf); +} + +void CloseWindow(TXT_UNCAST_ARG(button), void *user_data) +{ + TXT_CloseWindow(firstwin); +} + +void SetupWindow(void) +{ + txt_window_t *window; + txt_table_t *table; + txt_table_t *leftpane, *rightpane; + txt_button_t *button; + txt_checkbox_t *cheesy_checkbox; + txt_window_action_t *pwn; + char buf[100]; + int i; + + window = TXT_NewWindow("Window test"); + + TXT_AddWidget(window, TXT_NewSeparator("Main section")); + table = TXT_NewTable(3); + + TXT_AddWidget(window, TXT_NewLabel(" This is a multiline label.\n" + " A single label object contains \n" + " all three of these lines.\n")); + + 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_NewLabel("")); + value_label = TXT_NewLabel(""); + TXT_AddWidget(window, value_label); + + table = TXT_NewTable(2); + TXT_AddWidget(window, table); + + 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); + + button = TXT_NewButton("Close Window"); + TXT_AddWidget(window, button); + + TXT_SignalConnect(button, "pressed", CloseWindow, NULL); + + pwn = TXT_NewWindowAction(KEY_F1, "PWN!"); + TXT_SetWindowAction(window, TXT_HORIZ_CENTER, pwn); + TXT_SignalConnect(pwn, "pressed", PwnBox, NULL); + + firstwin = window; +} + +void Window2(void) +{ + txt_window_t *window; + txt_table_t *table; + int i; + + window = TXT_NewWindow("Another test"); + TXT_SetWindowPosition(window, + TXT_HORIZ_RIGHT, + TXT_VERT_TOP, + TXT_SCREEN_W - 1, 1); + + for (i=0; i<5; ++i) + { + TXT_AddWidget(window, TXT_NewButton("hello there blah blah blah blah")); + } + + TXT_AddWidget(window, TXT_NewSeparator("Input boxes")); + table = TXT_NewTable(2); + TXT_AddWidget(window, table); + TXT_AddWidget(table, TXT_NewLabel(" String: ")); + TXT_AddWidget(table, TXT_NewInputBox(&textbox_value, 30)); + TXT_AddWidget(table, TXT_NewLabel(" Int: ")); + TXT_AddWidget(table, TXT_NewIntInputBox(&numbox_value, 10)); +} + +void DrawASCIIChart() +{ + int x, y; + + TXT_ClearScreen(); + + for (y=0; y<16; ++y) + { + for (x=0; x<16; ++x) + { + TXT_PutChar(' '); + TXT_PutChar(' '); + TXT_PutChar(' '); + TXT_PutChar(y * 16 + x); + } + TXT_PutChar('\n'); + } +} + +int main() +{ + TXT_Init(); + + TXT_SetDesktopTitle("Not Chocolate Doom Setup"); + + Window2(); + SetupWindow(); + + TXT_GUIMainLoop(); +} + + |