* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#define _GNU_SOURCE
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
#include <assert.h>
#include <errno.h>
#include "log/log.h"
#include "talloc/talloc.h"
#include "ui/common/ui-system.h"
+#include "nc-cui.h"
#include "nc-menu.h"
/**
set_item_userptr(nci, i);
- menu->scr.unpost(&menu->scr);
+ nc_scr_unpost(&menu->scr);
set_menu_items(menu->ncm, NULL);
// FIXME: need to assure item name is a talloc string.
i->nci = nci;
set_menu_items(menu->ncm, menu->items);
- menu->scr.post(&menu->scr);
+ nc_scr_post(&menu->scr);
return 0;
}
* pmenu_process_key - Process a user keystroke.
*/
-static void pmenu_process_key(struct nc_scr *scr)
+static void pmenu_process_key(struct nc_scr *scr, int key)
{
struct pmenu *menu = pmenu_from_scr(scr);
struct pmenu_item *item = pmenu_find_selected(menu);
nc_scr_status_free(&menu->scr);
- while (1) {
- int c = getch();
-
- if (c == ERR)
- return;
-
- DBGS("%d (%o)\n", c, c);
-
- if (menu->hot_key)
- c = menu->hot_key(menu, item, c);
-
- switch (c) {
- case 27: /* ESC */
- if (menu->on_exit)
- menu->on_exit(menu);
- nc_flush_keys();
- return;
-
- case KEY_PPAGE:
- pmenu_move_cursor(menu, REQ_SCR_UPAGE);
- break;
- case KEY_NPAGE:
- pmenu_move_cursor(menu, REQ_SCR_DPAGE);
- break;
- case KEY_HOME:
- pmenu_move_cursor(menu, REQ_FIRST_ITEM);
- break;
- case KEY_END:
- pmenu_move_cursor(menu, REQ_LAST_ITEM);
- break;
- case KEY_UP:
- pmenu_move_cursor(menu, REQ_UP_ITEM);
- break;
- case KEY_DOWN:
- pmenu_move_cursor(menu, REQ_DOWN_ITEM);
- break;
- case 'e':
- if (item->on_edit)
- item->on_edit(item);
- break;
- case 'o':
- DBGS("on_open: %p\n", menu->on_open);
- if (menu->on_open)
- menu->on_open(menu);
- break;
- case '\n':
- case '\r':
- if (item->on_execute)
- item->on_execute(item);
- break;
- default:
- menu_driver(menu->ncm, c);
- break;
- }
+ if (menu->hot_key)
+ key = menu->hot_key(menu, item, key);
+
+ switch (key) {
+ case 27: /* ESC */
+ case 'x':
+ if (menu->on_exit)
+ menu->on_exit(menu);
+ nc_flush_keys();
+ return;
+
+ case KEY_PPAGE:
+ pmenu_move_cursor(menu, REQ_SCR_UPAGE);
+ break;
+ case KEY_NPAGE:
+ pmenu_move_cursor(menu, REQ_SCR_DPAGE);
+ break;
+ case KEY_HOME:
+ pmenu_move_cursor(menu, REQ_FIRST_ITEM);
+ break;
+ case KEY_END:
+ pmenu_move_cursor(menu, REQ_LAST_ITEM);
+ break;
+ case KEY_UP:
+ pmenu_move_cursor(menu, REQ_UP_ITEM);
+ break;
+ case KEY_BTAB:
+ pmenu_move_cursor(menu, REQ_PREV_ITEM);
+ break;
+ case KEY_DOWN:
+ pmenu_move_cursor(menu, REQ_DOWN_ITEM);
+ break;
+ case '\t':
+ pmenu_move_cursor(menu, REQ_NEXT_ITEM);
+ break;
+ case 'e':
+ if (item->on_edit)
+ item->on_edit(item);
+ break;
+ case 'n':
+ if (menu->on_new)
+ menu->on_new(menu);
+ break;
+ case ' ':
+ case '\n':
+ case '\r':
+ if (item->on_execute)
+ item->on_execute(item);
+ break;
+ case 'i':
+ cui_show_sysinfo(cui_from_arg(scr->ui_ctx));
+ break;
+ case 'c':
+ cui_show_config(cui_from_arg(scr->ui_ctx));
+ break;
+ case KEY_F(1):
+ case 'h':
+ if (menu->help_text)
+ cui_show_help(cui_from_arg(scr->ui_ctx),
+ menu->help_title, menu->help_text);
+ break;
+ default:
+ menu_driver(menu->ncm, key);
+ break;
}
}
/* Makes menu scrollable. */
set_menu_format(menu->ncm, LINES - nc_scr_frame_lines, 1);
+ set_menu_grey(menu->ncm, A_NORMAL);
+
return 0;
}