summaryrefslogtreecommitdiffstats
path: root/plugins/infowidget/chunkdownloadview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infowidget/chunkdownloadview.cpp')
-rw-r--r--plugins/infowidget/chunkdownloadview.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/plugins/infowidget/chunkdownloadview.cpp b/plugins/infowidget/chunkdownloadview.cpp
new file mode 100644
index 0000000..276a311
--- /dev/null
+++ b/plugins/infowidget/chunkdownloadview.cpp
@@ -0,0 +1,166 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson *
+ * joris.guisson@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include <klocale.h>
+#include <qlabel.h>
+#include <interfaces/chunkdownloadinterface.h>
+#include <interfaces/functions.h>
+#include <interfaces/torrentinterface.h>
+#include "chunkdownloadview.h"
+
+
+using namespace bt;
+using namespace kt;
+
+namespace kt
+{
+
+ ChunkDownloadViewItem::ChunkDownloadViewItem(KListView* cdv,kt::ChunkDownloadInterface* cd)
+ : KListViewItem(cdv),cd(cd)
+ {
+ update();
+ }
+
+ void ChunkDownloadViewItem::update()
+ {
+ ChunkDownloadInterface::Stats s;
+ cd->getStats(s);
+
+ setText(0,QString::number(s.chunk_index));
+ setText(1,QString("%1 / %2").arg(s.pieces_downloaded).arg(s.total_pieces));
+ setText(2,s.current_peer_id);
+ setText(3,KBytesPerSecToString(s.download_speed / 1024.0));
+ setText(4,QString::number(s.num_downloaders));
+ }
+
+ int ChunkDownloadViewItem::compare(QListViewItem * i,int col,bool) const
+ {
+ ChunkDownloadViewItem* it = (ChunkDownloadViewItem*)i;
+ kt::ChunkDownloadInterface* ocd = it->cd;
+ ChunkDownloadInterface::Stats s;
+ cd->getStats(s);
+ ChunkDownloadInterface::Stats os;
+ ocd->getStats(os);
+ switch (col)
+ {
+ case 0: return CompareVal(s.chunk_index,os.chunk_index);
+ case 1: return CompareVal(s.pieces_downloaded,os.pieces_downloaded);
+ case 2: return QString::compare(s.current_peer_id,os.current_peer_id);
+ case 3: return CompareVal(s.download_speed,os.download_speed);
+ case 4: return CompareVal(s.num_downloaders,os.num_downloaders);
+ }
+ return 0;
+ }
+
+
+ ChunkDownloadView::ChunkDownloadView(QWidget *parent, const char *name)
+ : ChunkDownloadViewBase(parent, name)
+ {
+ m_list_view->setShowSortIndicator(true);
+ m_list_view->setAllColumnsShowFocus(true);
+
+ m_list_view->setColumnAlignment(0,Qt::AlignLeft);
+ m_list_view->setColumnAlignment(1,Qt::AlignCenter);
+ m_list_view->setColumnAlignment(3,Qt::AlignRight);
+ m_list_view->setColumnAlignment(4,Qt::AlignRight);
+ curr_tc = 0;
+ }
+
+
+ ChunkDownloadView::~ChunkDownloadView()
+ {}
+
+
+ void ChunkDownloadView::addDownload(kt::ChunkDownloadInterface* cd)
+ {
+ ChunkDownloadViewItem* it = new ChunkDownloadViewItem(m_list_view,cd);
+ items.insert(cd,it);
+ }
+
+ void ChunkDownloadView::removeDownload(kt::ChunkDownloadInterface* cd)
+ {
+ if (!items.contains(cd))
+ return;
+
+ ChunkDownloadViewItem* it = items[cd];
+ delete it;
+ items.remove(cd);
+ }
+
+ void ChunkDownloadView::removeAll()
+ {
+ m_list_view->clear();
+ items.clear();
+ }
+
+ void ChunkDownloadView::changeTC(kt::TorrentInterface* tc)
+ {
+ curr_tc = tc;
+ setEnabled(curr_tc != 0);
+ update();
+ }
+
+ void ChunkDownloadView::update()
+ {
+ if (!curr_tc)
+ return;
+
+ QMap<ChunkDownloadInterface*,ChunkDownloadViewItem*>::iterator i = items.begin();
+ while (i != items.end())
+ {
+ ChunkDownloadViewItem* it = i.data();
+ it->update();
+ i++;
+ }
+ m_list_view->sort();
+
+ const TorrentStats & s = curr_tc->getStats();
+ m_chunks_downloading->setText(QString::number(s.num_chunks_downloading));
+ m_chunks_downloaded->setText(QString::number(s.num_chunks_downloaded));
+ m_total_chunks->setText(QString::number(s.total_chunks));
+ m_excluded_chunks->setText(QString::number(s.num_chunks_excluded));
+ m_chunks_left->setText(QString::number(s.num_chunks_left));
+
+ if( s.chunk_size / 1024 < 1024 )
+ m_size_chunks->setText(QString::number(s.chunk_size / 1024) + "." + QString::number((s.chunk_size % 1024) / 100) + " KB");
+ else
+ m_size_chunks->setText(QString::number(s.chunk_size / 1024 / 1024) + "." + QString::number(((s.chunk_size / 1024) % 1024) / 100) + " MB");
+ }
+
+ void ChunkDownloadView::saveLayout(KConfig* cfg,const QString & group_name)
+ {
+ m_list_view->saveLayout(cfg,group_name);
+ }
+
+ void ChunkDownloadView::restoreLayout(KConfig* cfg,const QString & group_name)
+ {
+ m_list_view->restoreLayout(cfg,group_name);
+ }
+
+ void ChunkDownloadView::clear()
+ {
+ m_chunks_downloading->clear();
+ m_chunks_downloaded->clear();
+ m_total_chunks->clear();
+ m_excluded_chunks->clear();
+ m_size_chunks->clear();
+ }
+}
+
+#include "chunkdownloadview.moc"