Browse Source

Improve usability of 'Add new torrent' dialog. Implements issue #225.

adaptive-webui-19844
sledgehammer999 12 years ago
parent
commit
b465b3c68a
  1. 103
      src/addnewtorrentdialog.cpp
  2. 2
      src/addnewtorrentdialog.h
  3. 33
      src/addnewtorrentdialog.ui

103
src/addnewtorrentdialog.cpp

@ -58,7 +58,8 @@ AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent) :
m_contentDelegate(0), m_contentDelegate(0),
m_isMagnet(false), m_isMagnet(false),
m_hasMetadata(false), m_hasMetadata(false),
m_hasRenamedFile(false) m_hasRenamedFile(false),
m_oldIndex(0)
{ {
ui->setupUi(this); ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_DeleteOnClose);
@ -69,9 +70,8 @@ AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent) :
ui->start_torrent_cb->setChecked(!pref->addTorrentsInPause()); ui->start_torrent_cb->setChecked(!pref->addTorrentsInPause());
ui->save_path_combo->addItem(fsutils::toNativePath(pref->getSavePath()), pref->getSavePath()); ui->save_path_combo->addItem(fsutils::toNativePath(pref->getSavePath()), pref->getSavePath());
loadSavePathHistory(); 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->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 ui->default_save_path_cb->setVisible(false); // Default path is selected by default
// Load labels // Load labels
@ -316,58 +316,61 @@ void AddNewTorrentDialog::updateDiskSpaceLabel() {
void AddNewTorrentDialog::onSavePathChanged(int index) void AddNewTorrentDialog::onSavePathChanged(int index)
{ {
static int old_index = 0; // Toggle default save path setting checkbox visibility
Preferences* const pref = Preferences::instance(); 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()) != QDir(Preferences::instance()->getSavePath()));
relayout();
if (index == (ui->save_path_combo->count() - 1)) { // Remember index
disconnect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(onSavePathChanged(int))); m_oldIndex = index;
// 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; void AddNewTorrentDialog::browseButton_clicked()
{
if (m_torrentInfo && m_torrentInfo->num_files() == 1) { disconnect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), this, SLOT(onSavePathChanged(int)));
old_filename = fsutils::fileName(cur_save_path); // User is asking for a new save path
new_path = QFileDialog::getSaveFileName(this, tr("Choose save path"), cur_save_path, QString(), 0, QFileDialog::DontConfirmOverwrite); QString cur_save_path = ui->save_path_combo->itemText(m_oldIndex);
if (!new_path.isEmpty()) QString new_path, old_filename, new_filename;
new_path = fsutils::branchPath(new_path, &new_filename);
qDebug() << "new_path: " << new_path; if (m_torrentInfo && m_torrentInfo->num_files() == 1) {
qDebug() << "new_filename: " << new_filename; old_filename = fsutils::fileName(cur_save_path);
} else { new_path = QFileDialog::getSaveFileName(this, tr("Choose save path"), cur_save_path, QString(), 0, QFileDialog::DontConfirmOverwrite);
if (!cur_save_path.isEmpty() && QDir(cur_save_path).exists()) if (!new_path.isEmpty())
new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), cur_save_path); new_path = fsutils::branchPath(new_path, &new_filename);
else qDebug() << "new_path: " << new_path;
new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), QDir::homePath()); qDebug() << "new_filename: " << new_filename;
} } else {
if (!new_path.isEmpty()) { if (!cur_save_path.isEmpty() && QDir(cur_save_path).exists())
const int existing_index = indexOfSavePath(new_path); new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), cur_save_path);
if (existing_index >= 0) else
ui->save_path_combo->setCurrentIndex(existing_index); new_path = QFileDialog::getExistingDirectory(this, tr("Choose save path"), QDir::homePath());
else { }
// New path, prepend to combo box if (!new_path.isEmpty()) {
if (!new_filename.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); ui->save_path_combo->insertItem(0, fsutils::toNativePath(QDir(new_path).absoluteFilePath(new_filename)), new_path);
else else
ui->save_path_combo->insertItem(0, fsutils::toNativePath(new_path), new_path); ui->save_path_combo->insertItem(0, fsutils::toNativePath(new_path), new_path);
ui->save_path_combo->setCurrentIndex(0); 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))); // 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);
} }
// Toggle default save path setting checkbox visibility connect(ui->save_path_combo, SIGNAL(currentIndexChanged(int)), SLOT(onSavePathChanged(int)));
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());
relayout();
// Remember index
old_index = ui->save_path_combo->currentIndex();
updateDiskSpaceLabel(); updateDiskSpaceLabel();
} }

2
src/addnewtorrentdialog.h

@ -69,6 +69,7 @@ private slots:
void renameSelectedFile(); void renameSelectedFile();
void setdialogPosition(); void setdialogPosition();
void updateMetadata(const QTorrentHandle& h); void updateMetadata(const QTorrentHandle& h);
void browseButton_clicked();
protected slots: protected slots:
virtual void accept(); virtual void accept();
@ -101,6 +102,7 @@ private:
bool m_hasRenamedFile; bool m_hasRenamedFile;
QShortcut *editHotkey; QShortcut *editHotkey;
QByteArray m_headerState; QByteArray m_headerState;
int m_oldIndex;
}; };
#endif // ADDNEWTORRENTDIALOG_H #endif // ADDNEWTORRENTDIALOG_H

33
src/addnewtorrentdialog.ui

@ -30,14 +30,31 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<widget class="QComboBox" name="save_path_combo"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="sizePolicy"> <item>
<sizepolicy hsizetype="Ignored" vsizetype="Fixed"> <widget class="QComboBox" name="save_path_combo">
<horstretch>0</horstretch> <property name="sizePolicy">
<verstretch>0</verstretch> <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
</sizepolicy> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
</widget> </sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browse_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Browse...</string>
</property>
</widget>
</item>
</layout>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="default_save_path_cb"> <widget class="QCheckBox" name="default_save_path_cb">

Loading…
Cancel
Save