diff --git a/src/base/preferences.cpp b/src/base/preferences.cpp
index 2eb08eead..7081a659d 100644
--- a/src/base/preferences.cpp
+++ b/src/base/preferences.cpp
@@ -273,6 +273,26 @@ void Preferences::setAlternatingRowColors(bool b)
setValue("Preferences/General/AlternatingRowColors", b);
}
+bool Preferences::getHideZeroValues() const
+{
+ return value("Preferences/General/HideZeroValues", false).toBool();
+}
+
+void Preferences::setHideZeroValues(bool b)
+{
+ setValue("Preferences/General/HideZeroValues", b);
+}
+
+int Preferences::getHideZeroComboValues() const
+{
+ return value("Preferences/General/HideZeroComboValues", 0).toInt();
+}
+
+void Preferences::setHideZeroComboValues(int n)
+{
+ setValue("Preferences/General/HideZeroComboValues", n);
+}
+
bool Preferences::useRandomPort() const
{
return value("Preferences/General/UseRandomPort", false).toBool();
@@ -1900,7 +1920,7 @@ bool Preferences::isTorrentFileAssocSet()
CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
isSet = CFStringCompare(myBundleId, defaultHandlerId, 0) == kCFCompareEqualTo;
CFRelease(defaultHandlerId);
- }
+ }
CFRelease(torrentId);
}
return isSet;
diff --git a/src/base/preferences.h b/src/base/preferences.h
index 84d1d67ef..ca29ab46b 100644
--- a/src/base/preferences.h
+++ b/src/base/preferences.h
@@ -132,6 +132,10 @@ public:
void showSpeedInTitleBar(bool show);
bool useAlternatingRowColors() const;
void setAlternatingRowColors(bool b);
+ bool getHideZeroValues() const;
+ void setHideZeroValues(bool b);
+ int getHideZeroComboValues() const;
+ void setHideZeroComboValues(int n);
bool useRandomPort() const;
void setRandomPort(bool b);
bool systrayIntegration() const;
diff --git a/src/gui/options.ui b/src/gui/options.ui
index b65051f72..1144033b0 100644
--- a/src/gui/options.ui
+++ b/src/gui/options.ui
@@ -163,7 +163,7 @@
0
0
480
- 672
+ 702
@@ -257,6 +257,44 @@
+ -
+
+
-
+
+
+ Hide zero and infinity values
+
+
+
+ -
+
+
-
+
+ Always
+
+
+ -
+
+ Paused torrents only
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 0
+ 0
+
+
+
+
+
+
-
diff --git a/src/gui/options_imp.cpp b/src/gui/options_imp.cpp
index f8eb2c52f..07f95fc3f 100644
--- a/src/gui/options_imp.cpp
+++ b/src/gui/options_imp.cpp
@@ -141,6 +141,8 @@ options_imp::options_imp(QWidget *parent)
connect(comboI18n, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton()));
connect(confirmDeletion, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
connect(checkAltRowColors, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
+ connect(checkHideZero, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
+ connect(comboHideZero, SIGNAL(currentIndexChanged(int)), this, SLOT(enableApplyButton()));
connect(checkShowSystray, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
connect(checkCloseToSystray, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
connect(checkMinimizeToSysTray, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
@@ -392,6 +394,8 @@ void options_imp::saveOptions()
pref->setLocale(locale);
pref->setConfirmTorrentDeletion(confirmDeletion->isChecked());
pref->setAlternatingRowColors(checkAltRowColors->isChecked());
+ pref->setHideZeroValues(checkHideZero->isChecked());
+ pref->setHideZeroComboValues(comboHideZero->currentIndex());
pref->setSystrayIntegration(systrayIntegration());
pref->setTrayIconStyle(TrayIcon::Style(comboTrayIcon->currentIndex()));
pref->setCloseToTray(closeToTray());
@@ -572,6 +576,8 @@ void options_imp::loadOptions()
setLocale(pref->getLocale());
confirmDeletion->setChecked(pref->confirmTorrentDeletion());
checkAltRowColors->setChecked(pref->useAlternatingRowColors());
+ checkHideZero->setChecked(pref->getHideZeroValues());
+ comboHideZero->setCurrentIndex(pref->getHideZeroComboValues());
checkShowSplash->setChecked(!pref->isSplashScreenDisabled());
checkStartMinimized->setChecked(pref->startMinimized());
diff --git a/src/gui/torrentmodel.cpp b/src/gui/torrentmodel.cpp
index 67f0bad0d..451a5a02d 100644
--- a/src/gui/torrentmodel.cpp
+++ b/src/gui/torrentmodel.cpp
@@ -185,9 +185,9 @@ QVariant TorrentModel::data(const QModelIndex &index, int role) const
case TR_STATUS:
return static_cast(torrent->state());
case TR_SEEDS:
- return (role == Qt::DisplayRole) ? torrent->seedsCount() : torrent->completeCount();
+ return (role == Qt::DisplayRole) ? torrent->seedsCount() : torrent->totalSeedsCount();
case TR_PEERS:
- return (role == Qt::DisplayRole) ? (torrent->peersCount() - torrent->seedsCount()) : torrent->incompleteCount();
+ return (role == Qt::DisplayRole) ? torrent->leechsCount() : torrent->totalLeechersCount();
case TR_DLSPEED:
return torrent->downloadPayloadRate();
case TR_UPSPEED:
diff --git a/src/gui/transferlistdelegate.cpp b/src/gui/transferlistdelegate.cpp
index 6aeadda44..72dc0cb70 100644
--- a/src/gui/transferlistdelegate.cpp
+++ b/src/gui/transferlistdelegate.cpp
@@ -39,6 +39,8 @@
#include "torrentmodel.h"
#include "base/bittorrent/session.h"
#include "base/bittorrent/torrenthandle.h"
+#include "base/types.h"
+#include "base/preferences.h"
#include "base/unicodestrings.h"
#ifdef Q_OS_WIN
@@ -49,218 +51,240 @@
#endif
#endif
-TransferListDelegate::TransferListDelegate(QObject *parent) : QItemDelegate(parent) {}
+TransferListDelegate::TransferListDelegate(QObject *parent)
+ : QItemDelegate(parent)
+{
+}
-TransferListDelegate::~TransferListDelegate() {}
+void TransferListDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
+{
+ painter->save();
+ bool isHideState = true;
+ if (Preferences::instance()->getHideZeroComboValues() == 1) { // paused torrents only
+ QModelIndex stateIndex = index.sibling(index.row(), TorrentModel::TR_STATUS);
+ if (stateIndex.data().toInt() != BitTorrent::TorrentState::PausedDownloading)
+ isHideState = false;
+ }
+ const bool hideValues = Preferences::instance()->getHideZeroValues() & isHideState;
-void TransferListDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const {
- QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
- painter->save();
- switch(index.column()) {
- case TorrentModel::TR_AMOUNT_DOWNLOADED:
- case TorrentModel::TR_AMOUNT_UPLOADED:
- case TorrentModel::TR_AMOUNT_DOWNLOADED_SESSION:
- case TorrentModel::TR_AMOUNT_UPLOADED_SESSION:
- case TorrentModel::TR_AMOUNT_LEFT:
- case TorrentModel::TR_COMPLETED:
- case TorrentModel::TR_SIZE:
- case TorrentModel::TR_TOTAL_SIZE: {
- QItemDelegate::drawBackground(painter, opt, index);
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(index.data().toLongLong()));
- break;
- }
- case TorrentModel::TR_ETA: {
- QItemDelegate::drawBackground(painter, opt, index);
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::userFriendlyDuration(index.data().toLongLong()));
- break;
- }
- case TorrentModel::TR_SEEDS:
- case TorrentModel::TR_PEERS: {
- QString display = QString::number(index.data().toLongLong());
- qlonglong total = index.data(Qt::UserRole).toLongLong();
- if (total > 0) {
- // Scrape was successful, we have total values
- display += " ("+QString::number(total)+")";
- }
- QItemDelegate::drawBackground(painter, opt, index);
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, opt.rect, display);
- break;
- }
- case TorrentModel::TR_STATUS: {
- const int state = index.data().toInt();
- QString display;
- switch(state) {
- case BitTorrent::TorrentState::Downloading:
- display = tr("Downloading");
- break;
- case BitTorrent::TorrentState::StalledDownloading:
- display = tr("Stalled", "Torrent is waiting for download to begin");
- break;
- case BitTorrent::TorrentState::DownloadingMetadata:
- display = tr("Downloading metadata", "used when loading a magnet link");
- break;
- case BitTorrent::TorrentState::ForcedDownloading:
- display = tr("[F] Downloading", "used when the torrent is forced started. You probably shouldn't translate the F.");
- break;
- case BitTorrent::TorrentState::Allocating:
- display = tr("Allocating", "qBittorrent is allocating the files on disk");
- break;
- case BitTorrent::TorrentState::Uploading:
- case BitTorrent::TorrentState::StalledUploading:
- display = tr("Seeding", "Torrent is complete and in upload-only mode");
- break;
- case BitTorrent::TorrentState::ForcedUploading:
- display = tr("[F] Seeding", "used when the torrent is forced started. You probably shouldn't translate the F.");
- break;
- case BitTorrent::TorrentState::QueuedDownloading:
- case BitTorrent::TorrentState::QueuedUploading:
- display = tr("Queued", "i.e. torrent is queued");
- break;
- case BitTorrent::TorrentState::CheckingDownloading:
- case BitTorrent::TorrentState::CheckingUploading:
- display = tr("Checking", "Torrent local data is being checked");
- break;
- case BitTorrent::TorrentState::QueuedForChecking:
- display = tr("Queued for checking", "i.e. torrent is queued for hash checking");
- break;
- case BitTorrent::TorrentState::CheckingResumeData:
- display = tr("Checking resume data", "used when loading the torrents from disk after qbt is launched. It checks the correctness of the .fastresume file. Normally it is completed in a fraction of a second, unless loading many many torrents.");
- break;
- case BitTorrent::TorrentState::PausedDownloading:
- display = tr("Paused");
- break;
- case BitTorrent::TorrentState::PausedUploading:
- display = tr("Completed");
- break;
- case BitTorrent::TorrentState::MissingFiles:
- display = tr("Missing Files");
- break;
- case BitTorrent::TorrentState::Error:
- display = tr("Errored", "torrent status, the torrent has an error");
- break;
- default:
- display = "";
- }
- QItemDelegate::drawBackground(painter, opt, index);
- QItemDelegate::drawDisplay(painter, opt, opt.rect, display);
- break;
- }
- case TorrentModel::TR_UPSPEED:
- case TorrentModel::TR_DLSPEED: {
- QItemDelegate::drawBackground(painter, opt, index);
- const qulonglong speed = index.data().toULongLong();
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, opt.rect, Utils::Misc::friendlyUnit(speed, true));
- break;
- }
- case TorrentModel::TR_UPLIMIT:
- case TorrentModel::TR_DLLIMIT: {
+ QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
QItemDelegate::drawBackground(painter, opt, index);
- const qlonglong limit = index.data().toLongLong();
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, opt.rect, limit > 0 ? Utils::Misc::friendlyUnit(limit, true) : QString::fromUtf8(C_INFINITY));
- break;
- }
- case TorrentModel::TR_TIME_ELAPSED: {
- QItemDelegate::drawBackground(painter, opt, index);
- qlonglong seeding_time = index.data(Qt::UserRole).toLongLong();
- QString txt;
- if (seeding_time > 0)
- txt += tr("%1 (seeded for %2)", "e.g. 4m39s (seeded for 3m10s)")
- .arg(Utils::Misc::userFriendlyDuration(index.data().toLongLong()))
- .arg(Utils::Misc::userFriendlyDuration(seeding_time));
- QItemDelegate::drawDisplay(painter, opt, opt.rect, txt);
- break;
- }
- case TorrentModel::TR_ADD_DATE:
- case TorrentModel::TR_SEED_DATE:
- QItemDelegate::drawBackground(painter, opt, index);
- QItemDelegate::drawDisplay(painter, opt, opt.rect, index.data().toDateTime().toLocalTime().toString(Qt::DefaultLocaleShortDate));
- break;
- case TorrentModel::TR_RATIO_LIMIT:
- case TorrentModel::TR_RATIO: {
- QItemDelegate::drawBackground(painter, opt, index);
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- const qreal ratio = index.data().toDouble();
- QItemDelegate::drawDisplay(painter, opt, opt.rect,
- ((ratio == -1) || (ratio > BitTorrent::TorrentHandle::MAX_RATIO)) ? QString::fromUtf8(C_INFINITY) : Utils::String::fromDouble(ratio, 2));
- break;
+ switch (index.column()) {
+ case TorrentModel::TR_AMOUNT_DOWNLOADED:
+ case TorrentModel::TR_AMOUNT_UPLOADED:
+ case TorrentModel::TR_AMOUNT_DOWNLOADED_SESSION:
+ case TorrentModel::TR_AMOUNT_UPLOADED_SESSION:
+ case TorrentModel::TR_AMOUNT_LEFT:
+ case TorrentModel::TR_COMPLETED:
+ case TorrentModel::TR_SIZE:
+ case TorrentModel::TR_TOTAL_SIZE: {
+ qlonglong size = index.data().toLongLong();
+ if (hideValues && !size)
+ break;
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(size));
+ break;
}
- case TorrentModel::TR_PRIORITY: {
- const int priority = index.data().toInt();
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- if (priority > 0)
- QItemDelegate::paint(painter, opt, index);
- else {
- QItemDelegate::drawBackground(painter, opt, index);
- QItemDelegate::drawDisplay(painter, opt, opt.rect, "*");
- }
- break;
+ case TorrentModel::TR_ETA: {
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::userFriendlyDuration(index.data().toLongLong()));
+ break;
}
- case TorrentModel::TR_PROGRESS: {
- QStyleOptionProgressBarV2 newopt;
- qreal progress = index.data().toDouble()*100.;
- newopt.rect = opt.rect;
- newopt.text = ((progress == 100.0) ? QString("100%") : Utils::String::fromDouble(progress, 1) + "%");
- newopt.progress = (int)progress;
- newopt.maximum = 100;
- newopt.minimum = 0;
- newopt.state |= QStyle::State_Enabled;
- newopt.textVisible = true;
+ case TorrentModel::TR_SEEDS:
+ case TorrentModel::TR_PEERS: {
+ qlonglong value = index.data().toLongLong();
+ qlonglong total = index.data(Qt::UserRole).toLongLong();
+ if (hideValues && (!value && !total))
+ break;
+ QString display = QString::number(value) + " (" + QString::number(total) + ")";
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, display);
+ break;
+ }
+ case TorrentModel::TR_STATUS: {
+ const int state = index.data().toInt();
+ QString display = getStatusString(state);
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, display);
+ break;
+ }
+ case TorrentModel::TR_UPSPEED:
+ case TorrentModel::TR_DLSPEED: {
+ const qulonglong speed = index.data().toULongLong();
+ if (hideValues && !speed)
+ break;
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, Utils::Misc::friendlyUnit(speed, true));
+ break;
+ }
+ case TorrentModel::TR_UPLIMIT:
+ case TorrentModel::TR_DLLIMIT: {
+ const qlonglong limit = index.data().toLongLong();
+ if (hideValues && !limit)
+ break;
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, limit > 0 ? Utils::Misc::friendlyUnit(limit, true) : QString::fromUtf8(C_INFINITY));
+ break;
+ }
+ case TorrentModel::TR_TIME_ELAPSED: {
+ qlonglong elapsedTime = index.data().toLongLong();
+ qlonglong seedingTime = index.data(Qt::UserRole).toLongLong();
+ QString txt;
+ if (seedingTime > 0)
+ txt += tr("%1 (seeded for %2)", "e.g. 4m39s (seeded for 3m10s)")
+ .arg(Utils::Misc::userFriendlyDuration(elapsedTime))
+ .arg(Utils::Misc::userFriendlyDuration(seedingTime));
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, txt);
+ break;
+ }
+ case TorrentModel::TR_ADD_DATE:
+ case TorrentModel::TR_SEED_DATE:
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, index.data().toDateTime().toLocalTime().toString(Qt::DefaultLocaleShortDate));
+ break;
+ case TorrentModel::TR_RATIO_LIMIT:
+ case TorrentModel::TR_RATIO: {
+ const qreal ratio = index.data().toDouble();
+ if (hideValues && (ratio <= 0))
+ break;
+ QString str = ((ratio == -1) || (ratio > BitTorrent::TorrentHandle::MAX_RATIO)) ? QString::fromUtf8(C_INFINITY) : Utils::String::fromDouble(ratio, 2);
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, str);
+ break;
+ }
+ case TorrentModel::TR_PRIORITY: {
+ const int priority = index.data().toInt();
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ if (priority > 0) {
+ QItemDelegate::paint(painter, opt, index);
+ }
+ else {
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, "*");
+ }
+ break;
+ }
+ case TorrentModel::TR_PROGRESS: {
+ QStyleOptionProgressBarV2 newopt;
+ qreal progress = index.data().toDouble() * 100.;
+ newopt.rect = opt.rect;
+ newopt.text = ((progress == 100.0) ? QString("100%") : Utils::String::fromDouble(progress, 1) + "%");
+ newopt.progress = (int)progress;
+ newopt.maximum = 100;
+ newopt.minimum = 0;
+ newopt.state |= QStyle::State_Enabled;
+ newopt.textVisible = true;
#ifndef Q_OS_WIN
- QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
+ QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
#else
- // XXX: To avoid having the progress text on the right of the bar
+ // XXX: To avoid having the progress text on the right of the bar
#ifndef QBT_USES_QT5
QPlastiqueStyle st;
#else
QProxyStyle st("fusion");
#endif
- st.drawControl(QStyle::CE_ProgressBar, &newopt, painter, 0);
+ st.drawControl(QStyle::CE_ProgressBar, &newopt, painter, 0);
#endif
- break;
+ break;
}
- case TorrentModel::TR_LAST_ACTIVITY: {
- QString elapsedString;
- long long elapsed = index.data().toLongLong();
- QItemDelegate::drawBackground(painter, opt, index);
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- if (elapsed == 0)
- // Show '< 1m ago' when elapsed time is 0
- elapsed = 1;
- if (elapsed < 0)
- elapsedString = Utils::Misc::userFriendlyDuration(elapsed);
- else
- elapsedString = tr("%1 ago", "e.g.: 1h 20m ago").arg(Utils::Misc::userFriendlyDuration(elapsed));
- QItemDelegate::drawDisplay(painter, opt, option.rect, elapsedString);
- break;
+ case TorrentModel::TR_LAST_ACTIVITY: {
+ qlonglong elapsed = index.data().toLongLong();
+ if (hideValues && ((elapsed < 0) || (elapsed >= MAX_ETA)))
+ break;
+
+ QString elapsedString;
+ if (elapsed == 0)
+ // Show '< 1m ago' when elapsed time is 0
+ elapsed = 1;
+ else if (elapsed < 0)
+ elapsedString = Utils::Misc::userFriendlyDuration(elapsed);
+ else
+ elapsedString = tr("%1 ago", "e.g.: 1h 20m ago").arg(Utils::Misc::userFriendlyDuration(elapsed));
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, option.rect, elapsedString);
+ break;
}
- default:
- QItemDelegate::paint(painter, option, index);
- }
- painter->restore();
+ default:
+ QItemDelegate::paint(painter, option, index);
+ }
+ painter->restore();
}
-QWidget* TransferListDelegate::createEditor(QWidget*, const QStyleOptionViewItem &, const QModelIndex &) const {
- // No editor here
- return 0;
+QWidget* TransferListDelegate::createEditor(QWidget*, const QStyleOptionViewItem &, const QModelIndex &) const
+{
+ // No editor here
+ return 0;
}
-QSize TransferListDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const {
- QSize size = QItemDelegate::sizeHint(option, index);
+QSize TransferListDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const
+{
+ static int iconHeight = -1;
+ if (iconHeight == -1) {
+ QIcon icon(":/icons/skin/downloading.png");
+ QList icSizes(icon.availableSizes());
+ iconHeight = icSizes[0].height();
+ }
- static int icon_height = -1;
- if (icon_height == -1) {
- QIcon icon(":/icons/skin/downloading.png");
- QList ic_sizes(icon.availableSizes());
- icon_height = ic_sizes[0].height();
- }
+ QSize size = QItemDelegate::sizeHint(option, index);
+ if (size.height() < iconHeight)
+ size.setHeight(iconHeight);
- if (size.height() < icon_height)
- size.setHeight(icon_height);
-
- return size;
+ return size;
+}
+
+QString TransferListDelegate::getStatusString(const int state) const
+{
+ QString str;
+
+ switch (state) {
+ case BitTorrent::TorrentState::Downloading:
+ str = tr("Downloading");
+ break;
+ case BitTorrent::TorrentState::StalledDownloading:
+ str = tr("Stalled", "Torrent is waiting for download to begin");
+ break;
+ case BitTorrent::TorrentState::DownloadingMetadata:
+ str = tr("Downloading metadata", "used when loading a magnet link");
+ break;
+ case BitTorrent::TorrentState::ForcedDownloading:
+ str = tr("[F] Downloading", "used when the torrent is forced started. You probably shouldn't translate the F.");
+ break;
+ case BitTorrent::TorrentState::Allocating:
+ str = tr("Allocating", "qBittorrent is allocating the files on disk");
+ break;
+ case BitTorrent::TorrentState::Uploading:
+ case BitTorrent::TorrentState::StalledUploading:
+ str = tr("Seeding", "Torrent is complete and in upload-only mode");
+ break;
+ case BitTorrent::TorrentState::ForcedUploading:
+ str = tr("[F] Seeding", "used when the torrent is forced started. You probably shouldn't translate the F.");
+ break;
+ case BitTorrent::TorrentState::QueuedDownloading:
+ case BitTorrent::TorrentState::QueuedUploading:
+ str = tr("Queued", "i.e. torrent is queued");
+ break;
+ case BitTorrent::TorrentState::CheckingDownloading:
+ case BitTorrent::TorrentState::CheckingUploading:
+ str = tr("Checking", "Torrent local data is being checked");
+ break;
+ case BitTorrent::TorrentState::QueuedForChecking:
+ str = tr("Queued for checking", "i.e. torrent is queued for hash checking");
+ break;
+ case BitTorrent::TorrentState::CheckingResumeData:
+ str = tr("Checking resume data", "used when loading the torrents from disk after qbt is launched. It checks the correctness of the .fastresume file. Normally it is completed in a fraction of a second, unless loading many many torrents.");
+ break;
+ case BitTorrent::TorrentState::PausedDownloading:
+ str = tr("Paused");
+ break;
+ case BitTorrent::TorrentState::PausedUploading:
+ str = tr("Completed");
+ break;
+ case BitTorrent::TorrentState::MissingFiles:
+ str = tr("Missing Files");
+ break;
+ case BitTorrent::TorrentState::Error:
+ str = tr("Errored", "torrent status, the torrent has an error");
+ break;
+ default:
+ str = "";
+ }
+
+ return str;
}
diff --git a/src/gui/transferlistdelegate.h b/src/gui/transferlistdelegate.h
index ce8593241..3b1b55758 100644
--- a/src/gui/transferlistdelegate.h
+++ b/src/gui/transferlistdelegate.h
@@ -41,21 +41,23 @@ QT_END_NAMESPACE
// Defines for download list list columns
-class TransferListDelegate: public QItemDelegate {
- Q_OBJECT
+class TransferListDelegate: public QItemDelegate
+{
+ Q_OBJECT
public:
- TransferListDelegate(QObject *parent);
- ~TransferListDelegate();
- void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
- QWidget* createEditor(QWidget*, const QStyleOptionViewItem &, const QModelIndex &) const;
+ TransferListDelegate(QObject *parent);
+ void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const;
+ QWidget* createEditor(QWidget*, const QStyleOptionViewItem &, const QModelIndex &) const;
- // Reimplementing sizeHint() because the 'name' column contains text+icon.
- // When that WHOLE column goes out of view(eg user scrolls horizontally)
- // the rows shrink if the text's height is smaller than the icon's height.
- // This happens because icon from the 'name' column is no longer drawn.
- QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const;
+ // Reimplementing sizeHint() because the 'name' column contains text+icon.
+ // When that WHOLE column goes out of view(eg user scrolls horizontally)
+ // the rows shrink if the text's height is smaller than the icon's height.
+ // This happens because icon from the 'name' column is no longer drawn.
+ QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const;
+private:
+ QString getStatusString(const int state) const;
};
#endif // TRANSFERLISTDELEGATE_H