diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index db123eca4..8b548586e 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -65,7 +65,7 @@ if (STACKTRACE)
else (UNIX)
target_sources(qBittorrent PRIVATE stacktrace_win.h)
if (Qt5Widgets_FOUND)
- target_sources(qBittorrent PRIVATE stacktracedialog.h)
+ target_sources(qBittorrent PRIVATE stacktracedialog.cpp stacktracedialog.h)
endif (Qt5Widgets_FOUND)
endif (UNIX)
endif (STACKTRACE)
diff --git a/src/app/app.pri b/src/app/app.pri
index 64287241c..14db0a17d 100644
--- a/src/app/app.pri
+++ b/src/app/app.pri
@@ -25,6 +25,7 @@ stacktrace {
HEADERS += $$PWD/stacktrace_win.h
!nogui {
HEADERS += $$PWD/stacktracedialog.h
+ SOURCES += $$PWD/stacktracedialog.cpp
FORMS += $$PWD/stacktracedialog.ui
}
}
diff --git a/src/app/stacktracedialog.cpp b/src/app/stacktracedialog.cpp
new file mode 100644
index 000000000..00be4a4db
--- /dev/null
+++ b/src/app/stacktracedialog.cpp
@@ -0,0 +1,84 @@
+/*
+ * Bittorrent Client using Qt and libtorrent.
+ * Copyright (C) 2015 The qBittorrent project
+ *
+ * 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.
+ *
+ */
+
+#include "stacktracedialog.h"
+
+#include
+
+#include "base/utils/misc.h"
+#include "ui_stacktracedialog.h"
+
+StacktraceDialog::StacktraceDialog(QWidget *parent)
+ : QDialog(parent)
+ , m_ui(new Ui::StacktraceDialog)
+{
+ m_ui->setupUi(this);
+}
+
+StacktraceDialog::~StacktraceDialog()
+{
+ delete m_ui;
+}
+
+void StacktraceDialog::setStacktraceString(const QString &sigName, const QString &trace)
+{
+ // try to call Qt function as less as possible
+ const QString htmlStr = QString(
+ ""
+ "qBittorrent has crashed"
+ "
"
+ ""
+ "Please file a bug report at "
+ "http://bugs.qbittorrent.org "
+ "and provide the following information:"
+ "
"
+ "
"
+ ""
+ "qBittorrent version: " QBT_VERSION " (%1-bit)
"
+ "Libtorrent version: %2
"
+ "Qt version: " QT_VERSION_STR "
"
+ "Boost version: %3
"
+ "OpenSSL version: %4
"
+ "zlib version: %5
"
+ "OS version: %6
"
+ "Caught signal: %7"
+ "
"
+ "%8
"
+ "
")
+ .arg(QString::number(QT_POINTER_SIZE * 8)
+ , Utils::Misc::libtorrentVersionString()
+ , Utils::Misc::boostVersionString()
+ , Utils::Misc::opensslVersionString()
+ , Utils::Misc::zlibVersionString()
+ , Utils::Misc::osName()
+ , sigName
+ , trace);
+
+ m_ui->errorText->setHtml(htmlStr);
+}
diff --git a/src/app/stacktracedialog.h b/src/app/stacktracedialog.h
index 96292093f..0a7f3db19 100644
--- a/src/app/stacktracedialog.h
+++ b/src/app/stacktracedialog.h
@@ -31,64 +31,22 @@
#define STACKTRACEDIALOG_H
#include
-#include
-#include "base/utils/misc.h"
-#include "ui_stacktracedialog.h"
+namespace Ui
+{
+ class StacktraceDialog;
+}
class StacktraceDialog : public QDialog
{
Q_OBJECT
+ Q_DISABLE_COPY(StacktraceDialog)
public:
- StacktraceDialog(QWidget *parent = nullptr)
- : QDialog(parent)
- , m_ui(new Ui::StacktraceDialog)
- {
- m_ui->setupUi(this);
- }
-
- ~StacktraceDialog()
- {
- delete m_ui;
- }
-
- void setStacktraceString(const QString &sigName, const QString &trace)
- {
- // try to call Qt function as less as possible
- const QString htmlStr = QString(
- ""
- "qBittorrent has crashed"
- "
"
- ""
- "Please file a bug report at "
- "http://bugs.qbittorrent.org "
- "and provide the following information:"
- "
"
- "
"
- ""
- "qBittorrent version: " QBT_VERSION " (%1-bit)
"
- "Libtorrent version: %2
"
- "Qt version: " QT_VERSION_STR "
"
- "Boost version: %3
"
- "OpenSSL version: %4
"
- "zlib version: %5
"
- "OS version: %6
"
- "Caught signal: %7"
- "
"
- "%8
"
- "
")
- .arg(QString::number(QT_POINTER_SIZE * 8)
- , Utils::Misc::libtorrentVersionString()
- , Utils::Misc::boostVersionString()
- , Utils::Misc::opensslVersionString()
- , Utils::Misc::zlibVersionString()
- , Utils::Misc::osName()
- , sigName
- , trace);
+ explicit StacktraceDialog(QWidget *parent = nullptr);
+ ~StacktraceDialog() override;
- m_ui->errorText->setHtml(htmlStr);
- }
+ void setStacktraceString(const QString &sigName, const QString &trace);
private:
Ui::StacktraceDialog *m_ui;
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index e2b6d89d5..cea242ac6 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -64,6 +64,7 @@ updownratiodialog.h
utils.h
# sources
+aboutdialog.cpp
addnewtorrentdialog.cpp
advancedsettings.cpp
autoexpandabledialog.cpp
@@ -77,11 +78,13 @@ downloadfromurldialog.cpp
executionlogwidget.cpp
fspathedit.cpp
fspathedit_p.cpp
+hidabletabwidget.cpp
ipsubnetwhitelistoptionsdialog.cpp
lineedit.cpp
loglistwidget.cpp
mainwindow.cpp
optionsdialog.cpp
+previewlistdelegate.cpp
previewselectdialog.cpp
private/tristatewidget.cpp
raisedmessagebox.cpp
diff --git a/src/gui/aboutdialog.cpp b/src/gui/aboutdialog.cpp
new file mode 100644
index 000000000..5d1c3b7eb
--- /dev/null
+++ b/src/gui/aboutdialog.cpp
@@ -0,0 +1,105 @@
+/*
+ * Bittorrent Client using Qt 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.
+ */
+
+#include "aboutdialog.h"
+
+#include
+
+#include "base/unicodestrings.h"
+#include "base/utils/misc.h"
+#include "ui_aboutdialog.h"
+#include "utils.h"
+
+AboutDialog::AboutDialog(QWidget *parent)
+ : QDialog(parent)
+ , m_ui(new Ui::AboutDialog)
+{
+ m_ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ // Title
+ m_ui->labelName->setText(QString("qBittorrent " QBT_VERSION " (%1-bit)
").arg(QT_POINTER_SIZE * 8));
+
+ m_ui->logo->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/skin/qbittorrent-tray.svg", this, 32));
+
+ // About
+ QString aboutText = QString(
+ ""
+ "%1\n\n"
+ "%2\n\n"
+ "
"
+ "
")
+ .arg(tr("An advanced BitTorrent client programmed in C++, based on Qt toolkit and libtorrent-rasterbar.")
+ , tr("Copyright %1 2006-2019 The qBittorrent project").arg(QString::fromUtf8(C_COPYRIGHT))
+ , tr("Home Page:")
+ , tr("Forum:")
+ , tr("Bug Tracker:"));
+ m_ui->labelAbout->setText(aboutText);
+
+ m_ui->labelMascot->setPixmap(Utils::Gui::scaledPixmap(":/icons/skin/mascot.png", this));
+
+ // Thanks
+ QFile thanksfile(":/thanks.html");
+ if (thanksfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ m_ui->textBrowserThanks->setHtml(QString::fromUtf8(thanksfile.readAll().constData()));
+ thanksfile.close();
+ }
+
+ // Translation
+ QFile translatorsfile(":/translators.html");
+ if (translatorsfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ m_ui->textBrowserTranslation->setHtml(QString::fromUtf8(translatorsfile.readAll().constData()));
+ translatorsfile.close();
+ }
+
+ // License
+ QFile licensefile(":/gpl.html");
+ if (licensefile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ m_ui->textBrowserLicense->setHtml(QString::fromUtf8(licensefile.readAll().constData()));
+ licensefile.close();
+ }
+
+ // Libraries
+ m_ui->labelQtVer->setText(QT_VERSION_STR);
+ m_ui->labelLibtVer->setText(Utils::Misc::libtorrentVersionString());
+ m_ui->labelBoostVer->setText(Utils::Misc::boostVersionString());
+ m_ui->labelOpensslVer->setText(Utils::Misc::opensslVersionString());
+ m_ui->labelZlibVer->setText(Utils::Misc::zlibVersionString());
+
+ Utils::Gui::resize(this);
+ show();
+}
+
+AboutDialog::~AboutDialog()
+{
+ delete m_ui;
+}
diff --git a/src/gui/aboutdialog.h b/src/gui/aboutdialog.h
index a41bc9a02..7aef6920e 100644
--- a/src/gui/aboutdialog.h
+++ b/src/gui/aboutdialog.h
@@ -29,86 +29,21 @@
#ifndef ABOUTDIALOG_H
#define ABOUTDIALOG_H
-#include
+#include
-#include "base/unicodestrings.h"
-#include "base/utils/misc.h"
-#include "ui_aboutdialog.h"
-#include "utils.h"
+namespace Ui
+{
+ class AboutDialog;
+}
class AboutDialog : public QDialog
{
Q_OBJECT
+ Q_DISABLE_COPY(AboutDialog)
public:
- AboutDialog(QWidget *parent)
- : QDialog(parent)
- , m_ui(new Ui::AboutDialog)
- {
- m_ui->setupUi(this);
- setAttribute(Qt::WA_DeleteOnClose);
-
- // Title
- m_ui->labelName->setText(QString("qBittorrent " QBT_VERSION " (%1-bit)
").arg(QT_POINTER_SIZE * 8));
-
- m_ui->logo->setPixmap(Utils::Gui::scaledPixmapSvg(":/icons/skin/qbittorrent-tray.svg", this, 32));
-
- // About
- QString aboutText = QString(
- ""
- "%1\n\n"
- "%2\n\n"
- "
"
- "")
- .arg(tr("An advanced BitTorrent client programmed in C++, based on Qt toolkit and libtorrent-rasterbar.")
- , tr("Copyright %1 2006-2019 The qBittorrent project").arg(QString::fromUtf8(C_COPYRIGHT))
- , tr("Home Page:")
- , tr("Forum:")
- , tr("Bug Tracker:"));
- m_ui->labelAbout->setText(aboutText);
-
- m_ui->labelMascot->setPixmap(Utils::Gui::scaledPixmap(":/icons/skin/mascot.png", this));
-
- // Thanks
- QFile thanksfile(":/thanks.html");
- if (thanksfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- m_ui->textBrowserThanks->setHtml(QString::fromUtf8(thanksfile.readAll().constData()));
- thanksfile.close();
- }
-
- // Translation
- QFile translatorsfile(":/translators.html");
- if (translatorsfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- m_ui->textBrowserTranslation->setHtml(QString::fromUtf8(translatorsfile.readAll().constData()));
- translatorsfile.close();
- }
-
- // License
- QFile licensefile(":/gpl.html");
- if (licensefile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- m_ui->textBrowserLicense->setHtml(QString::fromUtf8(licensefile.readAll().constData()));
- licensefile.close();
- }
-
- // Libraries
- m_ui->labelQtVer->setText(QT_VERSION_STR);
- m_ui->labelLibtVer->setText(Utils::Misc::libtorrentVersionString());
- m_ui->labelBoostVer->setText(Utils::Misc::boostVersionString());
- m_ui->labelOpensslVer->setText(Utils::Misc::opensslVersionString());
- m_ui->labelZlibVer->setText(Utils::Misc::zlibVersionString());
-
- Utils::Gui::resize(this);
- show();
- }
-
- ~AboutDialog()
- {
- delete m_ui;
- }
+ explicit AboutDialog(QWidget *parent);
+ ~AboutDialog() override;
private:
Ui::AboutDialog *m_ui;
diff --git a/src/gui/gui.pri b/src/gui/gui.pri
index 7ef160d42..ea1d09ea3 100644
--- a/src/gui/gui.pri
+++ b/src/gui/gui.pri
@@ -69,6 +69,7 @@ HEADERS += \
$$PWD/utils.h
SOURCES += \
+ $$PWD/aboutdialog.cpp \
$$PWD/addnewtorrentdialog.cpp \
$$PWD/advancedsettings.cpp \
$$PWD/autoexpandabledialog.cpp \
@@ -82,11 +83,13 @@ SOURCES += \
$$PWD/executionlogwidget.cpp \
$$PWD/fspathedit.cpp \
$$PWD/fspathedit_p.cpp \
+ $$PWD/hidabletabwidget.cpp \
$$PWD/ipsubnetwhitelistoptionsdialog.cpp \
$$PWD/lineedit.cpp \
$$PWD/loglistwidget.cpp \
$$PWD/mainwindow.cpp \
$$PWD/optionsdialog.cpp \
+ $$PWD/previewlistdelegate.cpp \
$$PWD/previewselectdialog.cpp \
$$PWD/private/tristatewidget.cpp \
$$PWD/raisedmessagebox.cpp \
diff --git a/src/gui/hidabletabwidget.cpp b/src/gui/hidabletabwidget.cpp
new file mode 100644
index 000000000..f2bec36f8
--- /dev/null
+++ b/src/gui/hidabletabwidget.cpp
@@ -0,0 +1,63 @@
+/*
+ * Bittorrent Client using Qt 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.
+ */
+
+#include "hidabletabwidget.h"
+
+#include
+
+#ifdef Q_OS_MAC
+#include
+#include
+#endif
+
+HidableTabWidget::HidableTabWidget(QWidget *parent)
+ : QTabWidget(parent)
+{
+}
+
+void HidableTabWidget::tabInserted(const int index)
+{
+ QTabWidget::tabInserted(index);
+ tabBar()->setVisible(count() != 1);
+}
+
+void HidableTabWidget::tabRemoved(const int index)
+{
+ //QTabWidget::tabInserted(index);
+ QTabWidget::tabRemoved(index);
+ tabBar()->setVisible(count() != 1);
+}
+
+#ifdef Q_OS_MAC
+void HidableTabWidget::paintEvent(QPaintEvent *event)
+{
+ // Hide the pane for macintosh style
+ if (!style()->inherits("QMacStyle"))
+ QTabWidget::paintEvent(event);
+}
+#endif
diff --git a/src/gui/hidabletabwidget.h b/src/gui/hidabletabwidget.h
index 2b2860a56..a614dbd2a 100644
--- a/src/gui/hidabletabwidget.h
+++ b/src/gui/hidabletabwidget.h
@@ -29,43 +29,24 @@
#ifndef HIDABLETABWIDGET_H
#define HIDABLETABWIDGET_H
-#include
#include
#ifdef Q_OS_MAC
-#include
+class QPaintEvent;
#endif
class HidableTabWidget : public QTabWidget
{
public:
- explicit HidableTabWidget(QWidget *parent = nullptr)
- : QTabWidget(parent)
- {
- }
+ explicit HidableTabWidget(QWidget *parent = nullptr);
+
+private:
+ void tabInserted(int index) override;
+ void tabRemoved(int index) override;
-protected:
#ifdef Q_OS_MAC
- void paintEvent(QPaintEvent *event) override
- {
- // Hide the pane for macintosh style
- if (!style()->inherits("QMacStyle"))
- QTabWidget::paintEvent(event);
- }
+ void paintEvent(QPaintEvent *event) override;
#endif
-
- void tabInserted(int index) override
- {
- QTabWidget::tabInserted(index);
- tabBar()->setVisible(count() != 1);
- }
-
- void tabRemoved(int index) override
- {
- //QTabWidget::tabInserted(index);
- QTabWidget::tabRemoved(index);
- tabBar()->setVisible(count() != 1);
- }
};
#endif // HIDABLETABWIDGET_H
diff --git a/src/gui/previewlistdelegate.cpp b/src/gui/previewlistdelegate.cpp
new file mode 100644
index 000000000..9371da34d
--- /dev/null
+++ b/src/gui/previewlistdelegate.cpp
@@ -0,0 +1,90 @@
+/*
+ * Bittorrent Client using Qt 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.
+ */
+
+#include "previewlistdelegate.h"
+
+#include
+#include
+#include
+#include
+#include
+
+#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
+#include
+#endif
+
+#include "base/utils/misc.h"
+#include "base/utils/string.h"
+#include "previewselectdialog.h"
+
+PreviewListDelegate::PreviewListDelegate(QObject *parent)
+ : QItemDelegate(parent)
+{
+}
+
+void PreviewListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ painter->save();
+ QStyleOptionViewItem opt = QItemDelegate::setOptions(index, option);
+
+ switch (index.column()) {
+ case PreviewSelectDialog::SIZE:
+ QItemDelegate::drawBackground(painter, opt, index);
+ QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(index.data().toLongLong()));
+ break;
+ case PreviewSelectDialog::PROGRESS: {
+ QStyleOptionProgressBar newopt;
+ qreal progress = index.data().toDouble() * 100.;
+ newopt.rect = opt.rect;
+ newopt.text = ((progress == 100.0) ? QString("100%") : Utils::String::fromDouble(progress, 1) + '%');
+ newopt.progress = static_cast(progress);
+ newopt.maximum = 100;
+ newopt.minimum = 0;
+ newopt.state |= QStyle::State_Enabled;
+ newopt.textVisible = true;
+#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
+ // XXX: To avoid having the progress text on the right of the bar
+ QProxyStyle st("fusion");
+ st.drawControl(QStyle::CE_ProgressBar, &newopt, painter, 0);
+#else
+ QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
+#endif
+ }
+ break;
+ default:
+ QItemDelegate::paint(painter, option, index);
+ }
+
+ painter->restore();
+}
+
+QWidget *PreviewListDelegate::createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const
+{
+ // No editor here
+ return nullptr;
+}
diff --git a/src/gui/previewlistdelegate.h b/src/gui/previewlistdelegate.h
index e15b857d3..f70c77d06 100644
--- a/src/gui/previewlistdelegate.h
+++ b/src/gui/previewlistdelegate.h
@@ -29,74 +29,19 @@
#ifndef PREVIEWLISTDELEGATE_H
#define PREVIEWLISTDELEGATE_H
-#include
#include
-#include
-#include
-#include
-#include
-
-#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
-#include
-#endif
-
-#include "base/utils/misc.h"
-#include "base/utils/string.h"
-#include "previewselectdialog.h"
class PreviewListDelegate : public QItemDelegate
{
Q_OBJECT
+ Q_DISABLE_COPY(PreviewListDelegate)
public:
- PreviewListDelegate(QObject *parent = nullptr)
- : QItemDelegate(parent)
- {
- }
-
- ~PreviewListDelegate() {}
-
- void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
- {
- painter->save();
- QStyleOptionViewItem opt = QItemDelegate::setOptions(index, option);
-
- switch (index.column()) {
- case PreviewSelectDialog::SIZE:
- QItemDelegate::drawBackground(painter, opt, index);
- QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(index.data().toLongLong()));
- break;
- case PreviewSelectDialog::PROGRESS: {
- QStyleOptionProgressBar newopt;
- qreal progress = index.data().toDouble() * 100.;
- newopt.rect = opt.rect;
- newopt.text = ((progress == 100.0) ? QString("100%") : Utils::String::fromDouble(progress, 1) + '%');
- newopt.progress = static_cast(progress);
- newopt.maximum = 100;
- newopt.minimum = 0;
- newopt.state |= QStyle::State_Enabled;
- newopt.textVisible = true;
-#if !defined(Q_OS_WIN) && !defined(Q_OS_MACOS)
- QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
-#else
- // XXX: To avoid having the progress text on the right of the bar
- QProxyStyle st("fusion");
- st.drawControl(QStyle::CE_ProgressBar, &newopt, painter, 0);
-#endif
- }
- break;
- default:
- QItemDelegate::paint(painter, option, index);
- }
-
- painter->restore();
- }
+ explicit PreviewListDelegate(QObject *parent = nullptr);
- QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const
- {
- // No editor here
- return nullptr;
- }
+private:
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+ QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override;
};
#endif // PREVIEWLISTDELEGATE_H
diff --git a/src/gui/properties/CMakeLists.txt b/src/gui/properties/CMakeLists.txt
index b4c87dbfe..a778e3a3c 100644
--- a/src/gui/properties/CMakeLists.txt
+++ b/src/gui/properties/CMakeLists.txt
@@ -17,6 +17,8 @@ trackersadditiondialog.h
# sources
downloadedpiecesbar.cpp
+peerlistdelegate.cpp
+peerlistsortmodel.cpp
peerlistwidget.cpp
peersadditiondialog.cpp
pieceavailabilitybar.cpp
diff --git a/src/gui/properties/peerlistdelegate.cpp b/src/gui/properties/peerlistdelegate.cpp
new file mode 100644
index 000000000..b1b3b9ef5
--- /dev/null
+++ b/src/gui/properties/peerlistdelegate.cpp
@@ -0,0 +1,91 @@
+/*
+ * Bittorrent Client using Qt 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.
+ */
+
+#include "peerlistdelegate.h"
+
+#include
+
+#include "base/preferences.h"
+#include "base/utils/misc.h"
+#include "base/utils/string.h"
+
+PeerListDelegate::PeerListDelegate(QObject *parent)
+ : QItemDelegate(parent)
+{
+}
+
+void PeerListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ painter->save();
+
+ const bool hideValues = Preferences::instance()->getHideZeroValues();
+ QStyleOptionViewItem opt = QItemDelegate::setOptions(index, option);
+ QItemDelegate::drawBackground(painter, opt, index);
+
+ switch (index.column()) {
+ case PORT:
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, option.rect, index.data().toString());
+ break;
+ case TOT_DOWN:
+ case TOT_UP: {
+ qlonglong size = index.data().toLongLong();
+ if (hideValues && (size <= 0))
+ break;
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(size));
+ }
+ break;
+ case DOWN_SPEED:
+ case UP_SPEED: {
+ qreal speed = index.data().toDouble();
+ if (speed <= 0.0)
+ break;
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, Utils::Misc::friendlyUnit(speed, true));
+ }
+ break;
+ case PROGRESS:
+ case RELEVANCE: {
+ qreal progress = index.data().toDouble();
+ opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
+ QItemDelegate::drawDisplay(painter, opt, opt.rect, Utils::String::fromDouble(progress * 100.0, 1) + '%');
+ }
+ break;
+ default:
+ QItemDelegate::paint(painter, option, index);
+ }
+
+ painter->restore();
+}
+
+QWidget *PeerListDelegate::createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const
+{
+ // No editor here
+ return nullptr;
+}
diff --git a/src/gui/properties/peerlistdelegate.h b/src/gui/properties/peerlistdelegate.h
index e0baca12c..bf3bacd7a 100644
--- a/src/gui/properties/peerlistdelegate.h
+++ b/src/gui/properties/peerlistdelegate.h
@@ -30,15 +30,11 @@
#define PEERLISTDELEGATE_H
#include
-#include
-
-#include "base/preferences.h"
-#include "base/utils/misc.h"
-#include "base/utils/string.h"
class PeerListDelegate : public QItemDelegate
{
Q_OBJECT
+ Q_DISABLE_COPY(PeerListDelegate)
public:
enum PeerListColumns
@@ -61,60 +57,11 @@ public:
COL_COUNT
};
- PeerListDelegate(QObject *parent) : QItemDelegate(parent) {}
-
- ~PeerListDelegate() override {}
-
- void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
- {
- painter->save();
-
- const bool hideValues = Preferences::instance()->getHideZeroValues();
- QStyleOptionViewItem opt = QItemDelegate::setOptions(index, option);
- QItemDelegate::drawBackground(painter, opt, index);
-
- switch (index.column()) {
- case PORT:
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, option.rect, index.data().toString());
- break;
- case TOT_DOWN:
- case TOT_UP: {
- qlonglong size = index.data().toLongLong();
- if (hideValues && (size <= 0))
- break;
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(size));
- }
- break;
- case DOWN_SPEED:
- case UP_SPEED: {
- qreal speed = index.data().toDouble();
- if (speed <= 0.0)
- break;
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, opt.rect, Utils::Misc::friendlyUnit(speed, true));
- }
- break;
- case PROGRESS:
- case RELEVANCE: {
- qreal progress = index.data().toDouble();
- opt.displayAlignment = Qt::AlignRight | Qt::AlignVCenter;
- QItemDelegate::drawDisplay(painter, opt, opt.rect, Utils::String::fromDouble(progress * 100.0, 1) + '%');
- }
- break;
- default:
- QItemDelegate::paint(painter, option, index);
- }
+ explicit PeerListDelegate(QObject *parent);
- painter->restore();
- }
-
- QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override
- {
- // No editor here
- return nullptr;
- }
+private:
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+ QWidget *createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override;
};
#endif // PEERLISTDELEGATE_H
diff --git a/src/gui/properties/peerlistsortmodel.cpp b/src/gui/properties/peerlistsortmodel.cpp
new file mode 100644
index 000000000..78a2f9c31
--- /dev/null
+++ b/src/gui/properties/peerlistsortmodel.cpp
@@ -0,0 +1,53 @@
+/*
+ * Bittorrent Client using Qt and libtorrent.
+ * Copyright (C) 2013 Nick Tiskov
+ *
+ * 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.
+ */
+
+#include "peerlistsortmodel.h"
+
+#include "base/utils/string.h"
+#include "peerlistdelegate.h"
+
+PeerListSortModel::PeerListSortModel(QObject *parent)
+ : QSortFilterProxyModel(parent)
+{
+}
+
+bool PeerListSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
+{
+ switch (sortColumn()) {
+ case PeerListDelegate::IP:
+ case PeerListDelegate::CLIENT: {
+ const QString strL = left.data().toString();
+ const QString strR = right.data().toString();
+ const int result = Utils::String::naturalCompare(strL, strR, Qt::CaseInsensitive);
+ return (result < 0);
+ }
+ break;
+ default:
+ return QSortFilterProxyModel::lessThan(left, right);
+ };
+}
diff --git a/src/gui/properties/peerlistsortmodel.h b/src/gui/properties/peerlistsortmodel.h
index 8cd8b3f9f..d454572bc 100644
--- a/src/gui/properties/peerlistsortmodel.h
+++ b/src/gui/properties/peerlistsortmodel.h
@@ -31,34 +31,16 @@
#include
-#include "peerlistdelegate.h"
-
class PeerListSortModel : public QSortFilterProxyModel
{
Q_OBJECT
+ Q_DISABLE_COPY(PeerListSortModel)
public:
- PeerListSortModel(QObject *parent = nullptr)
- : QSortFilterProxyModel(parent)
- {
- }
+ explicit PeerListSortModel(QObject *parent = nullptr);
-protected:
- bool lessThan(const QModelIndex &left, const QModelIndex &right) const
- {
- switch (sortColumn()) {
- case PeerListDelegate::IP:
- case PeerListDelegate::CLIENT: {
- const QString strL = left.data().toString();
- const QString strR = right.data().toString();
- const int result = Utils::String::naturalCompare(strL, strR, Qt::CaseInsensitive);
- return (result < 0);
- }
- break;
- default:
- return QSortFilterProxyModel::lessThan(left, right);
- };
- }
+private:
+ bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
};
#endif // PEERLISTSORTMODEL_H
diff --git a/src/gui/properties/properties.pri b/src/gui/properties/properties.pri
index d2c7dbec9..ac565e6ed 100644
--- a/src/gui/properties/properties.pri
+++ b/src/gui/properties/properties.pri
@@ -23,6 +23,8 @@ HEADERS += \
SOURCES += \
$$PWD/downloadedpiecesbar.cpp \
+ $$PWD/peerlistdelegate.cpp \
+ $$PWD/peerlistsortmodel.cpp \
$$PWD/peerlistwidget.cpp \
$$PWD/peersadditiondialog.cpp \
$$PWD/pieceavailabilitybar.cpp \