Browse Source

Disable "add peers" menu items instead of hiding it

Menu item in disabled state can show tool tip to help user understand
why it is unavailable.
Related issue: #15785.
PR #15787.
adaptive-webui-19844
Chocobo1 3 years ago committed by GitHub
parent
commit
6ccc92020c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 42
      src/gui/properties/peerlistwidget.cpp
  2. 2
      src/webui/www/private/index.html

42
src/gui/properties/peerlistwidget.cpp

@ -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());
} }

2
src/webui/www/private/index.html

@ -203,7 +203,7 @@
<li><a href="#CopyTrackerUrl" id="CopyTrackerUrl"><img src="icons/edit-copy.svg" alt="QBT_TR(Copy tracker URL)QBT_TR[CONTEXT=TrackerListWidget]" /> QBT_TR(Copy tracker URL)QBT_TR[CONTEXT=TrackerListWidget]</a></li> <li><a href="#CopyTrackerUrl" id="CopyTrackerUrl"><img src="icons/edit-copy.svg" alt="QBT_TR(Copy tracker URL)QBT_TR[CONTEXT=TrackerListWidget]" /> QBT_TR(Copy tracker URL)QBT_TR[CONTEXT=TrackerListWidget]</a></li>
</ul> </ul>
<ul id="torrentPeersMenu" class="contextMenu"> <ul id="torrentPeersMenu" class="contextMenu">
<li><a href="#addPeer"><img src="icons/list-add.svg" alt="QBT_TR(Add a new peer...)QBT_TR[CONTEXT=PeerListWidget]" /> QBT_TR(Add a new peer...)QBT_TR[CONTEXT=PeerListWidget]</a></li> <li><a href="#addPeer"><img src="icons/list-add.svg" alt="QBT_TR(Add peers...)QBT_TR[CONTEXT=PeerListWidget]" /> QBT_TR(Add peers...)QBT_TR[CONTEXT=PeerListWidget]</a></li>
<li><a href="#copyPeer" id="CopyPeerInfo"><img src="icons/edit-copy.svg" alt="QBT_TR(Copy IP:port)QBT_TR[CONTEXT=PeerListWidget]" /> QBT_TR(Copy IP:port)QBT_TR[CONTEXT=PeerListWidget]</a></li> <li><a href="#copyPeer" id="CopyPeerInfo"><img src="icons/edit-copy.svg" alt="QBT_TR(Copy IP:port)QBT_TR[CONTEXT=PeerListWidget]" /> QBT_TR(Copy IP:port)QBT_TR[CONTEXT=PeerListWidget]</a></li>
<li class="separator"><a href="#banPeer"><img src="icons/user-group-delete.svg" alt="QBT_TR(Ban peer permanently)QBT_TR[CONTEXT=PeerListWidget]" /> QBT_TR(Ban peer permanently)QBT_TR[CONTEXT=PeerListWidget]</a></li> <li class="separator"><a href="#banPeer"><img src="icons/user-group-delete.svg" alt="QBT_TR(Ban peer permanently)QBT_TR[CONTEXT=PeerListWidget]" /> QBT_TR(Ban peer permanently)QBT_TR[CONTEXT=PeerListWidget]</a></li>
</ul> </ul>

Loading…
Cancel
Save