X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=test%2Fform_driver_w.c;h=868ca70291229896ca032b234a56baa47349da57;hp=276209f49440fef83762c2d41568b0b21954ab9d;hb=d66080c21038ad4feb2e41a0c4e517d5b4a03ab2;hpb=02788b9c63ac2668473510a98fa151ecc0fb1e39 diff --git a/test/form_driver_w.c b/test/form_driver_w.c index 276209f4..868ca702 100644 --- a/test/form_driver_w.c +++ b/test/form_driver_w.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2013 Free Software Foundation, Inc. * + * Copyright (c) 2013-2014,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -31,26 +31,38 @@ ****************************************************************************/ /* - * $Id: form_driver_w.c,v 1.9 2013/12/07 20:35:54 tom Exp $ + * $Id: form_driver_w.c,v 1.15 2017/04/15 20:41:35 tom Exp $ * * Test form_driver_w (int, int, wchar_t), a wide char aware * replacement of form_driver. */ -#include - #include +#include -#if USE_WIDEC_SUPPORT && USE_LIBFORM +#if USE_WIDEC_SUPPORT && USE_LIBFORM && (defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH >= 20131207) #include int main(void) { - FIELD *field[3]; + static const char *help[] = + { + "Commands:", + " ^D,^Q,ESC - quit program", + " , - move to next field", + " , - move to previous field", + 0 + }; + +#define NUM_FIELDS 3 +#define MyRow(n) (4 + (n) * 2) +#define MyCol(n) 10 + FIELD *field[NUM_FIELDS + 1]; FORM *my_form; bool done = FALSE; + int n; setlocale(LC_ALL, ""); @@ -61,32 +73,34 @@ main(void) keypad(stdscr, TRUE); /* Initialize the fields */ - field[0] = new_field(1, 10, 4, 18, 0, 0); - field[1] = new_field(1, 10, 6, 18, 0, 0); - field[2] = NULL; - - /* Set field options */ - set_field_back(field[0], A_UNDERLINE); /* Print a line for the option */ - field_opts_off(field[0], O_AUTOSKIP); /* Don't go to next field when this */ - /* Field is filled up */ - set_field_back(field[1], A_UNDERLINE); - field_opts_off(field[1], O_AUTOSKIP); + for (n = 0; n < NUM_FIELDS; ++n) { + field[n] = new_field(1, 10, MyRow(n), 18, 0, 0); + set_field_back(field[n], A_UNDERLINE); + /* Print a line for the option */ + field_opts_off(field[n], O_AUTOSKIP); + /* Don't go to next field when this is filled */ + } + field[n] = NULL; /* Create the form and post it */ my_form = new_form(field); post_form(my_form); refresh(); - mvprintw(4, 10, "Value 1:"); - mvprintw(6, 10, "Value 2:"); - refresh(); + for (n = 0; n < NUM_FIELDS; ++n) { + mvprintw(MyRow(n), MyCol(n), "Value %d:", n + 1); + } /* Loop through to get user requests */ while (!done) { wint_t ch; int ret = get_wch(&ch); - mvprintw(8, 10, "Got %d (%#x), type: %s", ch, ch, + mvprintw(MyRow(NUM_FIELDS), + MyCol(NUM_FIELDS), + "Got %d (%#x), type: %s", + (int) ch, + (int) ch, (ret == KEY_CODE_YES) ? "KEY_CODE_YES" : ((ret == OK) @@ -101,22 +115,18 @@ main(void) switch (ch) { case KEY_DOWN: /* Go to next field */ - form_driver(my_form, REQ_NEXT_FIELD); + form_driver_w(my_form, KEY_CODE_YES, REQ_NEXT_FIELD); /* Go to the end of the present buffer */ /* Leaves nicely at the last character */ - form_driver(my_form, REQ_END_LINE); + form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); break; + case KEY_BTAB: case KEY_UP: /* Go to previous field */ - form_driver(my_form, REQ_PREV_FIELD); - form_driver(my_form, REQ_END_LINE); + form_driver_w(my_form, KEY_CODE_YES, REQ_PREV_FIELD); + form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); break; default: -#if 0 - /* If this is a normal character, it gets printed */ - form_driver(my_form, ch); - wadd_wch(my_form->current->working, ch); -#endif break; } break; @@ -127,8 +137,15 @@ main(void) case ESCAPE: done = TRUE; break; + case '\t': + form_driver_w(my_form, KEY_CODE_YES, REQ_NEXT_FIELD); + form_driver_w(my_form, KEY_CODE_YES, REQ_END_LINE); + break; + case HELP_KEY_1: + popup_msg(form_win(my_form), help); + break; default: - form_driver_w(my_form, OK, ch); + form_driver_w(my_form, OK, (wchar_t) ch); break; } break; @@ -138,8 +155,9 @@ main(void) /* Un post form and free the memory */ unpost_form(my_form); free_form(my_form); - free_field(field[0]); - free_field(field[1]); + for (n = 0; n < NUM_FIELDS; ++n) { + free_field(field[n]); + } endwin(); ExitProgram(EXIT_SUCCESS);