Browse Source

- Prevent users from filtering all the files in a torrent using right-click menu (combobox was ok)

adaptive-webui-19844
Christophe Dumez 18 years ago
parent
commit
57b4a7150a
  1. 1
      TODO
  2. 2
      src/PropListDelegate.h
  3. 28
      src/properties_imp.cpp
  4. 1
      src/properties_imp.h
  5. 34
      src/torrentAddition.h

1
TODO

@ -45,7 +45,6 @@ @@ -45,7 +45,6 @@
- Add checking icon to documentation
* beta3
- Translations update (IN PROGRESS)
- Check that there is no problem with right click menu in torrent content (all files filtered for example)
- Wait for some bug fixes in libtorrent :
- upload/download limit per torrent (Ticket #83)
- double free or corruption on exit (Ticket #84)

2
src/PropListDelegate.h

@ -165,7 +165,7 @@ class PropListDelegate: public QItemDelegate { @@ -165,7 +165,7 @@ class PropListDelegate: public QItemDelegate {
bool onlyOneItem(const QModelIndex& index) const {
const QAbstractItemModel *model = index.model();
unsigned int nbRows = model->rowCount();
if(nbRows == (unsigned int)1) return true;
if(nbRows == 1) return true;
for(unsigned int i=0; i<nbRows; ++i){
if((unsigned int)index.row() == i) continue;
if(model->data(model->index(i, PRIORITY)).toInt()) return false;

28
src/properties_imp.cpp

@ -205,13 +205,39 @@ void properties::loadPiecesPriorities(){ @@ -205,13 +205,39 @@ void properties::loadPiecesPriorities(){
}
}
bool properties::onlyOneItem() const {
unsigned int nbRows = PropListModel->rowCount();
if(nbRows == 1) return true;
unsigned int nb_unfiltered = 0;
QModelIndexList selectedIndexes = filesList->selectionModel()->selectedIndexes();
QModelIndex index;
unsigned int to_be_filtered = 0;
foreach(index, selectedIndexes){
if(index.column() == PRIORITY){
if(index.data().toInt() != IGNORED)
++to_be_filtered;
}
}
for(unsigned int i=0; i<nbRows; ++i){
if(PropListModel->data(PropListModel->index(i, PRIORITY)).toInt() != IGNORED){
++nb_unfiltered;
}
}
if(nb_unfiltered-to_be_filtered == 0)
return true;
return false;
}
void properties::displayFilesListMenu(const QPoint& pos){
unsigned int nbRows = PropListModel->rowCount();
if(nbRows == 1) return;
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);
if(!onlyOneItem())
myFilesLlistMenu.addAction(actionIgnored);
myFilesLlistMenu.addAction(actionNormal);
myFilesLlistMenu.addAction(actionHigh);
myFilesLlistMenu.addAction(actionMaximum);

1
src/properties_imp.h

@ -79,6 +79,7 @@ class properties : public QDialog, private Ui::properties{ @@ -79,6 +79,7 @@ class properties : public QDialog, private Ui::properties{
// Constructor
properties(QWidget *parent, bittorrent *BTSession, torrent_handle &h);
~properties();
bool onlyOneItem() const;
};
#endif

34
src/torrentAddition.h

@ -178,18 +178,44 @@ class torrentAdditionDialog : public QDialog, private Ui_addTorrentDialog{ @@ -178,18 +178,44 @@ class torrentAdditionDialog : public QDialog, private Ui_addTorrentDialog{
}
}
bool onlyOneItem() const {
unsigned int nbRows = PropListModel->rowCount();
if(nbRows == 1) return true;
unsigned int nb_unfiltered = 0;
QModelIndexList selectedIndexes = torrentContentList->selectionModel()->selectedIndexes();
QModelIndex index;
unsigned int to_be_filtered = 0;
foreach(index, selectedIndexes){
if(index.column() == PRIORITY){
if(index.data().toInt() != IGNORED)
++to_be_filtered;
}
}
for(unsigned int i=0; i<nbRows; ++i){
if(PropListModel->data(PropListModel->index(i, PRIORITY)).toInt() != IGNORED){
++nb_unfiltered;
}
}
if(nb_unfiltered-to_be_filtered == 0)
return true;
return false;
}
void displayFilesListMenu(const QPoint& pos){
unsigned int nbRows = PropListModel->rowCount();
if(nbRows == 1) return;
QMenu myFilesLlistMenu(this);
QModelIndex index;
// Enable/disable pause/start action given the DL state
// Enable/disable pause/start action given the DL state
QModelIndexList selectedIndexes = torrentContentList->selectionModel()->selectedIndexes();
myFilesLlistMenu.setTitle(tr("Priority"));
myFilesLlistMenu.addAction(actionIgnored);
if(!onlyOneItem())
myFilesLlistMenu.addAction(actionIgnored);
myFilesLlistMenu.addAction(actionNormal);
myFilesLlistMenu.addAction(actionHigh);
myFilesLlistMenu.addAction(actionMaximum);
// Call menu
// XXX: why mapToGlobal() is not enough?
// Call menu
// XXX: why mapToGlobal() is not enough?
myFilesLlistMenu.exec(mapToGlobal(pos)+QPoint(10,145));
}

Loading…
Cancel
Save