#include #include #include #include #include #include "dabc/api.h" #include "dabc/Manager.h" #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) #define CTRLD 4 const char *choices[] = {"Choice 1", "Choice 2", "Choice 3", "Choice 4", "Exit", nullptr}; std::string fNodeName; struct LevelItem { WINDOW *my_menu_win{nullptr}; MENU *my_menu{nullptr}; ITEM **my_items{nullptr}; unsigned num_items{0}; int winx{0}, winy{0}; LevelItem() { } virtual ~LevelItem() { Delete(); } void Delete() { Hide(); if (my_items) { for(unsigned n = 0; n < num_items; n++) free_item(my_items[n]); delete[] my_items; my_items = nullptr; num_items = 0; } if (my_menu) { free_menu(my_menu); my_menu = nullptr; } if (my_menu_win) { delwin(my_menu_win); my_menu_win = nullptr; } } void SetXY(int x, int y) { winx = x; winy = y; } void CreateWin() { int max = 10; for (unsigned n=0;nmax) max = len; } if (max>40) max = 40; my_menu_win = newwin(num_items+2, max+6, winy, winx); mvprintw(LINES - 4, 0, "Create win at x:%d y:%d", winx, winy); // keypad(my_menu_win, TRUE); /* Set main window and sub window */ set_menu_win(my_menu, my_menu_win); set_menu_sub(my_menu, derwin(my_menu_win, num_items, max+4, 1, 1)); } void CreateTopLevel() { Delete(); num_items = 2; my_items = new ITEM* [num_items+1]; my_items[0] = new_item(fNodeName.c_str(), fNodeName.c_str()); my_items[1] = new_item("Exit", "Exit"); my_items[2] = nullptr; my_menu = new_menu(my_items); menu_opts_off(my_menu, O_SHOWDESC); /* Set menu mark to the string " * " */ set_menu_mark(my_menu, " * "); CreateWin(); Show(); } void CreateFor(dabc::Hierarchy& h) { Delete(); num_items = h.NumChilds()+1; my_items = new ITEM* [num_items+1]; for (unsigned n=0;n=0;n--) items[n].Delete(); endwin(); dabc::DestroyManager(); }