From 06efd64a80ee663e71e9b159486a380b848874a4 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sat, 23 Jan 2010 20:44:09 +0000 Subject: [PATCH] FEATURE: User can set alternative speed limits for fast toggling Bandwidth scheduler is not functional yet (but appears in program preferences) --- Changelog | 3 + src/GUI.cpp | 14 ++ src/GUI.h | 1 + src/Icons/oxygen/chronometer.png | Bin 0 -> 7133 bytes src/Icons/slow.png | Bin 0 -> 910 bytes src/Icons/slow48.png | Bin 0 -> 2232 bytes src/Icons/slow_off.png | Bin 0 -> 680 bytes src/icons.qrc | 4 + src/options_imp.cpp | 174 ++++++---------- src/options_imp.h | 1 + src/preferences.h | 77 ++++++- src/statusbar.h | 56 ++++- src/ui/mainwindow.ui | 9 + src/ui/options.ui | 348 +++++++++++++++++++++++++++---- 14 files changed, 535 insertions(+), 152 deletions(-) create mode 100644 src/Icons/oxygen/chronometer.png create mode 100644 src/Icons/slow.png create mode 100644 src/Icons/slow48.png create mode 100644 src/Icons/slow_off.png diff --git a/Changelog b/Changelog index 9e010e195..fbed539cb 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,6 @@ +* Unreleased - Christophe Dumez - v2.2.0 + - FEATURE: User can set alternative speed limits for fast toggling + * Mon Jan 18 2010 - Christophe Dumez - v2.1.0 - FEATURE: Graphical User Interface can be disabled at compilation time (headless running) - FEATURE: Torrents can be labeled/categorized diff --git a/src/GUI.cpp b/src/GUI.cpp index da0430f66..87cec4dd5 100644 --- a/src/GUI.cpp +++ b/src/GUI.cpp @@ -180,6 +180,8 @@ GUI::GUI(QWidget *parent, QStringList torrentCmdLine) : QMainWindow(parent), dis createKeyboardShortcuts(); // Create status bar status_bar = new StatusBar(QMainWindow::statusBar(), BTSession); + connect(actionUse_alternative_speed_limits, SIGNAL(triggered()), status_bar, SLOT(toggleAlternativeSpeeds())); + connect(status_bar, SIGNAL(alternativeSpeedsToggled(bool)), this, SLOT(updateAltSpeedsBtn(bool))); show(); @@ -879,6 +881,16 @@ void GUI::createSystrayDelayed() { } } +void GUI::updateAltSpeedsBtn(bool alternative) { + if(alternative) { + actionUse_alternative_speed_limits->setIcon(QIcon(":/Icons/slow.png")); + actionUse_alternative_speed_limits->setText(tr("Use normal speed limits")); + } else { + actionUse_alternative_speed_limits->setIcon(QIcon(":/Icons/slow_off.png")); + actionUse_alternative_speed_limits->setText(tr("Use alternative speed limits")); + } +} + void GUI::createTrayIcon() { // Tray icon #ifdef Q_WS_WIN @@ -892,6 +904,8 @@ void GUI::createTrayIcon() { myTrayIconMenu->addAction(actionOpen); myTrayIconMenu->addAction(actionDownload_from_URL); myTrayIconMenu->addSeparator(); + updateAltSpeedsBtn(Preferences::isAltBandwidthEnabled()); + myTrayIconMenu->addAction(actionUse_alternative_speed_limits); myTrayIconMenu->addAction(actionSet_global_download_limit); myTrayIconMenu->addAction(actionSet_global_upload_limit); myTrayIconMenu->addSeparator(); diff --git a/src/GUI.h b/src/GUI.h index 0bf1812c8..0843a0a50 100644 --- a/src/GUI.h +++ b/src/GUI.h @@ -143,6 +143,7 @@ public slots: void setTabText(int index, QString text) const; void showNotificationBaloon(QString title, QString msg) const; void downloadFromURLList(const QStringList& urls); + void updateAltSpeedsBtn(bool alternative); protected: void closeEvent(QCloseEvent *); diff --git a/src/Icons/oxygen/chronometer.png b/src/Icons/oxygen/chronometer.png new file mode 100644 index 0000000000000000000000000000000000000000..00386b7050861d216dec716a8a134a90b8f53d9f GIT binary patch literal 7133 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 T5L3!r00000NkvXXu0mjfP)g)I literal 0 HcmV?d00001 diff --git a/src/Icons/slow.png b/src/Icons/slow.png new file mode 100644 index 0000000000000000000000000000000000000000..2098177e12f6d1c674cc51b0b9aa5b888fc7f404 GIT binary patch literal 910 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 + Icons/slow48.png Icons/rss32.png Icons/sphere2.png Icons/downarrow.png Icons/url.png Icons/locale.png Icons/loading.png + Icons/slow.png Icons/magnet.png Icons/sphere.png + Icons/slow_off.png Icons/uparrow.png Icons/rss16.png Icons/skin/checkingUP.png @@ -154,6 +157,7 @@ Icons/oxygen/unsubscribe16.png Icons/oxygen/subscribe.png Icons/oxygen/edit-copy.png + Icons/oxygen/chronometer.png Icons/oxygen/bt_settings.png Icons/oxygen/document-new.png Icons/oxygen/preferences-desktop.png diff --git a/src/options_imp.cpp b/src/options_imp.cpp index 9322860b5..77b5e31e4 100644 --- a/src/options_imp.cpp +++ b/src/options_imp.cpp @@ -136,6 +136,11 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){ comboI18n->addItem((QIcon(QString::fromUtf8(":/Icons/flags/south_korea.png"))), QString::fromUtf8("한글")); locales << "ko_KR"; + // Load week days (scheduler) + for(uint i=1; i<=7; ++i) { + schedule_days->addItem(QDate::longDayName(i, QDate::StandaloneFormat)); + } + // Load options loadOptions(); // Disable systray integration if it is not supported by the system @@ -154,6 +159,7 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){ // Connection tab connect(checkUploadLimit, SIGNAL(toggled(bool)), this, SLOT(enableUploadLimit(bool))); connect(checkDownloadLimit, SIGNAL(toggled(bool)), this, SLOT(enableDownloadLimit(bool))); + connect(check_schedule, SIGNAL(toggled(bool)), this, SLOT(enableSchedulerFields(bool))); // Bittorrent tab connect(checkMaxConnecs, SIGNAL(toggled(bool)), this, SLOT(enableMaxConnecsLimit(bool))); connect(checkMaxConnecsPerTorrent, SIGNAL(toggled(bool)), this, SLOT(enableMaxConnecsLimitPerTorrent(bool))); @@ -210,6 +216,10 @@ options_imp::options_imp(QWidget *parent):QDialog(parent){ connect(spinDownloadLimit, SIGNAL(valueChanged(QString)), this, SLOT(enableApplyButton())); connect(checkResolveCountries, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); connect(checkResolveHosts, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); + connect(check_schedule, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); + connect(schedule_from, SIGNAL(timeChanged(QTime)), this, SLOT(enableApplyButton())); + connect(schedule_to, SIGNAL(timeChanged(QTime)), this, SLOT(enableApplyButton())); + connect(schedule_days, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton())); // Bittorrent tab connect(checkMaxConnecs, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); connect(checkMaxConnecsPerTorrent, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); @@ -395,6 +405,12 @@ void options_imp::saveOptions(){ settings.setValue(QString::fromUtf8("NAT-PMP"), isNATPMPEnabled()); settings.setValue(QString::fromUtf8("GlobalDLLimit"), getGlobalBandwidthLimits().first); settings.setValue(QString::fromUtf8("GlobalUPLimit"), getGlobalBandwidthLimits().second); + Preferences::setAltGlobalDownloadLimit(spinDownloadLimitAlt->value()); + Preferences::setAltGlobalUploadLimit(spinUploadLimitAlt->value()); + Preferences::setSchedulerEnabled(check_schedule->isChecked()); + Preferences::setSchedulerStartTime(schedule_from->time()); + Preferences::setSchedulerEndTime(schedule_to->time()); + Preferences::setSchedulerDays((scheduler_days)schedule_days->currentIndex()); settings.setValue("ResolvePeerCountries", checkResolveCountries->isChecked()); settings.setValue("ResolvePeerHostNames", checkResolveHosts->isChecked()); settings.setValue(QString::fromUtf8("ProxyType"), getPeerProxyType()); @@ -646,6 +662,14 @@ void options_imp::loadOptions(){ checkUploadLimit->setChecked(false); spinUploadLimit->setEnabled(false); } + spinUploadLimitAlt->setValue(Preferences::getAltGlobalUploadLimit()); + spinDownloadLimitAlt->setValue(Preferences::getAltGlobalDownloadLimit()); + // Scheduler + check_schedule->setChecked(Preferences::isSchedulerEnabled()); + enableSchedulerFields(check_schedule->isChecked()); + schedule_from->setTime(Preferences::getSchedulerStartTime()); + schedule_to->setTime(Preferences::getSchedulerEndTime()); + schedule_days->setCurrentIndex((int)Preferences::getSchedulerDays()); // Peer connections checkResolveCountries->setChecked(Preferences::resolvePeerCountries()); checkResolveHosts->setChecked(Preferences::resolvePeerHostNames()); @@ -1095,38 +1119,27 @@ bool options_imp::useAdditionDialog() const{ return checkAdditionDialog->isChecked(); } +void options_imp::enableSchedulerFields(bool checked) { + schedule_from->setEnabled(checked); + schedule_to->setEnabled(checked); + schedule_days->setEnabled(checked); +} + void options_imp::enableMaxConnecsLimit(bool checked){ - if(checked) { - spinMaxConnec->setEnabled(true); - }else{ - spinMaxConnec->setEnabled(false); - } + spinMaxConnec->setEnabled(checked); } void options_imp::enableQueueingSystem(bool checked) { - if(checked) { - spinMaxActiveDownloads->setEnabled(true); - spinMaxActiveUploads->setEnabled(true); - label_max_active_dl->setEnabled(true); - label_max_active_up->setEnabled(true); - maxActiveTorrents_lbl->setEnabled(true); - spinMaxActiveTorrents->setEnabled(true); - }else{ - spinMaxActiveDownloads->setEnabled(false); - spinMaxActiveUploads->setEnabled(false); - label_max_active_dl->setEnabled(false); - label_max_active_up->setEnabled(false); - maxActiveTorrents_lbl->setEnabled(false); - spinMaxActiveTorrents->setEnabled(false); - } + spinMaxActiveDownloads->setEnabled(checked); + spinMaxActiveUploads->setEnabled(checked); + label_max_active_dl->setEnabled(checked); + label_max_active_up->setEnabled(checked); + maxActiveTorrents_lbl->setEnabled(checked); + spinMaxActiveTorrents->setEnabled(checked); } void options_imp::enableMaxConnecsLimitPerTorrent(bool checked){ - if(checked) { - spinMaxConnecPerTorrent->setEnabled(true); - }else{ - spinMaxConnecPerTorrent->setEnabled(false); - } + spinMaxConnecPerTorrent->setEnabled(checked); } void options_imp::enableSystrayOptions() { @@ -1158,55 +1171,30 @@ void options_imp::enableMaxUploadsLimitPerTorrent(bool checked){ } void options_imp::enableFilter(bool checked){ - if(checked){ - lblFilterPath->setEnabled(true); - textFilterPath->setEnabled(true); - browseFilterButton->setEnabled(true); - }else{ - lblFilterPath->setEnabled(false); - textFilterPath->setEnabled(false); - browseFilterButton->setEnabled(false); - } + lblFilterPath->setEnabled(checked); + textFilterPath->setEnabled(checked); + browseFilterButton->setEnabled(checked); } void options_imp::enableRSS(bool checked) { - if(checked){ - groupRSSSettings->setEnabled(true); - }else{ - groupRSSSettings->setEnabled(false); - } + groupRSSSettings->setEnabled(checked); } void options_imp::enableUploadLimit(bool checked){ - if(checked){ - spinUploadLimit->setEnabled(true); - }else{ - spinUploadLimit->setEnabled(false); - } + spinUploadLimit->setEnabled(checked); } void options_imp::enableApplyButton(){ - if(!applyButton->isEnabled()){ - applyButton->setEnabled(true); - } + applyButton->setEnabled(true); } void options_imp::enableShareRatio(bool checked){ - if(checked){ - spinRatio->setEnabled(true); - }else{ - spinRatio->setEnabled(false); - } + spinRatio->setEnabled(checked); } void options_imp::enableDHTPortSettings(bool checked) { - if(checked){ - spinDHTPort->setEnabled(true); - dh_port_lbl->setEnabled(true); - }else{ - spinDHTPort->setEnabled(false); - dh_port_lbl->setEnabled(false); - } + spinDHTPort->setEnabled(checked); + dh_port_lbl->setEnabled(checked); } void options_imp::enableDHTSettings(bool checked) { @@ -1221,11 +1209,7 @@ void options_imp::enableDHTSettings(bool checked) { void options_imp::enableDeleteRatio(bool checked){ - if(checked){ - spinMaxRatio->setEnabled(true); - }else{ - spinMaxRatio->setEnabled(false); - } + spinMaxRatio->setEnabled(checked); } void options_imp::enablePeerProxy(int index){ @@ -1253,60 +1237,34 @@ void options_imp::enablePeerProxy(int index){ } void options_imp::enableHTTPProxy(int index){ - if(index){ - //enable - lblProxyIP_http->setEnabled(true); - textProxyIP_http->setEnabled(true); - lblProxyPort_http->setEnabled(true); - spinProxyPort_http->setEnabled(true); - checkProxyAuth_http->setEnabled(true); - }else{ - //disable - lblProxyIP_http->setEnabled(false); - textProxyIP_http->setEnabled(false); - lblProxyPort_http->setEnabled(false); - spinProxyPort_http->setEnabled(false); - checkProxyAuth_http->setEnabled(false); + bool enable = (index > 0); + lblProxyIP_http->setEnabled(enable); + textProxyIP_http->setEnabled(enable); + lblProxyPort_http->setEnabled(enable); + spinProxyPort_http->setEnabled(enable); + checkProxyAuth_http->setEnabled(enable); + + if(!enable) checkProxyAuth_http->setChecked(false); - } } void options_imp::enablePeerProxyAuth(bool checked){ - if(checked){ - lblProxyUsername->setEnabled(true); - lblProxyPassword->setEnabled(true); - textProxyUsername->setEnabled(true); - textProxyPassword->setEnabled(true); - }else{ - lblProxyUsername->setEnabled(false); - lblProxyPassword->setEnabled(false); - textProxyUsername->setEnabled(false); - textProxyPassword->setEnabled(false); - } + lblProxyUsername->setEnabled(checked); + lblProxyPassword->setEnabled(checked); + textProxyUsername->setEnabled(checked); + textProxyPassword->setEnabled(checked); } void options_imp::enableHTTPProxyAuth(bool checked){ - if(checked){ - lblProxyUsername_http->setEnabled(true); - lblProxyPassword_http->setEnabled(true); - textProxyUsername_http->setEnabled(true); - textProxyPassword_http->setEnabled(true); - }else{ - lblProxyUsername_http->setEnabled(false); - lblProxyPassword_http->setEnabled(false); - textProxyUsername_http->setEnabled(false); - textProxyPassword_http->setEnabled(false); - } + lblProxyUsername_http->setEnabled(checked); + lblProxyPassword_http->setEnabled(checked); + textProxyUsername_http->setEnabled(checked); + textProxyPassword_http->setEnabled(checked); } void options_imp::enableDirScan(bool checked){ - if(checked){ - textScanDir->setEnabled(true); - browseScanDirButton->setEnabled(true); - }else{ - textScanDir->setEnabled(false); - browseScanDirButton->setEnabled(false); - } + textScanDir->setEnabled(checked); + browseScanDirButton->setEnabled(checked); } bool options_imp::isSlashScreenDisabled() const { diff --git a/src/options_imp.h b/src/options_imp.h index e79e19cc3..57933bf49 100644 --- a/src/options_imp.h +++ b/src/options_imp.h @@ -142,6 +142,7 @@ protected slots: void enableMaxConnecsLimit(bool checked); void enableMaxConnecsLimitPerTorrent(bool checked); void enableMaxUploadsLimitPerTorrent(bool checked); + void enableSchedulerFields(bool checked); void enableShareRatio(bool checked); void enableDeleteRatio(bool checked); void enableFilter(bool checked); diff --git a/src/preferences.h b/src/preferences.h index d632e4c00..0b84792ec 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -35,8 +35,10 @@ #include #include #include +#include #define QBT_REALM "Web UI Access" +enum scheduler_days { EVERY_DAY, WEEK_DAYS, WEEK_ENDS, MON, TUE, WED, THU, FRI, SAT, SUN }; class Preferences { public: @@ -266,7 +268,7 @@ public: static int getGlobalUploadLimit() { QSettings settings("qBittorrent", "qBittorrent"); - return settings.value(QString::fromUtf8("Preferences/Connection/GlobalUPLimit"), -1).toInt(); + return settings.value(QString::fromUtf8("Preferences/Connection/GlobalUPLimit"), 50).toInt(); } static void setGlobalUploadLimit(int limit) { @@ -275,6 +277,79 @@ public: settings.setValue("Preferences/Connection/GlobalUPLimit", limit); } + static int getAltGlobalDownloadLimit() { + QSettings settings("qBittorrent", "qBittorrent"); + return settings.value(QString::fromUtf8("Preferences/Connection/GlobalDLLimitAlt"), 10).toInt(); + } + + static void setAltGlobalDownloadLimit(int limit) { + QSettings settings("qBittorrent", "qBittorrent"); + if(limit <= 0) limit = -1; + settings.setValue("Preferences/Connection/GlobalDLLimitAlt", limit); + } + + static int getAltGlobalUploadLimit() { + QSettings settings("qBittorrent", "qBittorrent"); + return settings.value(QString::fromUtf8("Preferences/Connection/GlobalUPLimitAlt"), 10).toInt(); + } + + static void setAltGlobalUploadLimit(int limit) { + QSettings settings("qBittorrent", "qBittorrent"); + if(limit <= 0) limit = -1; + settings.setValue("Preferences/Connection/GlobalUPLimit", limit); + } + + static bool isAltBandwidthEnabled() { + QSettings settings("qBittorrent", "qBittorrent"); + return settings.value("Preferences/Connection/alt_speeds_on", false).toBool(); + } + + static void setAltBandwidthEnabled(bool enabled) { + QSettings settings("qBittorrent", "qBittorrent"); + settings.setValue("Preferences/Connection/alt_speeds_on", enabled); + } + + static void setSchedulerEnabled(bool enabled) { + QSettings settings("qBittorrent", "qBittorrent"); + settings.setValue(QString::fromUtf8("Preferences/Scheduler/Enabled"), enabled); + } + + static bool isSchedulerEnabled() { + QSettings settings("qBittorrent", "qBittorrent"); + return settings.value(QString::fromUtf8("Preferences/Scheduler/Enabled"), false).toBool(); + } + + static QTime getSchedulerStartTime() { + QSettings settings("qBittorrent", "qBittorrent"); + return settings.value(QString::fromUtf8("Preferences/Scheduler/start_time"), QTime(8,0)).toTime(); + } + + static void setSchedulerStartTime(QTime time) { + QSettings settings("qBittorrent", "qBittorrent"); + settings.setValue(QString::fromUtf8("Preferences/Scheduler/start_time"), time); + } + + static QTime getSchedulerEndTime() { + QSettings settings("qBittorrent", "qBittorrent"); + return settings.value(QString::fromUtf8("Preferences/Scheduler/end_time"), QTime(20,0)).toTime(); + } + + static void setSchedulerEndTime(QTime time) { + QSettings settings("qBittorrent", "qBittorrent"); + settings.setValue(QString::fromUtf8("Preferences/Scheduler/end_time"), time); + } + + static scheduler_days getSchedulerDays() { + QSettings settings("qBittorrent", "qBittorrent"); + return (scheduler_days)settings.value(QString::fromUtf8("Preferences/Scheduler/days"), EVERY_DAY).toInt(); + } + + static void setSchedulerDays(scheduler_days days) { + QSettings settings("qBittorrent", "qBittorrent"); + settings.setValue(QString::fromUtf8("Preferences/Scheduler/days"), (int)days); + } + + static bool resolvePeerCountries() { QSettings settings("qBittorrent", "qBittorrent"); return settings.value(QString::fromUtf8("Preferences/Connection/ResolvePeerCountries"), true).toBool(); diff --git a/src/statusbar.h b/src/statusbar.h index 657fd7854..97c63a045 100644 --- a/src/statusbar.h +++ b/src/statusbar.h @@ -54,7 +54,9 @@ private: QFrame *statusSep1; QFrame *statusSep2; QFrame *statusSep3; + QFrame *statusSep4; QLabel *connecStatusLblIcon; + QPushButton *altSpeedsBtn; QTimer *refreshTimer; QWidget *container; QGridLayout *layout; @@ -77,6 +79,14 @@ public: //dlSpeedLbl->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); connect(dlSpeedLbl, SIGNAL(clicked()), this, SLOT(capDownloadSpeed())); dlSpeedLbl->setFlat(true); + + altSpeedsBtn = new QPushButton(); + altSpeedsBtn->setFixedWidth(22); + updateAltSpeedsBtn(Preferences::isAltBandwidthEnabled()); + + connect(altSpeedsBtn, SIGNAL(clicked()), this, SLOT(toggleAlternativeSpeeds())); + altSpeedsBtn->setFlat(true); + upSpeedLbl = new QPushButton(tr("U: %1 B/s - T: %2", "Upload speed: x B/s - Transferred: x MiB").arg("0.0").arg(misc::friendlyUnit(0))); //upSpeedLbl->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); connect(upSpeedLbl, SIGNAL(clicked()), this, SLOT(capUploadSpeed())); @@ -95,6 +105,10 @@ public: statusSep3->setFixedSize(3, dlSpeedLbl->fontMetrics().height()); statusSep3->setFrameStyle(QFrame::VLine); statusSep3->setFrameShadow(QFrame::Raised); + statusSep4 = new QFrame(); + statusSep4->setFixedSize(3, dlSpeedLbl->fontMetrics().height()); + statusSep4->setFrameStyle(QFrame::VLine); + statusSep4->setFrameShadow(QFrame::Raised); layout->addWidget(DHTLbl, 0, 0, Qt::AlignLeft); //layout->setColumnStretch(0, 10); layout->addWidget(statusSep1, 0, 1, Qt::AlignRight); @@ -105,9 +119,11 @@ public: //layout->setColumnStretch(3, 1); layout->addWidget(dlSpeedLbl, 0, 4, Qt::AlignLeft); //layout->setColumnStretch(4, 10); - layout->addWidget(statusSep3, 0, 5, Qt::AlignLeft); + layout->addWidget(statusSep3, 0, 5, Qt::AlignRight); + layout->addWidget(altSpeedsBtn, 0, 6); + layout->addWidget(statusSep4, 0, 7, Qt::AlignLeft); //layout->setColumnStretch(5, 10); - layout->addWidget(upSpeedLbl, 0, 6, Qt::AlignLeft); + layout->addWidget(upSpeedLbl, 0, 8, Qt::AlignLeft); //layout->setColumnStretch(6, 10); bar->addPermanentWidget(container); @@ -133,7 +149,9 @@ public: delete statusSep1; delete statusSep2; delete statusSep3; + delete statusSep4; delete connecStatusLblIcon; + delete altSpeedsBtn; delete layout; delete container; } @@ -169,17 +187,44 @@ public slots: upSpeedLbl->setText(tr("U: %1/s - T: %2", "Upload speed: x KiB/s - Transferred: x MiB").arg(misc::friendlyUnit(sessionStatus.payload_upload_rate)).arg(misc::friendlyUnit(sessionStatus.total_payload_upload))); } + void updateAltSpeedsBtn(bool alternative) { + if(alternative) { + altSpeedsBtn->setIcon(QIcon(":/Icons/slow.png")); + altSpeedsBtn->setToolTip(tr("Click to disable alternative speed limits")); + } else { + altSpeedsBtn->setIcon(QIcon(":/Icons/slow_off.png")); + altSpeedsBtn->setToolTip(tr("Click to enable alternative speed limits")); + } + } + + void toggleAlternativeSpeeds() { + bool alt = !Preferences::isAltBandwidthEnabled(); + Preferences::setAltBandwidthEnabled(alt); + if(alt) { + BTSession->getSession()->set_download_rate_limit(Preferences::getAltGlobalDownloadLimit()*1024); + BTSession->getSession()->set_upload_rate_limit(Preferences::getAltGlobalUploadLimit()*1024); + } else { + BTSession->getSession()->set_download_rate_limit(Preferences::getGlobalDownloadLimit()*1024); + BTSession->getSession()->set_upload_rate_limit(Preferences::getGlobalUploadLimit()*1024); + } + updateAltSpeedsBtn(alt); + emit alternativeSpeedsToggled(alt); + } + void capDownloadSpeed() { bool ok = false; long new_limit = SpeedLimitDialog::askSpeedLimit(&ok, tr("Global Download Speed Limit"), BTSession->getSession()->download_rate_limit()); if(ok) { + bool alt = Preferences::isAltBandwidthEnabled(); if(new_limit <= 0) { qDebug("Setting global download rate limit to Unlimited"); - BTSession->getSession()->set_download_rate_limit(-1); + if(!alt) + BTSession->getSession()->set_download_rate_limit(-1); Preferences::setGlobalDownloadLimit(-1); } else { qDebug("Setting global download rate limit to %.1fKb/s", new_limit/1024.); - BTSession->getSession()->set_download_rate_limit(new_limit); + if(!alt) + BTSession->getSession()->set_download_rate_limit(new_limit); Preferences::setGlobalDownloadLimit(new_limit/1024.); } } @@ -200,6 +245,9 @@ public slots: } } } + +signals: + void alternativeSpeedsToggled(bool alternative); }; #endif // STATUSBAR_H diff --git a/src/ui/mainwindow.ui b/src/ui/mainwindow.ui index d7b9fc37e..9e0cabe8c 100644 --- a/src/ui/mainwindow.ui +++ b/src/ui/mainwindow.ui @@ -259,6 +259,15 @@ Log Window + + + + :/Icons/slow_off.png:/Icons/slow_off.png + + + Use alternative speed limits + + diff --git a/src/ui/options.ui b/src/ui/options.ui index e67dbd370..2ffe266c2 100644 --- a/src/ui/options.ui +++ b/src/ui/options.ui @@ -141,6 +141,15 @@ ItemIsSelectable|ItemIsEnabled + + + Speed + + + + :/Icons/oxygen/chronometer.png:/Icons/oxygen/chronometer.png + + Bittorrent @@ -1113,11 +1122,11 @@ QGroupBox { 0 0 - 602 - 514 + 620 + 482 - + @@ -1324,16 +1333,81 @@ QGroupBox { + + + + Peer connections + + + + + + Resolve peer countries + + + true + + + + + + + Resolve peer host names + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + + + true + + + + + 0 + 0 + 620 + 490 + + + - Global bandwidth limiting + Global speed limits - + - + - + @@ -1366,9 +1440,9 @@ QGroupBox { - + - + @@ -1404,7 +1478,7 @@ QGroupBox { - + @@ -1460,40 +1534,239 @@ QGroupBox { - + - Peer connections + Alternative global speed limits - + - - - Resolve peer countries - - - true - - + + + + + + + Upload: + + + + + + + Download: + + + + + + + + + + + 1 + + + 1000000 + + + 10 + + + + + + + 1 + + + 1000000 + + + 10 + + + + + + + + + + + KiB/s + + + + + + + KiB/s + + + + + + + + + + 48 + 48 + + + + + 48 + 48 + + + + + + + :/Icons/slow48.png + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - Resolve peer host names - - + + + + + Scheduled times: + + + + + + + false + + + + + + + + + + to + + + Qt::AlignCenter + + + + + + + false + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + On days: + + + + + + + false + + + + Every day + + + + + Week days + + + + + Week ends + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - + Qt::Vertical 20 - 40 + 58 @@ -1502,9 +1775,6 @@ QGroupBox { - - - @@ -1936,8 +2206,8 @@ QGroupBox { 0 0 - 620 - 490 + 484 + 312 @@ -2370,8 +2640,8 @@ QGroupBox { 0 0 - 620 - 490 + 290 + 124 @@ -2467,8 +2737,8 @@ QGroupBox { 0 0 - 620 - 490 + 219 + 221 @@ -2634,8 +2904,8 @@ QGroupBox { 0 0 - 620 - 490 + 452 + 192