1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-03-04 02:28:03 +00:00

(qt) merge together the two 'add url/magnet link' dialogs.

This commit is contained in:
Jordan Lee 2013-02-09 23:11:17 +00:00
parent 2942f85740
commit dbb742f667
5 changed files with 93 additions and 81 deletions

View file

@ -442,14 +442,6 @@ MyApp :: addTorrent (const AddData& addme)
{
mySession->addTorrent (addme);
}
else if (addme.type == addme.URL)
{
myWindow->openURL (addme.url.toString ());
}
else if (addme.type == addme.MAGNET)
{
myWindow->openURL (addme.magnet);
}
else
{
Options * o = new Options (*mySession, *myPrefs, addme, myWindow);

View file

@ -1189,22 +1189,7 @@ TrMainWindow :: openURL ()
if (!AddData::isSupported (str))
str.clear ();
openURL (str);
}
void
TrMainWindow :: openURL (QString url)
{
bool ok;
const QString key = QInputDialog::getText (this,
tr ("Open Link"),
tr ("Open URL or Magnet Link"),
QLineEdit::Normal,
url,
&ok,
Qt::WindowStaysOnTopHint);
if (ok && !key.isEmpty ())
mySession.addTorrent (key);
addTorrent (str);
}
void
@ -1215,18 +1200,25 @@ TrMainWindow :: addTorrents (const QStringList& filenames)
}
void
TrMainWindow :: addTorrent (const QString& filename)
TrMainWindow :: addTorrent (const AddData& addMe)
{
if (!myFileDialogOptionsCheck->isChecked ())
bool show_options_dialog;
if (myFileDialogOptionsCheck)
show_options_dialog = myFileDialogOptionsCheck->isChecked ();
else
show_options_dialog = myPrefs.getBool (Prefs::OPTIONS_PROMPT);
if (show_options_dialog)
{
mySession.addTorrent (filename);
QApplication :: alert (this);
Options * o = new Options (mySession, myPrefs, addMe, this);
o->show ();
QApplication :: alert (o);
}
else
{
Options * o = new Options (mySession, myPrefs, filename, this);
o->show ();
QApplication :: alert (o);
mySession.addTorrent (addMe);
QApplication :: alert (this);
}
}

View file

@ -33,6 +33,7 @@ extern "C" {
#include "torrent-filter.h"
#include "ui_mainwin.h"
class AddData;
class ActionDelegator;
class Prefs;
class Details;
@ -93,9 +94,6 @@ class TrMainWindow: public QMainWindow
void updateNetworkIcon ();
QWidgetList myHidden;
public slots:
void openURL (QString);
private slots:
void onPrefsDestroyed ();
void openPreferences ();
@ -173,7 +171,7 @@ class TrMainWindow: public QMainWindow
void queueMoveDown ();
void queueMoveBottom ();
void reannounceSelected ();
void addTorrent (const QString& filename);
void addTorrent (const AddData& addMe);
void onNetworkTimer ();
private:

View file

@ -86,17 +86,26 @@ Options :: Options (Session& session, const Prefs& prefs, const AddData& addme,
mySession (session),
myAdd (addme),
myHaveInfo (false),
mySourceButton (0),
mySourceEdit (0),
myDestinationButton (0),
myDestinationEdit (0),
myVerifyButton (0),
myVerifyFile (0),
myVerifyHash (QCryptographicHash::Sha1),
myEditTimer (this)
{
setWindowTitle (tr ("Open Torrent"));
QFontMetrics fontMetrics (font ());
QGridLayout * layout = new QGridLayout (this);
int row = 0;
QString title;
if (myAdd.type == AddData::FILENAME)
title = tr ("Open Torrent from File");
else
title = tr ("Open Torrent from URL or Magnet Link");
setWindowTitle (title);
myEditTimer.setInterval (2000);
myEditTimer.setSingleShot (true);
connect (&myEditTimer, SIGNAL (timeout ()), this, SLOT (onDestinationEditedIdle ()));
@ -105,23 +114,35 @@ Options :: Options (Session& session, const Prefs& prefs, const AddData& addme,
QIcon fileIcon = style ()->standardIcon (QStyle::SP_FileIcon);
const QPixmap filePixmap = fileIcon.pixmap (iconSize);
QPushButton * p;
int width = fontMetrics.size (0, QString::fromAscii ("This is a pretty long torrent filename indeed.torrent")).width ();
QLabel * l = new QLabel (tr ("&Torrent file:"));
QLabel * l = new QLabel (tr ("&Source:"));
layout->addWidget (l, row, 0, Qt::AlignLeft);
p = myFileButton = new QPushButton;
p->setIcon (filePixmap);
p->setMinimumWidth (width);
p->setStyleSheet (QString::fromAscii ("text-align: left; padding-left: 5; padding-right: 5"));
p->installEventFilter (this);
layout->addWidget (p, row, 1);
l->setBuddy (p);
connect (p, SIGNAL (clicked (bool)), this, SLOT (onFilenameClicked ()));
QWidget * w;
QPushButton * p;
const QFileIconProvider iconProvider;
const QIcon folderIcon = iconProvider.icon (QFileIconProvider::Folder);
const QPixmap folderPixmap = folderIcon.pixmap (iconSize);
if (myAdd.type == AddData::FILENAME)
{
p = mySourceButton = new QPushButton;
p->setIcon (filePixmap);
p->setStyleSheet (QString::fromAscii ("text-align: left; padding-left: 5; padding-right: 5"));
p->installEventFilter (this);
w = p;
connect (p, SIGNAL (clicked (bool)), this, SLOT (onFilenameClicked ()));
}
else
{
QLineEdit * e = mySourceEdit = new QLineEdit;
e->setText (myAdd.readableName());
e->setCursorPosition (0);
e->selectAll ();
w = e;
connect (e, SIGNAL(editingFinished()), this, SLOT(onSourceEditingFinished()));
}
const int width = fontMetrics.size (0, QString::fromAscii ("This is a pretty long torrent filename indeed.torrent")).width ();
w->setMinimumWidth (width);
layout->addWidget (w, row, 1);
l->setBuddy (w);
l = new QLabel (tr ("&Destination folder:"));
layout->addWidget (l, ++row, 0, Qt::AlignLeft);
@ -130,7 +151,11 @@ Options :: Options (Session& session, const Prefs& prefs, const AddData& addme,
if (session.isLocal ())
{
myDestination.setPath (downloadDir);
const QFileIconProvider iconProvider;
const QIcon folderIcon = iconProvider.icon (QFileIconProvider::Folder);
const QPixmap folderPixmap = folderIcon.pixmap (iconSize);
myLocalDestination.setPath (downloadDir);
p = myDestinationButton = new QPushButton;
p->setIcon (folderPixmap);
p->setStyleSheet ("text-align: left; padding-left: 5; padding-right: 5");
@ -163,7 +188,7 @@ Options :: Options (Session& session, const Prefs& prefs, const AddData& addme,
m->addItem (tr ("Low"), TR_PRI_LOW);
m->setCurrentIndex (1); // Normal
myPriorityCombo = m;
l = new QLabel (tr ("Torrent &priority:"));
l = new QLabel (tr ("&Priority:"));
l->setBuddy (m);
layout->addWidget (l, ++row, 0, Qt::AlignLeft);
layout->addWidget (m, row, 1);
@ -175,7 +200,7 @@ Options :: Options (Session& session, const Prefs& prefs, const AddData& addme,
}
QCheckBox * c;
c = myStartCheck = new QCheckBox (tr ("&Start when added"));
c = myStartCheck = new QCheckBox (tr ("S&tart when added"));
c->setChecked (prefs.getBool (Prefs :: START));
layout->addWidget (c, ++row, 0, 1, 2, Qt::AlignLeft);
@ -223,40 +248,35 @@ Options :: refreshButton (QPushButton * p, const QString& text, int width)
}
void
Options :: refreshFileButton (int width)
Options :: refreshSource (int width)
{
QString text;
QString text = myAdd.readableName ();
switch (myAdd.type)
{
case AddData::FILENAME: text = QFileInfo (myAdd.filename).completeBaseName (); break;
case AddData::URL: text = myAdd.url.toString (); break;
case AddData::MAGNET: text = myAdd.magnet; break;
default: break;
}
if (mySourceButton)
refreshButton (mySourceButton, text, width);
refreshButton (myFileButton, text, width);
if (mySourceEdit)
mySourceEdit->setText (text);
}
void
Options :: refreshDestinationButton (int width)
{
if (myDestinationButton != 0)
refreshButton (myDestinationButton, myDestination.absolutePath (), width);
refreshButton (myDestinationButton, myLocalDestination.absolutePath (), width);
}
bool
Options :: eventFilter (QObject * o, QEvent * event)
{
if (o==myFileButton && event->type () == QEvent::Resize)
if (event->type() == QEvent::Resize)
{
refreshFileButton (dynamic_cast<QResizeEvent*> (event)->size ().width ());
}
if (o == mySourceButton)
refreshSource (dynamic_cast<QResizeEvent*> (event)->size ().width ());
if (o==myDestinationButton && event->type () == QEvent::Resize)
{
refreshDestinationButton (dynamic_cast<QResizeEvent*> (event)->size ().width ());
else if (o == myDestinationButton)
refreshDestinationButton (dynamic_cast<QResizeEvent*> (event)->size ().width ());
}
return false;
@ -307,6 +327,7 @@ Options :: reload ()
tr_ctorFree (ctor);
myTree->clear ();
myTree->setVisible (myHaveInfo && (myInfo.fileCount>0));
myFiles.clear ();
myPriorities.clear ();
myWanted.clear ();
@ -361,9 +382,10 @@ Options :: onAccepted ()
// "download-dir"
if (myDestinationButton)
downloadDir = myDestination.absolutePath ();
downloadDir = myLocalDestination.absolutePath ();
else
downloadDir = myDestinationEdit->text ();
tr_variantDictAddStr (args, TR_KEY_download_dir, downloadDir.toUtf8 ().constData ());
// "metainfo"
@ -461,15 +483,21 @@ Options :: onFilesSelected (const QStringList& files)
if (files.size () == 1)
{
myAdd.set (files.at (0));
refreshFileButton ();
refreshSource ();
reload ();
}
}
void
Options :: onSourceEditingFinished ()
{
myAdd.set (mySourceEdit->text());
}
void
Options :: onDestinationClicked ()
{
QFileDialog * d = new QFileDialog (this, tr ("Select Destination"), myDestination.absolutePath ());
QFileDialog * d = new QFileDialog (this, tr ("Select Destination"), myLocalDestination.absolutePath ());
d->setFileMode (QFileDialog::Directory);
d->setAttribute (Qt::WA_DeleteOnClose);
connect (d, SIGNAL (filesSelected (const QStringList&)), this, SLOT (onDestinationsSelected (const QStringList&)));
@ -483,7 +511,7 @@ Options :: onDestinationsSelected (const QStringList& destinations)
{
const QString& destination (destinations.first ());
myFreespaceLabel->setPath (destination);
myDestination.setPath (destination);
myLocalDestination.setPath (destination);
refreshDestinationButton ();
}
}
@ -499,7 +527,7 @@ Options :: onDestinationEdited (const QString& text)
void
Options :: onDestinationEditedIdle ()
{
myFreespaceLabel->setPath (myDestinationEdit->text ());
myFreespaceLabel->setPath (myDestinationEdit->text());
}
/***
@ -552,7 +580,7 @@ Options :: onTimeout ()
if (!myVerifyFilePos && !myVerifyFile.isOpen ())
{
const QFileInfo fileInfo (myDestination, QString::fromUtf8 (file->name));
const QFileInfo fileInfo (myLocalDestination, QString::fromUtf8 (file->name));
myVerifyFile.setFileName (fileInfo.absoluteFilePath ());
myVerifyFile.open (QIODevice::ReadOnly);
}
@ -620,10 +648,10 @@ Options :: onTimeout ()
{
// did the user accidentally specify the child directory instead of the parent?
const QStringList tokens = QString (file->name).split ('/');
if (!tokens.empty () && myDestination.dirName ()==tokens.at (0))
if (!tokens.empty () && myLocalDestination.dirName ()==tokens.at (0))
{
// move up one directory and try again
myDestination.cdUp ();
myLocalDestination.cdUp ();
refreshDestinationButton (-1);
onVerify ();
done = false;

View file

@ -71,7 +71,7 @@ class Options: public QDialog
private:
void reload ();
void clearInfo ();
void refreshFileButton (int width=-1);
void refreshSource (int width=-1);
void refreshDestinationButton (int width=-1);
void refreshButton (QPushButton *, const QString&, int width=-1);
bool eventFilter (QObject *, QEvent *);
@ -85,6 +85,7 @@ class Options: public QDialog
void onFilenameClicked ();
void onDestinationClicked ();
void onFilesSelected (const QStringList&);
void onSourceEditingFinished ();
void onDestinationsSelected (const QStringList&);
void onDestinationEdited (const QString&);
void onDestinationEditedIdle ();
@ -92,7 +93,7 @@ class Options: public QDialog
private:
Session& mySession;
AddData myAdd;
QDir myDestination;
QDir myLocalDestination;
bool myHaveInfo;
tr_info myInfo;
FileTreeView * myTree;
@ -100,7 +101,8 @@ class Options: public QDialog
QCheckBox * myStartCheck;
QCheckBox * myTrashCheck;
QComboBox * myPriorityCombo;
QPushButton * myFileButton;
QPushButton * mySourceButton;
QLineEdit * mySourceEdit;
QPushButton * myDestinationButton;
QLineEdit * myDestinationEdit;
QPushButton * myVerifyButton;