From b465b3c68ac5f96cb1841d996cfbdb385df07450 Mon Sep 17 00:00:00 2001 From: sledgehammer999 Date: Sat, 1 Dec 2012 02:06:47 +0200 Subject: [PATCH] Improve usability of 'Add new torrent' dialog. Implements issue #225. --- src/addnewtorrentdialog.cpp | 105 ++++++++++++++++++------------------ src/addnewtorrentdialog.h | 2 + src/addnewtorrentdialog.ui | 33 +++++++++--- 3 files changed, 81 insertions(+), 59 deletions(-) diff --git a/src/addnewtorrentdialog.cpp b/src/addnewtorrentdialog.cpp index e0ac8af2e..fbc7ccbfb 100644 --- a/src/addnewtorrentdialog.cpp +++ b/src/addnewtorrentdialog.cpp @@ -58,7 +58,8 @@ AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent) : m_contentDelegate(0), m_isMagnet(false), m_hasMetadata(false), - m_hasRenamedFile(false) + m_hasRenamedFile(false), + m_oldIndex(0) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); @@ -69,9 +70,8 @@ AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent) : ui->start_torrent_cb->setChecked(!pref->addTorrentsInPause()); ui->save_path_combo->addItem(fsutils::toNativePath(pref->getSavePath()), pref->getSavePath()); loadSavePathHistory(); - ui->save_path_combo->insertSeparator(ui->save_path_combo->count()); - ui->save_path_combo->addItem(tr("Other...", "Other save path...")); connect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), SLOT(onSavePathChanged(int))); + connect(ui->browse_button, SIGNAL(clicked()), SLOT(browseButton_clicked())); ui->default_save_path_cb->setVisible(false); // Default path is selected by default // Load labels @@ -316,58 +316,61 @@ void AddNewTorrentDialog::updateDiskSpaceLabel() { void AddNewTorrentDialog::onSavePathChanged(int index) { - static int old_index = 0; - Preferences* const pref = Preferences::instance(); - - if (index == (ui->save_path_combo->count() - 1)) { - disconnect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(onSavePathChanged(int))); - // User is asking for a new save path - QString cur_save_path = ui->save_path_combo->itemText(old_index); - QString new_path, old_filename, new_filename; - - if (m_torrentInfo && m_torrentInfo->num_files() == 1) { - old_filename = fsutils::fileName(cur_save_path); - new_path = QFileDialog::getSaveFileName(this, tr("Choose save path"), cur_save_path, QString(), 0, QFileDialog::DontConfirmOverwrite); - if (!new_path.isEmpty()) - new_path = fsutils::branchPath(new_path, &new_filename); - qDebug() << "new_path: " << new_path; - qDebug() << "new_filename: " << new_filename; - } else { - if (!cur_save_path.isEmpty() && QDir(cur_save_path).exists()) - new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), cur_save_path); - else - new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), QDir::homePath()); - } - if (!new_path.isEmpty()) { - const int existing_index = indexOfSavePath(new_path); - if (existing_index >= 0) - ui->save_path_combo->setCurrentIndex(existing_index); - else { - // New path, prepend to combo box - if (!new_filename.isEmpty()) - ui->save_path_combo->insertItem(0, fsutils::toNativePath(QDir(new_path).absoluteFilePath(new_filename)), new_path); - else - ui->save_path_combo->insertItem(0, fsutils::toNativePath(new_path), new_path); - ui->save_path_combo->setCurrentIndex(0); - } - // Update file name in all save_paths - if (!new_filename.isEmpty() && !fsutils::sameFileNames(old_filename, new_filename)) { - m_hasRenamedFile = true; - m_filesPath[0] = new_filename; - updateFileNameInSavePaths(new_filename); - } - } else { - // Restore index - ui->save_path_combo->setCurrentIndex(old_index); - } - connect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), SLOT(onSavePathChanged(int))); - } // Toggle default save path setting checkbox visibility ui->default_save_path_cb->setChecked(false); - ui->default_save_path_cb->setVisible(QDir(ui->save_path_combo->itemData(ui->save_path_combo->currentIndex()).toString()) != pref->getSavePath()); + ui->default_save_path_cb->setVisible(QDir(ui->save_path_combo->itemData(ui->save_path_combo->currentIndex()).toString()) != QDir(Preferences::instance()->getSavePath())); relayout(); + // Remember index - old_index = ui->save_path_combo->currentIndex(); + m_oldIndex = index; +} + +void AddNewTorrentDialog::browseButton_clicked() +{ + disconnect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(onSavePathChanged(int))); + // User is asking for a new save path + QString cur_save_path = ui->save_path_combo->itemText(m_oldIndex); + QString new_path, old_filename, new_filename; + + if (m_torrentInfo && m_torrentInfo->num_files() == 1) { + old_filename = fsutils::fileName(cur_save_path); + new_path = QFileDialog::getSaveFileName(this, tr("Choose save path"), cur_save_path, QString(), 0, QFileDialog::DontConfirmOverwrite); + if (!new_path.isEmpty()) + new_path = fsutils::branchPath(new_path, &new_filename); + qDebug() << "new_path: " << new_path; + qDebug() << "new_filename: " << new_filename; + } else { + if (!cur_save_path.isEmpty() && QDir(cur_save_path).exists()) + new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), cur_save_path); + else + new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), QDir::homePath()); + } + if (!new_path.isEmpty()) { + const int existing_index = indexOfSavePath(new_path); + if (existing_index >= 0) + ui->save_path_combo->setCurrentIndex(existing_index); + else { + // New path, prepend to combo box + if (!new_filename.isEmpty()) + ui->save_path_combo->insertItem(0, fsutils::toNativePath(QDir(new_path).absoluteFilePath(new_filename)), new_path); + else + ui->save_path_combo->insertItem(0, fsutils::toNativePath(new_path), new_path); + ui->save_path_combo->setCurrentIndex(0); + } + // Update file name in all save_paths + if (!new_filename.isEmpty() && !fsutils::sameFileNames(old_filename, new_filename)) { + m_hasRenamedFile = true; + m_filesPath[0] = new_filename; + updateFileNameInSavePaths(new_filename); + } + + onSavePathChanged(0); + } else { + // Restore index + ui->save_path_combo->setCurrentIndex(m_oldIndex); + } + connect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), SLOT(onSavePathChanged(int))); + updateDiskSpaceLabel(); } diff --git a/src/addnewtorrentdialog.h b/src/addnewtorrentdialog.h index bdf4f971c..2b5642946 100644 --- a/src/addnewtorrentdialog.h +++ b/src/addnewtorrentdialog.h @@ -69,6 +69,7 @@ private slots: void renameSelectedFile(); void setdialogPosition(); void updateMetadata(const QTorrentHandle& h); + void browseButton_clicked(); protected slots: virtual void accept(); @@ -101,6 +102,7 @@ private: bool m_hasRenamedFile; QShortcut *editHotkey; QByteArray m_headerState; + int m_oldIndex; }; #endif // ADDNEWTORRENTDIALOG_H diff --git a/src/addnewtorrentdialog.ui b/src/addnewtorrentdialog.ui index dfa1af1ea..bc3bebea9 100644 --- a/src/addnewtorrentdialog.ui +++ b/src/addnewtorrentdialog.ui @@ -30,14 +30,31 @@ - - - - 0 - 0 - - - + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Browse... + + + +