]>
Commit | Line | Data |
---|---|---|
f9224c5c | 1 | #include <newt.h> |
d1b4f249 ACM |
2 | #include <signal.h> |
3 | #include <stdio.h> | |
4 | #include <stdbool.h> | |
5 | #include <string.h> | |
7081e087 | 6 | #include <sys/ttydefaults.h> |
f9224c5c | 7 | |
1e6dd077 ACM |
8 | #include "../cache.h" |
9 | #include "../debug.h" | |
10 | #include "browser.h" | |
11 | #include "helpline.h" | |
12 | #include "util.h" | |
f9224c5c | 13 | |
7081e087 ACM |
14 | static void newt_form__set_exit_keys(newtComponent self) |
15 | { | |
a308f3a8 | 16 | newtFormAddHotKey(self, NEWT_KEY_LEFT); |
7081e087 ACM |
17 | newtFormAddHotKey(self, NEWT_KEY_ESCAPE); |
18 | newtFormAddHotKey(self, 'Q'); | |
19 | newtFormAddHotKey(self, 'q'); | |
20 | newtFormAddHotKey(self, CTRL('c')); | |
21 | } | |
22 | ||
4c1c952e | 23 | static newtComponent newt_form__new(void) |
7081e087 ACM |
24 | { |
25 | newtComponent self = newtForm(NULL, NULL, 0); | |
26 | if (self) | |
27 | newt_form__set_exit_keys(self); | |
28 | return self; | |
29 | } | |
30 | ||
1e6dd077 | 31 | int ui__popup_menu(int argc, char * const argv[]) |
53c54019 ACM |
32 | { |
33 | struct newtExitStruct es; | |
34 | int i, rc = -1, max_len = 5; | |
35 | newtComponent listbox, form = newt_form__new(); | |
36 | ||
37 | if (form == NULL) | |
38 | return -1; | |
39 | ||
40 | listbox = newtListbox(0, 0, argc, NEWT_FLAG_RETURNEXIT); | |
41 | if (listbox == NULL) | |
42 | goto out_destroy_form; | |
43 | ||
7f826453 | 44 | newtFormAddComponent(form, listbox); |
53c54019 ACM |
45 | |
46 | for (i = 0; i < argc; ++i) { | |
47 | int len = strlen(argv[i]); | |
48 | if (len > max_len) | |
49 | max_len = len; | |
50 | if (newtListboxAddEntry(listbox, argv[i], (void *)(long)i)) | |
51 | goto out_destroy_form; | |
52 | } | |
53 | ||
54 | newtCenteredWindow(max_len, argc, NULL); | |
55 | newtFormRun(form, &es); | |
56 | rc = newtListboxGetCurrent(listbox) - NULL; | |
57 | if (es.reason == NEWT_EXIT_HOTKEY) | |
58 | rc = -1; | |
59 | newtPopWindow(); | |
60 | out_destroy_form: | |
61 | newtFormDestroy(form); | |
62 | return rc; | |
63 | } | |
64 | ||
d1b4f249 | 65 | int ui__help_window(const char *text) |
a9a4ab74 ACM |
66 | { |
67 | struct newtExitStruct es; | |
68 | newtComponent tb, form = newt_form__new(); | |
69 | int rc = -1; | |
70 | int max_len = 0, nr_lines = 0; | |
71 | const char *t; | |
72 | ||
73 | if (form == NULL) | |
74 | return -1; | |
75 | ||
76 | t = text; | |
77 | while (1) { | |
78 | const char *sep = strchr(t, '\n'); | |
79 | int len; | |
80 | ||
81 | if (sep == NULL) | |
82 | sep = strchr(t, '\0'); | |
83 | len = sep - t; | |
84 | if (max_len < len) | |
85 | max_len = len; | |
86 | ++nr_lines; | |
87 | if (*sep == '\0') | |
88 | break; | |
89 | t = sep + 1; | |
90 | } | |
91 | ||
92 | tb = newtTextbox(0, 0, max_len, nr_lines, 0); | |
93 | if (tb == NULL) | |
94 | goto out_destroy_form; | |
95 | ||
96 | newtTextboxSetText(tb, text); | |
97 | newtFormAddComponent(form, tb); | |
98 | newtCenteredWindow(max_len, nr_lines, NULL); | |
99 | newtFormRun(form, &es); | |
100 | newtPopWindow(); | |
101 | rc = 0; | |
102 | out_destroy_form: | |
103 | newtFormDestroy(form); | |
104 | return rc; | |
105 | } | |
106 | ||
a3da8e45 CG |
107 | static const char yes[] = "Yes", no[] = "No"; |
108 | ||
1e6dd077 | 109 | bool ui__dialog_yesno(const char *msg) |
53c54019 ACM |
110 | { |
111 | /* newtWinChoice should really be accepting const char pointers... */ | |
a3da8e45 | 112 | return newtWinChoice(NULL, (char *)yes, (char *)no, (char *)msg) == 1; |
53c54019 | 113 | } |