diff options
Diffstat (limited to 'src/ui/lobby_create_dialog.c')
-rw-r--r-- | src/ui/lobby_create_dialog.c | 129 |
1 files changed, 112 insertions, 17 deletions
diff --git a/src/ui/lobby_create_dialog.c b/src/ui/lobby_create_dialog.c index 9c80929..f294391 100644 --- a/src/ui/lobby_create_dialog.c +++ b/src/ui/lobby_create_dialog.c @@ -24,30 +24,125 @@ #include "lobby_create_dialog.h" +#include "list_input.h" +#include "../application.h" +#include "../util.h" + +void +_lobby_open_with_uri(void *cls, + const struct GNUNET_CHAT_Uri *uri) +{ + UI_LOBBY_CREATE_DIALOG_Handle *create_dialog = cls; + + if (create_dialog->uri) + GNUNET_free(create_dialog->uri); + + create_dialog->uri = GNUNET_CHAT_uri_to_string(uri); +} + void lobby_create_dialog_event(UI_LOBBY_CREATE_DIALOG_Handle *create_dialog, - struct MESSENGER_Application *app, + UNUSED struct MESSENGER_Application *app, int key) { - // TODO + create_dialog->window = *(create_dialog->win); + + list_input_reset(create_dialog); + + if (create_dialog->uri) + list_input_select(create_dialog, 1, 0) + else + { + list_input_select(create_dialog, 1, 30); + list_input_select(create_dialog, 1, 5 * 60); + list_input_select(create_dialog, 1, 60 * 60); + list_input_select(create_dialog, 1, 8 * 60 * 60); + list_input_select(create_dialog, 1, 24 * 60 * 60); + list_input_select(create_dialog, 1, 7 * 24 * 60 * 60); + list_input_select(create_dialog, 1, 4 * 7 * 60 * 60); + list_input_select(create_dialog, 1, 0); + } + + switch (key) + { + case 27: + case KEY_EXIT: + if (create_dialog->lobby) + GNUNET_CHAT_lobby_close(create_dialog->lobby); + + create_dialog->lobby = NULL; + create_dialog->win = NULL; + break; + case '\n': + case KEY_ENTER: + if (create_dialog->uri) + { + GNUNET_free(create_dialog->uri); + + create_dialog->lobby = NULL; + create_dialog->win = NULL; + } + else if (!(create_dialog->lobby)) + create_dialog->lobby = GNUNET_CHAT_lobby_open( + app->chat.handle, + GNUNET_TIME_relative_multiply( + GNUNET_TIME_relative_get_second_(), + create_dialog->selected + ), + _lobby_open_with_uri, + create_dialog + ); + + break; + default: + break; + } + + if (!(create_dialog->lobby)) + list_input_event(create_dialog, key) + else + list_input_event(create_dialog, KEY_RESIZE); +} + +static void +_lobby_iterate_print(UI_LOBBY_CREATE_DIALOG_Handle *create_dialog, + const char *label) +{ + list_input_print(create_dialog, 1); + + const int attrs_select = A_BOLD; + + if (selected) wattron(create_dialog->window, attrs_select); + + wmove(create_dialog->window, y, 0); + wprintw(create_dialog->window, "%s", label); + + if (selected) wattroff(create_dialog->window, attrs_select); } void lobby_create_dialog_print(UI_LOBBY_CREATE_DIALOG_Handle *create_dialog, - struct MESSENGER_Application *app) + UNUSED struct MESSENGER_Application *app) { - /* - Delay until it expires: - - 30 seconds - 5 minutes - 1 hour - 8 hours - 1 day - 1 week - 4 weeks - Off - */ - - // TODO + if (!(create_dialog->win)) + return; + + create_dialog->window = *(create_dialog->win); + + list_input_reset(create_dialog); + werase(create_dialog->window); + + if (create_dialog->uri) + _lobby_iterate_print(create_dialog, create_dialog->uri); + else + { + _lobby_iterate_print(create_dialog, "30 seconds"); + _lobby_iterate_print(create_dialog, "5 minutes"); + _lobby_iterate_print(create_dialog, "1 hour"); + _lobby_iterate_print(create_dialog, "8 hours"); + _lobby_iterate_print(create_dialog, "1 day"); + _lobby_iterate_print(create_dialog, "1 week"); + _lobby_iterate_print(create_dialog, "4 weeks"); + _lobby_iterate_print(create_dialog, "Off"); + } } |