- Namespaced QBittorrentSession and QTorrentHandle to avoid possible future conflicts
[qtrapids] / src / gui / DownloadView.cpp
index d7424b0..d6c9183 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 #include <QDebug>
+#include <QTimer>
 #include <QVariant>
 #include <QColor>
 #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,22 +47,25 @@ 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(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);
                        
@@ -65,24 +74,39 @@ void DownloadView::newItem(QTorrentHandle handle)
 }
 
 
-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())));
                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())));
+                                                                       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,15 +114,17 @@ void DownloadView::updateItem(QTorrentHandle handle)
 }
 
 
-QTorrentHandle DownloadView::removeSelected()
+qtrapids::QTorrentHandle DownloadView::removeSelected()
 {
+#ifdef QTRAPIDS_DEBUG
        qDebug() << "DownloadView::removeSelected() " <<  topLevelItemCount() ;
+#endif
 
        DownloadViewItem *item = dynamic_cast<DownloadViewItem*> (currentItem());
        
-       std::map<QTorrentHandle, DownloadViewItem*>::iterator listIter
+       std::map<qtrapids::QTorrentHandle, DownloadViewItem*>::iterator listIter
                        = items_.begin();
-       std::map<QTorrentHandle, DownloadViewItem*>::iterator listEnd
+       std::map<qtrapids::QTorrentHandle, DownloadViewItem*>::iterator listEnd
                        = items_.end();
        
        while (listIter != listEnd) {
@@ -108,7 +134,7 @@ QTorrentHandle DownloadView::removeSelected()
                ++listIter;
        }
        
-       QTorrentHandle handle = listIter->first;
+       qtrapids::QTorrentHandle handle = listIter->first;
        items_.erase(listIter);
 
        
@@ -116,20 +142,29 @@ QTorrentHandle DownloadView::removeSelected()
        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);
 }
 
 
 void DownloadView::on_itemClicked(QTreeWidgetItem * item, int column)
-{/*
+{
+       /*
        qDebug() << "DownloadView::on_itemClicked(()" << item << "," << column;
        qDebug() << "current item" << currentItem();
        
@@ -139,47 +174,69 @@ void DownloadView::on_itemClicked(QTreeWidgetItem * item, int column)
        */
 }
 
+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 "Queued";
-               case QTorrentHandle::CHECKING_FILES :
-                       return "Checking";
-               case QTorrentHandle::DOWNLOADING_METADATA :
-                       return "DL meta";
-               case QTorrentHandle::DOWNLOADING :
-                       return "Downloading";
-               case QTorrentHandle::FINISHED :
-                       return "Finished";
-               case QTorrentHandle::SEEDING :
-                       return "Seeding"; 
-               case QTorrentHandle::ALLOCATING :
-                       return "Allocating";
+               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 "N/A";
+                       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 :
+               case qtrapids::QTorrentHandle::QUEUED_FOR_CHECKING :
+               case qtrapids::QTorrentHandle::CHECKING_FILES :
+               case qtrapids::QTorrentHandle::DOWNLOADING_METADATA :
+               case qtrapids::QTorrentHandle::ALLOCATING :
                        return yellow;
-               case QTorrentHandle::DOWNLOADING :
-               case QTorrentHandle::FINISHED :
-               case QTorrentHandle::SEEDING :
+               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<DownloadViewItem*> (currentItem());
+       
+       std::map<qtrapids::QTorrentHandle, DownloadViewItem*>::iterator listIter
+                       = items_.begin();
+       std::map<qtrapids::QTorrentHandle, DownloadViewItem*>::iterator listEnd
+                       = items_.end();
+       
+       while (listIter != listEnd) {
+               updateItem(listIter->first);
+               ++listIter;
+       }
+}