From cdc100ff4a0ceecae2ee2cecaf9df6b82b8636e4 Mon Sep 17 00:00:00 2001 From: Dušan Ďurech Date: Sun, 27 Dec 2009 20:49:44 +0100 Subject: implements yes/no dialog if to quit the game or not --- src/client/yes_no_dialog.c | 137 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/client/yes_no_dialog.c (limited to 'src/client/yes_no_dialog.c') diff --git a/src/client/yes_no_dialog.c b/src/client/yes_no_dialog.c new file mode 100644 index 0000000..0b7f9b3 --- /dev/null +++ b/src/client/yes_no_dialog.c @@ -0,0 +1,137 @@ +#include +#include + +#include "main.h" +#include "list.h" + +#include "interface.h" +#include "hotKey.h" +#include "yes_no_dialog.h" +#include "image.h" +#include "font.h" + +#include "widget.h" +#include "widget_label.h" +#include "widget_button.h" + +static image_t *g_background; + +static widget_t *widgetLabelMsg; + +static widget_t *widgetButtonYes; +static widget_t *widgetButtonNo; + +static void (*handle_yes)(void *param); +static void (*handle_no)(void *param); +static void *param; +static bool_t active_dialog; + +static void eventWidget(void *p) +{ + widget_t *button; + + button = (widget_t *) p; + + yes_no_dialog_set_active(FALSE); + + if (button == widgetButtonYes) { + handle_yes(param); + } + + if (button == widgetButtonNo) { + handle_no(param); + } +} + +void yes_no_dialog_init() +{ + active_dialog = FALSE; + + g_background = image_get(IMAGE_GROUP_BASE, "screen_main"); + + widgetLabelMsg = label_new("empty label", WINDOW_SIZE_X / 2, + YES_NO_DIALOG_LOCATIN_Y + 20, + WIDGET_LABEL_CENTER); + + widgetButtonYes = button_new(_("Yes"), YES_NO_DIALOG_LOCATIN_X + 20, + YES_NO_DIALOG_LOCATIN_Y + 60, + eventWidget); + + widgetButtonNo = button_new(_("No"), YES_NO_DIALOG_LOCATIN_X + 20 + + WIDGET_BUTTON_WIDTH + 20, + YES_NO_DIALOG_LOCATIN_Y + 60, + eventWidget); +} + +static void hotkey_escape() +{ + yes_no_dialog_set_active(FALSE); + handle_no(param); +} + +void yes_no_dialog_set_active(bool_t active) +{ + active_dialog = active; + + if (active_dialog == TRUE) + { + hot_key_register(SDLK_ESCAPE, hotkey_escape); + } + else + { + hot_key_unregister(SDLK_ESCAPE); + } +} + +bool_t yes_no_dialog_is_active() +{ + return active_dialog; +} + +void yes_no_dialog_set(char *label, void *function_yes, void *function_no, void *p_param) +{ + label_destroy(widgetLabelMsg); + + widgetLabelMsg = label_new(label, WINDOW_SIZE_X / 2, + YES_NO_DIALOG_LOCATIN_Y + 20, + WIDGET_LABEL_CENTER); + + handle_yes = function_yes; + handle_no = function_no; + param = p_param; +} + +void yes_no_dialog_draw() +{ + if (active_dialog == FALSE) { + return; + } + + image_draw(g_background, YES_NO_DIALOG_LOCATIN_X, + YES_NO_DIALOG_LOCATIN_Y, + YES_NO_DIALOG_LOCATIN_X, + YES_NO_DIALOG_LOCATIN_Y, + YES_NO_DIALOG_SIZE_X, + YES_NO_DIALOG_SIZE_Y); + + label_draw(widgetLabelMsg); + button_draw(widgetButtonYes); + button_draw(widgetButtonNo); +} + +void yes_no_dialog_event() +{ + if (active_dialog == FALSE) { + return; + } + + button_event(widgetButtonYes); + button_event(widgetButtonNo); +} + +void yes_no_dialog_quit() +{ + label_destroy(widgetLabelMsg); + button_destroy(widgetButtonYes); + button_destroy(widgetButtonNo); +} -- cgit v1.2.3