|
@@ -16,6 +16,7 @@
|
16
|
16
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
17
|
17
|
*/
|
18
|
18
|
|
|
19
|
+#include <unistd.h>
|
19
|
20
|
#include <string.h>
|
20
|
21
|
#include <curses.h>
|
21
|
22
|
#include <console.h>
|
|
@@ -35,10 +36,12 @@ extern struct nvo_block *ugly_nvo_hack;
|
35
|
36
|
#define CPAIR_NORMAL 1
|
36
|
37
|
#define CPAIR_SELECT 2
|
37
|
38
|
#define CPAIR_EDIT 3
|
|
39
|
+#define CPAIR_ALERT 4
|
38
|
40
|
|
39
|
41
|
/* Screen layout */
|
40
|
42
|
#define SETTINGS_LIST_ROW 3
|
41
|
43
|
#define SETTINGS_LIST_COL 1
|
|
44
|
+#define ALERT_ROW 20
|
42
|
45
|
|
43
|
46
|
/** Layout of text within a setting widget */
|
44
|
47
|
struct setting_row {
|
|
@@ -107,7 +110,6 @@ static void load_setting ( struct setting_widget *widget ) {
|
107
|
110
|
* @v widget Setting widget
|
108
|
111
|
*/
|
109
|
112
|
static int save_setting ( struct setting_widget *widget ) {
|
110
|
|
- widget->editing = 0;
|
111
|
113
|
return widget->setting->type->set ( widget->context, widget->setting,
|
112
|
114
|
widget->value );
|
113
|
115
|
}
|
|
@@ -203,6 +205,23 @@ static void init_setting_index ( struct setting_widget *widget,
|
203
|
205
|
( SETTINGS_LIST_ROW + index ), SETTINGS_LIST_COL );
|
204
|
206
|
}
|
205
|
207
|
|
|
208
|
+static void alert ( const char *fmt, ... ) {
|
|
209
|
+ char buf[COLS];
|
|
210
|
+ va_list args;
|
|
211
|
+ size_t len;
|
|
212
|
+
|
|
213
|
+ va_start ( args, fmt );
|
|
214
|
+ len = vsnprintf ( buf, sizeof ( buf ), fmt, args );
|
|
215
|
+ va_end ( args );
|
|
216
|
+
|
|
217
|
+ color_set ( CPAIR_ALERT, NULL );
|
|
218
|
+ mvprintw ( ALERT_ROW, ( ( COLS - len ) / 2 ), "%s", buf );
|
|
219
|
+ sleep ( 2 );
|
|
220
|
+ color_set ( CPAIR_NORMAL, NULL );
|
|
221
|
+ move ( ALERT_ROW, 0 );
|
|
222
|
+ clrtoeol();
|
|
223
|
+}
|
|
224
|
+
|
206
|
225
|
static void main_loop ( struct config_context *context ) {
|
207
|
226
|
struct setting_widget widget;
|
208
|
227
|
unsigned int current = 0;
|
|
@@ -231,9 +250,11 @@ static void main_loop ( struct config_context *context ) {
|
231
|
250
|
switch ( key ) {
|
232
|
251
|
case 0x0a: /* Enter */
|
233
|
252
|
if ( ( rc = save_setting ( &widget ) ) != 0 ) {
|
234
|
|
-
|
|
253
|
+ alert ( " Could not set %s: %s ",
|
|
254
|
+ widget.setting->name,
|
|
255
|
+ strerror ( -rc ) );
|
235
|
256
|
}
|
236
|
|
- break;
|
|
257
|
+ /* Fall through */
|
237
|
258
|
case 0x03: /* Ctrl-C */
|
238
|
259
|
load_setting ( &widget );
|
239
|
260
|
break;
|
|
@@ -274,8 +295,9 @@ void uitest ( void ) {
|
274
|
295
|
initscr();
|
275
|
296
|
start_color();
|
276
|
297
|
init_pair ( CPAIR_NORMAL, COLOR_WHITE, COLOR_BLUE );
|
277
|
|
- init_pair ( CPAIR_SELECT, COLOR_WHITE, COLOR_RED );
|
278
|
|
- init_pair ( CPAIR_EDIT, COLOR_BLACK, COLOR_GREEN );
|
|
298
|
+ init_pair ( CPAIR_SELECT, COLOR_BLACK, COLOR_WHITE );
|
|
299
|
+ init_pair ( CPAIR_EDIT, COLOR_BLACK, COLOR_CYAN );
|
|
300
|
+ init_pair ( CPAIR_ALERT, COLOR_WHITE, COLOR_RED );
|
279
|
301
|
color_set ( CPAIR_NORMAL, NULL );
|
280
|
302
|
erase();
|
281
|
303
|
|