diff options
author | Olivier Gayot <duskcoder@gmail.com> | 2014-06-18 15:45:45 +0200 |
---|---|---|
committer | Olivier Gayot <duskcoder@gmail.com> | 2014-06-18 15:49:38 +0200 |
commit | 0e03940802cebefdf6b0597a154bd9395e1af4d2 (patch) | |
tree | 409a58499128227dd57943515d003074190551f5 /src/graph.cpp |
Add the vanilla version of the project
This version can still be found here:
http://www.roland-riegel.de/nload/index.html
Diffstat (limited to 'src/graph.cpp')
-rw-r--r-- | src/graph.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/graph.cpp b/src/graph.cpp new file mode 100644 index 0000000..f0b4e8b --- /dev/null +++ b/src/graph.cpp @@ -0,0 +1,110 @@ +/*************************************************************************** + graph.cpp + ------------------- + begin : Sat Sep 29 2001 + copyright : (C) 2001 - 2012 by Roland Riegel + email : feedback@roland-riegel.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "graph.h" +#include "setting.h" +#include "settingstore.h" +#include "window.h" + +using namespace std; + +Graph::Graph() + : m_heightOfBars(5), m_maxDeflection(10 * 1024 * 1024 / 8) +{ +} + +Graph::~Graph() +{ +} + +// sets the number of the graph's vertical #-bars +void Graph::setNumOfBars(unsigned int numOfBars) +{ + // vertically resize the graph's value list + m_values.resize(numOfBars); +} + +// sets the height of the graph's vertical #-bars +void Graph::setHeightOfBars(unsigned int heightOfBars) +{ + m_heightOfBars = heightOfBars; +} + +void Graph::setMaxDeflection(unsigned long long maxDeflection) +{ + m_maxDeflection = maxDeflection; +} + +// new traffic measurement has been made => update the graph's value list +void Graph::update(unsigned long long value) +{ + // [new_value] = Bytes/s + + // put new value to the beginning of the list, it becomes the first #-bar + m_values.push_front(value); + + // delete the last #-bar of the list, but keep at least one + if(m_values.size() > 1) + m_values.pop_back(); +} + +// print the graph with the upper left corner at the coordinates (x, y) +void Graph::print(Window& window, int x, int y) +{ + window.setXY(x, y); + + // cycle through through the lines + for(unsigned int l = 0; l < m_heightOfBars; l++) + { + // for each line cycle through the rows + for(list<unsigned long long>::reverse_iterator r = m_values.rbegin(); r != m_values.rend() ; r++) + { + unsigned long long trafficPerLine = m_maxDeflection / m_heightOfBars; + unsigned long long lowerLimit = m_maxDeflection * (m_heightOfBars - l - 1) / m_heightOfBars; + + if(*r < lowerLimit) + { + window.print(' '); + } + else + { + unsigned long long restOfTraffic = *r - lowerLimit; + + if(restOfTraffic >= trafficPerLine) + window.print('#'); + else if(restOfTraffic >= trafficPerLine * 7 / 10) + window.print('|'); + else if(restOfTraffic >= trafficPerLine * 3 / 10) + window.print('.'); + else + window.print(' '); + } + } + window.print('\n'); + window.setX(x); + } + +} + +// reset all traffic values in the graph to zero +void Graph::resetTrafficData() +{ + int size = m_values.size(); + m_values.clear(); + m_values.resize(size); +} + |