Browse Source

Added 'Shutdown now' button in shutdown confirmation dialog. Closes #969.

adaptive-webui-19844
sledgehammer999 10 years ago
parent
commit
f6156217d0
  1. 28
      src/qtlibtorrent/qbtsession.cpp
  2. 73
      src/qtlibtorrent/shutdownconfirm.cpp
  3. 21
      src/qtlibtorrent/shutdownconfirm.h

28
src/qtlibtorrent/qbtsession.cpp

@ -2299,18 +2299,17 @@ void QBtSession::handleTorrentFinishedAlert(libtorrent::torrent_finished_alert*
bool hibernate = pref->hibernateWhenDownloadsComplete(); bool hibernate = pref->hibernateWhenDownloadsComplete();
bool shutdown = pref->shutdownWhenDownloadsComplete(); bool shutdown = pref->shutdownWhenDownloadsComplete();
// Confirm shutdown // Confirm shutdown
QString confirm_msg; shutDownAction action = NO_SHUTDOWN;
if (suspend) {
confirm_msg = tr("The computer will now go to sleep mode unless you cancel within the next 15 seconds..."); if (suspend)
} else if (hibernate) { action = SUSPEND_COMPUTER;
confirm_msg = tr("The computer will now go to hibernation mode unless you cancel within the next 15 seconds..."); else if (hibernate)
} else if (shutdown) { action = HIBERNATE_COMPUTER;
confirm_msg = tr("The computer will now be switched off unless you cancel within the next 15 seconds..."); else if (shutdown)
} else { action = SHUTDOWN_COMPUTER;
confirm_msg = tr("qBittorrent will now exit unless you cancel within the next 15 seconds..."); if (!ShutdownConfirmDlg::askForConfirmation(action))
}
if (!ShutdownConfirmDlg::askForConfirmation(confirm_msg))
return; return;
// Actually shut down // Actually shut down
if (suspend || hibernate || shutdown) { if (suspend || hibernate || shutdown) {
qDebug("Preparing for auto-shutdown because all downloads are complete!"); qDebug("Preparing for auto-shutdown because all downloads are complete!");
@ -2319,12 +2318,7 @@ void QBtSession::handleTorrentFinishedAlert(libtorrent::torrent_finished_alert*
pref->setSuspendWhenDownloadsComplete(false); pref->setSuspendWhenDownloadsComplete(false);
pref->setHibernateWhenDownloadsComplete(false); pref->setHibernateWhenDownloadsComplete(false);
// Make sure preferences are synced before exiting // Make sure preferences are synced before exiting
if (suspend) m_shutdownAct = action;
m_shutdownAct = SUSPEND_COMPUTER;
else if (hibernate)
m_shutdownAct = HIBERNATE_COMPUTER;
else
m_shutdownAct = SHUTDOWN_COMPUTER;
} }
qDebug("Exiting the application"); qDebug("Exiting the application");
qApp->exit(); qApp->exit();

73
src/qtlibtorrent/shutdownconfirm.cpp

@ -32,28 +32,81 @@
#include "shutdownconfirm.h" #include "shutdownconfirm.h"
#include <QPushButton>
ShutdownConfirmDlg::ShutdownConfirmDlg(const QString &message) { ShutdownConfirmDlg::ShutdownConfirmDlg(const shutDownAction &action): exit_now(NULL), timeout(15), action0(action) {
// Text // Title and button
if (action0 == NO_SHUTDOWN) {
setWindowTitle(tr("Exit confirmation"));
exit_now = addButton(tr("Exit now"), QMessageBox::AcceptRole);
}
else {
setWindowTitle(tr("Shutdown confirmation")); setWindowTitle(tr("Shutdown confirmation"));
setText(message); exit_now = addButton(tr("Shutdown now"), QMessageBox::AcceptRole);
}
// Cancel Button // Cancel Button
addButton(QMessageBox::Cancel); addButton(QMessageBox::Cancel);
// Text
updateText();
// Icon // Icon
setIcon(QMessageBox::Warning); setIcon(QMessageBox::Warning);
// Always on top // Always on top
setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint); setWindowFlags(windowFlags()|Qt::WindowStaysOnTopHint);
timer.setInterval(1000); // 1sec
connect(&timer, SIGNAL(timeout()), this, SLOT(updateSeconds()));
show(); show();
// Move to center // Move to center
move(misc::screenCenter(this)); move(misc::screenCenter(this));
} }
bool ShutdownConfirmDlg::askForConfirmation(const QString &message) { void ShutdownConfirmDlg::showEvent(QShowEvent *event) {
ShutdownConfirmDlg dlg(message); QMessageBox::showEvent(event);
// Auto shutdown timer timer.start();
QTimer timer; }
connect(&timer, SIGNAL(timeout()), &dlg, SLOT(accept()));
timer.start(15000); // 15sec bool ShutdownConfirmDlg::askForConfirmation(const shutDownAction &action) {
ShutdownConfirmDlg dlg(action);
dlg.exec(); dlg.exec();
return (dlg.result() == QDialog::Accepted); return dlg.shutdown();
} }
void ShutdownConfirmDlg::updateSeconds() {
--timeout;
updateText();
if (timeout == 0) {
timer.stop();
accept();
}
}
bool ShutdownConfirmDlg::shutdown() const {
// This is necessary because result() in the case of QMessageBox
// returns a type of StandardButton, but since we use a custom button
// it will return 0 instead, even though we set the 'accept' role on it.
if (result() != QDialog::Accepted)
return (clickedButton() == exit_now);
else
return true;
}
void ShutdownConfirmDlg::updateText() {
QString text;
switch (action0) {
case NO_SHUTDOWN:
text = tr("qBittorrent will now exit unless you cancel within the next %1 seconds.").arg(QString::number(timeout));
break;
case SHUTDOWN_COMPUTER:
text = tr("The computer will now be switched off unless you cancel within the next %1 seconds.").arg(QString::number(timeout));
break;
case SUSPEND_COMPUTER:
text = tr("The computer will now go to sleep mode unless you cancel within the next %1 seconds.").arg(QString::number(timeout));
break;
case HIBERNATE_COMPUTER:
text = tr("The computer will now go to hibernation mode unless you cancel within the next %1 seconds.").arg(QString::number(timeout));
break;
}
setText(text);
}

21
src/qtlibtorrent/shutdownconfirm.h

@ -39,9 +39,26 @@ class ShutdownConfirmDlg : public QMessageBox {
Q_OBJECT Q_OBJECT
public: public:
ShutdownConfirmDlg(const QString &message); ShutdownConfirmDlg(const shutDownAction &action);
bool shutdown() const;
static bool askForConfirmation(const QString &message); static bool askForConfirmation(const shutDownAction &action);
protected:
void showEvent(QShowEvent *event);
private slots:
void updateSeconds();
private:
// Methods
void updateText();
// Vars
QAbstractButton *exit_now;
QTimer timer;
int timeout;
shutDownAction action0;
}; };
#endif // SHUTDOWNCONFIRM_H #endif // SHUTDOWNCONFIRM_H

Loading…
Cancel
Save