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