/** * @file tui.h * @brief display user interface * @author hendrik schutter * @date 03.08.2020 */ #ifndef TUI_H_ #define TUI_H_ #include "reHDD.h" #define COLOR_AREA_STDSCR 1 #define COLOR_AREA_OVERVIEW 2 #define COLOR_AREA_ENTRY_EVEN 3 #define COLOR_AREA_ENTRY_ODD 4 #define COLOR_AREA_ENTRY_SELECTED 5 #define COLOR_AREA_DETAIL 6 class TUI { protected: public: enum UserInput { UpKey, DownKey, Abort, Shred, ShredAll, Delete, Enter, ESC, Terminate, Undefined }; struct MenuState { bool bAbort; bool bShred; bool bDelete; bool bConfirmShred; bool bConfirmDelete; }; TUI(void); static void initTUI(); void updateTUI(std::list *plistDrives, uint8_t u8SelectedEntry); static enum UserInput readUserInput(); static void terminateTUI(); private: static std::string sCpuUsage; static std::string sRamUsage; static std::string sLocalTime; WINDOW *overview; WINDOW *systemview; WINDOW *detailview; WINDOW *menuview; WINDOW *dialog; WINDOW *smartWarning; static void centerTitle(WINDOW *pwin, const char *title); static WINDOW *createOverViewWindow(int iXSize, int iYSize); static WINDOW *createDetailViewWindow(int iXSize, int iYSize, int iXStart, Drive drive); static WINDOW *overwriteDetailViewWindow(int iXSize, int iYSize, int iXStart); static WINDOW *createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, int iListIndex, std::string sModelFamily, std::string sSerial, std::string sCapacity, std::string sState, std::string sTime, std::string sSpeed, std::string sTemp, std::string sConnection, bool bSelected); static WINDOW *createSystemStats(int iXSize, int iYSize, int iXStart, 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, std::string selectedTask, std::string optionA, std::string optionB); static WINDOW *createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, std::string sPath, std::string sModelFamily, std::string sModelName, std::string sSerial, std::string sProgress); static WINDOW *createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, std::string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount, uint32_t u32Temperature); static WINDOW *createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int iYStart, std::string sPath, std::string sModelFamily, std::string sModelName, std::string sSerial, uint32_t u32Checksum); void displaySelectedDrive(Drive drive, int stdscrX, int stdscrY); std::string formatTimeDuration(time_t u32Duration); std::string formatSpeed(time_t u32ShredTimeDelta, unsigned long ulWrittenBytes); static void vTruncateText(std::string *psText, uint16_t u16MaxLenght); }; #endif // TUI_H_