121 lines
3.3 KiB
C++
121 lines
3.3 KiB
C++
/*
|
|
* This file Copyright (C) 2010-2014 Mnemosyne LLC
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include <QApplication>
|
|
#include <QDialogButtonBox>
|
|
#include <QDir>
|
|
#include <QFileIconProvider>
|
|
#include <QLabel>
|
|
#include <QPushButton>
|
|
#include <QRadioButton>
|
|
#include <QSet>
|
|
#include <QStyle>
|
|
#include <QVBoxLayout>
|
|
#include <QWidget>
|
|
|
|
#include "hig.h"
|
|
#include "relocate.h"
|
|
#include "session.h"
|
|
#include "torrent.h"
|
|
#include "torrent-model.h"
|
|
#include "utils.h"
|
|
|
|
bool RelocateDialog :: myMoveFlag = true;
|
|
|
|
void
|
|
RelocateDialog :: onSetLocation ()
|
|
{
|
|
mySession.torrentSetLocation (myIds, myPath, myMoveFlag);
|
|
deleteLater ();
|
|
}
|
|
|
|
void
|
|
RelocateDialog :: onFileSelected (const QString& path)
|
|
{
|
|
myPath = path;
|
|
myDirButton->setText (myPath);
|
|
}
|
|
|
|
void
|
|
RelocateDialog :: onDirButtonClicked ()
|
|
{
|
|
const QString title = tr ("Select Location");
|
|
const QString path = Utils::remoteFileChooser (this, title, myPath, true, mySession.isServer ());
|
|
|
|
if (!path.isEmpty ())
|
|
onFileSelected (path);
|
|
}
|
|
|
|
void
|
|
RelocateDialog :: onMoveToggled (bool b)
|
|
{
|
|
myMoveFlag = b;
|
|
}
|
|
|
|
RelocateDialog :: RelocateDialog (Session & session,
|
|
TorrentModel & model,
|
|
const QSet<int> & ids,
|
|
QWidget * parent):
|
|
QDialog (parent),
|
|
mySession (session),
|
|
myModel (model),
|
|
myIds (ids)
|
|
{
|
|
const int iconSize (style ()->pixelMetric (QStyle :: PM_SmallIconSize));
|
|
const QFileIconProvider iconProvider;
|
|
const QIcon folderIcon = iconProvider.icon (QFileIconProvider::Folder);
|
|
const QPixmap folderPixmap = folderIcon.pixmap (iconSize);
|
|
|
|
QRadioButton * find_rb;
|
|
setWindowTitle (tr ("Set Torrent Location"));
|
|
|
|
foreach (int id, myIds)
|
|
{
|
|
const Torrent * tor = myModel.getTorrentFromId (id);
|
|
|
|
if (myPath.isEmpty ())
|
|
{
|
|
myPath = tor->getPath ();
|
|
}
|
|
else if (myPath != tor->getPath ())
|
|
{
|
|
if (mySession.isServer ())
|
|
myPath = QDir::homePath ();
|
|
else
|
|
myPath = QDir::rootPath ();
|
|
}
|
|
}
|
|
|
|
HIG * hig = new HIG ();
|
|
hig->addSectionTitle (tr ("Set Location"));
|
|
hig->addRow (tr ("New &location:"), myDirButton = new QPushButton (folderPixmap, myPath));
|
|
hig->addWideControl (myMoveRadio = new QRadioButton (tr ("&Move from the current folder"), this));
|
|
hig->addWideControl (find_rb = new QRadioButton (tr ("Local data is &already there"), this));
|
|
hig->finish ();
|
|
|
|
if (myMoveFlag)
|
|
myMoveRadio->setChecked (true);
|
|
else
|
|
find_rb->setChecked (true);
|
|
|
|
connect (myMoveRadio, SIGNAL (toggled (bool)), this, SLOT (onMoveToggled (bool)));
|
|
connect (myDirButton, SIGNAL (clicked (bool)), this, SLOT (onDirButtonClicked ()));
|
|
|
|
QLayout * layout = new QVBoxLayout (this);
|
|
layout->addWidget (hig);
|
|
QDialogButtonBox * buttons = new QDialogButtonBox (QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
|
|
connect (buttons, SIGNAL (rejected ()), this, SLOT (deleteLater ()));
|
|
connect (buttons, SIGNAL (accepted ()), this, SLOT (onSetLocation ()));
|
|
layout->addWidget (buttons);
|
|
QWidget::setAttribute (Qt::WA_DeleteOnClose, true);
|
|
}
|