@ -262,17 +262,14 @@ void PeerListWidget::updatePeerCountryResolutionState()
void PeerListWidget : : showPeerListMenu ( const QPoint & )
void PeerListWidget : : showPeerListMenu ( const QPoint & )
{
{
BitTorrent : : Torrent * const torrent = m_properties - > getCurrentTorrent ( ) ;
BitTorrent : : Torrent * torrent = m_properties - > getCurrentTorrent ( ) ;
if ( ! torrent ) return ;
if ( ! torrent ) return ;
QMenu * menu = new QMenu ( this ) ;
auto * menu = new QMenu ( this ) ;
menu - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
menu - > setAttribute ( Qt : : WA_DeleteOnClose ) ;
menu - > setToolTipsVisible ( true ) ;
// Add Peer Action
QAction * addNewPeer = menu - > addAction ( UIThemeManager : : instance ( ) - > getIcon ( " user-group-new " ) , tr ( " Add peers... " )
// Do not allow user to add peers in a private torrent
if ( ! torrent - > isQueued ( ) & & ! torrent - > isChecking ( ) & & ! torrent - > isPrivate ( ) )
{
menu - > addAction ( UIThemeManager : : instance ( ) - > getIcon ( " user-group-new " ) , tr ( " Add a new peer... " )
, this , [ this , torrent ] ( )
, this , [ this , torrent ] ( )
{
{
const QVector < BitTorrent : : PeerAddress > peersList = PeersAdditionDialog : : askForPeers ( this ) ;
const QVector < BitTorrent : : PeerAddress > peersList = PeersAdditionDialog : : askForPeers ( this ) ;
@ -285,20 +282,33 @@ void PeerListWidget::showPeerListMenu(const QPoint &)
else if ( peerCount > 0 )
else if ( peerCount > 0 )
QMessageBox : : information ( this , tr ( " Adding peers " ) , tr ( " Peers are added to this torrent. " ) ) ;
QMessageBox : : information ( this , tr ( " Adding peers " ) , tr ( " Peers are added to this torrent. " ) ) ;
} ) ;
} ) ;
}
QAction * copyPeers = menu - > addAction ( UIThemeManager : : instance ( ) - > getIcon ( " edit-copy " ) , tr ( " Copy IP:port " )
if ( ! selectionModel ( ) - > selectedRows ( ) . isEmpty ( ) )
{
menu - > addAction ( UIThemeManager : : instance ( ) - > getIcon ( " edit-copy " ) , tr ( " Copy IP:port " )
, this , & PeerListWidget : : copySelectedPeers ) ;
, this , & PeerListWidget : : copySelectedPeers ) ;
menu - > addSeparator ( ) ;
menu - > addSeparator ( ) ;
menu - > addAction ( UIThemeManager : : instance ( ) - > getIcon ( " user-group-delete " ) , tr ( " Ban peer permanently " )
QAction * banPeers = menu - > addAction ( UIThemeManager : : instance ( ) - > getIcon ( " user-group-delete " ) , tr ( " Ban peer permanently " )
, this , & PeerListWidget : : banSelectedPeers ) ;
, this , & PeerListWidget : : banSelectedPeers ) ;
// disable actions
const auto disableAction = [ ] ( QAction * action , const QString & tooltip )
{
action - > setEnabled ( false ) ;
action - > setToolTip ( tooltip ) ;
} ;
if ( torrent - > isPrivate ( ) )
disableAction ( addNewPeer , tr ( " Cannot add peers to a private torrent " ) ) ;
else if ( torrent - > isChecking ( ) )
disableAction ( addNewPeer , tr ( " Cannot add peers when the torrent is checking " ) ) ;
else if ( torrent - > isQueued ( ) )
disableAction ( addNewPeer , tr ( " Cannot add peers when the torrent is queued " ) ) ;
if ( selectionModel ( ) - > selectedRows ( ) . isEmpty ( ) )
{
const QString tooltip = tr ( " No peer was selected " ) ;
disableAction ( copyPeers , tooltip ) ;
disableAction ( banPeers , tooltip ) ;
}
}
if ( menu - > isEmpty ( ) )
delete menu ;
else
menu - > popup ( QCursor : : pos ( ) ) ;
menu - > popup ( QCursor : : pos ( ) ) ;
}
}