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