5 #include <sys/ttydefaults.h>
16 static void ui_browser__argv_write(struct ui_browser
*browser
,
20 bool current_entry
= ui_browser__is_current_entry(browser
, row
);
22 ui_browser__set_color(browser
, current_entry
? HE_COLORSET_SELECTED
:
24 slsmg_write_nstring(*arg
, browser
->width
);
27 static int popup_menu__run(struct ui_browser
*menu
)
31 if (ui_browser__show(menu
, " ", "ESC: exit, ENTER|->: Select option") < 0)
35 key
= ui_browser__run(menu
, 0);
55 ui_browser__hide(menu
);
59 int ui__popup_menu(int argc
, char * const argv
[])
61 struct ui_browser menu
= {
62 .entries
= (void *)argv
,
63 .refresh
= ui_browser__argv_refresh
,
64 .seek
= ui_browser__argv_seek
,
65 .write
= ui_browser__argv_write
,
69 return popup_menu__run(&menu
);
72 int ui__question_window(const char *title
, const char *text
,
73 const char *exit_msg
, int delay_secs
)
76 int max_len
= 0, nr_lines
= 0;
81 const char *sep
= strchr(t
, '\n');
85 sep
= strchr(t
, '\0');
97 y
= SLtt_Screen_Rows
/ 2 - nr_lines
/ 2,
98 x
= SLtt_Screen_Cols
/ 2 - max_len
/ 2;
101 SLsmg_draw_box(y
, x
++, nr_lines
, max_len
);
103 SLsmg_gotorc(y
, x
+ 1);
104 SLsmg_write_string((char *)title
);
106 SLsmg_gotorc(++y
, x
);
109 SLsmg_write_wrapped_string((unsigned char *)text
, y
, x
,
110 nr_lines
, max_len
, 1);
111 SLsmg_gotorc(y
+ nr_lines
- 2, x
);
112 SLsmg_write_nstring((char *)" ", max_len
);
113 SLsmg_gotorc(y
+ nr_lines
- 1, x
);
114 SLsmg_write_nstring((char *)exit_msg
, max_len
);
116 return ui__getch(delay_secs
);
119 int ui__help_window(const char *text
)
121 return ui__question_window("Help", text
, "Press any key...", 0);
124 int ui__dialog_yesno(const char *msg
)
126 return ui__question_window(NULL
, msg
, "Enter: Yes, ESC: No", 0);
129 int __ui__warning(const char *title
, const char *format
, va_list args
)
133 if (use_browser
> 0 && vasprintf(&s
, format
, args
) > 0) {
136 pthread_mutex_lock(&ui__lock
);
137 key
= ui__question_window(title
, s
, "Press any key...", 0);
138 pthread_mutex_unlock(&ui__lock
);
143 fprintf(stderr
, "%s:\n", title
);
144 vfprintf(stderr
, format
, args
);
148 int ui__warning(const char *format
, ...)
153 va_start(args
, format
);
154 key
= __ui__warning("Warning", format
, args
);
159 int ui__error(const char *format
, ...)
164 va_start(args
, format
);
165 key
= __ui__warning("Error", format
, args
);