mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-10 14:57:52 +00:00
- Added drag'n Drop from torrent list to labels (for torrent labeling)
- Fix label counters update in some cases
This commit is contained in:
parent
868d423c82
commit
18bd3b855c
24
src/GUI.cpp
24
src/GUI.cpp
@ -598,8 +598,28 @@ void GUI::dragEnterEvent(QDragEnterEvent *event) {
|
||||
foreach(const QString &mime, event->mimeData()->formats()){
|
||||
qDebug("mimeData: %s", mime.toLocal8Bit().data());
|
||||
}
|
||||
if (event->mimeData()->hasFormat(QString::fromUtf8("text/plain")) || event->mimeData()->hasFormat(QString::fromUtf8("text/uri-list"))) {
|
||||
event->acceptProposedAction();
|
||||
if (event->mimeData()->hasFormat("application/x-qstandarditemmodeldatalist")) {
|
||||
if(childAt(event->pos()) == transferListFilters) {
|
||||
qDebug("DragEnterEvent: torrent to filter list, accepting...");
|
||||
event->acceptProposedAction();
|
||||
}
|
||||
} else {
|
||||
if (event->mimeData()->hasFormat(QString::fromUtf8("text/plain")) || event->mimeData()->hasFormat(QString::fromUtf8("text/uri-list"))) {
|
||||
event->acceptProposedAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GUI::dragMoveEvent(QDragMoveEvent *event) {
|
||||
if (event->mimeData()->hasFormat("application/x-qstandarditemmodeldatalist")) {
|
||||
if(childAt(event->pos()) == transferListFilters) {
|
||||
qDebug("DragMoveEvent: torrent to filter list, accepting...");
|
||||
event->acceptProposedAction();
|
||||
}
|
||||
} else {
|
||||
if (event->mimeData()->hasFormat(QString::fromUtf8("text/plain")) || event->mimeData()->hasFormat(QString::fromUtf8("text/uri-list"))) {
|
||||
event->acceptProposedAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,6 +97,7 @@ class GUI : public QMainWindow, private Ui::MainWindow{
|
||||
// GUI related slots
|
||||
void dropEvent(QDropEvent *event);
|
||||
void dragEnterEvent(QDragEnterEvent *event);
|
||||
void dragMoveEvent(QDragMoveEvent *event);
|
||||
void toggleVisibility(QSystemTrayIcon::ActivationReason e);
|
||||
void on_actionAbout_triggered();
|
||||
void on_actionCreate_torrent_triggered();
|
||||
|
@ -39,10 +39,43 @@
|
||||
#include <QVBoxLayout>
|
||||
#include <QMenu>
|
||||
#include <QInputDialog>
|
||||
#include <QDragMoveEvent>
|
||||
|
||||
#include "transferlistdelegate.h"
|
||||
#include "transferlistwidget.h"
|
||||
|
||||
class LabelFiltersList: public QListWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
LabelFiltersList(QWidget *parent): QListWidget(parent){
|
||||
// Accept drop
|
||||
setAcceptDrops(true);
|
||||
}
|
||||
|
||||
signals:
|
||||
void torrentDropped(int label_row);
|
||||
|
||||
protected:
|
||||
void dragMoveEvent(QDragMoveEvent* event) {
|
||||
//qDebug("filters, dragmoveevent");
|
||||
if(itemAt(event->pos()) && row(itemAt(event->pos())) > 0) {
|
||||
//qDebug("Name: %s", itemAt(event->pos())->text().toLocal8Bit().data());
|
||||
event->acceptProposedAction();
|
||||
} else {
|
||||
event->ignore();
|
||||
}
|
||||
}
|
||||
|
||||
void dropEvent(QDropEvent *event) {
|
||||
qDebug("Drop Event in labels list");
|
||||
if(itemAt(event->pos())) {
|
||||
emit torrentDropped(row(itemAt(event->pos())));
|
||||
}
|
||||
event->ignore();
|
||||
}
|
||||
};
|
||||
|
||||
class TransferListFiltersWidget: public QFrame {
|
||||
Q_OBJECT
|
||||
|
||||
@ -50,7 +83,7 @@ private:
|
||||
QStringList customLabels;
|
||||
QList<int> labelCounters;
|
||||
QListWidget* statusFilters;
|
||||
QListWidget* labelFilters;
|
||||
LabelFiltersList* labelFilters;
|
||||
QVBoxLayout* vLayout;
|
||||
TransferListWidget *transferList;
|
||||
int nb_labeled;
|
||||
@ -60,9 +93,9 @@ public:
|
||||
TransferListFiltersWidget(QWidget *parent, TransferListWidget *transferList): QFrame(parent), transferList(transferList), nb_labeled(0), nb_torrents(0) {
|
||||
// Construct lists
|
||||
vLayout = new QVBoxLayout();
|
||||
statusFilters = new QListWidget();
|
||||
statusFilters = new QListWidget(this);
|
||||
vLayout->addWidget(statusFilters);
|
||||
labelFilters = new QListWidget();
|
||||
labelFilters = new LabelFiltersList(this);
|
||||
vLayout->addWidget(labelFilters);
|
||||
setLayout(vLayout);
|
||||
// Limit status filters list height
|
||||
@ -90,8 +123,10 @@ public:
|
||||
connect(statusFilters, SIGNAL(currentRowChanged(int)), transferList, SLOT(applyStatusFilter(int)));
|
||||
connect(transferList, SIGNAL(torrentStatusUpdate(uint,uint,uint,uint)), this, SLOT(updateTorrentNumbers(uint, uint, uint, uint)));
|
||||
connect(labelFilters, SIGNAL(currentRowChanged(int)), this, SLOT(applyLabelFilter(int)));
|
||||
connect(labelFilters, SIGNAL(torrentDropped(int)), this, SLOT(torrentDropped(int)));
|
||||
connect(transferList, SIGNAL(torrentAdded(QModelIndex)), this, SLOT(torrentAdded(QModelIndex)));
|
||||
connect(transferList, SIGNAL(torrentAboutToBeRemoved(QModelIndex)), this, SLOT(torrentAboutToBeDeleted(QModelIndex)));
|
||||
connect(transferList, SIGNAL(torrentChangedLabel(QString,QString)), this, SLOT(torrentChangedLabel(QString, QString)));
|
||||
|
||||
// Load settings
|
||||
loadSettings();
|
||||
@ -153,6 +188,16 @@ protected slots:
|
||||
statusFilters->item(FILTER_INACTIVE)->setData(Qt::DisplayRole, tr("Inactive")+" ("+QString::number(nb_inactive)+")");
|
||||
}
|
||||
|
||||
void torrentDropped(int row) {
|
||||
Q_ASSERT(row > 0);
|
||||
if(row == 1) {
|
||||
transferList->setSelectionLabel("");
|
||||
} else {
|
||||
QString label = customLabels.at(row-2);
|
||||
transferList->setSelectionLabel(label);
|
||||
}
|
||||
}
|
||||
|
||||
void addLabel(QString label) {
|
||||
if(label.trimmed().isEmpty()) return;
|
||||
if(customLabels.contains(label)) return;
|
||||
@ -214,12 +259,14 @@ protected slots:
|
||||
}
|
||||
|
||||
void torrentChangedLabel(QString old_label, QString new_label) {
|
||||
qDebug("Torrent label changed from %s to %s", old_label.toLocal8Bit().data(), new_label.toLocal8Bit().data());
|
||||
if(!old_label.isEmpty()) {
|
||||
int i = customLabels.indexOf(old_label);
|
||||
int new_count = labelCounters[i]-1;
|
||||
Q_ASSERT(new_count >= 0);
|
||||
labelCounters.replace(i, new_count);
|
||||
labelFilters->item(i+2)->setText(old_label + " ("+ QString::number(new_count) +")");
|
||||
--nb_labeled;
|
||||
}
|
||||
if(!new_label.isEmpty()) {
|
||||
if(!customLabels.contains(new_label))
|
||||
@ -228,7 +275,9 @@ protected slots:
|
||||
int new_count = labelCounters[i]+1;
|
||||
labelCounters.replace(i, new_count);
|
||||
labelFilters->item(i+2)->setText(new_label + " ("+ QString::number(new_count) +")");
|
||||
++nb_labeled;
|
||||
}
|
||||
updateStickyLabelCounters();
|
||||
}
|
||||
|
||||
void torrentAdded(QModelIndex index) {
|
||||
|
@ -52,7 +52,6 @@
|
||||
|
||||
TransferListWidget::TransferListWidget(QWidget *parent, GUI *main_window, Bittorrent *_BTSession):
|
||||
QTreeView(parent), BTSession(_BTSession), main_window(main_window) {
|
||||
|
||||
QSettings settings("qBittorrent", "qBittorrent");
|
||||
// Create and apply delegate
|
||||
listDelegate = new TransferListDelegate(this);
|
||||
@ -103,6 +102,7 @@ TransferListWidget::TransferListWidget(QWidget *parent, GUI *main_window, Bittor
|
||||
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
setItemsExpandable(false);
|
||||
setAutoScroll(true);
|
||||
setDragDropMode(QAbstractItemView::DragOnly);
|
||||
|
||||
hideColumn(TR_PRIORITY);
|
||||
//hideColumn(TR_LABEL);
|
||||
|
@ -88,7 +88,6 @@ protected slots:
|
||||
#endif
|
||||
void toggleSelectedTorrentsSequentialDownload();
|
||||
void toggleSelectedFirstLastPiecePrio();
|
||||
void setSelectionLabel(QString label);
|
||||
void askNewLabelForSelection();
|
||||
void setRowColor(int row, QColor color);
|
||||
|
||||
@ -96,6 +95,7 @@ public slots:
|
||||
void refreshList();
|
||||
void addTorrent(QTorrentHandle& h);
|
||||
void setFinished(QTorrentHandle &h);
|
||||
void setSelectionLabel(QString label);
|
||||
void setRefreshInterval(int t);
|
||||
void startSelectedTorrents();
|
||||
void startAllTorrents();
|
||||
|
Loading…
Reference in New Issue
Block a user