From 737f6c5b4e6b4592fb66b101f6ba3511c1abe4b5 Mon Sep 17 00:00:00 2001 From: Gabriele Date: Wed, 7 Jan 2015 16:53:03 +0100 Subject: [PATCH 1/2] Split speedlimitdlg.h into speedlimitdlg.cpp and speedlimitdlg.h --- src/speedlimitdlg.cpp | 114 ++++++++++++++++++++++++++++++++++++++++++ src/speedlimitdlg.h | 88 +++++--------------------------- src/src.pro | 3 +- 3 files changed, 128 insertions(+), 77 deletions(-) create mode 100644 src/speedlimitdlg.cpp diff --git a/src/speedlimitdlg.cpp b/src/speedlimitdlg.cpp new file mode 100644 index 000000000..7272587d3 --- /dev/null +++ b/src/speedlimitdlg.cpp @@ -0,0 +1,114 @@ +/* + * Bittorrent Client using Qt4 and libtorrent. + * Copyright (C) 2006 Christophe Dumez + * + * 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. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + * + * Contact : chris@qbittorrent.org + */ + +#include "speedlimitdlg.h" + +SpeedLimitDialog::SpeedLimitDialog(QWidget *parent): QDialog(parent) +{ + setupUi(this); + qDebug("Bandwidth allocation dialog creation"); + // Connect to slots + connect(bandwidthSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSpinValue(int))); + connect(spinBandwidth, SIGNAL(valueChanged(int)), this, SLOT(updateSliderValue(int))); + move(misc::screenCenter(this)); +} + +SpeedLimitDialog::~SpeedLimitDialog() +{ + qDebug("Deleting bandwidth allocation dialog"); +} + +// -2: if cancel +long SpeedLimitDialog::askSpeedLimit(bool *ok, QString title, long default_value, long max_value) +{ + SpeedLimitDialog dlg; + dlg.setWindowTitle(title); + dlg.setMaxValue(max_value / 1024.); + dlg.setDefaultValue(default_value / 1024.); + if (dlg.exec() == QDialog::Accepted) { + *ok = true; + int val = dlg.getSpeedLimit(); + if (val <= 0) + return -1; + return val * 1024; + } + else { + *ok = false; + return -2; + } +} + +void SpeedLimitDialog::updateSpinValue(int val) const +{ + qDebug("Called updateSpinValue with %d", val); + if (val <= 0) { + spinBandwidth->setValue(0); + spinBandwidth->setSpecialValueText(QString::fromUtf8("∞")); + spinBandwidth->setSuffix(QString::fromUtf8("")); + } + else { + spinBandwidth->setValue(val); + spinBandwidth->setSuffix(" " + tr("KiB/s")); + } +} + +void SpeedLimitDialog::updateSliderValue(int val) const +{ + if (val <= 0) { + spinBandwidth->setValue(0); + spinBandwidth->setSpecialValueText(QString::fromUtf8("∞")); + spinBandwidth->setSuffix(QString::fromUtf8("")); + } + bandwidthSlider->setValue(val); +} + +long SpeedLimitDialog::getSpeedLimit() const +{ + long val = bandwidthSlider->value(); + if (val > 0) + return val; + return -1; +} + +void SpeedLimitDialog::setMaxValue(long val) const +{ + if (val > 0) { + bandwidthSlider->setMaximum(val); + spinBandwidth->setMaximum(val); + } +} + +void SpeedLimitDialog::setDefaultValue(long val) const +{ + if (val < 0) val = 0; + if (val > bandwidthSlider->maximum()) val = bandwidthSlider->maximum(); + bandwidthSlider->setValue(val); + updateSpinValue(val); +} \ No newline at end of file diff --git a/src/speedlimitdlg.h b/src/speedlimitdlg.h index 7e4cd8da8..fbf056aed 100644 --- a/src/speedlimitdlg.h +++ b/src/speedlimitdlg.h @@ -38,82 +38,18 @@ #include "qbtsession.h" class SpeedLimitDialog : public QDialog, private Ui_bandwidth_dlg { - Q_OBJECT - - public: - SpeedLimitDialog(QWidget *parent=0): QDialog(parent) { - setupUi(this); - qDebug("Bandwidth allocation dialog creation"); - // Connect to slots - connect(bandwidthSlider, SIGNAL(valueChanged(int)), this, SLOT(updateSpinValue(int))); - connect(spinBandwidth, SIGNAL(valueChanged(int)), this, SLOT(updateSliderValue(int))); - move(misc::screenCenter(this)); - } - - ~SpeedLimitDialog() { - qDebug("Deleting bandwidth allocation dialog"); - } - - // -2: if cancel - static long askSpeedLimit(bool *ok, QString title, long default_value, long max_value=10240000) { - SpeedLimitDialog dlg; - dlg.setWindowTitle(title); - dlg.setMaxValue(max_value/1024.); - dlg.setDefaultValue(default_value/1024.); - if (dlg.exec() == QDialog::Accepted) { - *ok = true; - int val = dlg.getSpeedLimit(); - if (val <= 0) - return -1; - return val*1024; - } else { - *ok = false; - return -2; - } - } - - protected slots: - void updateSpinValue(int val) const { - qDebug("Called updateSpinValue with %d", val); - if (val <= 0) { - spinBandwidth->setValue(0); - spinBandwidth->setSpecialValueText(QString::fromUtf8("∞")); - spinBandwidth->setSuffix(QString::fromUtf8("")); - }else{ - spinBandwidth->setValue(val); - spinBandwidth->setSuffix(" "+tr("KiB/s")); - } - } - - void updateSliderValue(int val) const { - if (val <= 0) { - spinBandwidth->setValue(0); - spinBandwidth->setSpecialValueText(QString::fromUtf8("∞")); - spinBandwidth->setSuffix(QString::fromUtf8("")); - } - bandwidthSlider->setValue(val); - } - - long getSpeedLimit() const { - long val = bandwidthSlider->value(); - if (val > 0) - return val; - return -1; - } - - void setMaxValue(long val) const { - if (val > 0) { - bandwidthSlider->setMaximum(val); - spinBandwidth->setMaximum(val); - } - } - - void setDefaultValue(long val) const { - if (val < 0) val = 0; - if (val > bandwidthSlider->maximum()) val = bandwidthSlider->maximum(); - bandwidthSlider->setValue(val); - updateSpinValue(val); - } + Q_OBJECT +public: + explicit SpeedLimitDialog(QWidget *parent=0); + ~SpeedLimitDialog(); + static long askSpeedLimit(bool *ok, QString title, long default_value, long max_value=10240000); + +protected slots: + void updateSpinValue(int val) const; + void updateSliderValue(int val) const; + long getSpeedLimit() const; + void setMaxValue(long val) const; + void setDefaultValue(long val) const; }; #endif diff --git a/src/src.pro b/src/src.pro index f6422b9c2..6a84dde4a 100644 --- a/src/src.pro +++ b/src/src.pro @@ -183,7 +183,8 @@ nox { statsdialog.cpp \ messageboxraised.cpp \ statusbar.cpp \ - trackerlogin.cpp + trackerlogin.cpp \ + speedlimitdlg.cpp win32 { HEADERS += programupdater.h From c5db1157f1a234ef39e5a4c7b57cb0058b40152f Mon Sep 17 00:00:00 2001 From: Gabriele Date: Wed, 7 Jan 2015 16:53:03 +0100 Subject: [PATCH 2/2] Allow bandwidth values up to 65535 KiB/s The slider has a max value, but it's changed whenever a value greater than it is specified. Note: 65535 is the maximum value allowed by libtorrent. Closes #2373. --- src/bandwidth_limit.ui | 2 +- src/speedlimitdlg.cpp | 26 +++++++++++++------------- src/speedlimitdlg.h | 3 +-- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/bandwidth_limit.ui b/src/bandwidth_limit.ui index 25bf4caed..de114a61f 100644 --- a/src/bandwidth_limit.ui +++ b/src/bandwidth_limit.ui @@ -38,7 +38,7 @@ - 10000 + 65535 0 diff --git a/src/speedlimitdlg.cpp b/src/speedlimitdlg.cpp index 7272587d3..932c86f7d 100644 --- a/src/speedlimitdlg.cpp +++ b/src/speedlimitdlg.cpp @@ -50,8 +50,7 @@ long SpeedLimitDialog::askSpeedLimit(bool *ok, QString title, long default_value { SpeedLimitDialog dlg; dlg.setWindowTitle(title); - dlg.setMaxValue(max_value / 1024.); - dlg.setDefaultValue(default_value / 1024.); + dlg.setupDialog(max_value / 1024., default_value / 1024.); if (dlg.exec() == QDialog::Accepted) { *ok = true; int val = dlg.getSpeedLimit(); @@ -86,6 +85,8 @@ void SpeedLimitDialog::updateSliderValue(int val) const spinBandwidth->setSpecialValueText(QString::fromUtf8("∞")); spinBandwidth->setSuffix(QString::fromUtf8("")); } + if (val > bandwidthSlider->maximum()) + bandwidthSlider->setMaximum(val); bandwidthSlider->setValue(val); } @@ -97,18 +98,17 @@ long SpeedLimitDialog::getSpeedLimit() const return -1; } -void SpeedLimitDialog::setMaxValue(long val) const -{ - if (val > 0) { - bandwidthSlider->setMaximum(val); - spinBandwidth->setMaximum(val); - } -} - -void SpeedLimitDialog::setDefaultValue(long val) const +void SpeedLimitDialog::setupDialog(long max_slider, long val) const { - if (val < 0) val = 0; - if (val > bandwidthSlider->maximum()) val = bandwidthSlider->maximum(); + if (val < 0) + val = 0; + if (max_slider < 0) + max_slider = 1000; + // This can happen for example if global rate limit is lower + // than torrent rate limit. + if (val > max_slider) + max_slider = val; + bandwidthSlider->setMaximum(max_slider); bandwidthSlider->setValue(val); updateSpinValue(val); } \ No newline at end of file diff --git a/src/speedlimitdlg.h b/src/speedlimitdlg.h index fbf056aed..96a36171d 100644 --- a/src/speedlimitdlg.h +++ b/src/speedlimitdlg.h @@ -48,8 +48,7 @@ protected slots: void updateSpinValue(int val) const; void updateSliderValue(int val) const; long getSpeedLimit() const; - void setMaxValue(long val) const; - void setDefaultValue(long val) const; + void setupDialog(long max_slider, long val) const; }; #endif