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 new file mode 100644 index 000000000..932c86f7d --- /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.setupDialog(max_value / 1024., 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("")); + } + if (val > bandwidthSlider->maximum()) + bandwidthSlider->setMaximum(val); + bandwidthSlider->setValue(val); +} + +long SpeedLimitDialog::getSpeedLimit() const +{ + long val = bandwidthSlider->value(); + if (val > 0) + return val; + return -1; +} + +void SpeedLimitDialog::setupDialog(long max_slider, long val) const +{ + 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 7e4cd8da8..96a36171d 100644 --- a/src/speedlimitdlg.h +++ b/src/speedlimitdlg.h @@ -38,82 +38,17 @@ #include "qbtsession.h" class SpeedLimitDialog : public QDialog, private Ui_bandwidth_dlg { - Q_OBJECT + Q_OBJECT +public: + explicit SpeedLimitDialog(QWidget *parent=0); + ~SpeedLimitDialog(); + static long askSpeedLimit(bool *ok, QString title, long default_value, long max_value=10240000); - 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); - } +protected slots: + void updateSpinValue(int val) const; + void updateSliderValue(int val) const; + long getSpeedLimit() const; + void setupDialog(long max_slider, long val) const; }; #endif diff --git a/src/src.pro b/src/src.pro index cc8eb21a3..17fc838a5 100644 --- a/src/src.pro +++ b/src/src.pro @@ -185,7 +185,8 @@ nox { statsdialog.cpp \ messageboxraised.cpp \ statusbar.cpp \ - trackerlogin.cpp + trackerlogin.cpp \ + speedlimitdlg.cpp win32 { HEADERS += programupdater.h