Browse Source

- Label counters are now properly updated (and labeling seems to work fine)

adaptive-webui-19844
Christophe Dumez 15 years ago
parent
commit
edb6857de0
  1. 77
      src/transferlistfilterswidget.h
  2. 21
      src/transferlistwidget.cpp
  3. 6
      src/transferlistwidget.h

77
src/transferlistfilterswidget.h

@ -40,6 +40,7 @@
#include <QMenu> #include <QMenu>
#include <QInputDialog> #include <QInputDialog>
#include "transferlistdelegate.h"
#include "transferlistwidget.h" #include "transferlistwidget.h"
class TransferListFiltersWidget: public QFrame { class TransferListFiltersWidget: public QFrame {
@ -47,13 +48,16 @@ class TransferListFiltersWidget: public QFrame {
private: private:
QStringList customLabels; QStringList customLabels;
QList<int> labelCounters;
QListWidget* statusFilters; QListWidget* statusFilters;
QListWidget* labelFilters; QListWidget* labelFilters;
QVBoxLayout* vLayout; QVBoxLayout* vLayout;
TransferListWidget *transferList; TransferListWidget *transferList;
int nb_labeled;
int nb_torrents;
public: public:
TransferListFiltersWidget(QWidget *parent, TransferListWidget *transferList): QFrame(parent), transferList(transferList) { TransferListFiltersWidget(QWidget *parent, TransferListWidget *transferList): QFrame(parent), transferList(transferList), nb_labeled(0), nb_torrents(0) {
// Construct lists // Construct lists
vLayout = new QVBoxLayout(); vLayout = new QVBoxLayout();
statusFilters = new QListWidget(); statusFilters = new QListWidget();
@ -86,7 +90,8 @@ public:
connect(statusFilters, SIGNAL(currentRowChanged(int)), transferList, SLOT(applyStatusFilter(int))); 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(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(currentRowChanged(int)), this, SLOT(applyLabelFilter(int)));
connect(transferList, SIGNAL(newLabel(QString)), this, SLOT(addLabel(QString))); connect(transferList, SIGNAL(torrentAdded(QModelIndex)), this, SLOT(torrentAdded(QModelIndex)));
connect(transferList, SIGNAL(torrentAboutToBeRemoved(QModelIndex)), this, SLOT(torrentAboutToBeDeleted(QModelIndex)));
// Load settings // Load settings
loadSettings(); loadSettings();
@ -131,6 +136,9 @@ public:
settings.beginGroup(QString::fromUtf8("TransferListFilters")); settings.beginGroup(QString::fromUtf8("TransferListFilters"));
statusFilters->setCurrentRow(settings.value("selectedFilterIndex", 0).toInt()); statusFilters->setCurrentRow(settings.value("selectedFilterIndex", 0).toInt());
customLabels = settings.value("customLabels", QStringList()).toStringList(); customLabels = settings.value("customLabels", QStringList()).toStringList();
for(int i=0; i<customLabels.size(); ++i) {
labelCounters << 0;
}
} }
protected slots: protected slots:
@ -148,6 +156,7 @@ protected slots:
QListWidgetItem *newLabel = new QListWidgetItem(labelFilters); QListWidgetItem *newLabel = new QListWidgetItem(labelFilters);
newLabel->setText(label + " (0)"); newLabel->setText(label + " (0)");
customLabels << label; customLabels << label;
labelCounters << 0;
saveCustomLabels(); saveCustomLabels();
} }
@ -179,6 +188,7 @@ protected slots:
int row = labelFilters->row(labelFilters->selectedItems().first()); int row = labelFilters->row(labelFilters->selectedItems().first());
Q_ASSERT(row > 1); Q_ASSERT(row > 1);
QString label = customLabels.takeAt(row - 2); QString label = customLabels.takeAt(row - 2);
labelCounters.removeAt(row-2);
labelFilters->removeItemWidget(labelFilters->selectedItems().first()); labelFilters->removeItemWidget(labelFilters->selectedItems().first());
transferList->removeLabelFromRows(label); transferList->removeLabelFromRows(label);
// Select first label // Select first label
@ -199,6 +209,69 @@ protected slots:
} }
} }
void torrentChangedLabel(QString old_label, QString new_label) {
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) +")");
}
if(!new_label.isEmpty()) {
if(!customLabels.contains(new_label))
addLabel(new_label);
int i = customLabels.indexOf(new_label);
int new_count = labelCounters[i]+1;
labelCounters.replace(i, new_count);
labelFilters->item(i+2)->setText(new_label + " ("+ QString::number(new_count) +")");
}
}
void torrentAdded(QModelIndex index) {
Q_ASSERT(index.isValid());
QString label = transferList->model()->index(index.row(), TR_LABEL).data(Qt::DisplayRole).toString().trimmed();
if(!label.isEmpty()) {
if(!customLabels.contains(label)) {
addLabel(label);
}
// Update label counter
int i = customLabels.indexOf(label);
int new_count = labelCounters[i]+1;
labelCounters.replace(i, new_count);
labelFilters->item(i+2)->setText(label + " ("+ QString::number(new_count) +")");
++nb_labeled;
}
++nb_torrents;
Q_ASSERT(nb_torrents >= 0);
Q_ASSERT(nb_labeled >= 0);
Q_ASSERT(nb_labeled <= nb_torrents);
updateStickyLabelCounters();
}
void torrentAboutToBeDeleted(QModelIndex index) {
Q_ASSERT(index.isValid());
QString label = transferList->model()->index(index.row(), TR_LABEL).data(Qt::DisplayRole).toString().trimmed();
if(!label.isEmpty()) {
// Update label counter
int i = customLabels.indexOf(label);
Q_ASSERT(i >= 0);
int new_count = labelCounters[i]-1;
labelCounters.replace(i, new_count);
labelFilters->item(i+2)->setText(label + " ("+ QString::number(new_count) +")");
--nb_labeled;
}
--nb_torrents;
Q_ASSERT(nb_torrents >= 0);
Q_ASSERT(nb_labeled >= 0);
Q_ASSERT(nb_labeled <= nb_torrents);
updateStickyLabelCounters();
}
void updateStickyLabelCounters() {
labelFilters->item(0)->setText(tr("All labels") + " ("+QString::number(nb_torrents)+")");
labelFilters->item(1)->setText(tr("No label") + " ("+QString::number(nb_torrents-nb_labeled)+")");
}
}; };
#endif // TRANSFERLISTFILTERSWIDGET_H #endif // TRANSFERLISTFILTERSWIDGET_H

21
src/transferlistwidget.cpp

@ -163,7 +163,6 @@ void TransferListWidget::addTorrent(QTorrentHandle& h) {
listModel->setData(listModel->index(row, TR_SEEDS), QVariant((double)0.0)); listModel->setData(listModel->index(row, TR_SEEDS), QVariant((double)0.0));
listModel->setData(listModel->index(row, TR_PEERS), QVariant((double)0.0)); listModel->setData(listModel->index(row, TR_PEERS), QVariant((double)0.0));
QString label = TorrentPersistentData::getLabel(h.hash()); QString label = TorrentPersistentData::getLabel(h.hash());
emit newLabel(label);
listModel->setData(listModel->index(row, TR_LABEL), QVariant(label)); listModel->setData(listModel->index(row, TR_LABEL), QVariant(label));
if(BTSession->isQueueingEnabled()) if(BTSession->isQueueingEnabled())
listModel->setData(listModel->index(row, TR_PRIORITY), QVariant((int)h.queue_position())); listModel->setData(listModel->index(row, TR_PRIORITY), QVariant((int)h.queue_position()));
@ -191,6 +190,9 @@ void TransferListWidget::addTorrent(QTorrentHandle& h) {
// Select first torrent to be added // Select first torrent to be added
if(listModel->rowCount() == 1) if(listModel->rowCount() == 1)
selectionModel()->setCurrentIndex(proxyModel->index(row, TR_NAME), QItemSelectionModel::SelectCurrent|QItemSelectionModel::Rows); selectionModel()->setCurrentIndex(proxyModel->index(row, TR_NAME), QItemSelectionModel::SelectCurrent|QItemSelectionModel::Rows);
// Emit signal
emit torrentAdded(listModel->index(row, 0));
// Refresh the list
refreshList(); refreshList();
} catch(invalid_handle e) { } catch(invalid_handle e) {
// Remove added torrent // Remove added torrent
@ -206,6 +208,7 @@ void TransferListWidget::setRowColor(int row, QColor color) {
} }
void TransferListWidget::deleteTorrent(int row, bool refresh_list) { void TransferListWidget::deleteTorrent(int row, bool refresh_list) {
emit torrentAboutToBeRemoved(listModel->index(row, 0));
listModel->removeRow(row); listModel->removeRow(row);
if(refresh_list) if(refresh_list)
refreshList(); refreshList();
@ -235,6 +238,11 @@ void TransferListWidget::pauseTorrent(int row, bool refresh_list) {
refreshList(); refreshList();
} }
int TransferListWidget::getNbTorrents() const {
return listModel->rowCount();
}
// Wrapper slot for bittorrent signal // Wrapper slot for bittorrent signal
void TransferListWidget::resumeTorrent(QTorrentHandle &h) { void TransferListWidget::resumeTorrent(QTorrentHandle &h) {
resumeTorrent(getRowFromHash(h.hash())); resumeTorrent(getRowFromHash(h.hash()));
@ -418,7 +426,9 @@ void TransferListWidget::setFinished(QTorrentHandle &h) {
listModel->setData(listModel->index(row, TR_PRIORITY), QVariant((int)-1)); listModel->setData(listModel->index(row, TR_PRIORITY), QVariant((int)-1));
} }
} catch(invalid_handle e) { } catch(invalid_handle e) {
if(row >= 0) deleteTorrent(row); if(row >= 0) {
deleteTorrent(row);
}
} }
} }
@ -580,7 +590,8 @@ void TransferListWidget::deleteSelectedTorrents() {
hashes << getHashFromRow(mapToSource(index).row()); hashes << getHashFromRow(mapToSource(index).row());
} }
foreach(const QString &hash, hashes) { foreach(const QString &hash, hashes) {
deleteTorrent(getRowFromHash(hash), false); int row = getRowFromHash(hash);
deleteTorrent(row, false);
BTSession->deleteTorrent(hash, delete_local_files); BTSession->deleteTorrent(hash, delete_local_files);
} }
refreshList(); refreshList();
@ -849,7 +860,6 @@ void TransferListWidget::askNewLabelForSelection() {
bool ok; bool ok;
QString label = QInputDialog::getText(this, tr("New Label"), tr("Label:"), QLineEdit::Normal, "", &ok); QString label = QInputDialog::getText(this, tr("New Label"), tr("Label:"), QLineEdit::Normal, "", &ok);
if (ok && !label.isEmpty()) { if (ok && !label.isEmpty()) {
emit newLabel(label);
// Assign label to selection // Assign label to selection
setSelectionLabel(label); setSelectionLabel(label);
} }
@ -859,8 +869,10 @@ void TransferListWidget::setSelectionLabel(QString label) {
QModelIndexList selectedIndexes = selectionModel()->selectedRows(); QModelIndexList selectedIndexes = selectionModel()->selectedRows();
foreach(const QModelIndex &index, selectedIndexes) { foreach(const QModelIndex &index, selectedIndexes) {
QString hash = getHashFromRow(mapToSource(index).row()); QString hash = getHashFromRow(mapToSource(index).row());
QString old_label = proxyModel->data(proxyModel->index(index.row(), TR_LABEL)).toString();
proxyModel->setData(proxyModel->index(index.row(), TR_LABEL), QVariant(label)); proxyModel->setData(proxyModel->index(index.row(), TR_LABEL), QVariant(label));
TorrentPersistentData::saveLabel(hash, label); TorrentPersistentData::saveLabel(hash, label);
emit torrentChangedLabel(old_label, label);
} }
} }
@ -868,6 +880,7 @@ void TransferListWidget::removeLabelFromRows(QString label) {
for(int i=0; i<listModel->rowCount(); ++i) { for(int i=0; i<listModel->rowCount(); ++i) {
if(label == listModel->data(listModel->index(i, TR_LABEL), Qt::DisplayRole)) if(label == listModel->data(listModel->index(i, TR_LABEL), Qt::DisplayRole))
listModel->setData(listModel->index(i, TR_LABEL), "", Qt::DisplayRole); listModel->setData(listModel->index(i, TR_LABEL), "", Qt::DisplayRole);
emit torrentChangedLabel(label, "");
} }
} }

6
src/transferlistwidget.h

@ -58,6 +58,7 @@ private:
public: public:
TransferListWidget(QWidget *parent, GUI *main_window, Bittorrent* BTSession); TransferListWidget(QWidget *parent, GUI *main_window, Bittorrent* BTSession);
~TransferListWidget(); ~TransferListWidget();
int getNbTorrents() const;
protected: protected:
int getRowFromHash(QString hash) const; int getRowFromHash(QString hash) const;
@ -120,8 +121,9 @@ public slots:
signals: signals:
void currentTorrentChanged(QTorrentHandle &h); void currentTorrentChanged(QTorrentHandle &h);
void torrentStatusUpdate(unsigned int nb_downloading, unsigned int nb_seeding, unsigned int nb_active, unsigned int nb_inactive); void torrentStatusUpdate(unsigned int nb_downloading, unsigned int nb_seeding, unsigned int nb_active, unsigned int nb_inactive);
void newLabel(QString label); void torrentAdded(QModelIndex index);
void torrentAboutToBeRemoved(QModelIndex index);
void torrentChangedLabel(QString old_label, QString new_label);
}; };
#endif // TRANSFERLISTWIDGET_H #endif // TRANSFERLISTWIDGET_H

Loading…
Cancel
Save