#include "ui.hpp" #include "configFile.hpp" #include "textos.hpp" #include using namespace std; int ui::g_maxLines = 0; int ui::g_maxCols = 0; int ui::g_begLine = 0; int ui::g_begCol = 0; int ui::g_menuWith = 30; bool ui::g_mensaje = false; int8_t ui::initUI(const int8_t *menu_principal, const int8_t *menu_error) { initscr(); noecho(); cbreak(); if (!has_colors()) { printw(txt::g_noColor.c_str()); getch(); return -1; } start_color(); init_pair(*menu_principal, COLOR_WHITE, COLOR_BLACK); init_pair(*menu_error, COLOR_RED, COLOR_BLACK); curs_set(0); getbegyx(stdscr, ui::g_begLine, ui::g_begCol); getmaxyx(stdscr, ui::g_maxLines, ui::g_maxCols); return 0; } void ui::closeUI() { echo(); nocbreak(); curs_set(1); endwin(); } void ui::showCenterMensaje(vector *mensaje, const int8_t *menu_color) { int startLine = (g_maxLines - mensaje->size()) / 2; attron(COLOR_PAIR(*menu_color)); for (int i = 0; i < mensaje->size(); i++) { move(startLine + i, (g_maxCols - mensaje->at(i).length()) / 2); printw(mensaje->at(i).c_str()); refresh(); } attroff(COLOR_PAIR(*menu_color)); g_mensaje = false; } vector ui::showCentralInputBox(std::vector *textos, const int8_t *num_box, std::vector *elems, const int8_t *color_error) { return ui::showCentralInputBox(textos, num_box, elems, 0, color_error); } vector ui::showCentralInputBox(vector *textos, const int8_t *num_box, vector *elems, long title_size, const int8_t *color_error) { vector entrada; int start_ver_window = 1; if (title_size != 0) { start_ver_window = title_size + 4; } int height = ui::g_maxLines - (title_size + 4) - 1; WINDOW *centralBOX = newwin(height, ui::g_maxCols - ui::g_menuWith - 4, start_ver_window, ui::g_menuWith + 2); box(centralBOX, 0, 0); for (int i = 0; i < textos->size(); i++) { mvwprintw(centralBOX, i + 1, 1, textos->at(i).c_str()); } wrefresh(centralBOX); echo(); nocbreak(); curs_set(1); char input[10]; string cleaner; for (int i = 0; i < elems->size(); i++) { cleaner = elems->at(i) + " "; mvwprintw(centralBOX, i * 2 + 1 + textos->size(), 1, elems->at(i).c_str()); wrefresh(centralBOX); wgetnstr(centralBOX, input, 10); if (elems->at(i) == txt::g_confHilosInput) { regex integer_expr("(\\+|-)?[[:digit:]]+"); if (regex_match(input, integer_expr)) { entrada.push_back(input); } else { mvwprintw(centralBOX, i * 2 + 1 + textos->size(), 1, cleaner.c_str()); wattron(centralBOX, COLOR_PAIR(*color_error)); mvwprintw(centralBOX, i * 2 + textos->size(), 1, txt::g_confHilosError.c_str()); wattroff(centralBOX, COLOR_PAIR(*color_error)); i--; } } else if (elems->at(i) == txt::g_confTiempoInput) { if (regex_match(input, regex("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$"))) { entrada.push_back(input); } else { mvwprintw(centralBOX, i * 2 + 1 + textos->size(), 1, cleaner.c_str()); wattron(centralBOX, COLOR_PAIR(*color_error)); mvwprintw(centralBOX, i * 2 + textos->size(), 1, txt::g_confTiempoError.c_str()); wattroff(centralBOX, COLOR_PAIR(*color_error)); i--; } } } curs_set(0); noecho(); cbreak(); return entrada; } void ui::showTopTitle(const vector *titulo) { size_t height = titulo->size(); WINDOW *topTitleWin = newwin(height + 3, g_maxCols - 4, 1, 2); attron(A_BOLD); box(topTitleWin, 0, 0); for (int i = 0; i < height; i++) { mvwprintw(topTitleWin, i + 1, (g_maxCols - 4 - titulo->at(i).length()) / 2, titulo->at(i).c_str()); } attroff(A_BOLD); wrefresh(topTitleWin); }