|
|
@ -28,6 +28,8 @@ |
|
|
|
* Contact : chris@qbittorrent.org |
|
|
|
* Contact : chris@qbittorrent.org |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "propertieswidget.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <QDebug> |
|
|
|
#include <QDebug> |
|
|
|
#include <QTimer> |
|
|
|
#include <QTimer> |
|
|
|
#include <QListWidgetItem> |
|
|
|
#include <QListWidgetItem> |
|
|
@ -61,10 +63,10 @@ |
|
|
|
#include "lineedit.h" |
|
|
|
#include "lineedit.h" |
|
|
|
#include "transferlistwidget.h" |
|
|
|
#include "transferlistwidget.h" |
|
|
|
#include "autoexpandabledialog.h" |
|
|
|
#include "autoexpandabledialog.h" |
|
|
|
#include "propertieswidget.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow* main_window, TransferListWidget *transferList): |
|
|
|
PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow *main_window, TransferListWidget *transferList) |
|
|
|
QWidget(parent), transferList(transferList), main_window(main_window), m_torrent(0) { |
|
|
|
: QWidget(parent), transferList(transferList), main_window(main_window), m_torrent(0) |
|
|
|
|
|
|
|
{ |
|
|
|
setupUi(this); |
|
|
|
setupUi(this); |
|
|
|
setAutoFillBackground(true); |
|
|
|
setAutoFillBackground(true); |
|
|
|
|
|
|
|
|
|
|
@ -168,7 +170,8 @@ PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow* main_window, Tra |
|
|
|
connect(openHotkeyFile, SIGNAL(activated()), SLOT(openSelectedFile())); |
|
|
|
connect(openHotkeyFile, SIGNAL(activated()), SLOT(openSelectedFile())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PropertiesWidget::~PropertiesWidget() { |
|
|
|
PropertiesWidget::~PropertiesWidget() |
|
|
|
|
|
|
|
{ |
|
|
|
qDebug() << Q_FUNC_INFO << "ENTER"; |
|
|
|
qDebug() << Q_FUNC_INFO << "ENTER"; |
|
|
|
delete refreshTimer; |
|
|
|
delete refreshTimer; |
|
|
|
delete trackerList; |
|
|
|
delete trackerList; |
|
|
@ -186,7 +189,8 @@ PropertiesWidget::~PropertiesWidget() { |
|
|
|
qDebug() << Q_FUNC_INFO << "EXIT"; |
|
|
|
qDebug() << Q_FUNC_INFO << "EXIT"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::showPiecesAvailability(bool show) { |
|
|
|
void PropertiesWidget::showPiecesAvailability(bool show) |
|
|
|
|
|
|
|
{ |
|
|
|
avail_pieces_lbl->setVisible(show); |
|
|
|
avail_pieces_lbl->setVisible(show); |
|
|
|
pieces_availability->setVisible(show); |
|
|
|
pieces_availability->setVisible(show); |
|
|
|
avail_average_lbl->setVisible(show); |
|
|
|
avail_average_lbl->setVisible(show); |
|
|
@ -194,7 +198,8 @@ void PropertiesWidget::showPiecesAvailability(bool show) { |
|
|
|
line_2->setVisible(show); |
|
|
|
line_2->setVisible(show); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::showPiecesDownloaded(bool show) { |
|
|
|
void PropertiesWidget::showPiecesDownloaded(bool show) |
|
|
|
|
|
|
|
{ |
|
|
|
downloaded_pieces_lbl->setVisible(show); |
|
|
|
downloaded_pieces_lbl->setVisible(show); |
|
|
|
downloaded_pieces->setVisible(show); |
|
|
|
downloaded_pieces->setVisible(show); |
|
|
|
progress_lbl->setVisible(show); |
|
|
|
progress_lbl->setVisible(show); |
|
|
@ -202,8 +207,9 @@ void PropertiesWidget::showPiecesDownloaded(bool show) { |
|
|
|
line_2->setVisible(show); |
|
|
|
line_2->setVisible(show); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::setVisibility(bool visible) { |
|
|
|
void PropertiesWidget::setVisibility(bool visible) |
|
|
|
if (!visible && state == VISIBLE) { |
|
|
|
{ |
|
|
|
|
|
|
|
if (!visible && ( state == VISIBLE) ) { |
|
|
|
QSplitter *hSplitter = static_cast<QSplitter *>(parentWidget()); |
|
|
|
QSplitter *hSplitter = static_cast<QSplitter *>(parentWidget()); |
|
|
|
stackedProperties->setVisible(false); |
|
|
|
stackedProperties->setVisible(false); |
|
|
|
slideSizes = hSplitter->sizes(); |
|
|
|
slideSizes = hSplitter->sizes(); |
|
|
@ -215,7 +221,7 @@ void PropertiesWidget::setVisibility(bool visible) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (visible && state == REDUCED) { |
|
|
|
if (visible && ( state == REDUCED) ) { |
|
|
|
stackedProperties->setVisible(true); |
|
|
|
stackedProperties->setVisible(true); |
|
|
|
QSplitter *hSplitter = static_cast<QSplitter *>(parentWidget()); |
|
|
|
QSplitter *hSplitter = static_cast<QSplitter *>(parentWidget()); |
|
|
|
hSplitter->handle(1)->setDisabled(false); |
|
|
|
hSplitter->handle(1)->setDisabled(false); |
|
|
@ -227,7 +233,8 @@ void PropertiesWidget::setVisibility(bool visible) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::clear() { |
|
|
|
void PropertiesWidget::clear() |
|
|
|
|
|
|
|
{ |
|
|
|
qDebug("Clearing torrent properties"); |
|
|
|
qDebug("Clearing torrent properties"); |
|
|
|
save_path->clear(); |
|
|
|
save_path->clear(); |
|
|
|
lbl_creationDate->clear(); |
|
|
|
lbl_creationDate->clear(); |
|
|
@ -271,10 +278,9 @@ BitTorrent::TorrentHandle *PropertiesWidget::getCurrentTorrent() const |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::updateSavePath(BitTorrent::TorrentHandle *const torrent) |
|
|
|
void PropertiesWidget::updateSavePath(BitTorrent::TorrentHandle *const torrent) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (m_torrent == torrent) { |
|
|
|
if (m_torrent == torrent) |
|
|
|
save_path->setText(Utils::Fs::toNativePath(m_torrent->savePath())); |
|
|
|
save_path->setText(Utils::Fs::toNativePath(m_torrent->savePath())); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::loadTrackers(BitTorrent::TorrentHandle *const torrent) |
|
|
|
void PropertiesWidget::loadTrackers(BitTorrent::TorrentHandle *const torrent) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -324,7 +330,8 @@ void PropertiesWidget::loadTorrentInfos(BitTorrent::TorrentHandle *const torrent |
|
|
|
loadDynamicData(); |
|
|
|
loadDynamicData(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::readSettings() { |
|
|
|
void PropertiesWidget::readSettings() |
|
|
|
|
|
|
|
{ |
|
|
|
const Preferences *const pref = Preferences::instance(); |
|
|
|
const Preferences *const pref = Preferences::instance(); |
|
|
|
// Restore splitter sizes
|
|
|
|
// Restore splitter sizes
|
|
|
|
QStringList sizes_str = pref->getPropSplitterSizes().split(","); |
|
|
|
QStringList sizes_str = pref->getPropSplitterSizes().split(","); |
|
|
@ -337,16 +344,15 @@ void PropertiesWidget::readSettings() { |
|
|
|
const int current_tab = pref->getPropCurTab(); |
|
|
|
const int current_tab = pref->getPropCurTab(); |
|
|
|
const bool visible = pref->getPropVisible(); |
|
|
|
const bool visible = pref->getPropVisible(); |
|
|
|
// the following will call saveSettings but shouldn't change any state
|
|
|
|
// the following will call saveSettings but shouldn't change any state
|
|
|
|
if (!filesList->header()->restoreState(pref->getPropFileListState())) { |
|
|
|
if (!filesList->header()->restoreState(pref->getPropFileListState())) |
|
|
|
filesList->header()->resizeSection(0, 400); // Default
|
|
|
|
filesList->header()->resizeSection(0, 400); // Default
|
|
|
|
} |
|
|
|
|
|
|
|
m_tabBar->setCurrentIndex(current_tab); |
|
|
|
m_tabBar->setCurrentIndex(current_tab); |
|
|
|
if (!visible) { |
|
|
|
if (!visible) |
|
|
|
setVisibility(false); |
|
|
|
setVisibility(false); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::saveSettings() { |
|
|
|
void PropertiesWidget::saveSettings() |
|
|
|
|
|
|
|
{ |
|
|
|
Preferences *const pref = Preferences::instance(); |
|
|
|
Preferences *const pref = Preferences::instance(); |
|
|
|
pref->setPropVisible(state==VISIBLE); |
|
|
|
pref->setPropVisible(state==VISIBLE); |
|
|
|
// Splitter sizes
|
|
|
|
// Splitter sizes
|
|
|
@ -357,21 +363,22 @@ void PropertiesWidget::saveSettings() { |
|
|
|
else |
|
|
|
else |
|
|
|
sizes = slideSizes; |
|
|
|
sizes = slideSizes; |
|
|
|
qDebug("Sizes: %d", sizes.size()); |
|
|
|
qDebug("Sizes: %d", sizes.size()); |
|
|
|
if (sizes.size() == 2) { |
|
|
|
if (sizes.size() == 2) |
|
|
|
pref->setPropSplitterSizes(QString::number(sizes.first()) + ',' + QString::number(sizes.last())); |
|
|
|
pref->setPropSplitterSizes(QString::number(sizes.first()) + ',' + QString::number(sizes.last())); |
|
|
|
} |
|
|
|
|
|
|
|
pref->setPropFileListState(filesList->header()->saveState()); |
|
|
|
pref->setPropFileListState(filesList->header()->saveState()); |
|
|
|
// Remember current tab
|
|
|
|
// Remember current tab
|
|
|
|
pref->setPropCurTab(m_tabBar->currentIndex()); |
|
|
|
pref->setPropCurTab(m_tabBar->currentIndex()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::reloadPreferences() { |
|
|
|
void PropertiesWidget::reloadPreferences() |
|
|
|
|
|
|
|
{ |
|
|
|
// Take program preferences into consideration
|
|
|
|
// Take program preferences into consideration
|
|
|
|
peersList->updatePeerHostNameResolutionState(); |
|
|
|
peersList->updatePeerHostNameResolutionState(); |
|
|
|
peersList->updatePeerCountryResolutionState(); |
|
|
|
peersList->updatePeerCountryResolutionState(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::loadDynamicData() { |
|
|
|
void PropertiesWidget::loadDynamicData() |
|
|
|
|
|
|
|
{ |
|
|
|
// Refresh only if the torrent handle is valid and if visible
|
|
|
|
// Refresh only if the torrent handle is valid and if visible
|
|
|
|
if (!m_torrent || (main_window->currentTabWidget() != transferList) || (state != VISIBLE)) return; |
|
|
|
if (!m_torrent || (main_window->currentTabWidget() != transferList) || (state != VISIBLE)) return; |
|
|
|
|
|
|
|
|
|
|
@ -490,7 +497,8 @@ void PropertiesWidget::loadDynamicData() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::loadUrlSeeds() { |
|
|
|
void PropertiesWidget::loadUrlSeeds() |
|
|
|
|
|
|
|
{ |
|
|
|
listWebSeeds->clear(); |
|
|
|
listWebSeeds->clear(); |
|
|
|
qDebug("Loading URL seeds"); |
|
|
|
qDebug("Loading URL seeds"); |
|
|
|
const QList<QUrl> hc_seeds = m_torrent->urlSeeds(); |
|
|
|
const QList<QUrl> hc_seeds = m_torrent->urlSeeds(); |
|
|
@ -501,7 +509,8 @@ void PropertiesWidget::loadUrlSeeds() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::openDoubleClickedFile(const QModelIndex &index) { |
|
|
|
void PropertiesWidget::openDoubleClickedFile(const QModelIndex &index) |
|
|
|
|
|
|
|
{ |
|
|
|
if (!index.isValid()) return; |
|
|
|
if (!index.isValid()) return; |
|
|
|
if (!m_torrent || !m_torrent->hasMetadata()) return; |
|
|
|
if (!m_torrent || !m_torrent->hasMetadata()) return; |
|
|
|
if (PropListModel->itemType(index) == TorrentContentModelItem::FileType) |
|
|
|
if (PropListModel->itemType(index) == TorrentContentModelItem::FileType) |
|
|
@ -510,7 +519,8 @@ void PropertiesWidget::openDoubleClickedFile(const QModelIndex &index) { |
|
|
|
openFolder(index, false); |
|
|
|
openFolder(index, false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::openFile(const QModelIndex &index) { |
|
|
|
void PropertiesWidget::openFile(const QModelIndex &index) |
|
|
|
|
|
|
|
{ |
|
|
|
int i = PropListModel->getFileIndex(index); |
|
|
|
int i = PropListModel->getFileIndex(index); |
|
|
|
const QDir saveDir(m_torrent->savePath(true)); |
|
|
|
const QDir saveDir(m_torrent->savePath(true)); |
|
|
|
const QString filename = m_torrent->filePath(i); |
|
|
|
const QString filename = m_torrent->filePath(i); |
|
|
@ -521,7 +531,8 @@ void PropertiesWidget::openFile(const QModelIndex &index) { |
|
|
|
Utils::Misc::openPath(file_path); |
|
|
|
Utils::Misc::openPath(file_path); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::openFolder(const QModelIndex &index, bool containing_folder) { |
|
|
|
void PropertiesWidget::openFolder(const QModelIndex &index, bool containing_folder) |
|
|
|
|
|
|
|
{ |
|
|
|
QString absolute_path; |
|
|
|
QString absolute_path; |
|
|
|
// FOLDER
|
|
|
|
// FOLDER
|
|
|
|
if (PropListModel->itemType(index) == TorrentContentModelItem::FolderType) { |
|
|
|
if (PropListModel->itemType(index) == TorrentContentModelItem::FolderType) { |
|
|
@ -554,7 +565,8 @@ void PropertiesWidget::openFolder(const QModelIndex &index, bool containing_fold |
|
|
|
Utils::Misc::openPath(absolute_path); |
|
|
|
Utils::Misc::openPath(absolute_path); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::displayFilesListMenu(const QPoint&) { |
|
|
|
void PropertiesWidget::displayFilesListMenu(const QPoint &) |
|
|
|
|
|
|
|
{ |
|
|
|
if (!m_torrent) return; |
|
|
|
if (!m_torrent) return; |
|
|
|
|
|
|
|
|
|
|
|
QModelIndexList selectedRows = filesList->selectionModel()->selectedRows(0); |
|
|
|
QModelIndexList selectedRows = filesList->selectionModel()->selectedRows(0); |
|
|
@ -587,12 +599,15 @@ void PropertiesWidget::displayFilesListMenu(const QPoint&) { |
|
|
|
if (!index.isValid()) |
|
|
|
if (!index.isValid()) |
|
|
|
return; |
|
|
|
return; |
|
|
|
if (act) { |
|
|
|
if (act) { |
|
|
|
if (act == actOpen) |
|
|
|
if (act == actOpen) { |
|
|
|
openDoubleClickedFile(index); |
|
|
|
openDoubleClickedFile(index); |
|
|
|
else if (act == actOpenContainingFolder) |
|
|
|
} |
|
|
|
|
|
|
|
else if (act == actOpenContainingFolder) { |
|
|
|
openFolder(index, true); |
|
|
|
openFolder(index, true); |
|
|
|
else if (act == actRename) |
|
|
|
} |
|
|
|
|
|
|
|
else if (act == actRename) { |
|
|
|
renameSelectedFile(); |
|
|
|
renameSelectedFile(); |
|
|
|
|
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
int prio = prio::NORMAL; |
|
|
|
int prio = prio::NORMAL; |
|
|
|
if (act == actionHigh) |
|
|
|
if (act == actionHigh) |
|
|
@ -613,7 +628,8 @@ void PropertiesWidget::displayFilesListMenu(const QPoint&) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::displayWebSeedListMenu(const QPoint&) { |
|
|
|
void PropertiesWidget::displayWebSeedListMenu(const QPoint &) |
|
|
|
|
|
|
|
{ |
|
|
|
if (!m_torrent) return; |
|
|
|
if (!m_torrent) return; |
|
|
|
|
|
|
|
|
|
|
|
QMenu seedMenu; |
|
|
|
QMenu seedMenu; |
|
|
@ -643,7 +659,8 @@ void PropertiesWidget::displayWebSeedListMenu(const QPoint&) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::renameSelectedFile() { |
|
|
|
void PropertiesWidget::renameSelectedFile() |
|
|
|
|
|
|
|
{ |
|
|
|
const QModelIndexList selectedIndexes = filesList->selectionModel()->selectedRows(0); |
|
|
|
const QModelIndexList selectedIndexes = filesList->selectionModel()->selectedRows(0); |
|
|
|
if (selectedIndexes.size() != 1) |
|
|
|
if (selectedIndexes.size() != 1) |
|
|
|
return; |
|
|
|
return; |
|
|
@ -667,9 +684,8 @@ void PropertiesWidget::renameSelectedFile() { |
|
|
|
const int file_index = PropListModel->getFileIndex(index); |
|
|
|
const int file_index = PropListModel->getFileIndex(index); |
|
|
|
if (!m_torrent || !m_torrent->hasMetadata()) return; |
|
|
|
if (!m_torrent || !m_torrent->hasMetadata()) return; |
|
|
|
QString old_name = m_torrent->filePath(file_index); |
|
|
|
QString old_name = m_torrent->filePath(file_index); |
|
|
|
if (old_name.endsWith(".!qB") && !new_name_last.endsWith(".!qB")) { |
|
|
|
if (old_name.endsWith(".!qB") && !new_name_last.endsWith(".!qB")) |
|
|
|
new_name_last += ".!qB"; |
|
|
|
new_name_last += ".!qB"; |
|
|
|
} |
|
|
|
|
|
|
|
QStringList path_items = old_name.split("/"); |
|
|
|
QStringList path_items = old_name.split("/"); |
|
|
|
path_items.removeLast(); |
|
|
|
path_items.removeLast(); |
|
|
|
path_items << new_name_last; |
|
|
|
path_items << new_name_last; |
|
|
@ -763,14 +779,16 @@ void PropertiesWidget::renameSelectedFile() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::openSelectedFile() { |
|
|
|
void PropertiesWidget::openSelectedFile() |
|
|
|
|
|
|
|
{ |
|
|
|
const QModelIndexList selectedIndexes = filesList->selectionModel()->selectedRows(0); |
|
|
|
const QModelIndexList selectedIndexes = filesList->selectionModel()->selectedRows(0); |
|
|
|
if (selectedIndexes.size() != 1) |
|
|
|
if (selectedIndexes.size() != 1) |
|
|
|
return; |
|
|
|
return; |
|
|
|
openDoubleClickedFile(selectedIndexes.first()); |
|
|
|
openDoubleClickedFile(selectedIndexes.first()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::askWebSeed() { |
|
|
|
void PropertiesWidget::askWebSeed() |
|
|
|
|
|
|
|
{ |
|
|
|
bool ok; |
|
|
|
bool ok; |
|
|
|
// Ask user for a new url seed
|
|
|
|
// Ask user for a new url seed
|
|
|
|
const QString url_seed = AutoExpandableDialog::getText(this, tr("New URL seed", "New HTTP source"), |
|
|
|
const QString url_seed = AutoExpandableDialog::getText(this, tr("New URL seed", "New HTTP source"), |
|
|
@ -790,7 +808,8 @@ void PropertiesWidget::askWebSeed() { |
|
|
|
loadUrlSeeds(); |
|
|
|
loadUrlSeeds(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::deleteSelectedUrlSeeds() { |
|
|
|
void PropertiesWidget::deleteSelectedUrlSeeds() |
|
|
|
|
|
|
|
{ |
|
|
|
const QList<QListWidgetItem *> selectedItems = listWebSeeds->selectedItems(); |
|
|
|
const QList<QListWidgetItem *> selectedItems = listWebSeeds->selectedItems(); |
|
|
|
if (selectedItems.isEmpty()) return; |
|
|
|
if (selectedItems.isEmpty()) return; |
|
|
|
|
|
|
|
|
|
|
@ -803,7 +822,8 @@ void PropertiesWidget::deleteSelectedUrlSeeds() { |
|
|
|
loadUrlSeeds(); |
|
|
|
loadUrlSeeds(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::copySelectedWebSeedsToClipboard() const { |
|
|
|
void PropertiesWidget::copySelectedWebSeedsToClipboard() const |
|
|
|
|
|
|
|
{ |
|
|
|
const QList<QListWidgetItem *> selected_items = listWebSeeds->selectedItems(); |
|
|
|
const QList<QListWidgetItem *> selected_items = listWebSeeds->selectedItems(); |
|
|
|
if (selected_items.isEmpty()) |
|
|
|
if (selected_items.isEmpty()) |
|
|
|
return; |
|
|
|
return; |
|
|
@ -815,7 +835,8 @@ void PropertiesWidget::copySelectedWebSeedsToClipboard() const { |
|
|
|
QApplication::clipboard()->setText(urls_to_copy.join("\n")); |
|
|
|
QApplication::clipboard()->setText(urls_to_copy.join("\n")); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::editWebSeed() { |
|
|
|
void PropertiesWidget::editWebSeed() |
|
|
|
|
|
|
|
{ |
|
|
|
const QList<QListWidgetItem *> selected_items = listWebSeeds->selectedItems(); |
|
|
|
const QList<QListWidgetItem *> selected_items = listWebSeeds->selectedItems(); |
|
|
|
if (selected_items.size() != 1) |
|
|
|
if (selected_items.size() != 1) |
|
|
|
return; |
|
|
|
return; |
|
|
@ -841,7 +862,8 @@ void PropertiesWidget::editWebSeed() { |
|
|
|
loadUrlSeeds(); |
|
|
|
loadUrlSeeds(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool PropertiesWidget::applyPriorities() { |
|
|
|
bool PropertiesWidget::applyPriorities() |
|
|
|
|
|
|
|
{ |
|
|
|
qDebug("Saving files priorities"); |
|
|
|
qDebug("Saving files priorities"); |
|
|
|
const QVector<int> priorities = PropListModel->model()->getFilePriorities(); |
|
|
|
const QVector<int> priorities = PropListModel->model()->getFilePriorities(); |
|
|
|
// Prioritize the files
|
|
|
|
// Prioritize the files
|
|
|
@ -850,17 +872,20 @@ bool PropertiesWidget::applyPriorities() { |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::filteredFilesChanged() { |
|
|
|
void PropertiesWidget::filteredFilesChanged() |
|
|
|
|
|
|
|
{ |
|
|
|
if (m_torrent) |
|
|
|
if (m_torrent) |
|
|
|
applyPriorities(); |
|
|
|
applyPriorities(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PropertiesWidget::filterText(const QString& filter) { |
|
|
|
void PropertiesWidget::filterText(const QString &filter) |
|
|
|
|
|
|
|
{ |
|
|
|
PropListModel->setFilterRegExp(QRegExp(filter, Qt::CaseInsensitive, QRegExp::WildcardUnix)); |
|
|
|
PropListModel->setFilterRegExp(QRegExp(filter, Qt::CaseInsensitive, QRegExp::WildcardUnix)); |
|
|
|
if (filter.isEmpty()) { |
|
|
|
if (filter.isEmpty()) { |
|
|
|
filesList->collapseAll(); |
|
|
|
filesList->collapseAll(); |
|
|
|
filesList->expand(PropListModel->index(0, 0)); |
|
|
|
filesList->expand(PropListModel->index(0, 0)); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else { |
|
|
|
filesList->expandAll(); |
|
|
|
filesList->expandAll(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|