#include #include #include #include #include #include #include "../cache.h" #include "../debug.h" #include "browser.h" #include "helpline.h" #include "util.h" newtComponent newt_form__new(void); static void newt_form__set_exit_keys(newtComponent self) { newtFormAddHotKey(self, NEWT_KEY_LEFT); newtFormAddHotKey(self, NEWT_KEY_ESCAPE); newtFormAddHotKey(self, 'Q'); newtFormAddHotKey(self, 'q'); newtFormAddHotKey(self, CTRL('c')); } newtComponent newt_form__new(void) { newtComponent self = newtForm(NULL, NULL, 0); if (self) newt_form__set_exit_keys(self); return self; } int ui__popup_menu(int argc, char * const argv[]) { struct newtExitStruct es; int i, rc = -1, max_len = 5; newtComponent listbox, form = newt_form__new(); if (form == NULL) return -1; listbox = newtListbox(0, 0, argc, NEWT_FLAG_RETURNEXIT); if (listbox == NULL) goto out_destroy_form; newtFormAddComponent(form, listbox); for (i = 0; i < argc; ++i) { int len = strlen(argv[i]); if (len > max_len) max_len = len; if (newtListboxAddEntry(listbox, argv[i], (void *)(long)i)) goto out_destroy_form; } newtCenteredWindow(max_len, argc, NULL); newtFormRun(form, &es); rc = newtListboxGetCurrent(listbox) - NULL; if (es.reason == NEWT_EXIT_HOTKEY) rc = -1; newtPopWindow(); out_destroy_form: newtFormDestroy(form); return rc; } int ui__help_window(const char *text) { struct newtExitStruct es; newtComponent tb, form = newt_form__new(); int rc = -1; int max_len = 0, nr_lines = 0; const char *t; if (form == NULL) return -1; t = text; while (1) { const char *sep = strchr(t, '\n'); int len; if (sep == NULL) sep = strchr(t, '\0'); len = sep - t; if (max_len < len) max_len = len; ++nr_lines; if (*sep == '\0') break; t = sep + 1; } tb = newtTextbox(0, 0, max_len, nr_lines, 0); if (tb == NULL) goto out_destroy_form; newtTextboxSetText(tb, text); newtFormAddComponent(form, tb); newtCenteredWindow(max_len, nr_lines, NULL); newtFormRun(form, &es); newtPopWindow(); rc = 0; out_destroy_form: newtFormDestroy(form); return rc; } bool ui__dialog_yesno(const char *msg) { /* newtWinChoice should really be accepting const char pointers... */ char yes[] = "Yes", no[] = "No"; return newtWinChoice(NULL, yes, no, (char *)msg) == 1; }