diff --git a/retroshare-gui/src/gui/dhtgraph.cpp b/retroshare-gui/src/gui/dhtgraph.cpp deleted file mode 100644 index 69a0678be..000000000 --- a/retroshare-gui/src/gui/dhtgraph.cpp +++ /dev/null @@ -1,298 +0,0 @@ -/**************************************************************** - * This file is distributed under the following license: - * - * Copyright (C) 2014 RetroShare Team - * Copyright (c) 2006-2007, crypton - * Copyright (c) 2006, Matt Edman, Justin Hipple - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - ****************************************************************/ - - -#include - -#include "dhtgraph.h" - - -/** Default contructor */ -DhtGraph::DhtGraph(QWidget *parent) -: QFrame(parent) -{ - /* Create Graph Frame related objects */ - _allDHT = new QList(); - _rsDHT = new QList(); - _painter = new QPainter(); - _graphStyle = AreaGraph; - - /* Initialize graph values */ - _allDHT->prepend(0); - _rsDHT->prepend(0); - _maxPoints = getNumPoints(); - _showRSDHT = true; - _showALLDHT = false; - _maxValue = MINUSER_SCALE; -} - -/** Default destructor */ -DhtGraph::~DhtGraph() -{ - delete _painter; - delete _allDHT; - delete _rsDHT; -} - -/** Gets the width of the desktop, which is the maximum number of points - * we can plot in the graph. */ -int -DhtGraph::getNumPoints() -{ - QDesktopWidget *desktop = QApplication::desktop(); - int width = desktop->width(); - return width; -} - -/** Adds new data points to the graph. */ -void -DhtGraph::addPoints(qreal rsdht, qreal alldht) -{ - /* If maximum number of points plotted, remove oldest */ - if (_rsDHT->size() == _maxPoints) { - _rsDHT->removeLast(); - //_allDHT->removeLast(); - } - - /* Add the points to their respective lists */ - //_allDHT->prepend(alldht); - _rsDHT->prepend(rsdht); - - - /* Check for a new maximum value */ - //if (alldht > _maxValue) _maxValue = alldht; - if (rsdht > _maxValue) _maxValue = rsdht; - - this->update(); -} - -/** Clears the graph. */ -void -DhtGraph::resetGraph() -{ - _allDHT->clear(); - _rsDHT->clear(); - _allDHT->prepend(0); - _rsDHT->prepend(0); - _maxValue = MINUSER_SCALE; - - this->update(); -} - -/** Toggles display of respective graph lines and counters. */ -void -DhtGraph::setShowCounters(bool showRSDHT, bool showALLDHT) -{ - _showRSDHT = showRSDHT; - _showALLDHT = showALLDHT; - this->update(); -} - -/** Overloads default QWidget::paintEvent. Draws the actual - * bandwidth graph. */ -void -DhtGraph::paintEvent(QPaintEvent *event) -{ - Q_UNUSED(event); - - /* Set current graph dimensions */ - _rec = this->frameRect(); - - /* Start the painter */ - _painter->begin(this); - - /* We want antialiased lines and text */ - _painter->setRenderHint(QPainter::Antialiasing); - _painter->setRenderHint(QPainter::TextAntialiasing); - - /* Fill in the background */ - _painter->fillRect(_rec, QBrush(BACK_COLOR)); - _painter->drawRect(_rec); - - /* Paint the scale */ - paintScale(); - /* Plot the rsDHT/allDHT data */ - paintData(); - /* Paint the rsDHT/allDHT totals */ - paintTotals(); - - /* Stop the painter */ - _painter->end(); -} - -/** Paints an integral and an outline of that integral for each data set (rsdht - * and/or alldht) that is to be displayed. The integrals will be drawn first, - * followed by the outlines, since we want the area of overlapping integrals - * to blend, but not the outlines of those integrals. */ -void -DhtGraph::paintData() -{ - QVector rsdhtPoints, alldhtPoints; - - /* Convert the bandwidth data points to graph points */ - rsdhtPoints = pointsFromData(_rsDHT); - alldhtPoints = pointsFromData(_allDHT); - - if (_graphStyle == AreaGraph) { - /* Plot the bandwidth data as area graphs */ - if (_showRSDHT) - paintIntegral(rsdhtPoints, RSDHT_COLOR, 0.6); - if (_showALLDHT) - paintIntegral(alldhtPoints, ALLDHT_COLOR, 0.4); - } - - /* Plot the bandwidth as solid lines. If the graph style is currently an - * area graph, we end up outlining the integrals. */ - if (_showRSDHT) - paintLine(rsdhtPoints, RSDHT_COLOR); - if (_showALLDHT) - paintLine(alldhtPoints, ALLDHT_COLOR); -} - -/** Returns a list of points on the bandwidth graph based on the supplied set - * of rsdht or alldht values. */ -QVector -DhtGraph::pointsFromData(QList* list) -{ - QVector points; - int x = _rec.width(); - int y = _rec.height(); - qreal scale = (y - (y/10)) / _maxValue; - qreal currValue; - - /* Translate all data points to points on the graph frame */ - points << QPointF(x, y); - for (int i = 0; i < list->size(); i++) { - currValue = y - (list->at(i) * scale); - if (x - SCROLL_STEP < SCALE_WIDTH) { - points << QPointF(SCALE_WIDTH, currValue); - break; - } - points << QPointF(x, currValue); - x -= SCROLL_STEP; - } - points << QPointF(SCALE_WIDTH, y); - return points; -} - -/** Plots an integral using the data points in points. The area will be - * filled in using color and an alpha-blending level of alpha - * (default is opaque). */ -void -DhtGraph::paintIntegral(QVector points, QColor color, qreal alpha) -{ - /* Save the current brush, plot the integral, and restore the old brush */ - QBrush oldBrush = _painter->brush(); - color.setAlphaF(alpha); - _painter->setBrush(QBrush(color)); - _painter->drawPolygon(points.data(), points.size()); - _painter->setBrush(oldBrush); -} - -/** Iterates the input list and draws a line on the graph in the appropriate - * color. */ -void -DhtGraph::paintLine(QVector points, QColor color, Qt::PenStyle lineStyle) -{ - /* Save the current brush, plot the line, and restore the old brush */ - QPen oldPen = _painter->pen(); - _painter->setPen(QPen(color, lineStyle)); - _painter->drawPolyline(points.data(), points.size()); - _painter->setPen(oldPen); -} - -/** Paints selected total indicators on the graph. */ -void -DhtGraph::paintTotals() -{ - int x = SCALE_WIDTH + FONT_SIZE, y = 0; - int rowHeight = FONT_SIZE; - -#if !defined(Q_WS_MAC) - /* On Mac, we don't need vertical spacing between the text rows. */ - rowHeight += 5; -#endif - - /* If total received is selected */ - if (_showRSDHT) { - y = rowHeight; - _painter->setPen(RSDHT_COLOR); - _painter->drawText(x, y, - tr("RetroShare users in DHT: ")+ - " ("+tr("%1").arg(_rsDHT->first(), 0, 'f', 0)+")"); - } - - /* If total sent is selected */ - if (_showALLDHT) { - y += rowHeight; - _painter->setPen(ALLDHT_COLOR); - _painter->drawText(x, y, - tr("Total DHT users: ") + - " ("+tr("%1").arg(_allDHT->first(), 0, 'f', 0)+")"); - } -} - -/** Returns a formatted string with the correct size suffix. */ -QString -DhtGraph::totalToStr(qreal total) -{ - /* Determine the correct size suffix */ - if (total < 1024) { - /* Use KB suffix */ - return tr("%1 KB").arg(total, 0, 'f', 2); - } else if (total < 1048576) { - /* Use MB suffix */ - return tr("%1 MB").arg(total/1024.0, 0, 'f', 2); - } else { - /* Use GB suffix */ - return tr("%1 GB").arg(total/1048576.0, 0, 'f', 2); - } -} - -/** Paints the scale on the graph. */ -void -DhtGraph::paintScale() -{ - qreal markStep = _maxValue * .25; - int top = _rec.y(); - int bottom = _rec.height(); - qreal paintStep = (bottom - (bottom/10)) / 4; - - /* Draw the other marks in their correctly scaled locations */ - qreal scale; - qreal pos; - for (int i = 1; i < 5; i++) { - pos = bottom - (i * paintStep); - scale = i * markStep; - _painter->setPen(SCALE_COLOR); - _painter->drawText(QPointF(5, pos+FONT_SIZE), - tr("%1 Users").arg(scale, 0, 'f', 0)); - _painter->setPen(GRID_COLOR); - _painter->drawLine(QPointF(SCALE_WIDTH, pos), - QPointF(_rec.width(), pos)); - } - - /* Draw vertical separator */ - _painter->drawLine(SCALE_WIDTH, top, SCALE_WIDTH, bottom); -} - diff --git a/retroshare-gui/src/gui/dhtgraph.h b/retroshare-gui/src/gui/dhtgraph.h deleted file mode 100644 index 80f98b4c4..000000000 --- a/retroshare-gui/src/gui/dhtgraph.h +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************** - * This file is distributed under the following license: - * - * Copyright (C) 2014 RetroShare Team - * Copyright (c) 2006-2007, crypton - * Copyright (c) 2006, Matt Edman, Justin Hipple - * - * 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. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - ****************************************************************/ - - -#ifndef _DhtGraph_H -#define _DhtGraph_H - -#include -#include -#include -#include -#include -#include - -#define HOR_SPC 2 /** Space between data points */ -#define SCALE_WIDTH 75 /** Width of the scale */ -#define MINUSER_SCALE 2000 /** 2000 users is the minimum scale */ -#define SCROLL_STEP 4 /** Horizontal change on graph update */ - -#define BACK_COLOR Qt::white -#define SCALE_COLOR Qt::black -#define GRID_COLOR Qt::black -#define RSDHT_COLOR Qt::magenta -#define ALLDHT_COLOR Qt::yellow - -#define FONT_SIZE 11 - - -class DhtGraph : public QFrame -{ - Q_OBJECT - -public: - /** Bandwidth graph style. */ - enum GraphStyle { - SolidLine = 0, /**< Plot bandwidth as solid lines. */ - AreaGraph /**< Plot bandwidth as alpha blended area graphs. */ - }; - - /** Default Constructor */ - DhtGraph(QWidget *parent = 0); - /** Default Destructor */ - ~DhtGraph(); - - /** Add data points. */ - void addPoints(qreal rsDHT, qreal allDHT); - /** Clears the graph. */ - void resetGraph(); - /** Toggles display of data counters. */ - void setShowCounters(bool showRSDHT, bool showALLDHT); - /** Sets the graph style used to display bandwidth data. */ - void setGraphStyle(GraphStyle style) { _graphStyle = style; } - -protected: - /** Overloaded QWidget::paintEvent() */ - void paintEvent(QPaintEvent *event); - -private: - /** Gets the width of the desktop, the max # of points. */ - int getNumPoints(); - - /** Paints an integral and an outline of that integral for each data set - * (rsdht and/or alldht) that is to be displayed. */ - void paintData(); - /** Paints the rsdht/alldht totals. */ - void paintTotals(); - /** Paints the scale in the graph. */ - void paintScale(); - /** Returns a formatted string representation of total. */ - QString totalToStr(qreal total); - /** Returns a list of points on the bandwidth graph based on the supplied set - * of rsdht or alldht values. */ - QVector pointsFromData(QList* list); - /** Paints a line with the data in points. */ - void paintLine(QVector points, QColor color, - Qt::PenStyle lineStyle = Qt::SolidLine); - /** Paints an integral using the supplied data. */ - void paintIntegral(QVector points, QColor color, qreal alpha = 1.0); - - /** Style with which the bandwidth data will be graphed. */ - GraphStyle _graphStyle; - /** A QPainter object that handles drawing the various graph elements. */ - QPainter* _painter; - /** Holds the RSDHT data points. */ - QList *_rsDHT; - /** Holds the ALLDHT data points. */ - QList *_allDHT; - /** The current dimensions of the graph. */ - QRect _rec; - /** The maximum data value plotted. */ - qreal _maxValue; - /** The maximum number of points to store. */ - int _maxPoints; - - /** Show the respective lines and counters. */ - bool _showRSDHT; - bool _showALLDHT; -}; - -#endif diff --git a/retroshare-gui/src/gui/statistics/DhtWindow.cpp b/retroshare-gui/src/gui/statistics/DhtWindow.cpp index 82ad43b12..b7ad05a21 100644 --- a/retroshare-gui/src/gui/statistics/DhtWindow.cpp +++ b/retroshare-gui/src/gui/statistics/DhtWindow.cpp @@ -73,7 +73,6 @@ void DhtWindow::updateDisplay() updateNetPeers(); updateDhtPeers(); updateRelays(); - getDHTStatus(); RsAutoUpdatePage::unlockAllEvents() ; } @@ -667,39 +666,39 @@ void DhtWindow::updateDhtPeers() void DhtWindow::getDHTStatus() { - RsConfigNetStatus config; - rsConfig->getConfigNetStatus(config); - - if (!(config.DHTActive)) - { - // GRAY. - } - else - { - if (config.netDhtOk) - { -#define MIN_RS_NET_SIZE 10 - // YELLOW or GREEN. - if (config.netDhtRsNetSize < MIN_RS_NET_SIZE) - { - updateGraph(config.netDhtRsNetSize,config.netDhtNetSize); - } - else - { - updateGraph(config.netDhtRsNetSize,config.netDhtNetSize); - } - } - else - { - // RED - some issue. - - } - } +// RsConfigNetStatus config; +// rsConfig->getConfigNetStatus(config); +// +// if (!(config.DHTActive)) +// { +// // GRAY. +// } +// else +// { +// if (config.netDhtOk) +// { +// #define MIN_RS_NET_SIZE 10 +// // YELLOW or GREEN. +// if (config.netDhtRsNetSize < MIN_RS_NET_SIZE) +// { +// updateGraph(config.netDhtRsNetSize,config.netDhtNetSize); +// } +// else +// { +// updateGraph(config.netDhtRsNetSize,config.netDhtNetSize); +// } +// } +// else +// { +// // RED - some issue. +// +// } +// } } /** Adds new data to the graph. */ void DhtWindow::updateGraph(qreal rsDHT, qreal allDHT) { - ui.frmGraph->addPoints(rsDHT, allDHT); +// ui.frmGraph->addPoints(rsDHT, allDHT); } diff --git a/retroshare-gui/src/gui/statistics/dhtgraph.cpp b/retroshare-gui/src/gui/statistics/dhtgraph.cpp new file mode 100644 index 000000000..ad6061289 --- /dev/null +++ b/retroshare-gui/src/gui/statistics/dhtgraph.cpp @@ -0,0 +1,71 @@ +/**************************************************************** + * This file is distributed under the following license: + * + * Copyright (C) 2014 RetroShare Team + * Copyright (c) 2006-2007, crypton + * Copyright (c) 2006, Matt Edman, Justin Hipple + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + + +#include + +#include +#include +#include "dhtgraph.h" + +class DHTGraphSource: public RSGraphSource +{ +public: + virtual int n_values() const + { + return 2 ; + } + virtual void getValues(std::vector& values) const + { + RsConfigNetStatus config; + rsConfig->getConfigNetStatus(config); + + if (config.DHTActive && config.netDhtOk) + { + values.push_back(config.netDhtRsNetSize) ; + values.push_back(config.netDhtNetSize) ; + } + else + { + values.push_back(0.0f) ; + values.push_back(0.0f) ; + } + } +}; + +/** Default contructor */ +DhtGraph::DhtGraph(QWidget *parent) +: RSGraphWidget(parent) +{ + DHTGraphSource *src = new DHTGraphSource() ; + + src->setCollectionTimeLimit(30*60*1000) ; // 30 mins + src->setCollectionTimePeriod(1000) ; // collect every second + src->start() ; + + addSource(src) ; + + setTimeScale(10.0f) ; +} + + diff --git a/retroshare-gui/src/gui/statistics/dhtgraph.h b/retroshare-gui/src/gui/statistics/dhtgraph.h new file mode 100644 index 000000000..b40cfa3e5 --- /dev/null +++ b/retroshare-gui/src/gui/statistics/dhtgraph.h @@ -0,0 +1,51 @@ +/**************************************************************** + * This file is distributed under the following license: + * + * Copyright (C) 2014 RetroShare Team + * Copyright (c) 2006-2007, crypton + * Copyright (c) 2006, Matt Edman, Justin Hipple + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + ****************************************************************/ + +#pragma once + +#include +#include + +#define HOR_SPC 2 /** Space between data points */ +#define SCALE_WIDTH 75 /** Width of the scale */ +#define MINUSER_SCALE 2000 /** 2000 users is the minimum scale */ +#define SCROLL_STEP 4 /** Horizontal change on graph update */ + +#define BACK_COLOR Qt::white +#define SCALE_COLOR Qt::black +#define GRID_COLOR Qt::black +#define RSDHT_COLOR Qt::magenta +#define ALLDHT_COLOR Qt::yellow + +#define FONT_SIZE 11 + +class DhtGraph : public RSGraphWidget +{ +public: + DhtGraph(QWidget *parent = 0); + + /** Show the respective lines and counters. */ + bool _showRSDHT; + bool _showALLDHT; +}; + diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index f2632ad25..ad10995dd 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -314,7 +314,6 @@ HEADERS += rshare.h \ gui/NetworkDialog.h \ gui/GenCertDialog.h \ gui/graphframe.h \ - gui/dhtgraph.h \ gui/graphframetunnel.h \ gui/linetypes.h \ gui/mainpagestack.h \ @@ -344,6 +343,7 @@ HEADERS += rshare.h \ gui/FileTransfer/TransfersDialog.h \ gui/statistics/TurtleRouterDialog.h \ gui/statistics/TurtleRouterStatistics.h \ + gui/statistics/dhtgraph.h \ gui/FileTransfer/TransferUserNotify.h \ gui/plugins/PluginInterface.h \ gui/im_history/ImHistoryBrowser.h \ @@ -434,6 +434,7 @@ HEADERS += rshare.h \ gui/toaster/GroupChatToaster.h \ gui/toaster/ChatLobbyToaster.h \ gui/toaster/FriendRequestToaster.h \ + gui/common/RSGraphWidget.h \ gui/common/ElidedLabel.h \ gui/common/vmessagebox.h \ gui/common/RsUrlHandler.h \ @@ -543,6 +544,7 @@ FORMS += gui/StartDialog.ui \ gui/FileTransfer/TransfersDialog.ui \ gui/statistics/TurtleRouterDialog.ui \ gui/statistics/TurtleRouterStatistics.ui \ + gui/statistics/GlobalRouterStatistics.ui \ gui/FileTransfer/DetailsDialog.ui \ gui/MainWindow.ui \ gui/NetworkView.ui \ @@ -592,7 +594,6 @@ FORMS += gui/StartDialog.ui \ gui/settings/PostedPage.ui \ gui/settings/RelayPage.ui \ gui/settings/ServicePermissionsPage.ui \ - gui/statistics/GlobalRouterStatistics.ui \ gui/settings/PluginItem.ui \ gui/settings/GroupFrameSettingsWidget.ui \ gui/toaster/MessageToaster.ui \ @@ -626,8 +627,8 @@ FORMS += gui/StartDialog.ui \ gui/statistics/DhtWindow.ui \ gui/statistics/StatisticsWindow.ui \ gui/statistics/BwCtrlWindow.ui \ - gui/GetStartedDialog.ui \ gui/statistics/RttStatistics.ui \ + gui/GetStartedDialog.ui \ # gui/ForumsDialog.ui \ # gui/forums/CreateForum.ui \ @@ -653,7 +654,6 @@ SOURCES += main.cpp \ gui/GenCertDialog.cpp \ gui/NetworkDialog.cpp \ gui/graphframe.cpp \ - gui/dhtgraph.cpp \ gui/graphframetunnel.cpp \ gui/mainpagestack.cpp \ gui/MainWindow.cpp \ @@ -684,6 +684,8 @@ SOURCES += main.cpp \ gui/FileTransfer/xprogressbar.cpp \ gui/statistics/TurtleRouterDialog.cpp \ gui/statistics/TurtleRouterStatistics.cpp \ + gui/statistics/dhtgraph.cpp \ + gui/statistics/GlobalRouterStatistics.cpp \ gui/FileTransfer/DetailsDialog.cpp \ gui/FileTransfer/TransferUserNotify.cpp \ gui/MainPage.cpp \ @@ -731,6 +733,7 @@ SOURCES += main.cpp \ gui/msgs/MessageWindow.cpp \ gui/msgs/TagsMenu.cpp \ gui/msgs/MessageUserNotify.cpp \ + gui/common/RSGraphWidget.cpp \ gui/common/ElidedLabel.cpp \ gui/common/vmessagebox.cpp \ gui/common/RsCollectionFile.cpp \ @@ -779,7 +782,6 @@ SOURCES += main.cpp \ gui/style/StyleDialog.cpp \ gui/settings/rsharesettings.cpp \ gui/settings/RsharePeerSettings.cpp \ - gui/statistics/GlobalRouterStatistics.cpp \ gui/settings/rsettings.cpp \ gui/settings/rsettingswin.cpp \ gui/settings/GeneralPage.cpp \