refactor menustatr

This commit is contained in:
Hendrik Schutter 2020-08-10 22:52:13 +02:00
parent cf2bb664d7
commit dc5e6b968b
5 changed files with 78 additions and 99 deletions

View File

@ -32,7 +32,6 @@
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
using namespace std; using namespace std;
#include "drive.h" #include "drive.h"
@ -46,7 +45,6 @@ template <typename T, typename I> T* iterator_to_pointer(I i)
return (&(*i)); return (&(*i));
} }
class reHDD class reHDD
{ {
protected: protected:

View File

@ -36,7 +36,7 @@ public:
static void initTUI(); static void initTUI();
void updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry, struct MenuState menustate); void updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry);
static enum UserInput readUserInput(); static enum UserInput readUserInput();
@ -45,9 +45,10 @@ private:
static string sRamUsage; static string sRamUsage;
static string sLocalTime; static string sLocalTime;
WINDOW* detailview;
WINDOW* overview; WINDOW* overview;
WINDOW* systemview; WINDOW* systemview;
WINDOW* detailview;
WINDOW* menuview; WINDOW* menuview;
WINDOW* dialog; WINDOW* dialog;
@ -58,6 +59,8 @@ private:
static WINDOW *createSystemStats(int iXSize, int iYSize, int iYStart); static WINDOW *createSystemStats(int iXSize, int iYSize, int iYStart);
static WINDOW *createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate); static WINDOW *createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate);
static WINDOW *createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string selectedTask, string optionA, string optionB); static WINDOW *createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string selectedTask, string optionA, string optionB);
void displaySelectedDrive(Drive drive, int stdscrX, int stdscrY);
}; };
#endif // TUI_H_ #endif // TUI_H_

View File

@ -51,7 +51,7 @@ void TUI::initTUI()
mvprintw(0, 2, "reHDD - HDD refurbishing tool - GPL 3.0 "); mvprintw(0, 2, "reHDD - HDD refurbishing tool - GPL 3.0 ");
} }
void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry, struct MenuState menustate) void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry)
{ {
int stdscrX, stdscrY; int stdscrX, stdscrY;
getmaxyx(stdscr, stdscrY, stdscrX); getmaxyx(stdscr, stdscrY, stdscrX);
@ -67,10 +67,6 @@ void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry, struct
systemview=createSystemStats((int)(stdscrX/3), 10, (stdscrY-11)); systemview=createSystemStats((int)(stdscrX/3), 10, (stdscrY-11));
wrefresh(systemview); wrefresh(systemview);
menuview=createMenuView(((stdscrX)-(int)(stdscrX/3)-7), 10, (int)(stdscrX/3)+5,(stdscrY-11), menustate);
wrefresh(menuview);
vector <Drive>::iterator it; vector <Drive>::iterator it;
for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it)
{ {
@ -82,24 +78,8 @@ void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry, struct
if(i32SelectedEntry == (it - pvecDrives->begin())) if(i32SelectedEntry == (it - pvecDrives->begin()))
{ {
bSelectedEntry = true; bSelectedEntry = true; //mark this drive in entries list
detailview=createDetailViewWindow(((stdscrX)-(int)(stdscrX/3)-7), (stdscrY-15), (int)(stdscrX/3)+5, pvecDrives->at((it - pvecDrives->begin()))); displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY);
wrefresh(detailview);
if(menustate.bConfirmShred == true)
{
dialog=createDialog(70, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm SHRED", "Press ENTER for SHRED" , "Press ESC for cancel");
wrefresh(dialog);
}
else if(menustate.bConfirmDelete == true)
{
dialog=createDialog(70, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm DELETE", "Press ENTER for DELETE" , "Press ESC for cancel");
wrefresh(dialog);
}
else
{
delwin(dialog);
}
} }
WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, bSelectedEntry); WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, bSelectedEntry);
@ -333,3 +313,63 @@ WINDOW* TUI::createDialog(int iXSize, int iYSize, int iXStart, int iYStart, stri
keypad(newWindow, TRUE); keypad(newWindow, TRUE);
return newWindow; return newWindow;
} }
void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY)
{
struct MenuState menustate;
menustate.bAbort = false;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
menustate.bDelete = false;
menustate.bShred = false;
// set menustate based on drive state
switch (drive.state)
{
case Drive::NONE: //no task running or selected for this drive
menustate.bShred = true;
menustate.bDelete = true;
break;
case Drive::DELETE_ACTIVE : //delete task running for this drive
menustate.bAbort = true;
break;
case Drive::SHRED_ACTIVE : //shred task running for this drive
menustate.bAbort = true;
break;
case Drive::DELETE_SELECTED : //delete task selected for this drive
menustate.bConfirmDelete = true;
break;
case Drive::SHRED_SELECTED : //shred task selected for this drive
menustate.bConfirmShred = true;
break;
case Drive::DELETE_FINISHED : //delete task finished for this drive
case Drive::SHRED_FINISHED : //shred task finished for this drive
break;
default:
break;
}
detailview=createDetailViewWindow(((stdscrX)-(int)(stdscrX/3)-7), (stdscrY-15), (int)(stdscrX/3)+5, drive);
wrefresh(detailview);
menuview=createMenuView(((stdscrX)-(int)(stdscrX/3)-7), 10, (int)(stdscrX/3)+5,(stdscrY-11), menustate);
wrefresh(menuview);
if(menustate.bConfirmShred == true)
{
dialog=createDialog(70, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm SHRED", "Press ENTER for SHRED", "Press ESC for cancel");
wrefresh(dialog);
}
else if(menustate.bConfirmDelete == true)
{
dialog=createDialog(70, 10, ((stdscrX)-(int)(stdscrX/3)-7)-(int)((stdscrX/3)+5)/2,(int)(stdscrY/2)-5, "Confirm DELETE", "Press ENTER for DELETE", "Press ESC for cancel");
wrefresh(dialog);
}
else
{
delwin(dialog);
}
}

View File

@ -88,7 +88,7 @@ string Drive::sPowerCyclesToText()
void Drive::setTaskPercentage(uint8_t u8TaskPercentage) void Drive::setTaskPercentage(uint8_t u8TaskPercentage)
{ {
if((u8TaskPercentage >= 0) && (u8TaskPercentage <= 100)) if(u8TaskPercentage <= 100)
{ {
this->u8TaskPercentage = u8TaskPercentage; this->u8TaskPercentage = u8TaskPercentage;
} }

View File

@ -10,8 +10,6 @@
static int fdSearchDrives[2];//File descriptor for pipe that informs if new drives are found static int fdSearchDrives[2];//File descriptor for pipe that informs if new drives are found
static int fdUserInput[2];//File descriptor for pipe that informs if a user input occoures
static int fdWhipe[2];//File descriptor for pipe that informs if a wipe thread signals static int fdWhipe[2];//File descriptor for pipe that informs if a wipe thread signals
static std::mutex mxScannDrives; static std::mutex mxScannDrives;
@ -26,7 +24,7 @@ static int32_t i32SelectedEntry;
static fd_set selectSet; static fd_set selectSet;
static struct TUI::MenuState menustate; //static struct TUI::MenuState menustate;
/** /**
* \brief app constructor * \brief app constructor
@ -37,8 +35,6 @@ reHDD::reHDD(void)
{ {
cout << "created app" << endl; cout << "created app" << endl;
i32SelectedEntry = 0; i32SelectedEntry = 0;
menustate.bDelete = true;
menustate.bShred = true;
} }
/** /**
@ -74,10 +70,9 @@ void reHDD::app_logic(void)
filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector
mxScannDrives.unlock(); mxScannDrives.unlock();
//printDrives(&vecDrives);
//TODO update UI //TODO update UI
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
} }
else if (FD_ISSET(fdWhipe[0], &selectSet)) else if (FD_ISSET(fdWhipe[0], &selectSet))
{ {
@ -116,12 +111,12 @@ void reHDD::ThreadUserInput()
case TUI::UserInput::DownKey: case TUI::UserInput::DownKey:
//cout << "Down" << endl; //cout << "Down" << endl;
handleArrowKey(TUI::UserInput::DownKey); handleArrowKey(TUI::UserInput::DownKey);
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
case TUI::UserInput::UpKey: case TUI::UserInput::UpKey:
//cout << "Up" << endl; //cout << "Up" << endl;
handleArrowKey(TUI::UserInput::UpKey); handleArrowKey(TUI::UserInput::UpKey);
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
case TUI::UserInput::Undefined: case TUI::UserInput::Undefined:
//cout << "Undefined" << endl; //cout << "Undefined" << endl;
@ -129,43 +124,33 @@ void reHDD::ThreadUserInput()
case TUI::UserInput::Abort: case TUI::UserInput::Abort:
//cout << "Abort" << endl; //cout << "Abort" << endl;
handleAbort(); handleAbort();
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
case TUI::UserInput::Delete: case TUI::UserInput::Delete:
//cout << "Delete" << endl; //cout << "Delete" << endl;
if(SELECTED_DRIVE.state == Drive::NONE) if(SELECTED_DRIVE.state == Drive::NONE)
{ {
SELECTED_DRIVE.state = Drive::DELETE_SELECTED; SELECTED_DRIVE.state = Drive::DELETE_SELECTED;
menustate.bAbort = false;
menustate.bDelete = false;
menustate.bShred = false;
menustate.bConfirmDelete = true;
menustate.bConfirmShred = false;
} }
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
case TUI::UserInput::Shred: case TUI::UserInput::Shred:
//cout << "Shred" << endl; //cout << "Shred" << endl;
if(SELECTED_DRIVE.state == Drive::NONE) if(SELECTED_DRIVE.state == Drive::NONE)
{ {
SELECTED_DRIVE.state = Drive::SHRED_SELECTED; SELECTED_DRIVE.state = Drive::SHRED_SELECTED;
menustate.bAbort = false;
menustate.bDelete = false;
menustate.bShred = false;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = true;
} }
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
case TUI::UserInput::Enter: case TUI::UserInput::Enter:
//cout << "Enter" << endl; //cout << "Enter" << endl;
handleEnter(); handleEnter();
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
case TUI::UserInput::ESC: case TUI::UserInput::ESC:
//cout << "ESC" << endl; //cout << "ESC" << endl;
handleESC(); handleESC();
ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); ui->updateTUI(&vecDrives, i32SelectedEntry);
break; break;
default: default:
break; break;
@ -385,27 +370,6 @@ void reHDD::handleArrowKey(TUI::UserInput userInput)
i32SelectedEntry = 0; i32SelectedEntry = 0;
break; break;
} }
if(SELECTED_DRIVE.state == Drive::TaskState::SHRED_ACTIVE || SELECTED_DRIVE.state == Drive::TaskState::DELETE_ACTIVE)
{
//task for drive is running --> don´t show more task options
menustate.bAbort = true; //activate abort
menustate.bDelete = false;
menustate.bShred = false;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
}
else
{
//no task for drive is running --> show more task options
menustate.bAbort = false; //deactivate abort
menustate.bDelete = true;
menustate.bShred = true;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
}
} }
void reHDD::handleEnter() void reHDD::handleEnter()
@ -414,11 +378,6 @@ void reHDD::handleEnter()
{ {
SELECTED_DRIVE.state = Drive::TaskState::SHRED_ACTIVE; SELECTED_DRIVE.state = Drive::TaskState::SHRED_ACTIVE;
//task for drive is running --> don´t show more task options //task for drive is running --> don´t show more task options
menustate.bAbort = true; //activate abort
menustate.bDelete = false;
menustate.bShred = false;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
//TODO start shredding //TODO start shredding
} }
@ -426,38 +385,22 @@ void reHDD::handleEnter()
{ {
SELECTED_DRIVE.state = Drive::TaskState::DELETE_ACTIVE; SELECTED_DRIVE.state = Drive::TaskState::DELETE_ACTIVE;
//task for drive is running --> don´t show more task options //task for drive is running --> don´t show more task options
menustate.bAbort = true; //activate abort
menustate.bDelete = false;
menustate.bShred = false;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
//TODO start deleting //TODO start deleting
} }
} }
void reHDD::handleESC() void reHDD::handleESC()
{ {
if(SELECTED_DRIVE.state == Drive::TaskState::SHRED_SELECTED) if(SELECTED_DRIVE.state == Drive::TaskState::SHRED_SELECTED)
{ {
SELECTED_DRIVE.state = Drive::TaskState::NONE; SELECTED_DRIVE.state = Drive::TaskState::NONE;
//task for drive is selected --> remove selection //task for drive is selected --> remove selection
menustate.bAbort = false; //activate abort
menustate.bDelete = true;
menustate.bShred = true;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
} }
if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED) if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED)
{ {
SELECTED_DRIVE.state = Drive::TaskState::NONE; SELECTED_DRIVE.state = Drive::TaskState::NONE;
//task for drive is selected --> remove selection //task for drive is selected --> remove selection
menustate.bAbort = false; //activate abort
menustate.bDelete = true;
menustate.bShred = true;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
} }
} }
@ -468,10 +411,5 @@ void reHDD::handleAbort()
// TODO cancle shred or delete // TODO cancle shred or delete
SELECTED_DRIVE.state = Drive::NONE; SELECTED_DRIVE.state = Drive::NONE;
//task for drive is running --> remove selection //task for drive is running --> remove selection
menustate.bAbort = false; //activate abort
menustate.bDelete = true;
menustate.bShred = true;
menustate.bConfirmDelete = false;
menustate.bConfirmShred = false;
} }
} }