diff --git a/src/properties/properties.pri b/src/properties/properties.pri index dca4064b7..48736b0e1 100644 --- a/src/properties/properties.pri +++ b/src/properties/properties.pri @@ -2,8 +2,7 @@ INCLUDEPATH += $$PWD FORMS += $$PWD/propertieswidget.ui \ $$PWD/trackersadditiondlg.ui \ - $$PWD/peer.ui \ - $$PWD/trackereditdlg.ui + $$PWD/peer.ui HEADERS += $$PWD/propertieswidget.h \ $$PWD/peerlistwidget.h \ @@ -14,8 +13,7 @@ HEADERS += $$PWD/propertieswidget.h \ $$PWD/peeraddition.h \ $$PWD/trackersadditiondlg.h \ $$PWD/pieceavailabilitybar.h \ - $$PWD/proptabbar.h \ - $$PWD/trackereditdlg.h + $$PWD/proptabbar.h SOURCES += $$PWD/propertieswidget.cpp \ $$PWD/peerlistwidget.cpp \ diff --git a/src/properties/trackereditdlg.h b/src/properties/trackereditdlg.h deleted file mode 100644 index 9e7ee8c88..000000000 --- a/src/properties/trackereditdlg.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Bittorrent Client using Qt4 and libtorrent. - * Copyright (C) 2006 Christophe Dumez - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * In addition, as a special exception, the copyright holders give permission to - * link this program with the OpenSSL project's "OpenSSL" library (or with - * modified versions of it that use the same license as the "OpenSSL" library), - * and distribute the linked executables. You must obey the GNU General Public - * License in all respects for all of the code used other than "OpenSSL". If you - * modify file(s), you may extend this exception to your version of the file(s), - * but you are not obligated to do so. If you do not wish to do so, delete this - * exception statement from your version. - * - * Contact : chris@qbittorrent.org - */ - -#ifndef TRACKEREDITDLG_H -#define TRACKEREDITDLG_H - -#include -#include -#include "ui_trackereditdlg.h" -#include "qtorrenthandle.h" -#include "misc.h" - -using namespace libtorrent; - -class TrackerEditDlg : public QDialog, private Ui::TrackerEditDlg { - Q_OBJECT - -private: - QTorrentHandle h; - QString m_tracker_URI; - -public: - TrackerEditDlg(QTorrentHandle h, QString tracker_URI, QWidget *parent=0) : QDialog(parent), h(h) { - setupUi(this); - this->m_tracker_URI = tracker_URI.trimmed(); - this->tracker_URI_edit->setText(m_tracker_URI); - connect(this->button_OK,SIGNAL(clicked()),this,SLOT(TrackerEditDlg::on_button_OK_clicked())); - connect(this->button_Cancel,SIGNAL(clicked()),this,SLOT(TrackerEditDlg::on_button_Cancel_clicked())); - } - - ~TrackerEditDlg() {} - -public slots: - void on_button_OK_clicked() { - if (replaceTracker()) - emit TrackerEditDlg::accept(); - else - emit TrackerEditDlg::reject(); - } - - void on_button_Cancel_clicked() { - emit TrackerEditDlg::reject(); - } - -private: - bool replaceTracker() { - if (!h.is_valid()) return false; - - QString new_URI = this->tracker_URI_edit->text().trimmed(); - if (new_URI.isEmpty() - || new_URI == this->m_tracker_URI) return false; - - std::vector trackers = h.trackers(); - if (trackers.empty()) return false; - - std::vector new_trackers; - - std::vector::iterator it = trackers.begin(); - std::vector::iterator itend = trackers.end(); - bool match = false; - - for ( ; it != itend; ++it) { - if (new_URI == misc::toQString((*it).url)) - return false; // Tracker already exists; silently ignoring - - announce_entry URI(*it); - - if (this->m_tracker_URI == misc::toQString((*it).url) && !match) { - announce_entry temp_URI(new_URI.toStdString()); - URI = temp_URI; - URI.tier = (*it).tier; - match = true; - } - - new_trackers.push_back(URI); - } - if (match == false) return false; // Found no tracker to replace - - h.replace_trackers(new_trackers); - return true; - } - -public: - static bool editSelectedTracker(QTorrentHandle h, QString tracker_URI) { - TrackerEditDlg dlg(h,tracker_URI); - if (dlg.exec() != QDialog::Accepted) { - return false; - } - return true; - } - -}; - -#endif diff --git a/src/properties/trackereditdlg.ui b/src/properties/trackereditdlg.ui deleted file mode 100644 index 2745f533e..000000000 --- a/src/properties/trackereditdlg.ui +++ /dev/null @@ -1,62 +0,0 @@ - - - TrackerEditDlg - - - - 0 - 0 - 370 - 88 - - - - Edit Tracker Dialog - - - - - - Tracker URI: - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - - - - - diff --git a/src/properties/trackerlist.cpp b/src/properties/trackerlist.cpp index 4435adf78..1bd0c8950 100644 --- a/src/properties/trackerlist.cpp +++ b/src/properties/trackerlist.cpp @@ -35,12 +35,13 @@ #include #include #include +#include +#include #include #include #include "trackerlist.h" #include "propertieswidget.h" #include "trackersadditiondlg.h" -#include "trackereditdlg.h" #include "iconprovider.h" #include "qbtsession.h" #include "qinisettings.h" @@ -346,15 +347,57 @@ void TrackerList::deleteSelectedTrackers() { void TrackerList::editSelectedTracker() { QTorrentHandle h = properties->getCurrentTorrent(); - if (!h.is_valid()) return; + if (!h.is_valid()) + return; QList selected_items = getSelectedTrackerItems(); if (selected_items.isEmpty()) return; // During multi-select only process item selected last - QString tracker_URI = selected_items.last()->data(COL_URL, Qt::DisplayRole).toString(); - if (!TrackerEditDlg::editSelectedTracker(h,tracker_URI)) + QUrl tracker_url = selected_items.last()->text(COL_URL); + + QInputDialog editDlg(this); + editDlg.setInputMode(QInputDialog::TextInput); + editDlg.setLabelText(tr("Tracker URL:")); + editDlg.setWindowTitle(tr("Edit Tracker Dialog")); + editDlg.setTextValue(tracker_url.toString()); + QSize dlgSize = editDlg.size(); + dlgSize.setWidth(350); + editDlg.resize(dlgSize); + + bool dlgResult = editDlg.exec(); + if(!dlgResult) + return; + + if (!h.is_valid()) + return; + + QUrl new_tracker_url = editDlg.textValue().trimmed(); + if (new_tracker_url.isEmpty() || !new_tracker_url.isValid() || new_tracker_url == tracker_url) + return; + + std::vector trackers = h.trackers(); + if (trackers.empty()) return; + std::vector::iterator it = trackers.begin(); + std::vector::iterator itend = trackers.end(); + bool match = false; + + for ( ; it != itend; ++it) { + if (new_tracker_url == QUrl(misc::toQString(it->url))) + return; // Tracker already exists; silently ignoring + + if (tracker_url == QUrl(misc::toQString(it->url)) && !match) { + announce_entry temp_URI(new_tracker_url.toString().toStdString()); + temp_URI.tier = it->tier; + match = true; + *it = temp_URI; + } + } + if (!match) + return; // Found no tracker to replace + + h.replace_trackers(trackers); h.force_reannounce(); loadTrackers(); } @@ -366,12 +409,13 @@ void TrackerList::showTrackerListMenu(QPoint) { QMenu menu; // Add actions QAction *addAct = menu.addAction(IconProvider::instance()->getIcon("list-add"), tr("Add a new tracker...")); - QAction *copyAct = menu.addAction(IconProvider::instance()->getIcon("edit-copy"), tr("Copy tracker url")); + QAction *copyAct = 0; QAction *delAct = 0; QAction *editAct = 0; if (!getSelectedTrackerItems().isEmpty()) { delAct = menu.addAction(IconProvider::instance()->getIcon("list-remove"), tr("Remove tracker")); - editAct = menu.addAction(IconProvider::instance()->getIcon("edit-rename"),tr("Edit selected tracker URI")); + copyAct = menu.addAction(IconProvider::instance()->getIcon("edit-copy"), tr("Copy tracker url")); + editAct = menu.addAction(IconProvider::instance()->getIcon("edit-rename"),tr("Edit selected tracker URL")); } QAction *act = menu.exec(QCursor::pos()); if (act == 0) return;