static void charset_handler(control *ctrl, void *unused(data), int event) { char *charset = new_cfg.charset; switch (event) { when EVENT_REFRESH: dlg_update_start(ctrl); dlg_listbox_clear(ctrl); const char *cs; for (int i = 0; (cs = charset_menu[i]); i++) dlg_listbox_add(ctrl, cs); dlg_update_done(ctrl); update_charset(); when EVENT_UNFOCUS: dlg_editbox_set(ctrl, charset); update_locale(); when EVENT_VALCHANGE or EVENT_SELCHANGE: dlg_editbox_get(ctrl, charset, sizeof cfg.charset); if (event == EVENT_SELCHANGE) { if (*charset == '(') *charset = 0; else *strchr(charset, ' ') = 0; update_locale(); } } }
static void locale_handler(control *ctrl, void *unused(data), int event) { char *locale = new_cfg.locale; switch (event) { when EVENT_REFRESH: dlg_update_start(ctrl); dlg_listbox_clear(ctrl); const char *l; for (int i = 0; (l = locale_menu[i]); i++) dlg_listbox_add(ctrl, l); dlg_update_done(ctrl); dlg_editbox_set(ctrl, locale); when EVENT_UNFOCUS: dlg_editbox_set(ctrl, locale); update_charset(); when EVENT_VALCHANGE or EVENT_SELCHANGE: dlg_editbox_get(ctrl, locale, sizeof cfg.locale); if (event == EVENT_SELCHANGE) { if (*locale == '(') *locale = 0; update_charset(); } } }
static void string_handler(control *ctrl, void *data, int event) { int offset = ctrl->context.i; int size = ctrl->editbox.context2.i; char *buf = &atoffset(char, data, offset); switch (event) { when EVENT_VALCHANGE: dlg_editbox_get(ctrl, buf, size); when EVENT_REFRESH: dlg_editbox_set(ctrl, buf); } }
void dlg_stdintbox_handler(control *ctrl, int event) { int *ip = ctrl->context; if (event == EVENT_VALCHANGE) { string val = 0; dlg_editbox_get(ctrl, &val); *ip = max(0, atoi(val)); delete(val); } else if (event == EVENT_REFRESH) { char buf[16]; sprintf(buf, "%i", *ip); dlg_editbox_set(ctrl, buf); } }
static void int_handler(control *ctrl, void *data, int event) { int offset = ctrl->context.i; int limit = ctrl->editbox.context2.i; int *field = &atoffset(int, data, offset); char buf[16]; switch (event) { when EVENT_VALCHANGE: dlg_editbox_get(ctrl, buf, lengthof(buf)); *field = max(0, min(atoi(buf), limit)); when EVENT_REFRESH: sprintf(buf, "%i", *field); dlg_editbox_set(ctrl, buf); } }
static void term_handler(control *ctrl, void *unused(data), int event) { switch (event) { when EVENT_REFRESH: dlg_update_start(ctrl); dlg_listbox_clear(ctrl); dlg_listbox_add(ctrl, "xterm"); dlg_listbox_add(ctrl, "xterm-256color"); dlg_listbox_add(ctrl, "vt100"); dlg_update_done(ctrl); dlg_editbox_set(ctrl, new_cfg.term); when EVENT_VALCHANGE or EVENT_SELCHANGE: dlg_editbox_get(ctrl, new_cfg.term, sizeof cfg.term); } }
static void printerbox_handler(control *ctrl, void *unused(data), int event) { if (event == EVENT_REFRESH) { dlg_update_start(ctrl); dlg_listbox_clear(ctrl); dlg_listbox_add(ctrl, PRINTER_DISABLED_STRING); uint num = printer_start_enum(); for (uint i = 0; i < num; i++) dlg_listbox_add(ctrl, printer_get_name(i)); printer_finish_enum(); dlg_editbox_set( ctrl, *new_cfg.printer ? new_cfg.printer : PRINTER_DISABLED_STRING ); dlg_update_done(ctrl); } else if (event == EVENT_VALCHANGE || event == EVENT_SELCHANGE) { dlg_editbox_get(ctrl, new_cfg.printer, sizeof (cfg.printer)); if (strcmp(new_cfg.printer, PRINTER_DISABLED_STRING) == 0) *new_cfg.printer = '\0'; } }