X-Git-Url: http://git.maemo.org/git/?p=qtrapids;a=blobdiff_plain;f=src%2Fgui%2FDownloadView.cpp;h=07c8e9726cc7bf50ae6d4f8cc4d7645b8f43b4ac;hp=5d616d858d05ade8dfa35dbb06ab24bc6218eb51;hb=55732cd61b5d6c85a5e90aee584f12cbca70e116;hpb=93a84891f3ad3cc6d1116d6d209f866a0f0a8a15 diff --git a/src/gui/DownloadView.cpp b/src/gui/DownloadView.cpp index 5d616d8..07c8e97 100644 --- a/src/gui/DownloadView.cpp +++ b/src/gui/DownloadView.cpp @@ -18,20 +18,26 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include +#include #include #include #include "DownloadView.h" DownloadView::DownloadView(QWidget* parent) : - QTreeWidget(parent), - items_() + QTreeWidget(parent), + items_(), + timer_(NULL) { - setRootIsDecorated(false); // Hide branch lines, making one-level treeview (similar to list) - setHeaderItem(DownloadViewItem::getHeaderItem()); + setRootIsDecorated(false); // Hide branch lines, making one-level treeview (similar to list) + setHeaderItem(DownloadViewItem::getHeaderItem()); - connect(this, SIGNAL(itemPressed(QTreeWidgetItem*, int)), - this, SLOT(on_itemClicked(QTreeWidgetItem*, int))); + connect(this, SIGNAL(itemPressed(QTreeWidgetItem*, int)), + this, SLOT(on_itemClicked(QTreeWidgetItem*, int))); + + timer_ = new QTimer(this); + connect(timer_, SIGNAL(timeout()), this, SLOT(on_timeout())); + timer_->start(5000); } @@ -41,48 +47,66 @@ DownloadView::~DownloadView() } -void DownloadView::newItem(QTorrentHandle handle) +void DownloadView::newItem(qtrapids::QTorrentHandle handle) { +#ifdef QTRAPIDS_DEBUG qDebug() << "DownloadView::newItem() " << items_.count(handle); +#endif DownloadViewItem *item = new DownloadViewItem(QStringList() - << handle.name() - << QString::number(handle.getTotalSize()) - << GetStatusString(handle.state()) - << QString::number(handle.progress()) - << QString::number(handle.downloadRate()) - << QString::number(handle.uploadRate()) - << QString::number(handle.numSeeds()) + "/" - + QString::number(handle.numLeeches()) - << QString::number(handle.ratio()) - << "ETA" ); - + << handle.name() + << QString::number(handle.getTotalSize()) + << GetStatusString(handle.state()) + << QString::number(100*handle.progress()) + << QString::number(handle.downloadRate(), 'f', 2) + << QString::number(handle.uploadRate(), 'f', 2) + << QString::number(handle.numSeeds()) + "/" + + QString::number(handle.numLeeches()) + << QString::number(handle.ratio()) + << "ETA" ); + + // Set text color for status: QBrush brushTmp(GetStatusColor(handle.state())); item->setForeground(2, brushTmp); - + addTopLevelItem(item); items_[handle] = item; } -void DownloadView::updateItem(QTorrentHandle handle) +void DownloadView::updateItem(qtrapids::QTorrentHandle handle) { - qDebug() << "DownloadView::updateItem() " << items_.count(handle); - + //qDebug() << "DownloadView::updateItem() " << items_.count(handle); + + static float lastProg = 0; + + // If there are items currently downloading, update: if (items_.count(handle) > 0) { + DownloadViewItem *item = items_[handle]; + + // Only the changing fields are being updated: item->setData(2, Qt::DisplayRole, - QVariant(GetStatusString(handle.state()))); - item->setData(3, Qt::DisplayRole, - QVariant(QString::number(handle.progress()))); + QVariant(GetStatusString(handle.state()))); item->setData(4, Qt::DisplayRole, - QVariant(QString::number(handle.downloadRate()))); + QVariant(QString::number(handle.downloadRate(), 'f', 2))); item->setData(5, Qt::DisplayRole, - QVariant(QString::number(handle.uploadRate()))); - item->setData(6, Qt::DisplayRole, - QString::number(handle.numSeeds()) + "/" - + QString::number(handle.numLeeches())); - + QVariant(QString::number(handle.uploadRate(), 'f', 2))); + item->setData(6, Qt::DisplayRole, + QString::number(handle.numSeeds()) + "/" + + QString::number(handle.numLeeches())); + + // Set progress if increment is 1 percent. + float prog = handle.progress(); + if ((prog-lastProg) >= 0.01 || prog >= 1.0) { + item->setData(3, Qt::DisplayRole, + QVariant(QString::number(100*prog))); + lastProg = prog; + } + + /// @TODO: ETA-counter adjusting,if ETA is to be implemented + + // Adjust color QBrush brushTmp(GetStatusColor(handle.state())); item->setForeground(2, brushTmp); } @@ -90,41 +114,51 @@ void DownloadView::updateItem(QTorrentHandle handle) } -QTorrentHandle DownloadView::removeSelected() +qtrapids::QTorrentHandle DownloadView::removeSelected() { +#ifdef QTRAPIDS_DEBUG qDebug() << "DownloadView::removeSelected() " << topLevelItemCount() ; +#endif DownloadViewItem *item = dynamic_cast (currentItem()); - - std::map::iterator listIter - = items_.begin(); - std::map::iterator listEnd - = items_.end(); - + + std::map::iterator listIter + = items_.begin(); + std::map::iterator listEnd + = items_.end(); + while (listIter != listEnd) { if (listIter->second == item) { break; } ++listIter; } - - QTorrentHandle handle = listIter->first; + + qtrapids::QTorrentHandle handle = listIter->first; items_.erase(listIter); - + int index = indexOfTopLevelItem(currentItem()); if (index >= 0) { takeTopLevelItem(index); } - + +#ifdef QTRAPIDS_DEBUG qDebug() << "DownloadView::removeSelected() " << topLevelItemCount() ; - +#endif + return handle; } -void DownloadView::removeItem(QTorrentHandle handle) +void DownloadView::removeItem(qtrapids::QTorrentHandle handle) +{ +} + + +void DownloadView::setRefreshInterval(int msec) { + timer_->setInterval(msec); } @@ -133,53 +167,77 @@ void DownloadView::on_itemClicked(QTreeWidgetItem * item, int column) /* qDebug() << "DownloadView::on_itemClicked(()" << item << "," << column; qDebug() << "current item" << currentItem(); - + if (item == currentItem() && item->isSelected()) { item->setSelected(false); } */ } +void DownloadView::on_timeout() +{ +#ifdef QTRAPIDS_DEBUG + qDebug() << "DownloadView::on_timeout()"; +#endif + UpdateView(); +} -QString DownloadView::GetStatusString(QTorrentHandle::State const& status) const + + +QString DownloadView::GetStatusString(qtrapids::QTorrentHandle::State const& status) const { switch (status) { - case QTorrentHandle::QUEUED_FOR_CHECKING : - return tr("Queued"); - case QTorrentHandle::CHECKING_FILES : - return tr("Checking"); - case QTorrentHandle::DOWNLOADING_METADATA : - return tr("DL meta"); - case QTorrentHandle::DOWNLOADING : - return tr("Downloading"); - case QTorrentHandle::FINISHED : - return tr("Finished"); - case QTorrentHandle::SEEDING : - return tr("Seeding"); - case QTorrentHandle::ALLOCATING : - return tr("Allocating"); - default: - return tr("N/A"); + case qtrapids::QTorrentHandle::QUEUED_FOR_CHECKING : + return tr("Queued"); + case qtrapids::QTorrentHandle::CHECKING_FILES : + return tr("Checking"); + case qtrapids::QTorrentHandle::DOWNLOADING_METADATA : + return tr("DL meta"); + case qtrapids::QTorrentHandle::DOWNLOADING : + return tr("Downloading"); + case qtrapids::QTorrentHandle::FINISHED : + return tr("Finished"); + case qtrapids::QTorrentHandle::SEEDING : + return tr("Seeding"); + case qtrapids::QTorrentHandle::ALLOCATING : + return tr("Allocating"); + default: + return tr("N/A"); } } -QColor DownloadView::GetStatusColor(QTorrentHandle::State const& status) const +QColor DownloadView::GetStatusColor(qtrapids::QTorrentHandle::State const& status) const { QColor green(40,205,40); QColor yellow(255,174,0); switch (status) { - case QTorrentHandle::QUEUED_FOR_CHECKING : - case QTorrentHandle::CHECKING_FILES : - case QTorrentHandle::DOWNLOADING_METADATA : - case QTorrentHandle::ALLOCATING : - return yellow; - case QTorrentHandle::DOWNLOADING : - case QTorrentHandle::FINISHED : - case QTorrentHandle::SEEDING : - return green; - default: - return QColor(); + case qtrapids::QTorrentHandle::QUEUED_FOR_CHECKING : + case qtrapids::QTorrentHandle::CHECKING_FILES : + case qtrapids::QTorrentHandle::DOWNLOADING_METADATA : + case qtrapids::QTorrentHandle::ALLOCATING : + return yellow; + case qtrapids::QTorrentHandle::DOWNLOADING : + case qtrapids::QTorrentHandle::FINISHED : + case qtrapids::QTorrentHandle::SEEDING : + return green; + default: + return QColor(); } -} \ No newline at end of file +} + +void DownloadView::UpdateView() +{ + DownloadViewItem *item = dynamic_cast (currentItem()); + + std::map::iterator listIter + = items_.begin(); + std::map::iterator listEnd + = items_.end(); + + while (listIter != listEnd) { + updateItem(listIter->first); + ++listIter; + } +}