diff --git a/TODO.md b/TODO.md index bde70e7..6a32339 100644 --- a/TODO.md +++ b/TODO.md @@ -1,11 +1,9 @@ TODO: - [x] More universal Makefile -- [ ] Draw only when something changes in UI - [ ] Check and fix registration and login - [x] UI: destroy child elements everywhere - [x] use parent widgets pointers to count the margins correctly - [ ] Hotkeys for buttons -- [ ] Simpler refresh on typing / entering in input - [ ] Group elements as lists - [x] Process arrows - [x] Optimize modals re-drawings diff --git a/src/ui/modals/login_credentials.c b/src/ui/modals/login_credentials.c index ac87088..b5dd5d9 100644 --- a/src/ui/modals/login_credentials.c +++ b/src/ui/modals/login_credentials.c @@ -37,7 +37,7 @@ void init_login_credentials_modal_cb(callback_args_t *args) { app->params->pass[in_pass->value_len] = 0; write(app->params->sd, app->params->uname, in_name->value_len); app->query_args->state = S_WAIT_SERVER; - destroy_dialogue(d,app); + destroy_dialogue(d, app); print_bars(app); break; case 1: @@ -52,12 +52,15 @@ dialogue_t *init_login_credentials_modal(app_t *app) { return NULL; group_el_init_t content[] = { {.type = w_input, .label = "Username", .length = 15}, - {.type = w_input, .label = "Password", .length = 15}, + {.type = w_input, + .label = "Password", + .length = 15, + .is_hidden_value = true}, {.type = w_end}}; group_el_init_t actions[] = { - {.type = w_button, .label = "Login", .is_default = 1}, - {.type = w_button, .label = "Cancel", .is_default = 0}, + {.type = w_button, .label = "Login", .is_default = true}, + {.type = w_button, .label = "Cancel", .is_default = false}, {.type = w_end}}; init_dialogue(&(app->modal), "Credentials", "There is information needed", diff --git a/src/ui/widget/group.c b/src/ui/widget/group.c index 4c93138..d5f1f62 100644 --- a/src/ui/widget/group.c +++ b/src/ui/widget/group.c @@ -85,7 +85,7 @@ group_t *init_group(WINDOW **win, widget_t *w_parent, group_el_init_t *children, break; case w_input: elements[i].element = - init_input(win, &(group->w), children[i].label, children[i].length); + init_input(win, &(group->w), children[i].label, children[i].length, children[i].is_hidden_value); w = &(((input_t *)elements[i].element)->w); break; case w_progress: diff --git a/src/ui/widget/group.h b/src/ui/widget/group.h index 73681be..291aa8b 100644 --- a/src/ui/widget/group.h +++ b/src/ui/widget/group.h @@ -19,6 +19,7 @@ typedef struct { typedef struct { enum w_type type; uint32_t is_default : 1; + uint32_t is_hidden_value : 1; char label[DIALOGUE_TITLE]; uint32_t length; } group_el_init_t; diff --git a/src/ui/widget/input.c b/src/ui/widget/input.c index aa56fbc..26a066f 100644 --- a/src/ui/widget/input.c +++ b/src/ui/widget/input.c @@ -8,7 +8,7 @@ #include "input.h" input_t *init_input(WINDOW **win, widget_t *w_parent, char *label, - uint32_t length) { + uint32_t length, uint32_t is_hidden_value) { input_t *input = malloc(sizeof(input_t)); init_widget(&(input->w), w_parent, win, label); input->is_disabled = 0; @@ -21,10 +21,12 @@ input_t *init_input(WINDOW **win, widget_t *w_parent, char *label, input->value[0] = '\0'; input->value_len = 0; input->max_len = length; + input->is_hidden = is_hidden_value; return input; } int32_t draw_input(input_t *input, uint32_t active_id) { + const char stars[] = "*******************"; WINDOW *win = *(input->w.parent_win); uint32_t margin_y = input->w.m_y + input->w.w_parent->m_y; uint32_t margin_x = input->w.m_x + input->w.w_parent->m_x; @@ -54,8 +56,14 @@ int32_t draw_input(input_t *input, uint32_t active_id) { } uint32_t x_c = 0; - mvwprintw(win, margin_y + 1, margin_x, "%s%*s", input->value, - input->w.x - input->value_len - 2, ""); + if (input->is_hidden) { + mvwprintw(win, margin_y + 1, margin_x, "%.*s%*s", (int) input->value_len, stars, + input->w.x - input->value_len - 2, ""); + } else { + mvwprintw(win, margin_y + 1, margin_x, "%s%*s", input->value, + input->w.x - input->value_len - 2, ""); + } + input->w.cur.y = margin_y + 1; input->w.cur.x = margin_x; diff --git a/src/ui/widget/input.h b/src/ui/widget/input.h index a15f4c8..9bc33e5 100644 --- a/src/ui/widget/input.h +++ b/src/ui/widget/input.h @@ -11,9 +11,11 @@ typedef struct { uint32_t value_len; uint32_t max_len; uint32_t is_disabled : 1; + uint32_t is_hidden : 1; } input_t; -input_t *init_input(WINDOW **win, widget_t *w_parent, char *label, uint32_t size); +input_t *init_input(WINDOW **win, widget_t *w_parent, char *label, + uint32_t size, uint32_t is_hidden_value); int32_t draw_input(input_t *input, uint32_t active_id); void destroy_input(input_t *input); #endif \ No newline at end of file