2020-08-03 22:40:07 +02:00
/**
* @ file tui . cpp
* @ brief display user interface
* @ author hendrik schutter
* @ date 03.08 .2020
*/
2020-08-04 22:35:29 +02:00
# include "../../include/reHDD.h"
2020-08-06 11:41:38 +02:00
TUI : : TUI ( void ) {
2020-08-04 22:35:29 +02:00
}
2020-08-03 22:40:07 +02:00
/**
* \ brief wipe drive with shred
* \ param pointer of Drive instance
* \ return void
*/
2020-08-04 22:35:29 +02:00
2020-08-03 22:40:07 +02:00
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 ) ;
2020-08-06 11:41:38 +02:00
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 ) ;
2020-08-03 22:40:07 +02:00
}
2020-08-04 22:35:29 +02:00
void TUI : : updateTUI ( vector < Drive > * pvecDrives ) {
2020-08-06 11:41:38 +02:00
//werase(stdscr);
2020-08-04 22:35:29 +02:00
int stdscrX , stdscrY ;
getmaxyx ( stdscr , stdscrY , stdscrX ) ;
init_pair ( COLOR_AREA_STDSCR , COLOR_WHITE , COLOR_BLUE ) ;
wbkgd ( stdscr , COLOR_PAIR ( COLOR_AREA_STDSCR ) ) ;
2020-08-06 11:41:38 +02:00
// mvprintw(0, 2, "reHDD - HDD refurbishing tool - Licensed under GPL 3.0 X:%d Y:%d",stdscrX,stdscrY);
2020-08-04 22:35:29 +02:00
refresh ( ) ;
2020-08-03 22:40:07 +02:00
2020-08-04 22:35:29 +02:00
overview = createOverViewWindow ( ( int ) ( stdscrX / 3 ) , ( stdscrY - 15 ) ) ;
wrefresh ( overview ) ;
2020-08-03 22:40:07 +02:00
2020-08-04 22:35:29 +02:00
detailview = createDetailViewWindow ( ( ( stdscrX ) - ( int ) ( stdscrX / 3 ) - 7 ) , ( stdscrY - 3 ) , ( int ) ( stdscrX / 3 ) + 5 ) ;
wrefresh ( detailview ) ;
2020-08-03 22:40:07 +02:00
2020-08-04 22:35:29 +02:00
vWinDriveEntries . clear ( ) ;
2020-08-03 22:40:07 +02:00
2020-08-06 11:41:38 +02:00
// int i = 0;
2020-08-04 22:35:29 +02:00
vector < Drive > : : iterator it ;
for ( it = pvecDrives - > begin ( ) ; it ! = pvecDrives - > end ( ) ; + + it )
{
string sModelFamily = it - > getModelFamily ( ) ;
string sModelName = it - > getModelName ( ) ;
string sCapacity = it - > sCapacityToText ( ) ;
2020-08-06 11:41:38 +02:00
WINDOW * tmp = createEntryWindow ( ( ( int ) ( stdscrX / 3 ) - 2 ) , 5 , 3 , ( 5 * ( it - pvecDrives - > begin ( ) ) ) + 3 , sModelFamily , sModelName , sCapacity ) ;
2020-08-04 22:35:29 +02:00
2020-08-06 11:41:38 +02:00
// WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (i) )+3, sModelFamily, sModelName, sCapacity);
2020-08-04 22:35:29 +02:00
2020-08-06 11:41:38 +02:00
// vWinDriveEntries.push_back(tmp);
2020-08-04 22:35:29 +02:00
wrefresh ( tmp ) ;
2020-08-06 11:41:38 +02:00
// i++;
2020-08-04 22:35:29 +02:00
}
}
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 ;
2020-08-06 11:41:38 +02:00
struct tm * timeinfo ;
char buffer [ 80 ] ;
2020-08-04 22:35:29 +02:00
2020-08-06 11:41:38 +02:00
time ( & rawtime ) ;
timeinfo = localtime ( & rawtime ) ;
2020-08-04 22:35:29 +02:00
2020-08-06 11:41:38 +02:00
strftime ( buffer , sizeof ( buffer ) , " %d-%m-%Y %H:%M:%S " , timeinfo ) ;
std : : string str ( buffer ) ;
2020-08-04 22:35:29 +02:00
centerTitle ( newWindow , str . c_str ( ) ) ;
2020-08-06 11:41:38 +02:00
//mvwaddstr(newWindow, 2, 3, "Drücke eine Taste");
//refresh();
2020-08-04 22:35:29 +02:00
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 ) ) ;
2020-08-06 11:41:38 +02:00
mvwaddstr ( newWindow , 1 , 1 , sModelFamily . c_str ( ) ) ;
mvwaddstr ( newWindow , 2 , 1 , sModelName . c_str ( ) ) ;
mvwaddstr ( newWindow , 3 , 1 , sCapacity . c_str ( ) ) ;
2020-08-04 22:35:29 +02:00
2020-08-06 11:41:38 +02:00
// refresh();
2020-08-04 22:35:29 +02:00
return newWindow ;
}