summaryrefslogtreecommitdiffstats
path: root/kget/transferlist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kget/transferlist.cpp')
-rw-r--r--kget/transferlist.cpp283
1 files changed, 283 insertions, 0 deletions
diff --git a/kget/transferlist.cpp b/kget/transferlist.cpp
new file mode 100644
index 00000000..1d9ed902
--- /dev/null
+++ b/kget/transferlist.cpp
@@ -0,0 +1,283 @@
+/***************************************************************************
+* transferlist.cpp
+* -------------------
+*
+* Revision : $Id$
+* begin : Tue Jan 29 2002
+* copyright : (C) 2002 by Patrick Charbonnier
+* : Based On Caitoo v.0.7.3 (c) 1998 - 2000, Matej Koss
+*
+****************************************************************************/
+
+/***************************************************************************
+ *
+ * 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.
+ *
+ ***************************************************************************/
+
+#include <kapplication.h>
+#include <kstandarddirs.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kmessagebox.h>
+#include <ksimpleconfig.h>
+#include <kio/netaccess.h>
+
+#include "transfer.h"
+#include "transferlist.h"
+
+#define NUM_COLS 9
+
+static int defaultColumnWidth[] = {
+ 26, // PIXMAP
+ 160, // LOCAL FILENAME
+ 40, // RESUME
+ 60, // COUNT
+ 30, // PROGRESS
+ 65, // TOTAL
+ 70, // SPEED
+ 70, // REMAINING TIME
+ 450 // URL
+ };
+
+
+TransferList::TransferList(QWidget * parent, const char *name)
+ : KListView(parent, name)
+{
+ // enable selection of more than one item
+ setSelectionMode( QListView::Extended );
+
+ // // disable sorting and clicking on headers
+ // setSorting( -1 );
+
+ setAllColumnsShowFocus(true);
+
+ lv_pixmap = addColumn(i18n("S"));
+ lv_filename = addColumn(i18n("Local File Name"));
+ lv_resume = addColumn(i18n("Resumed"));
+ lv_count = addColumn(i18n("Count"));
+ lv_progress = addColumn(i18n("%"));
+ lv_total = addColumn(i18n("Total"));
+ lv_speed = addColumn(i18n("Speed"));
+ lv_remaining = addColumn(i18n("Rem. Time"));
+ lv_url = addColumn(i18n("Address (URL)"));
+
+ jobid=1;
+
+ // initial layout
+ KConfig *config = KGlobal::config();
+ config->setGroup("ListView");
+ if ( config->readListEntry("ColumnWidths").isEmpty() )
+ {
+ for (int i = 0; i < NUM_COLS; i++)
+ setColumnWidth(i, defaultColumnWidth[i]);
+ }
+ else
+ restoreLayout( KGlobal::config(), "ListView" );
+
+ QString connectPath = "pics/connect%2.png";
+ QString tryPath = "pics/try%2.png";
+
+ // Load animations
+ QPixmap* curPix;
+ if (animConn.count() == 0) {
+ animConn.setAutoDelete(true);
+ animTry.setAutoDelete(true);
+ for (int i = 0; i < 8; i++) {
+ curPix = new QPixmap();
+ curPix->load(locate("appdata", connectPath.arg(i)));
+ animConn.append(curPix);
+
+ curPix = new QPixmap();
+ curPix->load(locate("appdata", tryPath.arg(i)));
+ animTry.append(curPix);
+ }
+ }
+
+ pixQueued = UserIcon("md_queued");
+ pixScheduled = UserIcon("md_scheduled");
+ pixDelayed = UserIcon("md_delayed.png");
+ pixFinished = UserIcon("md_finished");
+ pixRetrying = UserIcon("retrying");
+
+ phasesNum = animConn.count();
+
+ connect(this, SIGNAL(doubleClicked(QListViewItem *)), SLOT(slotTransferSelected(QListViewItem *)));
+ connect(this, SIGNAL(rightButtonPressed(QListViewItem *, const QPoint &, int)), SLOT(slotPopupMenu(QListViewItem *)));
+}
+
+
+TransferList::~TransferList()
+{
+ saveLayout( KGlobal::config(), "ListView" );
+}
+
+
+Transfer *TransferList::addTransfer(const KURL & _source, const KURL & _dest,
+ bool canShow)
+{
+ Transfer *last = static_cast<Transfer*>( lastItem() );
+ Transfer *new_item = new Transfer(this, last, _source, _dest, jobid);
+ jobid++;
+ if ( canShow )
+ new_item->maybeShow();
+
+ return new_item;
+}
+
+
+void TransferList::slotTransferSelected(QListViewItem * item)
+{
+ emit transferSelected((Transfer *) item);
+}
+
+
+void TransferList::slotPopupMenu(QListViewItem * item)
+{
+ if (!item)
+ return;
+ emit popupMenu((Transfer *) item);
+}
+
+
+void TransferList::setSelected(QListViewItem * item, bool selected)
+{
+ bool tmpb = selected;
+
+ if (tmpb && item->isSelected()) {
+ tmpb = false;
+ }
+
+ QListView::setSelected(item, tmpb);
+}
+
+
+void TransferList::moveToBegin(Transfer * item)
+{
+ // ASSERT(item);
+
+ Transfer *oldfirst=static_cast<Transfer*>(firstChild());
+ item->moveItem(oldfirst); //move item after oldfirst
+ oldfirst->moveItem(item); //move oldfirst after item
+}
+
+
+void TransferList::moveToEnd(Transfer * item)
+{
+ // ASSERT(item);
+
+ Transfer *oldlast=static_cast<Transfer*>(lastItem());
+ item->moveItem(oldlast);
+}
+
+
+bool TransferList::updateStatus(int counter)
+{
+ bool isTransfer = false;
+
+ TransferIterator it(this);
+
+ for (; it.current(); ++it) {
+ isTransfer |= it.current()->updateStatus(counter);
+ }
+
+ return isTransfer;
+}
+
+
+bool TransferList::areTransfersQueuedOrScheduled()
+{
+ TransferIterator it(this);
+
+ if (childCount() > 0) {
+ for (; it.current(); ++it) {
+ if ((it.current()->getMode() == Transfer::MD_QUEUED)|| \
+ (it.current()->getMode() == Transfer::MD_SCHEDULED))
+ return true;
+ }
+ }
+ return false;
+}
+
+
+Transfer * TransferList::find(const KURL& _src)
+{
+ TransferIterator it(this);
+
+ for (; it.current(); ++it) {
+ if (it.current()->getSrc() == _src) {
+ return it.current();
+ }
+ }
+
+ return 0L;
+}
+
+
+void TransferList::readTransfers(const KURL& file)
+{
+ QString tmpFile;
+
+ if (KIO::NetAccess::download(file, tmpFile, (QWidget*)parent())) {
+ KSimpleConfig config(tmpFile);
+
+ config.setGroup("Common");
+ int num = config.readNumEntry("Count", 0);
+
+ Transfer *item;
+ KURL src, dest;
+
+ for ( int i = 0; i < num; i++ )
+ {
+ QString str;
+
+ str.sprintf("Item%d", i);
+ config.setGroup(str);
+
+ src = KURL::fromPathOrURL( config.readPathEntry("Source") );
+ dest = KURL::fromPathOrURL( config.readPathEntry("Dest") );
+ item = addTransfer( src, dest, false ); // don't show!
+
+ if (!item->read(&config, i))
+ delete item;
+ else
+ {
+ // configuration read, now we know the status to determine
+ // whether to show or not
+ item->maybeShow();
+ }
+ }
+ }
+}
+
+void TransferList::writeTransfers(const QString& file)
+{
+ sDebug << ">>>>Entering with file =" << file << endl;
+
+ KSimpleConfig config(file);
+ int num = childCount();
+
+ config.setGroup("Common");
+ config.writeEntry("Count", num);
+
+ TransferIterator it(this);
+
+ for (int id = 0; it.current(); ++it, ++id)
+ it.current()->write(&config, id);
+ config.sync();
+
+ sDebug << "<<<<Leaving" << endl;
+}
+
+#include "transferlist.moc"