diff --git a/kget/core/transfertreemodel.cpp b/kget/core/transfertreemodel.cpp index 196547d..50b9599 100644 --- a/kget/core/transfertreemodel.cpp +++ b/kget/core/transfertreemodel.cpp @@ -2,6 +2,7 @@ Copyright (C) 2006 Dario Massarin Copyright (C) 2009 Lukas Appelhans + Copyright (C) 2010 Matthias Fuchs This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -326,6 +327,15 @@ void TransferTreeModel::moveTransfer(Transfer * transfer, TransferGroup * destGr KGet::selectionModel()->clearSelection(); } +void TransferTreeModel::moveTransfer(TransferHandler *transfer, TransferGroupHandler *destGroup, TransferHandler *after) +{ + Transfer *afterTransfer = 0; + if (after) { + afterTransfer = after->m_transfer; + } + moveTransfer(transfer->m_transfer, destGroup->m_group, afterTransfer); +} + QList TransferTreeModel::transferGroups() { QList transferGroups; diff --git a/kget/core/transfertreemodel.h b/kget/core/transfertreemodel.h index 289df3b..8f1e8c0 100644 --- a/kget/core/transfertreemodel.h +++ b/kget/core/transfertreemodel.h @@ -2,6 +2,7 @@ Copyright (C) 2006 Dario Massarin Copyright (C) 2009 Lukas Appelhans + Copyright (C) 2010 Matthias Fuchs This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -112,6 +113,7 @@ class KGET_EXPORT TransferTreeModel : public QStandardItemModel ModelItem * itemFromIndex(const QModelIndex &index) const; void moveTransfer(Transfer * transfer, TransferGroup * destGroup, Transfer * after = 0); + void moveTransfer(TransferHandler *transfer, TransferGroupHandler *destGroup, TransferHandler *after = 0); QList transferGroups(); diff --git a/kget/mainwindow.cpp b/kget/mainwindow.cpp index 3ec9cad..8faa6e3 100644 --- a/kget/mainwindow.cpp +++ b/kget/mainwindow.cpp @@ -6,6 +6,7 @@ Copyright (C) 2006 - 2008 Urs Wolfer Copyright (C) 2006 Dario Massarin Copyright (C) 2008 - 2009 Lukas Appelhans + Copyright (C) 2009 - 2010 Matthias Fuchs This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -186,6 +187,26 @@ void MainWindow::setupActions() createMetalinkAction->setText(i18n("&Create a Metalink")); connect(createMetalinkAction, SIGNAL(triggered()), SLOT(slotCreateMetalink())); + KAction *priorityTop = actionCollection()->addAction("priority_top"); + priorityTop->setText(i18n("Top Priority")); + priorityTop->setIcon(KIcon("arrow-up-double")); + connect(priorityTop, SIGNAL(triggered()), this, SLOT(slotPriorityTop())); + + KAction *priorityBottom = actionCollection()->addAction("priority_bottom"); + priorityBottom->setText(i18n("Least Priority")); + priorityBottom->setIcon(KIcon("arrow-down-double")); + connect(priorityBottom, SIGNAL(triggered()), this, SLOT(slotPriorityBottom())); + + KAction *priorityUp = actionCollection()->addAction("priority_up"); + priorityUp->setText(i18n("Increase Priority")); + priorityUp->setIcon(KIcon("arrow-up")); + connect(priorityUp, SIGNAL(triggered()), this, SLOT(slotPriorityUp())); + + KAction *priorityDown = actionCollection()->addAction("priority_down"); + priorityDown->setText(i18n("Decrease Priority")); + priorityDown->setIcon(KIcon("arrow-down")); + connect(priorityDown, SIGNAL(triggered()), this, SLOT(slotPriorityDown())); + KAction *deleteGroupAction = actionCollection()->addAction("delete_groups"); deleteGroupAction->setText(i18n("Delete Group")); deleteGroupAction->setIcon(KIcon("edit-delete")); @@ -659,6 +680,141 @@ void MainWindow::slotRedownloadSelected() } } +void MainWindow::slotPriorityTop() +{ + QList selected = KGet::selectedTransfers(); + TransferHandler *after = 0; + TransferGroupHandler *group = 0; + foreach (TransferHandler *transfer, selected) { + if (!transfer) { + continue; + } + + //previous transfer was not of the same group, so after has to be reset as the group + if (!group || (group != transfer->group())) { + after = 0; + group = transfer->group(); + } + KGet::model()->moveTransfer(transfer, group, after); + after = transfer; + } +} + +void MainWindow::slotPriorityBottom() +{ + QList selected = KGet::selectedTransfers(); + QList groupTransfers; + TransferHandler *after = 0; + TransferGroupHandler *group = 0; + foreach (TransferHandler *transfer, selected) { + if (!transfer) { + continue; + } + + //previous transfer was not of the same group, so after has to be reset as the group + if (!group || (group != transfer->group())) { + group = transfer->group(); + groupTransfers = group->transfers(); + if (groupTransfers.isEmpty()) { + after = 0; + } else { + after = groupTransfers.last(); + } + } + + KGet::model()->moveTransfer(transfer, group, after); + after = transfer; + } +} + +void MainWindow::slotPriorityUp() +{ + QList selected = KGet::selectedTransfers(); + QList groupTransfers; + TransferHandler *after = 0; + int newIndex = -1; + TransferGroupHandler *group = 0; + foreach (TransferHandler *transfer, selected) { + if (!transfer) { + continue; + } + + //previous transfer was not of the same group, so group has to be reset + if (!group || (group != transfer->group())) { + group = transfer->group(); + groupTransfers = group->transfers(); + } + + after = 0; + if (!groupTransfers.isEmpty()) { + int index = groupTransfers.indexOf(transfer); + + //do not move higher than the first place + if (index > 0) { + //if only Transfers at the top are select do not change their order + if ((index - 1) != newIndex) { + newIndex = index - 1; + if (newIndex - 1 >= 0) { + after = groupTransfers[newIndex - 1]; + } + + //keep the list with the actual movements synchronised + groupTransfers.move(index, newIndex); + + KGet::model()->moveTransfer(transfer, group, after); + } else { + newIndex = index; + } + } else { + newIndex = 0; + } + } + } +} + +void MainWindow::slotPriorityDown() +{ + QList selected = KGet::selectedTransfers(); + QList groupTransfers; + int newIndex = -1; + TransferGroupHandler *group = 0; + for (int i = selected.count() - 1; i >= 0; --i) { + TransferHandler *transfer = selected[i]; + if (!transfer) { + continue; + } + + //previous transfer was not of the same group, so group has to be reset + if (!group || (group != transfer->group())) { + group = transfer->group(); + groupTransfers = group->transfers(); + } + + if (!groupTransfers.isEmpty()) { + int index = groupTransfers.indexOf(transfer); + + //do not move lower than the last place + if ((index != -1) && (index + 1 < groupTransfers.count())) { + //if only Transfers at the top are select do not change their order + if ((index + 1) != newIndex) { + newIndex = index + 1; + TransferHandler *after = groupTransfers[newIndex]; + + + //keep the list with the actual movements synchronised + groupTransfers.move(index, newIndex); + + KGet::model()->moveTransfer(transfer, group, after); + } else { + newIndex = index; + } + } else { + newIndex = index; + } + } + } +} + void MainWindow::slotTransfersOpenDest() { QStringList openedDirs; diff --git a/kget/mainwindow.h b/kget/mainwindow.h index d2cab02..b0801cc 100644 --- a/kget/mainwindow.h +++ b/kget/mainwindow.h @@ -3,6 +3,7 @@ Copyright (C) 2002 by Patrick Charbonnier Based On Caitoo v.0.7.3 (c) 1998 - 2000, Matej Koss Copyright (C) 2006 Dario Massarin + Copyright (C) 2009 - 2010 Matthias Fuchs This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -89,6 +90,10 @@ private slots: void slotTransferGroupSettings(); void slotTransferSettings(); void slotCreateMetalink(); + void slotPriorityTop(); + void slotPriorityBottom(); + void slotPriorityUp(); + void slotPriorityDown(); // transfers slots void slotStopAllDownload(); diff --git a/kget/ui/kgetui.rc b/kget/ui/kgetui.rc index 43fdd42..08d7945 100644 --- a/kget/ui/kgetui.rc +++ b/kget/ui/kgetui.rc @@ -1,5 +1,5 @@ - + &File @@ -20,7 +20,12 @@ - + + + + + +