From a640b084147f23a40c5b043616549c461cb1f4ed Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Tue, 16 Nov 2010 17:43:54 +0000 Subject: [PATCH] FEATURE: Added "Amount downloaded/left" columns to transfer list Fix bug in column display menu --- Changelog | 1 + src/qtlibtorrent/qtorrenthandle.cpp | 4 ++++ src/qtlibtorrent/qtorrenthandle.h | 1 + src/qtlibtorrent/torrentmodel.cpp | 10 +++++++++- src/qtlibtorrent/torrentmodel.h | 2 +- src/transferlistdelegate.h | 2 ++ src/transferlistwidget.cpp | 4 +++- 7 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Changelog b/Changelog index 3f52063a3..da0d3f5b6 100644 --- a/Changelog +++ b/Changelog @@ -9,6 +9,7 @@ - FEATURE: The optimal piece size is now automatically computed in the torrent creation tool - FEATURE: Bring up the connection settings when clicking on the connection status icon - FEATURE: Major code refactoring and optimization + - FEATURE: Added "Amount downloaded/left" columns to transfer list - COSMETIC: Replaced message box by on-screen notification for download errors - COSMETIC: Improved the torrent creation tool appearance - OTHERS: Dropped support for Qt <= 4.4 diff --git a/src/qtlibtorrent/qtorrenthandle.cpp b/src/qtlibtorrent/qtorrenthandle.cpp index 5f35e8594..e212ec2f9 100644 --- a/src/qtlibtorrent/qtorrenthandle.cpp +++ b/src/qtlibtorrent/qtorrenthandle.cpp @@ -146,6 +146,10 @@ size_type QTorrentHandle::total_wanted_done() const { return torrent_handle::status().total_wanted_done; } +size_type QTorrentHandle::total_wanted() const { + return torrent_handle::status().total_wanted; +} + float QTorrentHandle::download_payload_rate() const { return torrent_handle::status().download_payload_rate; } diff --git a/src/qtlibtorrent/qtorrenthandle.h b/src/qtlibtorrent/qtorrenthandle.h index 0d1dbec22..2d403c72c 100644 --- a/src/qtlibtorrent/qtorrenthandle.h +++ b/src/qtlibtorrent/qtorrenthandle.h @@ -67,6 +67,7 @@ class QTorrentHandle : public torrent_handle { size_type piece_length() const; int num_pieces() const; size_type total_wanted_done() const; + size_type total_wanted() const; float download_payload_rate() const; float upload_payload_rate() const; int num_connections() const; diff --git a/src/qtlibtorrent/torrentmodel.cpp b/src/qtlibtorrent/torrentmodel.cpp index 927ae2ff1..338322d7d 100644 --- a/src/qtlibtorrent/torrentmodel.cpp +++ b/src/qtlibtorrent/torrentmodel.cpp @@ -180,6 +180,10 @@ QVariant TorrentModelItem::data(int column, int role) const return m_torrent.download_limit(); case TR_UPLIMIT: return m_torrent.upload_limit(); + case TR_AMOUNT_DOWNLOADED: + return static_cast(m_torrent.total_wanted_done()); + case TR_AMOUNT_LEFT: + return static_cast(m_torrent.total_wanted() - m_torrent.total_wanted_done()); default: return QVariant(); } @@ -241,6 +245,8 @@ QVariant TorrentModel::headerData(int section, Qt::Orientation orientation, case TorrentModelItem::TR_TRACKER: return tr("Tracker"); case TorrentModelItem::TR_DLLIMIT: return tr("Down Limit", "i.e: Download limit"); case TorrentModelItem::TR_UPLIMIT: return tr("Up Limit", "i.e: Upload limit"); + case TorrentModelItem::TR_AMOUNT_DOWNLOADED: return tr("Amount downloaded", "Amount of data downloaded (e.g. in MB)"); + case TorrentModelItem::TR_AMOUNT_LEFT: return tr("Amount left", "Amount of data left to download (e.g. in MB)"); default: return QVariant(); } @@ -256,6 +262,8 @@ QVariant TorrentModel::headerData(int section, Qt::Orientation orientation, case TorrentModelItem::TR_RATIO: case TorrentModelItem::TR_DLLIMIT: case TorrentModelItem::TR_UPLIMIT: + case TorrentModelItem::TR_AMOUNT_DOWNLOADED: + case TorrentModelItem::TR_AMOUNT_LEFT: return Qt::AlignRight; case TorrentModelItem::TR_PROGRESS: return Qt::AlignHCenter; @@ -299,7 +307,7 @@ int TorrentModel::torrentRow(const QString &hash) const QList::const_iterator it; int row = 0; for(it = m_torrents.constBegin(); it != m_torrents.constEnd(); it++) { - if((*it)->hash() == hash) return row; + if((*it)->hash() == hash) return row; ++row; } return -1; diff --git a/src/qtlibtorrent/torrentmodel.h b/src/qtlibtorrent/torrentmodel.h index ae006f034..e9dd3a174 100644 --- a/src/qtlibtorrent/torrentmodel.h +++ b/src/qtlibtorrent/torrentmodel.h @@ -49,7 +49,7 @@ Q_OBJECT public: enum State {STATE_DOWNLOADING, STATE_STALLED_DL, STATE_STALLED_UP, STATE_SEEDING, STATE_PAUSED_DL, STATE_PAUSED_UP, STATE_QUEUED_DL, STATE_QUEUED_UP, STATE_CHECKING_UP, STATE_CHECKING_DL, STATE_INVALID}; - enum Column {TR_NAME, TR_PRIORITY, TR_SIZE, TR_PROGRESS, TR_STATUS, TR_SEEDS, TR_PEERS, TR_DLSPEED, TR_UPSPEED, TR_ETA, TR_RATIO, TR_LABEL, TR_ADD_DATE, TR_SEED_DATE, TR_TRACKER, TR_DLLIMIT, TR_UPLIMIT, NB_COLUMNS}; + enum Column {TR_NAME, TR_PRIORITY, TR_SIZE, TR_PROGRESS, TR_STATUS, TR_SEEDS, TR_PEERS, TR_DLSPEED, TR_UPSPEED, TR_ETA, TR_RATIO, TR_LABEL, TR_ADD_DATE, TR_SEED_DATE, TR_TRACKER, TR_DLLIMIT, TR_UPLIMIT, TR_AMOUNT_DOWNLOADED, TR_AMOUNT_LEFT, NB_COLUMNS}; public: TorrentModelItem(const QTorrentHandle& h); diff --git a/src/transferlistdelegate.h b/src/transferlistdelegate.h index d71e4b7e6..f05fa68f3 100644 --- a/src/transferlistdelegate.h +++ b/src/transferlistdelegate.h @@ -60,6 +60,8 @@ public: QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option); painter->save(); switch(index.column()){ + case TorrentModelItem::TR_AMOUNT_DOWNLOADED: + case TorrentModelItem::TR_AMOUNT_LEFT: case TorrentModelItem::TR_SIZE:{ QItemDelegate::drawBackground(painter, opt, index); opt.displayAlignment = Qt::AlignRight; diff --git a/src/transferlistwidget.cpp b/src/transferlistwidget.cpp index f4d2c1ac9..c08f46fd4 100644 --- a/src/transferlistwidget.cpp +++ b/src/transferlistwidget.cpp @@ -512,6 +512,8 @@ bool TransferListWidget::loadHiddenColumns() { setColumnHidden(TorrentModelItem::TR_UPLIMIT, true); setColumnHidden(TorrentModelItem::TR_DLLIMIT, true); setColumnHidden(TorrentModelItem::TR_TRACKER, true); + setColumnHidden(TorrentModelItem::TR_AMOUNT_DOWNLOADED, true); + setColumnHidden(TorrentModelItem::TR_AMOUNT_LEFT, true); } return loaded; } @@ -521,7 +523,7 @@ void TransferListWidget::displayDLHoSMenu(const QPoint&){ QMenu hideshowColumn(this); hideshowColumn.setTitle(tr("Column visibility")); QList actions; - for(int i=0; i < listModel->rowCount(); ++i) { + for(int i=0; i < listModel->columnCount(); ++i) { if(!BTSession->isQueueingEnabled() && i == TorrentModelItem::TR_PRIORITY) { actions.append(0); continue;