#include "configFile.hpp" #include "ui.hpp" #include using namespace std; const int8_t MENU_PRINCIPAL = 0; const int8_t MENU_INICIAR_STRESS = 1; const int8_t MENU_CONFIGURACION = 2; const int8_t SALIR = 3; const int8_t CONFIGURAR_TODO = 4; const int8_t CONFIGURAR_HILOS = 5; const int8_t CONFIGURAR_TIEMPO = 6; const int8_t CONFIGURAR_MENU_PRINCIPAL = 7; const int8_t MENU_ERROR = 8; const int8_t MENU_TITULO = 9; const int8_t PRIMER_INICIO = 10; const vector TITULO_PRINCIPAL = { "____ ___ __ __ _____ ____ ___ ______ __ ____ _____ ______ " " _______ ____ ", "/ ___| / _ \\| \\/ | ____| __ ) / _ \\| _ \\ \\ / / / ___|| ____| " "_ \\ \\ / / ____| _ \\ ", "\\___ \\| | | | |\\/| | _| | _ \\| | | | | | \\ V / \\___ \\| _| " "| |_) \\ \\ / /| _| | |_) |", " ___) | |_| | | | | |___| |_) | |_| | |_| || | ___) | |___| _ < " "\\ V / | |___| _ < ", "|____/ \\___/|_| |_|_____|____/ \\___/|____/ |_| |____/|_____|_| " "\\_\\ \\_/ |_____|_| \\_\\", "", "_______________________________________________________________________", }; void userInterface(const int8_t *menu); void userInterface(const int8_t *menu, vector *mensaje); void showMenu(vector *menu_elems, const int8_t *num_menu, vector *mensaje); void showMenu(vector *menu_elems, const int8_t *num_menu); int main(int argc, char *argv[]) { if (ui::initUI(&MENU_PRINCIPAL, &MENU_ERROR) != 0) { return -1; } // menu = 12; Config *config = cf::openConfig(); if (config == nullptr) { userInterface(&PRIMER_INICIO); } else { userInterface(&MENU_PRINCIPAL); } ui::closeUI(); return 0; } void userInterface(const int8_t *menu) { /*int8_t menu_num = inputToInt(menu);*/ vector dummy = {""}; userInterface(menu, &dummy); } void userInterface(const int8_t *num_menu, vector *mensaje) { switch (*num_menu) { case CONFIGURAR_MENU_PRINCIPAL: case MENU_PRINCIPAL: { vector elem_menu = {"- Iniciar Stress Test", "- Configurar", "- Salir"}; showMenu(&elem_menu, &MENU_PRINCIPAL, mensaje); break; } case MENU_INICIAR_STRESS: { /*TODO*/ break; } case MENU_CONFIGURACION: { vector elem_menu = {"- Configurar todo", "- Número de hilos", "- Tiempo", "- Menú principal"}; showMenu(&elem_menu, num_menu, mensaje); break; } case CONFIGURAR_TODO: case PRIMER_INICIO: { vector textos_init = { "Toda la configuración se escribirá en " + cf::g_cofigFile, "", ""}; vector elemens = {"- Número de hilos\t> ", "- Tiempo\t\t> "}; ui::showCentralInputBox(&textos_init, &CONFIGURAR_TODO, &elemens, TITULO_PRINCIPAL.size()); userInterface(&MENU_CONFIGURACION, mensaje); break; } case CONFIGURAR_HILOS: { break; } case CONFIGURAR_TIEMPO: { break; } case MENU_TITULO: { break; } case SALIR: { break; } default: { ui::g_mensaje = true; *mensaje = {"¿Como has llegado aquí?", "Por si acaso vamos al menú principal"}; userInterface(&MENU_PRINCIPAL, mensaje); break; } } } void showMenu(vector *menu_elems, const int8_t *num_menu, vector *mensaje) { clear(); if (ui::g_mensaje) { ui::showCenterMensaje(mensaje, &MENU_ERROR); } showMenu(menu_elems, num_menu); } void showMenu(vector *menu_elems, const int8_t *num_menu) { size_t height = menu_elems->size(); attron(COLOR_PAIR(MENU_PRINCIPAL)); WINDOW *menuwin = // newwin(height + 2, g_maxCols - 4, g_maxLines - height - 3, 2); newwin(height + 2, ui::g_menuWith, TITULO_PRINCIPAL.size() + 4, 2); box(menuwin, 0, 0); refresh(); ui::showTopTitle(&TITULO_PRINCIPAL); wrefresh(menuwin); keypad(menuwin, true); int choice = 0; int8_t highlight = 0; switch (*num_menu) { case MENU_PRINCIPAL: { mvwprintw(menuwin, 0, 1, "Menú Principal"); break; } case MENU_CONFIGURACION: { mvwprintw(menuwin, 0, 1, "Configuración"); break; } } while (true) { for (int i = 0; i < height; i++) { if (i == highlight) { wattron(menuwin, A_REVERSE); } if (menu_elems->at(i).length() < (ui::g_menuWith - 4)) { string spaces = ""; for (int j = menu_elems->at(i).length(); j < (ui::g_menuWith - 4); j++) { spaces.append(" "); } // Por algún motivo los acentos y tildes cuentan como un caracter // aparte por lo que hay que añadir un espacio extra. if (menu_elems->at(i).find("á") != std::string::npos | menu_elems->at(i).find("é") != std::string::npos | menu_elems->at(i).find("í") != std::string::npos | menu_elems->at(i).find("ó") != std::string::npos | menu_elems->at(i).find("ú") != std::string::npos | menu_elems->at(i).find("Á") != std::string::npos | menu_elems->at(i).find("É") != std::string::npos | menu_elems->at(i).find("Í") != std::string::npos | menu_elems->at(i).find("Ó") != std::string::npos | menu_elems->at(i).find("Ú") != std::string::npos | menu_elems->at(i).find("ñ") != std::string::npos | menu_elems->at(i).find("Ñ") != std::string::npos) { spaces.append(" "); } menu_elems->at(i).append(spaces); } mvwprintw(menuwin, i + 1, 2, menu_elems->at(i).c_str()); wattroff(menuwin, A_REVERSE); } choice = wgetch(menuwin); switch (choice) { case KEY_UP: { if (highlight > 0) { highlight--; } break; } case KEY_DOWN: { if ((highlight + 1) < height) { highlight++; } break; } default: { break; } } if (choice == 10) { break; } } switch (*num_menu) { case MENU_PRINCIPAL: { highlight++; break; } case MENU_CONFIGURACION: { highlight = highlight + 4; break; } } attroff(COLOR_PAIR(MENU_PRINCIPAL)); userInterface(&highlight); }