diff --git a/include/Display.hpp b/include/Display.hpp new file mode 100644 index 0000000..c9a50b8 --- /dev/null +++ b/include/Display.hpp @@ -0,0 +1,32 @@ +#ifndef H_Display +#define H_Display + +#include +#include + +#include //ioctl() and TIOCGWINSZ +#include // for STDOUT_FILENO + +class Display +{ + public: + Display(); + + unsigned int Rows() const; + unsigned int Cols() const; + + /// Returns a winsize structure with size.ws_row is the number of rows, size.ws_col is the number of columns. + static winsize GetTerminalSize(); + + /// Clears the whole screen. + static void ClearScreen(); + + protected: + unsigned int screenRows;// + +using std::cout; + +Display::Display() +{ + winsize size = Display::GetTerminalSize(); + screenCols = size.ws_col; + screenRows = size.ws_row; +} + +unsigned int Display::Cols() const { return screenCols; } +unsigned int Display::Rows() const { return screenRows; } + +winsize Display::GetTerminalSize() +{ + winsize size; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &size); + return size; +} + +void Display::ClearScreen() { cout << "\033[2J\033[1;1H"; } + +std::string GenerateProgressBar(unsigned int width, unsigned int current, unsigned int total, bool showPercentage, std::string const& fillChar) +{ + std::string progressBar; + unsigned int freeWidth = width-2; + char buf[8]; + + progressBar = '['; + + if(showPercentage) + { + double percentCurrent = 100.*((double)current/(double)total); + freeWidth -= 7; + sprintf(buf, "%5.1f%% ", percentCurrent); + progressBar += buf; + } + + unsigned int scaledCurrent = (current*freeWidth)/total; + + for(unsigned int i = 0 ; i < scaledCurrent ; i++) + progressBar += fillChar; + for(unsigned int i = scaledCurrent ; i < freeWidth ; i++) + progressBar += ' '; + + progressBar += ']'; + + return progressBar; +} diff --git a/src/main.cpp b/src/main.cpp index 231c95c..37d05c6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,6 @@ #include #include +#include using std::cout; using std::cerr; @@ -24,7 +25,7 @@ int main(int argc, char *argv[]) PRINT_VAR(s.st_blocks); PRINT_VAR(s.st_blocks*512);// Size on disk, in bytes } - // if(0) + if(0) {// test GetNodeName() PRINT_VAR(TreeNodeDiskUsage("/some/path/to/victory.tar.gz").GetNodeName()); PRINT_VAR(TreeNodeDiskUsage("/some/path/to/a/folder").GetNodeName()); @@ -36,7 +37,7 @@ int main(int argc, char *argv[]) PRINT_VAR(TreeNodeDiskUsage("/a/b/c//////////").GetNodeName()); PRINT_VAR(TreeNodeDiskUsage("/a///b//c/").GetNodeName()); } - // if(0) + if(0) {// test GetNodePath() PRINT_VAR(TreeNodeDiskUsage("/a/b/c//////////").GetNodePath()); PRINT_VAR(TreeNodeDiskUsage("/a///b//c/").GetNodePath()); @@ -47,16 +48,47 @@ int main(int argc, char *argv[]) PRINT_VAR(TreeNodeDiskUsage(" \\this\\\\is/sparta/with spaces// ").GetNodePath()); } if(0) - { + {// basic tree building and printing test TreeNodeDiskUsage tree(argv[1]); tree.BuildTree(); tree.PrintTree(); + cout << "\n\n"; PRINT_VAR(tree.GetTotalSize()); PRINT_VAR(tree.GetTotalSizeOnDisk()); + cout << "\n\n"; tree.PrintTree(0); tree.PrintTree(1); tree.PrintTree(2); } + if(0) + {// terminal display functions test + Display d; + PRINT_VAR(d.Rows()); + PRINT_VAR(d.Cols()); + + d.ClearScreen(); + cout << "coucou !\n"; + } + //if(0) + {// progress bar test + // unsigned int width, unsigned int current, unsigned int total, char fillChar = 219, bool showPercentage = true + PRINT_VAR(GenerateProgressBar(20, 0, 100, false)); + PRINT_VAR(GenerateProgressBar(20, 25, 100,false)); + PRINT_VAR(GenerateProgressBar(20, 50, 100, false)); + PRINT_VAR(GenerateProgressBar(20, 75, 100, false)); + PRINT_VAR(GenerateProgressBar(20, 100, 100, false)); + PRINT_VAR(GenerateProgressBar(50, 666, 1000, false)); + + PRINT_VAR(GenerateProgressBar(20, 0, 100, true)); + PRINT_VAR(GenerateProgressBar(20, 25, 100, true)); + PRINT_VAR(GenerateProgressBar(20, 50, 100, true)); + PRINT_VAR(GenerateProgressBar(20, 75, 100, true)); + PRINT_VAR(GenerateProgressBar(20, 100, 100, true)); + PRINT_VAR(GenerateProgressBar(50, 666, 1000, true)); + PRINT_VAR(GenerateProgressBar(50, 1666, 1000, true)); + + PRINT_VAR(GenerateProgressBar(50, 333, 1000, true, "#")); + } } else cerr << "Error : No path given !\n";