diff --git a/src/properties.ui b/src/properties.ui
index cb3e786fa..072a1b942 100644
--- a/src/properties.ui
+++ b/src/properties.ui
@@ -13,12 +13,21 @@
Torrent Properties
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
@@ -29,12 +38,21 @@
Main infos
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
@@ -81,28 +99,55 @@
Torrent infos
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -189,12 +234,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -276,9 +330,7 @@
-
-
- 5
- 5
+
0
0
@@ -304,28 +356,55 @@
Current session
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -402,12 +481,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -481,18 +569,25 @@
Trackers
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
-
- 7
- 7
+
0
0
@@ -518,20 +613,38 @@
Tracker
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -552,18 +665,25 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
-
- 7
- 7
+
0
0
@@ -572,12 +692,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -648,12 +777,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -724,12 +862,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -759,12 +906,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -827,12 +983,21 @@
Torrent content
-
- 9
-
6
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
+ 9
+
-
@@ -859,6 +1024,9 @@
301
+
+ Qt::CustomContextMenu
+
QAbstractItemView::AllEditTriggers
@@ -903,12 +1071,21 @@
-
-
- 0
-
6
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
-
@@ -945,6 +1122,26 @@
+
+
+ Ignored
+
+
+
+
+ Normal
+
+
+
+
+ Maximum
+
+
+
+
+ High
+
+
diff --git a/src/properties_imp.cpp b/src/properties_imp.cpp
index 4126def8a..b03bc12da 100644
--- a/src/properties_imp.cpp
+++ b/src/properties_imp.cpp
@@ -24,6 +24,7 @@
#include "PropListDelegate.h"
#include
#include
+#include
// Constructor
properties::properties(QWidget *parent, bittorrent *BTSession, torrent_handle &h, QStringList trackerErrors): QDialog(parent), h(h){
@@ -47,10 +48,15 @@ properties::properties(QWidget *parent, bittorrent *BTSession, torrent_handle &h
PropDelegate = new PropListDelegate(0, &changedFilteredfiles);
filesList->setItemDelegate(PropDelegate);
connect(filesList, SIGNAL(clicked(const QModelIndex&)), filesList, SLOT(edit(const QModelIndex&)));
+ connect(filesList, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayFilesListMenu(const QPoint&)));
connect(addTracker_button, SIGNAL(clicked()), this, SLOT(askForTracker()));
connect(removeTracker_button, SIGNAL(clicked()), this, SLOT(deleteSelectedTrackers()));
connect(riseTracker_button, SIGNAL(clicked()), this, SLOT(riseSelectedTracker()));
connect(lowerTracker_button, SIGNAL(clicked()), this, SLOT(lowerSelectedTracker()));
+ connect(actionIgnored, SIGNAL(triggered()), this, SLOT(ignoreSelection()));
+ connect(actionNormal, SIGNAL(triggered()), this, SLOT(normalSelection()));
+ connect(actionHigh, SIGNAL(triggered()), this, SLOT(highSelection()));
+ connect(actionMaximum, SIGNAL(triggered()), this, SLOT(maximumSelection()));
// get Infos from torrent handle
fileHash = QString(misc::toString(h.info_hash()).c_str());
torrent_status torrentStatus = h.status();
@@ -58,7 +64,10 @@ properties::properties(QWidget *parent, bittorrent *BTSession, torrent_handle &h
fileName->setText(torrentInfo.name().c_str());
// Torrent Infos
save_path->setText(QString(h.save_path().string().c_str()));
- creator->setText(QString(torrentInfo.creator().c_str()));
+ QString author = QString(torrentInfo.creator().c_str()).trimmed();
+ if(author.isEmpty())
+ author = tr("Unknown");
+ creator->setText(author);
hash_lbl->setText(fileHash);
comment_txt->setText(QString(torrentInfo.comment().c_str()));
//Trackers
@@ -154,6 +163,61 @@ void properties::loadPiecesPriorities(){
}
}
+void properties::displayFilesListMenu(const QPoint& pos){
+ QMenu myFilesLlistMenu(this);
+ QModelIndex index;
+ // Enable/disable pause/start action given the DL state
+ QModelIndexList selectedIndexes = filesList->selectionModel()->selectedIndexes();
+ myFilesLlistMenu.setTitle(tr("Priority"));
+ myFilesLlistMenu.addAction(actionIgnored);
+ myFilesLlistMenu.addAction(actionNormal);
+ myFilesLlistMenu.addAction(actionHigh);
+ myFilesLlistMenu.addAction(actionMaximum);
+ // Call menu
+ // XXX: why mapToGlobal() is not enough?
+ myFilesLlistMenu.exec(mapToGlobal(pos)+QPoint(22,95));
+}
+
+void properties::ignoreSelection(){
+ QModelIndexList selectedIndexes = filesList->selectionModel()->selectedIndexes();
+ QModelIndex index;
+ foreach(index, selectedIndexes){
+ if(index.column() == PRIORITY){
+ PropListModel->setData(index, QVariant(IGNORED));
+ }
+ }
+}
+
+void properties::normalSelection(){
+ QModelIndexList selectedIndexes = filesList->selectionModel()->selectedIndexes();
+ QModelIndex index;
+ foreach(index, selectedIndexes){
+ if(index.column() == PRIORITY){
+ PropListModel->setData(index, QVariant(NORMAL));
+ }
+ }
+}
+
+void properties::highSelection(){
+ QModelIndexList selectedIndexes = filesList->selectionModel()->selectedIndexes();
+ QModelIndex index;
+ foreach(index, selectedIndexes){
+ if(index.column() == PRIORITY){
+ PropListModel->setData(index, QVariant(HIGH));
+ }
+ }
+}
+
+void properties::maximumSelection(){
+ QModelIndexList selectedIndexes = filesList->selectionModel()->selectedIndexes();
+ QModelIndex index;
+ foreach(index, selectedIndexes){
+ if(index.column() == PRIORITY){
+ PropListModel->setData(index, QVariant(MAXIMUM));
+ }
+ }
+}
+
void properties::loadTrackers(){
//Trackers
std::vector trackers = h.trackers();
diff --git a/src/properties_imp.h b/src/properties_imp.h
index debfcaa5d..5a5d7f166 100644
--- a/src/properties_imp.h
+++ b/src/properties_imp.h
@@ -57,6 +57,11 @@ class properties : public QDialog, private Ui::properties{
void deleteSelectedTrackers();
void lowerSelectedTracker();
void riseSelectedTracker();
+ void displayFilesListMenu(const QPoint& pos);
+ void ignoreSelection();
+ void normalSelection();
+ void highSelection();
+ void maximumSelection();
signals:
void filteredFilesChanged(const QString& fileHash);