Browse Source

Merge pull request #6185 from magao/issue5797

Ctrl+F search filter. Closes #5797.
adaptive-webui-19844
sledgehammer999 8 years ago committed by GitHub
parent
commit
e64b1f5ca1
  1. 135
      src/gui/mainwindow.cpp
  2. 15
      src/gui/mainwindow.h

135
src/gui/mainwindow.cpp

@ -117,8 +117,11 @@ namespace
// Misc // Misc
const QString KEY_DOWNLOAD_TRACKER_FAVICON = NOTIFICATIONS_SETTINGS_KEY("DownloadTrackerFavicon"); const QString KEY_DOWNLOAD_TRACKER_FAVICON = NOTIFICATIONS_SETTINGS_KEY("DownloadTrackerFavicon");
//just a shortcut // just a shortcut
inline SettingsStorage *settings() { return SettingsStorage::instance(); } inline SettingsStorage *settings()
{
return SettingsStorage::instance();
}
} }
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
@ -134,7 +137,7 @@ MainWindow::MainWindow(QWidget *parent)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
m_uiLocked = pref->isUILocked(); m_uiLocked = pref->isUILocked();
setWindowTitle("qBittorrent " VERSION); setWindowTitle("qBittorrent " VERSION);
m_displaySpeedInTitle = pref->speedInTitleBar(); m_displaySpeedInTitle = pref->speedInTitleBar();
@ -144,7 +147,7 @@ MainWindow::MainWindow(QWidget *parent)
setWindowIcon(QIcon::fromTheme("qbittorrent", QIcon(":/icons/skin/qbittorrent32.png"))); setWindowIcon(QIcon::fromTheme("qbittorrent", QIcon(":/icons/skin/qbittorrent32.png")));
else else
#endif #endif
setWindowIcon(QIcon(":/icons/skin/qbittorrent32.png")); setWindowIcon(QIcon(":/icons/skin/qbittorrent32.png"));
addToolbarContextMenu(); addToolbarContextMenu();
@ -182,21 +185,21 @@ MainWindow::MainWindow(QWidget *parent)
m_ui->actionLock->setMenu(lockMenu); m_ui->actionLock->setMenu(lockMenu);
// Creating Bittorrent session // Creating Bittorrent session
connect(BitTorrent::Session::instance(), SIGNAL(fullDiskError(BitTorrent::TorrentHandle *const, QString)), this, SLOT(fullDiskError(BitTorrent::TorrentHandle *const, QString))); connect(BitTorrent::Session::instance(), SIGNAL(fullDiskError(BitTorrent::TorrentHandle * const,QString)), this, SLOT(fullDiskError(BitTorrent::TorrentHandle * const,QString)));
connect(BitTorrent::Session::instance(), SIGNAL(addTorrentFailed(const QString &)), this, SLOT(addTorrentFailed(const QString &))); connect(BitTorrent::Session::instance(), SIGNAL(addTorrentFailed(const QString&)), this, SLOT(addTorrentFailed(const QString&)));
connect(BitTorrent::Session::instance(), SIGNAL(torrentNew(BitTorrent::TorrentHandle *const)), this, SLOT(torrentNew(BitTorrent::TorrentHandle *const))); connect(BitTorrent::Session::instance(), SIGNAL(torrentNew(BitTorrent::TorrentHandle * const)), this, SLOT(torrentNew(BitTorrent::TorrentHandle * const)));
connect(BitTorrent::Session::instance(), SIGNAL(torrentFinished(BitTorrent::TorrentHandle *const)), this, SLOT(finishedTorrent(BitTorrent::TorrentHandle *const))); connect(BitTorrent::Session::instance(), SIGNAL(torrentFinished(BitTorrent::TorrentHandle * const)), this, SLOT(finishedTorrent(BitTorrent::TorrentHandle * const)));
connect(BitTorrent::Session::instance(), SIGNAL(trackerAuthenticationRequired(BitTorrent::TorrentHandle *const)), this, SLOT(trackerAuthenticationRequired(BitTorrent::TorrentHandle *const))); connect(BitTorrent::Session::instance(), SIGNAL(trackerAuthenticationRequired(BitTorrent::TorrentHandle * const)), this, SLOT(trackerAuthenticationRequired(BitTorrent::TorrentHandle * const)));
connect(BitTorrent::Session::instance(), SIGNAL(downloadFromUrlFailed(QString, QString)), this, SLOT(handleDownloadFromUrlFailure(QString, QString))); connect(BitTorrent::Session::instance(), SIGNAL(downloadFromUrlFailed(QString,QString)), this, SLOT(handleDownloadFromUrlFailure(QString,QString)));
connect(BitTorrent::Session::instance(), SIGNAL(speedLimitModeChanged(bool)), this, SLOT(updateAltSpeedsBtn(bool))); connect(BitTorrent::Session::instance(), SIGNAL(speedLimitModeChanged(bool)), this, SLOT(updateAltSpeedsBtn(bool)));
connect(BitTorrent::Session::instance(), SIGNAL(recursiveTorrentDownloadPossible(BitTorrent::TorrentHandle *const)), this, SLOT(askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle *const))); connect(BitTorrent::Session::instance(), SIGNAL(recursiveTorrentDownloadPossible(BitTorrent::TorrentHandle * const)), this, SLOT(askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle * const)));
qDebug("create tabWidget"); qDebug("create tabWidget");
m_tabs = new HidableTabWidget(this); m_tabs = new HidableTabWidget(this);
connect(m_tabs, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); connect(m_tabs, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int)));
m_splitter = new QSplitter(Qt::Horizontal, this); m_splitter = new QSplitter(Qt::Horizontal, this);
//vSplitter->setChildrenCollapsible(false); // vSplitter->setChildrenCollapsible(false);
QSplitter *hSplitter = new QSplitter(Qt::Vertical, this); QSplitter *hSplitter = new QSplitter(Qt::Vertical, this);
hSplitter->setChildrenCollapsible(false); hSplitter->setChildrenCollapsible(false);
@ -214,7 +217,7 @@ MainWindow::MainWindow(QWidget *parent)
// Transfer List tab // Transfer List tab
m_transferListWidget = new TransferListWidget(hSplitter, this); m_transferListWidget = new TransferListWidget(hSplitter, this);
//transferList->setStyleSheet("QTreeView {border: none;}"); // borderless // transferList->setStyleSheet("QTreeView {border: none;}"); // borderless
m_propertiesWidget = new PropertiesWidget(hSplitter, this, m_transferListWidget); m_propertiesWidget = new PropertiesWidget(hSplitter, this, m_transferListWidget);
m_transferListFiltersWidget = new TransferListFiltersWidget(m_splitter, m_transferListWidget); m_transferListFiltersWidget = new TransferListFiltersWidget(m_splitter, m_transferListWidget);
m_transferListFiltersWidget->setDownloadTrackerFavicon(isDownloadTrackerFavicon()); m_transferListFiltersWidget->setDownloadTrackerFavicon(isDownloadTrackerFavicon());
@ -227,15 +230,15 @@ MainWindow::MainWindow(QWidget *parent)
m_tabs->addTab(m_splitter, GuiIconProvider::instance()->getIcon("folder-remote"), tr("Transfers")); m_tabs->addTab(m_splitter, GuiIconProvider::instance()->getIcon("folder-remote"), tr("Transfers"));
connect(m_searchFilter, SIGNAL(textChanged(QString)), m_transferListWidget, SLOT(applyNameFilter(QString))); connect(m_searchFilter, SIGNAL(textChanged(QString)), m_transferListWidget, SLOT(applyNameFilter(QString)));
connect(hSplitter, SIGNAL(splitterMoved(int, int)), this, SLOT(writeSettings())); connect(hSplitter, SIGNAL(splitterMoved(int,int)), this, SLOT(writeSettings()));
connect(m_splitter, SIGNAL(splitterMoved(int, int)), this, SLOT(writeSettings())); connect(m_splitter, SIGNAL(splitterMoved(int,int)), this, SLOT(writeSettings()));
connect(BitTorrent::Session::instance(), SIGNAL(trackersChanged(BitTorrent::TorrentHandle *const)), m_propertiesWidget, SLOT(loadTrackers(BitTorrent::TorrentHandle *const))); connect(BitTorrent::Session::instance(), SIGNAL(trackersChanged(BitTorrent::TorrentHandle * const)), m_propertiesWidget, SLOT(loadTrackers(BitTorrent::TorrentHandle * const)));
connect(BitTorrent::Session::instance(), SIGNAL(trackersAdded(BitTorrent::TorrentHandle *const, const QList<BitTorrent::TrackerEntry> &)), m_transferListFiltersWidget, SLOT(addTrackers(BitTorrent::TorrentHandle *const, const QList<BitTorrent::TrackerEntry> &))); connect(BitTorrent::Session::instance(), SIGNAL(trackersAdded(BitTorrent::TorrentHandle * const,const QList<BitTorrent::TrackerEntry> &)), m_transferListFiltersWidget, SLOT(addTrackers(BitTorrent::TorrentHandle * const,const QList<BitTorrent::TrackerEntry> &)));
connect(BitTorrent::Session::instance(), SIGNAL(trackersRemoved(BitTorrent::TorrentHandle *const, const QList<BitTorrent::TrackerEntry> &)), m_transferListFiltersWidget, SLOT(removeTrackers(BitTorrent::TorrentHandle *const, const QList<BitTorrent::TrackerEntry> &))); connect(BitTorrent::Session::instance(), SIGNAL(trackersRemoved(BitTorrent::TorrentHandle * const,const QList<BitTorrent::TrackerEntry> &)), m_transferListFiltersWidget, SLOT(removeTrackers(BitTorrent::TorrentHandle * const,const QList<BitTorrent::TrackerEntry> &)));
connect(BitTorrent::Session::instance(), SIGNAL(trackerlessStateChanged(BitTorrent::TorrentHandle *const, bool)), m_transferListFiltersWidget, SLOT(changeTrackerless(BitTorrent::TorrentHandle *const, bool))); connect(BitTorrent::Session::instance(), SIGNAL(trackerlessStateChanged(BitTorrent::TorrentHandle * const,bool)), m_transferListFiltersWidget, SLOT(changeTrackerless(BitTorrent::TorrentHandle * const,bool)));
connect(BitTorrent::Session::instance(), SIGNAL(trackerSuccess(BitTorrent::TorrentHandle *const, const QString &)), m_transferListFiltersWidget, SLOT(trackerSuccess(BitTorrent::TorrentHandle *const, const QString &))); connect(BitTorrent::Session::instance(), SIGNAL(trackerSuccess(BitTorrent::TorrentHandle * const,const QString&)), m_transferListFiltersWidget, SLOT(trackerSuccess(BitTorrent::TorrentHandle * const,const QString&)));
connect(BitTorrent::Session::instance(), SIGNAL(trackerError(BitTorrent::TorrentHandle *const, const QString &)), m_transferListFiltersWidget, SLOT(trackerError(BitTorrent::TorrentHandle *const, const QString &))); connect(BitTorrent::Session::instance(), SIGNAL(trackerError(BitTorrent::TorrentHandle * const,const QString&)), m_transferListFiltersWidget, SLOT(trackerError(BitTorrent::TorrentHandle * const,const QString&)));
connect(BitTorrent::Session::instance(), SIGNAL(trackerWarning(BitTorrent::TorrentHandle *const, const QString &)), m_transferListFiltersWidget, SLOT(trackerWarning(BitTorrent::TorrentHandle *const, const QString &))); connect(BitTorrent::Session::instance(), SIGNAL(trackerWarning(BitTorrent::TorrentHandle * const,const QString&)), m_transferListFiltersWidget, SLOT(trackerWarning(BitTorrent::TorrentHandle * const,const QString&)));
m_ui->centralWidgetLayout->addWidget(m_tabs); m_ui->centralWidgetLayout->addWidget(m_tabs);
@ -370,8 +373,8 @@ MainWindow::MainWindow(QWidget *parent)
// Update the number of torrents (tab) // Update the number of torrents (tab)
updateNbTorrents(); updateNbTorrents();
connect(m_transferListWidget->getSourceModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(updateNbTorrents())); connect(m_transferListWidget->getSourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(updateNbTorrents()));
connect(m_transferListWidget->getSourceModel(), SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(updateNbTorrents())); connect(m_transferListWidget->getSourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(updateNbTorrents()));
connect(pref, SIGNAL(changed()), this, SLOT(optionsSaved())); connect(pref, SIGNAL(changed()), this, SLOT(optionsSaved()));
@ -455,7 +458,7 @@ void MainWindow::setDownloadTrackerFavicon(bool value)
void MainWindow::addToolbarContextMenu() void MainWindow::addToolbarContextMenu()
{ {
const Preferences* const pref = Preferences::instance(); const Preferences *const pref = Preferences::instance();
m_toolbarMenu = new QMenu(this); m_toolbarMenu = new QMenu(this);
m_ui->toolBar->setContextMenuPolicy(Qt::CustomContextMenu); m_ui->toolBar->setContextMenuPolicy(Qt::CustomContextMenu);
@ -579,7 +582,7 @@ void MainWindow::clearUILockPassword()
void MainWindow::on_actionLock_triggered() void MainWindow::on_actionLock_triggered()
{ {
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
// Check if there is a password // Check if there is a password
if (pref->getUILockPasswordMD5().isEmpty()) { if (pref->getUILockPasswordMD5().isEmpty()) {
// Ask for a password // Ask for a password
@ -609,7 +612,6 @@ void MainWindow::displayRSSTab(bool enable)
else if (m_rssWidget) { else if (m_rssWidget) {
delete m_rssWidget; delete m_rssWidget;
} }
} }
void MainWindow::updateRSSTabLabel(int count) void MainWindow::updateRSSTabLabel(int count)
@ -630,7 +632,12 @@ void MainWindow::displaySearchTab(bool enable)
else if (m_searchWidget) { else if (m_searchWidget) {
delete m_searchWidget; delete m_searchWidget;
} }
}
void MainWindow::focusSearchFilter()
{
m_searchFilter->setFocus();
m_searchFilter->selectAll();
} }
void MainWindow::updateNbTorrents() void MainWindow::updateNbTorrents()
@ -665,7 +672,7 @@ void MainWindow::tabChanged(int newTab)
void MainWindow::writeSettings() void MainWindow::writeSettings()
{ {
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
pref->setMainGeometry(saveGeometry()); pref->setMainGeometry(saveGeometry());
// Splitter size // Splitter size
pref->setMainVSplitterState(m_splitter->saveState()); pref->setMainVSplitterState(m_splitter->saveState());
@ -688,13 +695,13 @@ void MainWindow::cleanup()
delete m_searchFilterAction; delete m_searchFilterAction;
// remove all child widgets // remove all child widgets
while (QWidget *w = findChild<QWidget *>()) while (QWidget *w = findChild<QWidget * >())
delete w; delete w;
} }
void MainWindow::readSettings() void MainWindow::readSettings()
{ {
const Preferences* const pref = Preferences::instance(); const Preferences *const pref = Preferences::instance();
const QByteArray mainGeo = pref->getMainGeometry(); const QByteArray mainGeo = pref->getMainGeometry();
if (!mainGeo.isEmpty() && restoreGeometry(mainGeo)) if (!mainGeo.isEmpty() && restoreGeometry(mainGeo))
m_posInitialized = true; m_posInitialized = true;
@ -758,11 +765,12 @@ void MainWindow::createKeyboardShortcuts()
connect(switchTransferShortcut, SIGNAL(activated()), this, SLOT(displayTransferTab())); connect(switchTransferShortcut, SIGNAL(activated()), this, SLOT(displayTransferTab()));
QShortcut *switchSearchShortcut = new QShortcut(QKeySequence("Alt+2"), this); QShortcut *switchSearchShortcut = new QShortcut(QKeySequence("Alt+2"), this);
connect(switchSearchShortcut, SIGNAL(activated()), this, SLOT(displaySearchTab())); connect(switchSearchShortcut, SIGNAL(activated()), this, SLOT(displaySearchTab()));
QShortcut *switchSearchShortcut2 = new QShortcut(QKeySequence::Find, this);
connect(switchSearchShortcut2, SIGNAL(activated()), this, SLOT(displaySearchTab()));
QShortcut *switchRSSShortcut = new QShortcut(QKeySequence("Alt+3"), this); QShortcut *switchRSSShortcut = new QShortcut(QKeySequence("Alt+3"), this);
connect(switchRSSShortcut, SIGNAL(activated()), this, SLOT(displayRSSTab())); connect(switchRSSShortcut, SIGNAL(activated()), this, SLOT(displayRSSTab()));
QShortcut *switchSearchFilterShortcut = new QShortcut(QKeySequence::Find, this);
connect(switchSearchFilterShortcut, SIGNAL(activated()), this, SLOT(focusSearchFilter()));
m_ui->actionDocumentation->setShortcut(QKeySequence::HelpContents); m_ui->actionDocumentation->setShortcut(QKeySequence::HelpContents);
m_ui->actionOptions->setShortcut(QKeySequence("Alt+O")); m_ui->actionOptions->setShortcut(QKeySequence("Alt+O"));
m_ui->actionStart->setShortcut(QKeySequence("Ctrl+S")); m_ui->actionStart->setShortcut(QKeySequence("Ctrl+S"));
@ -801,7 +809,7 @@ void MainWindow::displayRSSTab() const
void MainWindow::askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle *const torrent) void MainWindow::askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle *const torrent)
{ {
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
if (pref->recursiveDownloadDisabled()) return; if (pref->recursiveDownloadDisabled()) return;
// Get Torrent name // Get Torrent name
QString torrentName = torrent->name(); QString torrentName = torrent->name();
@ -829,7 +837,7 @@ void MainWindow::on_actionSetGlobalUploadLimit_triggered()
BitTorrent::Session *const session = BitTorrent::Session::instance(); BitTorrent::Session *const session = BitTorrent::Session::instance();
bool ok = false; bool ok = false;
const long newLimit = SpeedLimitDialog::askSpeedLimit( const long newLimit = SpeedLimitDialog::askSpeedLimit(
&ok, tr("Global Upload Speed Limit"), session->uploadSpeedLimit()); &ok, tr("Global Upload Speed Limit"), session->uploadSpeedLimit());
if (ok) { if (ok) {
qDebug("Setting global upload rate limit to %.1fKb/s", newLimit / 1024.); qDebug("Setting global upload rate limit to %.1fKb/s", newLimit / 1024.);
session->setUploadSpeedLimit(newLimit); session->setUploadSpeedLimit(newLimit);
@ -842,7 +850,7 @@ void MainWindow::on_actionSetGlobalDownloadLimit_triggered()
BitTorrent::Session *const session = BitTorrent::Session::instance(); BitTorrent::Session *const session = BitTorrent::Session::instance();
bool ok = false; bool ok = false;
const long newLimit = SpeedLimitDialog::askSpeedLimit( const long newLimit = SpeedLimitDialog::askSpeedLimit(
&ok, tr("Global Download Speed Limit"), session->downloadSpeedLimit()); &ok, tr("Global Download Speed Limit"), session->downloadSpeedLimit());
if (ok) { if (ok) {
qDebug("Setting global download rate limit to %.1fKb/s", newLimit / 1024.); qDebug("Setting global download rate limit to %.1fKb/s", newLimit / 1024.);
session->setDownloadSpeedLimit(newLimit); session->setDownloadSpeedLimit(newLimit);
@ -854,16 +862,15 @@ void MainWindow::on_actionSetGlobalDownloadLimit_triggered()
void MainWindow::on_actionExit_triggered() void MainWindow::on_actionExit_triggered()
{ {
// UI locking enforcement. // UI locking enforcement.
if (isHidden() && m_uiLocked) { if (isHidden() && m_uiLocked)
// Ask for UI lock password // Ask for UI lock password
if (!unlockUI()) return; if (!unlockUI()) return;
}
m_forceExit = true; m_forceExit = true;
close(); close();
} }
QWidget* MainWindow::currentTabWidget() const QWidget *MainWindow::currentTabWidget() const
{ {
if (isMinimized() || !isVisible()) if (isMinimized() || !isVisible())
return 0; return 0;
@ -889,7 +896,7 @@ bool MainWindow::unlockUI()
m_unlockDlgShowing = false; m_unlockDlgShowing = false;
if (!ok) return false; if (!ok) return false;
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
QString realPassMd5 = pref->getUILockPasswordMD5(); QString realPassMd5 = pref->getUILockPasswordMD5();
QCryptographicHash md5(QCryptographicHash::Md5); QCryptographicHash md5(QCryptographicHash::Md5);
md5.addData(clearPassword.toLocal8Bit()); md5.addData(clearPassword.toLocal8Bit());
@ -939,7 +946,7 @@ void MainWindow::toggleVisibility(QSystemTrayIcon::ActivationReason e)
// Display About Dialog // Display About Dialog
void MainWindow::on_actionAbout_triggered() void MainWindow::on_actionAbout_triggered()
{ {
//About dialog // About dialog
if (m_aboutDlg) if (m_aboutDlg)
m_aboutDlg->setFocus(); m_aboutDlg->setFocus();
else else
@ -973,7 +980,7 @@ void MainWindow::showEvent(QShowEvent *e)
// Called when we close the program // Called when we close the program
void MainWindow::closeEvent(QCloseEvent *e) void MainWindow::closeEvent(QCloseEvent *e)
{ {
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
const bool goToSystrayOnExit = pref->closeToTray(); const bool goToSystrayOnExit = pref->closeToTray();
if (!m_forceExit && m_systrayIcon && goToSystrayOnExit && !this->isHidden()) { if (!m_forceExit && m_systrayIcon && goToSystrayOnExit && !this->isHidden()) {
hide(); hide();
@ -999,14 +1006,13 @@ void MainWindow::closeEvent(QCloseEvent *e)
m_forceExit = false; m_forceExit = false;
return; return;
} }
if (confirmBox.clickedButton() == alwaysBtn) { if (confirmBox.clickedButton() == alwaysBtn)
// Remember choice // Remember choice
Preferences::instance()->setConfirmOnExit(false); Preferences::instance()->setConfirmOnExit(false);
}
} }
} }
//abort search if any // abort search if any
if (m_searchWidget) if (m_searchWidget)
delete m_searchWidget; delete m_searchWidget;
@ -1030,10 +1036,10 @@ void MainWindow::on_actionCreateTorrent_triggered()
bool MainWindow::event(QEvent *e) bool MainWindow::event(QEvent *e)
{ {
switch(e->type()) { switch (e->type()) {
case QEvent::WindowStateChange: { case QEvent::WindowStateChange: {
qDebug("Window change event"); qDebug("Window change event");
//Now check to see if the window is minimised // Now check to see if the window is minimised
if (isMinimized()) { if (isMinimized()) {
qDebug("minimisation"); qDebug("minimisation");
if (m_systrayIcon && Preferences::instance()->minimizeToTray()) { if (m_systrayIcon && Preferences::instance()->minimizeToTray()) {
@ -1125,12 +1131,12 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *event)
// torrents to download list // torrents to download list
void MainWindow::on_actionOpen_triggered() void MainWindow::on_actionOpen_triggered()
{ {
Preferences* const pref = Preferences::instance(); Preferences *const pref = Preferences::instance();
// Open File Open Dialog // Open File Open Dialog
// Note: it is possible to select more than one file // Note: it is possible to select more than one file
const QStringList pathsList = const QStringList pathsList =
QFileDialog::getOpenFileNames(0, tr("Open Torrent Files"), pref->getMainLastDir(), QFileDialog::getOpenFileNames(0, tr("Open Torrent Files"), pref->getMainLastDir(),
tr("Torrent Files") + " (*.torrent)"); tr("Torrent Files") + " (*.torrent)");
const bool useTorrentAdditionDialog = AddNewTorrentDialog::isEnabled(); const bool useTorrentAdditionDialog = AddNewTorrentDialog::isEnabled();
if (!pathsList.isEmpty()) { if (!pathsList.isEmpty()) {
foreach (QString file, pathsList) { foreach (QString file, pathsList) {
@ -1166,7 +1172,7 @@ void MainWindow::optionsSaved()
void MainWindow::loadPreferences(bool configureSession) void MainWindow::loadPreferences(bool configureSession)
{ {
Logger::instance()->addMessage(tr("Options were saved successfully.")); Logger::instance()->addMessage(tr("Options were saved successfully."));
const Preferences* const pref = Preferences::instance(); const Preferences *const pref = Preferences::instance();
const bool newSystrayIntegration = pref->systrayIntegration(); const bool newSystrayIntegration = pref->systrayIntegration();
m_ui->actionLock->setVisible(newSystrayIntegration); m_ui->actionLock->setVisible(newSystrayIntegration);
if (newSystrayIntegration != (m_systrayIcon != 0)) { if (newSystrayIntegration != (m_systrayIcon != 0)) {
@ -1261,7 +1267,7 @@ void MainWindow::loadPreferences(bool configureSession)
qDebug("GUI settings loaded"); qDebug("GUI settings loaded");
} }
void MainWindow::addUnauthenticatedTracker(const QPair<BitTorrent::TorrentHandle*, QString> &tracker) void MainWindow::addUnauthenticatedTracker(const QPair<BitTorrent::TorrentHandle *, QString> &tracker)
{ {
// Trackers whose authentication was cancelled // Trackers whose authentication was cancelled
if (m_unauthenticatedTrackers.indexOf(tracker) < 0) if (m_unauthenticatedTrackers.indexOf(tracker) < 0)
@ -1344,12 +1350,12 @@ void MainWindow::showNotificationBaloon(QString title, QString msg) const
* * * *
*****************************************************/ *****************************************************/
void MainWindow::downloadFromURLList(const QStringList& urlList) void MainWindow::downloadFromURLList(const QStringList &urlList)
{ {
const bool useTorrentAdditionDialog = AddNewTorrentDialog::isEnabled(); const bool useTorrentAdditionDialog = AddNewTorrentDialog::isEnabled();
foreach (QString url, urlList) { foreach (QString url, urlList) {
if ((url.size() == 40 && !url.contains(QRegExp("[^0-9A-Fa-f]"))) if (((url.size() == 40) && !url.contains(QRegExp("[^0-9A-Fa-f]")))
|| (url.size() == 32 && !url.contains(QRegExp("[^2-7A-Za-z]")))) || ((url.size() == 32) && !url.contains(QRegExp("[^2-7A-Za-z]"))))
url = "magnet:?xt=urn:btih:" + url; url = "magnet:?xt=urn:btih:" + url;
if (useTorrentAdditionDialog) if (useTorrentAdditionDialog)
@ -1401,7 +1407,7 @@ void MainWindow::updateTrayIconMenu()
m_ui->actionToggleVisibility->setText(isVisible() ? tr("Hide") : tr("Show")); m_ui->actionToggleVisibility->setText(isVisible() ? tr("Hide") : tr("Show"));
} }
QMenu* MainWindow::trayIconMenu() QMenu *MainWindow::trayIconMenu()
{ {
if (m_trayIconMenu) return m_trayIconMenu; if (m_trayIconMenu) return m_trayIconMenu;
@ -1457,14 +1463,14 @@ void MainWindow::on_actionOptions_triggered()
void MainWindow::on_actionTopToolBar_triggered() void MainWindow::on_actionTopToolBar_triggered()
{ {
bool isVisible = static_cast<QAction*>(sender())->isChecked(); bool isVisible = static_cast<QAction * >(sender())->isChecked();
m_ui->toolBar->setVisible(isVisible); m_ui->toolBar->setVisible(isVisible);
Preferences::instance()->setToolbarDisplayed(isVisible); Preferences::instance()->setToolbarDisplayed(isVisible);
} }
void MainWindow::on_actionSpeedInTitleBar_triggered() void MainWindow::on_actionSpeedInTitleBar_triggered()
{ {
m_displaySpeedInTitle = static_cast<QAction*>(sender())->isChecked(); m_displaySpeedInTitle = static_cast<QAction * >(sender())->isChecked();
Preferences::instance()->showSpeedInTitleBar(m_displaySpeedInTitle); Preferences::instance()->showSpeedInTitleBar(m_displaySpeedInTitle);
if (m_displaySpeedInTitle) if (m_displaySpeedInTitle)
updateGUI(); updateGUI();
@ -1574,7 +1580,7 @@ void MainWindow::handleUpdateCheckFinished(bool updateAvailable, QString newVers
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
if (answer == QMessageBox::Yes) { if (answer == QMessageBox::Yes) {
// The user want to update, let's download the update // The user want to update, let's download the update
ProgramUpdater* updater = dynamic_cast<ProgramUpdater*>(sender()); ProgramUpdater *updater = dynamic_cast<ProgramUpdater * >(sender());
updater->updateProgram(); updater->updateProgram();
} }
} }
@ -1590,6 +1596,7 @@ void MainWindow::handleUpdateCheckFinished(bool updateAvailable, QString newVers
if (Preferences::instance()->isUpdateCheckEnabled() && (answer == QMessageBox::Yes)) if (Preferences::instance()->isUpdateCheckEnabled() && (answer == QMessageBox::Yes))
m_programUpdateTimer->start(); m_programUpdateTimer->start();
} }
#endif #endif
void MainWindow::on_actionDonateMoney_triggered() void MainWindow::on_actionDonateMoney_triggered()
@ -1699,7 +1706,7 @@ void MainWindow::checkForActiveTorrents()
QIcon MainWindow::getSystrayIcon() const QIcon MainWindow::getSystrayIcon() const
{ {
TrayIcon::Style style = Preferences::instance()->trayIconStyle(); TrayIcon::Style style = Preferences::instance()->trayIconStyle();
switch(style) { switch (style) {
case TrayIcon::MONO_DARK: case TrayIcon::MONO_DARK:
return QIcon(":/icons/skin/qbittorrent_mono_dark.png"); return QIcon(":/icons/skin/qbittorrent_mono_dark.png");
case TrayIcon::MONO_LIGHT: case TrayIcon::MONO_LIGHT:
@ -1729,11 +1736,12 @@ void MainWindow::checkProgramUpdate()
m_ui->actionCheckForUpdates->setEnabled(false); m_ui->actionCheckForUpdates->setEnabled(false);
m_ui->actionCheckForUpdates->setText(tr("Checking for Updates...")); m_ui->actionCheckForUpdates->setText(tr("Checking for Updates..."));
m_ui->actionCheckForUpdates->setToolTip(tr("Already checking for program updates in the background")); m_ui->actionCheckForUpdates->setToolTip(tr("Already checking for program updates in the background"));
bool invokedByUser = m_ui->actionCheckForUpdates == qobject_cast<QAction*>(sender()); bool invokedByUser = m_ui->actionCheckForUpdates == qobject_cast<QAction * >(sender());
ProgramUpdater *updater = new ProgramUpdater(this, invokedByUser); ProgramUpdater *updater = new ProgramUpdater(this, invokedByUser);
connect(updater, SIGNAL(updateCheckFinished(bool, QString, bool)), SLOT(handleUpdateCheckFinished(bool, QString, bool))); connect(updater, SIGNAL(updateCheckFinished(bool,QString,bool)), SLOT(handleUpdateCheckFinished(bool,QString,bool)));
updater->checkForUpdates(); updater->checkForUpdates();
} }
#endif #endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
@ -1765,8 +1773,8 @@ void MainWindow::installPython()
handler = Net::DownloadManager::instance()->downloadUrl("https://www.python.org/ftp/python/3.5.2/python-3.5.2.exe", true); handler = Net::DownloadManager::instance()->downloadUrl("https://www.python.org/ftp/python/3.5.2/python-3.5.2.exe", true);
else else
handler = Net::DownloadManager::instance()->downloadUrl("https://www.python.org/ftp/python/3.4.4/python-3.4.4.msi", true); handler = Net::DownloadManager::instance()->downloadUrl("https://www.python.org/ftp/python/3.4.4/python-3.4.4.msi", true);
connect(handler, SIGNAL(downloadFinished(QString, QString)), this, SLOT(pythonDownloadSuccess(QString, QString))); connect(handler, SIGNAL(downloadFinished(QString,QString)), this, SLOT(pythonDownloadSuccess(QString,QString)));
connect(handler, SIGNAL(downloadFailed(QString, QString)), this, SLOT(pythonDownloadFailure(QString, QString))); connect(handler, SIGNAL(downloadFailed(QString,QString)), this, SLOT(pythonDownloadFailure(QString,QString)));
} }
void MainWindow::pythonDownloadSuccess(const QString &url, const QString &filePath) void MainWindow::pythonDownloadSuccess(const QString &url, const QString &filePath)
@ -1812,4 +1820,5 @@ void MainWindow::pythonDownloadFailure(const QString &url, const QString &error)
setCursor(QCursor(Qt::ArrowCursor)); setCursor(QCursor(Qt::ArrowCursor));
QMessageBox::warning(this, tr("Download error"), tr("Python setup could not be downloaded, reason: %1.\nPlease install it manually.").arg(error)); QMessageBox::warning(this, tr("Download error"), tr("Python setup could not be downloaded, reason: %1.\nPlease install it manually.").arg(error));
} }
#endif #endif

15
src/gui/mainwindow.h

@ -69,7 +69,7 @@ namespace Ui
class MainWindow; class MainWindow;
} }
class MainWindow : public QMainWindow class MainWindow: public QMainWindow
{ {
Q_OBJECT Q_OBJECT
@ -77,10 +77,10 @@ public:
explicit MainWindow(QWidget *parent = 0); explicit MainWindow(QWidget *parent = 0);
~MainWindow() override; ~MainWindow() override;
QWidget* currentTabWidget() const; QWidget *currentTabWidget() const;
TransferListWidget* transferListWidget() const; TransferListWidget *transferListWidget() const;
PropertiesWidget *propertiesWidget() const; PropertiesWidget *propertiesWidget() const;
QMenu* trayIconMenu(); QMenu *trayIconMenu();
// ExecutionLog properties // ExecutionLog properties
bool isExecutionLogEnabled() const; bool isExecutionLogEnabled() const;
@ -126,9 +126,10 @@ private slots:
void displayTransferTab() const; void displayTransferTab() const;
void displaySearchTab() const; void displaySearchTab() const;
void displayRSSTab() const; void displayRSSTab() const;
void focusSearchFilter();
void updateGUI(); void updateGUI();
void loadPreferences(bool configureSession = true); void loadPreferences(bool configureSession = true);
void addUnauthenticatedTracker(const QPair<BitTorrent::TorrentHandle*, QString> &tracker); void addUnauthenticatedTracker(const QPair<BitTorrent::TorrentHandle *, QString> &tracker);
void addTorrentFailed(const QString &error) const; void addTorrentFailed(const QString &error) const;
void torrentNew(BitTorrent::TorrentHandle *const torrent) const; void torrentNew(BitTorrent::TorrentHandle *const torrent) const;
void finishedTorrent(BitTorrent::TorrentHandle *const torrent) const; void finishedTorrent(BitTorrent::TorrentHandle *const torrent) const;
@ -199,7 +200,7 @@ private:
void dragEnterEvent(QDragEnterEvent *event) override; void dragEnterEvent(QDragEnterEvent *event) override;
void closeEvent(QCloseEvent *) override; void closeEvent(QCloseEvent *) override;
void showEvent(QShowEvent *) override; void showEvent(QShowEvent *) override;
bool event(QEvent * event) override; bool event(QEvent *event) override;
void displayRSSTab(bool enable); void displayRSSTab(bool enable);
void displaySearchTab(bool enable); void displaySearchTab(bool enable);
@ -207,7 +208,7 @@ private:
QFileSystemWatcher *m_executableWatcher; QFileSystemWatcher *m_executableWatcher;
// Bittorrent // Bittorrent
QList<QPair<BitTorrent::TorrentHandle*, QString>> m_unauthenticatedTrackers; // Still needed? QList<QPair<BitTorrent::TorrentHandle *, QString >> m_unauthenticatedTrackers; // Still needed?
// GUI related // GUI related
bool m_posInitialized; bool m_posInitialized;
QTabWidget *m_tabs; QTabWidget *m_tabs;

Loading…
Cancel
Save