/** * @file tui.cpp * @brief display user interface * @author hendrik schutter * @date 03.08.2020 */ #include "../../include/reHDD.h" TUI::TUI(void) { } /** * \brief wipe drive with shred * \param pointer of Drive instance * \return void */ void TUI::initTUI() { initscr(); raw(); keypad(stdscr,TRUE); if(has_colors() == TRUE) { start_color(); } else { printf("Your terminal does not support color\n"); exit(1); } clear(); curs_set(0); init_color(COLOR_GRAY, 173, 170, 173); init_pair(COLOR_AREA_STDSCR,COLOR_WHITE, COLOR_BLUE); wbkgd(stdscr, COLOR_PAIR(COLOR_AREA_STDSCR)); int stdscrX, stdscrY; getmaxyx(stdscr, stdscrY, stdscrX); mvprintw(0, 2, "reHDD - HDD refurbishing tool - Licensed under GPL 3.0 X:%d Y:%d",stdscrX,stdscrY); } void TUI::updateTUI(vector * pvecDrives) { //werase(stdscr); int stdscrX, stdscrY; getmaxyx(stdscr, stdscrY, stdscrX); init_pair(COLOR_AREA_STDSCR,COLOR_WHITE, COLOR_BLUE); wbkgd(stdscr, COLOR_PAIR(COLOR_AREA_STDSCR)); // mvprintw(0, 2, "reHDD - HDD refurbishing tool - Licensed under GPL 3.0 X:%d Y:%d",stdscrX,stdscrY); refresh(); overview=createOverViewWindow((int)(stdscrX/3), (stdscrY-15)); wrefresh(overview); detailview=createDetailViewWindow(((stdscrX)-(int)(stdscrX/3)-7), (stdscrY-3), (int)(stdscrX/3)+5); wrefresh(detailview); vWinDriveEntries.clear(); // int i = 0; vector ::iterator it; for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) { string sModelFamily = it->getModelFamily(); string sModelName = it->getModelName(); string sCapacity = it->sCapacityToText(); WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity); // WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (i) )+3, sModelFamily, sModelName, sCapacity); // vWinDriveEntries.push_back(tmp); wrefresh(tmp); // i++; } } void TUI::centerTitle(WINDOW *pwin, const char * title) { int x, maxX, stringSize; getmaxyx(pwin, maxX, maxX); stringSize = 4 + strlen(title); x = (maxX - stringSize)/2; mvwaddch(pwin, 0, x, ACS_RTEE); waddch(pwin, ' '); waddstr(pwin, title); waddch(pwin, ' '); waddch(pwin, ACS_LTEE); } WINDOW* TUI::createOverViewWindow( int iXSize, int iYSize) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, 2, 2); init_pair(COLOR_AREA_OVERVIEW, COLOR_BLACK, COLOR_GRAY); wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_OVERVIEW)); box(newWindow, ACS_VLINE, ACS_HLINE); time_t rawtime; struct tm * timeinfo; char buffer[80]; time (&rawtime); timeinfo = localtime(&rawtime); strftime(buffer,sizeof(buffer),"%d-%m-%Y %H:%M:%S",timeinfo); std::string str(buffer); centerTitle(newWindow, str.c_str()); //mvwaddstr(newWindow, 2, 3, "Drücke eine Taste"); //refresh(); return newWindow; } WINDOW* TUI::createDetailViewWindow( int iXSize, int iYSize, int iXStart) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, 2, iXStart); init_pair(COLOR_AREA_OVERVIEW, COLOR_BLACK, COLOR_GRAY); wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_OVERVIEW)); box(newWindow, ACS_VLINE, ACS_HLINE); centerTitle(newWindow, "Selected Drive: xyz"); return newWindow; } WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, string sModelFamily, string sModelName, string sCapacity) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); init_pair(COLOR_AREA_ENTRY, COLOR_BLACK, COLOR_GRAY); wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY)); box(newWindow, ACS_VLINE, ACS_HLINE); attron(COLOR_PAIR(COLOR_AREA_ENTRY)); mvwaddstr(newWindow,1, 1, sModelFamily.c_str()); mvwaddstr(newWindow,2, 1, sModelName.c_str()); mvwaddstr(newWindow,3, 1, sCapacity.c_str()); // refresh(); return newWindow; }