From dc5e6b968bcd42c652f226aa585c262f3790409b Mon Sep 17 00:00:00 2001 From: localhorst Date: Mon, 10 Aug 2020 22:52:13 +0200 Subject: [PATCH] refactor menustatr --- include/reHDD.h | 2 -- include/tui.h | 7 ++-- src/TUI/tui.cpp | 86 ++++++++++++++++++++++++++++++++++++------------- src/drive.cpp | 2 +- src/reHDD.cpp | 80 ++++++--------------------------------------- 5 files changed, 78 insertions(+), 99 deletions(-) diff --git a/include/reHDD.h b/include/reHDD.h index 81aabc6..e527eee 100644 --- a/include/reHDD.h +++ b/include/reHDD.h @@ -32,7 +32,6 @@ #include #include - using namespace std; #include "drive.h" @@ -46,7 +45,6 @@ template T* iterator_to_pointer(I i) return (&(*i)); } - class reHDD { protected: diff --git a/include/tui.h b/include/tui.h index fcc6b9a..ab80348 100644 --- a/include/tui.h +++ b/include/tui.h @@ -36,7 +36,7 @@ public: static void initTUI(); - void updateTUI(vector * pvecDrives, int32_t i32SelectedEntry, struct MenuState menustate); + void updateTUI(vector * pvecDrives, int32_t i32SelectedEntry); static enum UserInput readUserInput(); @@ -45,9 +45,10 @@ private: static string sRamUsage; static string sLocalTime; - WINDOW* detailview; + WINDOW* overview; WINDOW* systemview; + WINDOW* detailview; WINDOW* menuview; WINDOW* dialog; @@ -58,6 +59,8 @@ private: 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 *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_ \ No newline at end of file diff --git a/src/TUI/tui.cpp b/src/TUI/tui.cpp index ad9b9c5..4d3b7b8 100644 --- a/src/TUI/tui.cpp +++ b/src/TUI/tui.cpp @@ -51,7 +51,7 @@ void TUI::initTUI() mvprintw(0, 2, "reHDD - HDD refurbishing tool - GPL 3.0 "); } -void TUI::updateTUI(vector * pvecDrives, int32_t i32SelectedEntry, struct MenuState menustate) +void TUI::updateTUI(vector * pvecDrives, int32_t i32SelectedEntry) { int stdscrX, stdscrY; getmaxyx(stdscr, stdscrY, stdscrX); @@ -67,10 +67,6 @@ void TUI::updateTUI(vector * pvecDrives, int32_t i32SelectedEntry, struct systemview=createSystemStats((int)(stdscrX/3), 10, (stdscrY-11)); wrefresh(systemview); - menuview=createMenuView(((stdscrX)-(int)(stdscrX/3)-7), 10, (int)(stdscrX/3)+5,(stdscrY-11), menustate); - wrefresh(menuview); - - vector ::iterator it; for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) { @@ -82,24 +78,8 @@ void TUI::updateTUI(vector * pvecDrives, int32_t i32SelectedEntry, struct if(i32SelectedEntry == (it - pvecDrives->begin())) { - bSelectedEntry = true; - detailview=createDetailViewWindow(((stdscrX)-(int)(stdscrX/3)-7), (stdscrY-15), (int)(stdscrX/3)+5, pvecDrives->at((it - pvecDrives->begin()))); - 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); - } + bSelectedEntry = true; //mark this drive in entries list + displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY); } 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); 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); + } +} \ No newline at end of file diff --git a/src/drive.cpp b/src/drive.cpp index e078325..ebea0e8 100644 --- a/src/drive.cpp +++ b/src/drive.cpp @@ -88,7 +88,7 @@ string Drive::sPowerCyclesToText() void Drive::setTaskPercentage(uint8_t u8TaskPercentage) { - if((u8TaskPercentage >= 0) && (u8TaskPercentage <= 100)) + if(u8TaskPercentage <= 100) { this->u8TaskPercentage = u8TaskPercentage; } diff --git a/src/reHDD.cpp b/src/reHDD.cpp index 46348d6..b6d03c4 100644 --- a/src/reHDD.cpp +++ b/src/reHDD.cpp @@ -10,8 +10,6 @@ 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 std::mutex mxScannDrives; @@ -26,7 +24,7 @@ static int32_t i32SelectedEntry; static fd_set selectSet; -static struct TUI::MenuState menustate; +//static struct TUI::MenuState menustate; /** * \brief app constructor @@ -37,8 +35,6 @@ reHDD::reHDD(void) { cout << "created app" << endl; 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 mxScannDrives.unlock(); - //printDrives(&vecDrives); //TODO update UI - ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); + ui->updateTUI(&vecDrives, i32SelectedEntry); } else if (FD_ISSET(fdWhipe[0], &selectSet)) { @@ -116,12 +111,12 @@ void reHDD::ThreadUserInput() case TUI::UserInput::DownKey: //cout << "Down" << endl; handleArrowKey(TUI::UserInput::DownKey); - ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); + ui->updateTUI(&vecDrives, i32SelectedEntry); break; case TUI::UserInput::UpKey: //cout << "Up" << endl; handleArrowKey(TUI::UserInput::UpKey); - ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); + ui->updateTUI(&vecDrives, i32SelectedEntry); break; case TUI::UserInput::Undefined: //cout << "Undefined" << endl; @@ -129,43 +124,33 @@ void reHDD::ThreadUserInput() case TUI::UserInput::Abort: //cout << "Abort" << endl; handleAbort(); - ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); + ui->updateTUI(&vecDrives, i32SelectedEntry); break; case TUI::UserInput::Delete: //cout << "Delete" << endl; if(SELECTED_DRIVE.state == Drive::NONE) { 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; case TUI::UserInput::Shred: //cout << "Shred" << endl; if(SELECTED_DRIVE.state == Drive::NONE) { 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; case TUI::UserInput::Enter: //cout << "Enter" << endl; handleEnter(); - ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); + ui->updateTUI(&vecDrives, i32SelectedEntry); break; case TUI::UserInput::ESC: //cout << "ESC" << endl; handleESC(); - ui->updateTUI(&vecDrives, i32SelectedEntry, menustate); + ui->updateTUI(&vecDrives, i32SelectedEntry); break; default: break; @@ -385,27 +370,6 @@ void reHDD::handleArrowKey(TUI::UserInput userInput) i32SelectedEntry = 0; 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() @@ -414,11 +378,6 @@ void reHDD::handleEnter() { SELECTED_DRIVE.state = Drive::TaskState::SHRED_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; //TODO start shredding } @@ -426,38 +385,22 @@ void reHDD::handleEnter() { 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; //TODO start deleting } } - void reHDD::handleESC() { if(SELECTED_DRIVE.state == Drive::TaskState::SHRED_SELECTED) { SELECTED_DRIVE.state = Drive::TaskState::NONE; //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) { SELECTED_DRIVE.state = Drive::TaskState::NONE; //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 SELECTED_DRIVE.state = Drive::NONE; //task for drive is running --> remove selection - menustate.bAbort = false; //activate abort - menustate.bDelete = true; - menustate.bShred = true; - menustate.bConfirmDelete = false; - menustate.bConfirmShred = false; } } \ No newline at end of file