chore: add clang-tidy checks to Qt client (#1236)

* chore: add clang-tidy integration for Qt client
This commit is contained in:
Charles Kerr 2020-05-19 20:32:51 -05:00 committed by GitHub
parent 6aa559f12f
commit d43aeb6a5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 181 additions and 180 deletions

View File

@ -523,6 +523,17 @@ else()
endif()
endif()
if(NOT CMAKE_VERSION VERSION_LESS "3.7.2")
message(STATUS "Looking for clang-tidy")
find_program(CLANG_TIDY clang-tidy)
if (CLANG_TIDY STREQUAL "CLANG_TIDY-NOTFOUND")
message(STATUS "Looking for clang-tidy - not found")
else()
message(STATUS "Looking for clang-tidy - found")
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY}")
endif()
endif()
if(ENABLE_TESTS)
enable_testing()
endif()

30
qt/.clang-tidy Normal file
View File

@ -0,0 +1,30 @@
---
Checks: "-*,\
bugprone-*,
-bugprone-branch-clone,
-bugprone-narrowing-conversions,
cert-*,
-cert-err58-cpp,
clang-analyzer-optin*,
cppcoreguidelines-*,
hicpp-*,
misc-*,
-misc-non-private-member-variables-in-classes,
modernize-*,
-modernize-avoid-c-arrays,
-modernize-loop-convert,
-modernize-pass-by-value,
-modernize-raw-string-literal,
-modernize-use-nodiscard,
-modernize-use-trailing-return-type,
readability-*,
-readability-convert-member-functions-to-static,
-readability-implicit-bool-conversion,
-readability-inconsistent-declaration-parameter-name,
-readability-isolate-declaration,
-readability-magic-numbers,
-readability-redundant-access-specifiers,
-readability-static-accessed-through-instance,
WarningsAsErrors: "*"
...

View File

@ -19,8 +19,7 @@
#include "Utils.h"
AboutDialog::AboutDialog(QWidget* parent) :
BaseDialog(parent),
myLicenseDialog()
BaseDialog(parent)
{
ui.setupUi(this);

View File

@ -208,9 +208,6 @@ Application::Application(int& argc, char** argv) :
break;
case AddData::FILENAME:
metainfo = QString::fromLatin1(a.toBase64());
break;
case AddData::METAINFO:
metainfo = QString::fromLatin1(a.toBase64());
break;
@ -339,7 +336,7 @@ Application::Application(int& argc, char** argv) :
if (!myPrefs->getBool(Prefs::USER_HAS_GIVEN_INFORMED_CONSENT))
{
QMessageBox* dialog = new QMessageBox(QMessageBox::Information, QString(),
auto* dialog = new QMessageBox(QMessageBox::Information, QString(),
tr("<b>Transmission is a file sharing program.</b>"), QMessageBox::Ok | QMessageBox::Cancel, myWindow);
dialog->setInformativeText(tr("When you run a torrent, its data will be made available to others by means of upload. "
"Any content you share is your sole responsibility."));
@ -573,7 +570,7 @@ void Application::addTorrent(AddData const& addme)
}
else
{
auto o = new OptionsDialog(*mySession, *myPrefs, addme, myWindow);
auto* o = new OptionsDialog(*mySession, *myPrefs, addme, myWindow);
o->show();
}

View File

@ -36,8 +36,7 @@ int itemColumnSpan(QGridLayout* layout, QLayoutItem const* item)
ColumnResizer::ColumnResizer(QObject* parent) :
QObject(parent),
myTimer(new QTimer(this)),
myLayouts()
myTimer(new QTimer(this))
{
myTimer->setSingleShot(true);
connect(myTimer, SIGNAL(timeout()), SLOT(update()));

View File

@ -32,9 +32,7 @@ ComInteropHelper::ComInteropHelper() :
{
}
ComInteropHelper::~ComInteropHelper()
{
}
ComInteropHelper::~ComInteropHelper() = default;
bool ComInteropHelper::isConnected() const
{

View File

@ -99,11 +99,8 @@ public:
{
}
virtual ~PeerItem()
{
}
~PeerItem() override = default;
public:
void refresh(Peer const& p)
{
if (p.address != peer.address)
@ -119,9 +116,9 @@ public:
status = s;
}
virtual bool operator <(QTreeWidgetItem const& other) const
bool operator <(QTreeWidgetItem const& other) const override
{
PeerItem const* i = dynamic_cast<PeerItem const*>(&other);
auto const* i = dynamic_cast<PeerItem const*>(&other);
QTreeWidget* tw(treeWidget());
int const column = tw != nullptr ? tw->sortColumn() : 0;
@ -516,11 +513,7 @@ void DetailsDialog::refresh()
ui.haveValueLabel->setText(string);
// myAvailabilityLabel
if (torrents.empty())
{
string = none;
}
else if (sizeWhenDone == 0)
if (torrents.empty() || sizeWhenDone == 0)
{
string = none;
}
@ -1189,7 +1182,7 @@ void DetailsDialog::initInfoTab()
int const h = QFontMetrics(ui.commentBrowser->font()).lineSpacing() * 4;
ui.commentBrowser->setFixedHeight(h);
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.activitySectionLayout);
cr->addLayout(ui.detailsSectionLayout);
cr->update();
@ -1225,7 +1218,7 @@ void DetailsDialog::onSpinBoxEditingFinished()
{
QObject const* spin = sender();
tr_quark const key = spin->property(PREF_KEY).toInt();
QDoubleSpinBox const* d = qobject_cast<QDoubleSpinBox const*>(spin);
auto const* d = qobject_cast<QDoubleSpinBox const*>(spin);
if (d != nullptr)
{
@ -1332,7 +1325,7 @@ void DetailsDialog::onEditTrackerClicked()
QModelIndexList selectedRows = selectionModel->selectedRows();
assert(selectedRows.size() == 1);
QModelIndex i = selectionModel->currentIndex();
TrackerInfo const trackerInfo = ui.trackersView->model()->data(i, TrackerModel::TrackerRole).value<TrackerInfo>();
auto const trackerInfo = ui.trackersView->model()->data(i, TrackerModel::TrackerRole).value<TrackerInfo>();
bool ok = false;
QString const newval = QInputDialog::getText(this, tr("Edit URL "), tr("Edit tracker announce URL:"), QLineEdit::Normal,
@ -1366,7 +1359,7 @@ void DetailsDialog::onRemoveTrackerClicked()
for (QModelIndex const& i : selectedRows)
{
TrackerInfo const inf = ui.trackersView->model()->data(i, TrackerModel::TrackerRole).value<TrackerInfo>();
auto const inf = ui.trackersView->model()->data(i, TrackerModel::TrackerRole).value<TrackerInfo>();
torrentId_to_trackerIds.insertMulti(inf.torrentId, inf.st.id);
}
@ -1406,7 +1399,7 @@ void DetailsDialog::initOptionsTab()
ui.idleCombo->addItem(tr("Seed regardless of activity"), TR_IDLELIMIT_UNLIMITED);
ui.idleCombo->addItem(tr("Stop seeding if idle for:"), TR_IDLELIMIT_SINGLE);
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.speedSectionLayout);
cr->addLayout(ui.seedingLimitsSectionRatioLayout);
cr->addLayout(ui.seedingLimitsSectionIdleLayout);
@ -1510,14 +1503,14 @@ void DetailsDialog::onFilePriorityChanged(QSet<int> const& indices, int priority
break;
}
mySession.torrentSet(myIds, key, indices.toList());
mySession.torrentSet(myIds, key, indices.values());
getNewData();
}
void DetailsDialog::onFileWantedChanged(QSet<int> const& indices, bool wanted)
{
tr_quark const key = wanted ? TR_KEY_files_wanted : TR_KEY_files_unwanted;
mySession.torrentSet(myIds, key, indices.toList());
mySession.torrentSet(myIds, key, indices.values());
getNewData();
}

View File

@ -6,6 +6,7 @@
*
*/
#include <algorithm>
#include <cassert>
#include <libtransmission/transmission.h> // priorities
@ -27,7 +28,6 @@ protected:
myToken.reserve(path.size() / 2);
}
protected:
QString const& myPath;
int mySlashIndex;
QString myToken;
@ -94,8 +94,7 @@ public:
FileTreeModel::FileTreeModel(QObject* parent, bool isEditable) :
QAbstractItemModel(parent),
myIsEditable(isEditable),
myRootItem(new FileTreeItem),
myIndexCache()
myRootItem(new FileTreeItem)
{
}
@ -126,7 +125,7 @@ QModelIndexList FileTreeModel::getOrphanIndices(QModelIndexList const& indices)
{
QModelIndexList orphanIndices = indices;
qSort(orphanIndices);
std::sort(orphanIndices.begin(), orphanIndices.end());
for (QMutableListIterator<QModelIndex> it(orphanIndices); it.hasNext();)
{
@ -141,7 +140,7 @@ QModelIndexList FileTreeModel::getOrphanIndices(QModelIndexList const& indices)
break;
}
if (qBinaryFind(orphanIndices, walk) != orphanIndices.end())
if (std::binary_search(orphanIndices.begin(), orphanIndices.end(), walk))
{
it.remove();
break;

View File

@ -17,7 +17,7 @@
class FileTreeItem;
class FileTreeModel : public QAbstractItemModel
class FileTreeModel final : public QAbstractItemModel
{
Q_OBJECT

View File

@ -283,7 +283,7 @@ void FileTreeView::onlyCheckSelectedItems()
QModelIndexList wantedIndices = selectedSourceRows();
myModel->setWanted(wantedIndices, true);
qSort(wantedIndices);
std::sort(wantedIndices.begin(), wantedIndices.end());
QSet<QModelIndex> wantedIndicesParents;
@ -303,7 +303,7 @@ void FileTreeView::onlyCheckSelectedItems()
{
QModelIndex const parentIndex = parentsQueue.dequeue();
if (qBinaryFind(wantedIndices, parentIndex) != wantedIndices.end())
if (std::binary_search(wantedIndices.begin(), wantedIndices.end(), parentIndex))
{
continue;
}
@ -313,7 +313,7 @@ void FileTreeView::onlyCheckSelectedItems()
QModelIndex const childIndex = parentIndex.child(i, 0);
int const childCheckState = childIndex.data(FileTreeModel::WantedRole).toInt();
if (childCheckState == Qt::Unchecked || qBinaryFind(wantedIndices, childIndex) != wantedIndices.end())
if (childCheckState == Qt::Unchecked || std::binary_search(wantedIndices.begin(), wantedIndices.end(), childIndex))
{
continue;
}
@ -341,7 +341,7 @@ void FileTreeView::onlyCheckSelectedItems()
void FileTreeView::setSelectedItemsPriority()
{
QAction* action = qobject_cast<QAction*>(sender());
auto* action = qobject_cast<QAction*>(sender());
assert(action != nullptr);
myModel->setPriority(selectedSourceRows(), action->property(PRIORITY_KEY).toInt());
}

View File

@ -38,13 +38,13 @@ enum
FilterBarComboBox* FilterBar::createActivityCombo()
{
FilterBarComboBox* c = new FilterBarComboBox(this);
FilterBarComboBoxDelegate* delegate = new FilterBarComboBoxDelegate(this, c);
auto* c = new FilterBarComboBox(this);
auto* delegate = new FilterBarComboBoxDelegate(this, c);
c->setItemDelegate(delegate);
QStandardItemModel* model = new QStandardItemModel(this);
auto* model = new QStandardItemModel(this);
QStandardItem* row = new QStandardItem(tr("All"));
auto* row = new QStandardItem(tr("All"));
row->setData(FilterMode::SHOW_ALL, ActivityRole);
model->appendRow(row);
@ -115,7 +115,7 @@ void FilterBar::refreshTrackers()
// update the "All" row
auto const num_trackers = torrentsPerHost.size();
auto item = myTrackerModel->item(ROW_TOTALS);
auto* item = myTrackerModel->item(ROW_TOTALS);
item->setData(int(num_trackers), FilterBarComboBox::CountRole);
item->setData(getCountString(num_trackers), FilterBarComboBox::CountStringRole);
@ -173,11 +173,11 @@ void FilterBar::refreshTrackers()
FilterBarComboBox* FilterBar::createTrackerCombo(QStandardItemModel* model)
{
FilterBarComboBox* c = new FilterBarComboBox(this);
FilterBarComboBoxDelegate* delegate = new FilterBarComboBoxDelegate(this, c);
auto* c = new FilterBarComboBox(this);
auto* delegate = new FilterBarComboBoxDelegate(this, c);
c->setItemDelegate(delegate);
QStandardItem* row = new QStandardItem(tr("All"));
auto* row = new QStandardItem(tr("All"));
row->setData(QString(), TrackerRole);
int const count = myTorrents.rowCount();
row->setData(count, FilterBarComboBox::CountRole);
@ -203,7 +203,7 @@ FilterBar::FilterBar(Prefs& prefs, TorrentModel const& torrents, TorrentFilter c
myRecountTimer(new QTimer(this)),
myIsBootstrapping(true)
{
QHBoxLayout* h = new QHBoxLayout(this);
auto* h = new QHBoxLayout(this);
h->setContentsMargins(3, 3, 3, 3);
myCountLabel = new QLabel(tr("Show:"), this);
@ -272,7 +272,7 @@ void FilterBar::refreshPref(int key)
{
case Prefs::FILTER_MODE:
{
FilterMode const m = myPrefs.get<FilterMode>(key);
auto const m = myPrefs.get<FilterMode>(key);
QAbstractItemModel* model = myActivityCombo->model();
QModelIndexList indices = model->match(model->index(0, 0), ActivityRole, m.mode());
myActivityCombo->setCurrentIndex(indices.isEmpty() ? 0 : indices.first().row());

View File

@ -114,7 +114,7 @@ void FilterBarComboBox::paintEvent(QPaintEvent* e)
QPen const pen = painter.pen();
painter.setPen(Utils::getFadedColor(pen.color()));
QRect const textRect = QStyle::alignedRect(opt.direction, Qt::AlignRight | Qt::AlignVCenter,
QSize(opt.fontMetrics.width(text), rect.height()), rect);
QSize(opt.fontMetrics.boundingRect(text).width(), rect.height()), rect);
painter.drawText(textRect, Qt::AlignRight | Qt::AlignVCenter, text);
Utils::narrowRect(rect, 0, textRect.width() + hmargin, opt.direction);
painter.setPen(pen);

View File

@ -41,7 +41,7 @@ void FilterBarComboBoxDelegate::setSeparator(QAbstractItemModel* model, QModelIn
{
model->setData(index, QString::fromLatin1("separator"), Qt::AccessibleDescriptionRole);
if (QStandardItemModel* m = qobject_cast<QStandardItemModel*>(model))
if (auto* m = qobject_cast<QStandardItemModel*>(model))
{
if (QStandardItem* item = m->itemFromIndex(index))
{
@ -56,7 +56,7 @@ void FilterBarComboBoxDelegate::paint(QPainter* painter, QStyleOptionViewItem co
{
QRect rect = option.rect;
if (QAbstractItemView const* view = qobject_cast<QAbstractItemView const*>(option.widget))
if (auto const* view = qobject_cast<QAbstractItemView const*>(option.widget))
{
rect.setWidth(view->viewport()->width());
}
@ -106,16 +106,14 @@ QSize FilterBarComboBoxDelegate::sizeHint(QStyleOptionViewItem const& option, QM
int const pm = myCombo->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, myCombo);
return QSize(pm, pm + 10);
}
else
{
QStyle* s = myCombo->style();
int const hmargin = getHSpacing(myCombo);
QSize size = QItemDelegate::sizeHint(option, index);
size.setHeight(qMax(size.height(), myCombo->iconSize().height() + 6));
size.rwidth() += s->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr, myCombo);
size.rwidth() += rect(option, index, FilterBarComboBox::CountStringRole).width();
size.rwidth() += hmargin * 4;
return size;
}
QStyle* s = myCombo->style();
int const hmargin = getHSpacing(myCombo);
QSize size = QItemDelegate::sizeHint(option, index);
size.setHeight(qMax(size.height(), myCombo->iconSize().height() + 6));
size.rwidth() += s->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr, myCombo);
size.rwidth() += rect(option, index, FilterBarComboBox::CountStringRole).width();
size.rwidth() += hmargin * 4;
return size;
}

View File

@ -19,7 +19,7 @@
namespace
{
static int const INTERVAL_MSEC = 15000;
int const INTERVAL_MSEC = 15000;
} // namespace
@ -68,7 +68,7 @@ void FreeSpaceLabel::onTimer()
tr_variantInitDict(&args, 1);
tr_variantDictAddStr(&args, TR_KEY_path, myPath.toUtf8().constData());
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this, &args]()
{

View File

@ -66,7 +66,7 @@ class ListViewProxyStyle : public QProxyStyle
{
public:
int styleHint(StyleHint hint, QStyleOption const* option = nullptr, QWidget const* widget = nullptr,
QStyleHintReturn* returnData = nullptr) const
QStyleHintReturn* returnData = nullptr) const override
{
if (hint == QStyle::SH_ItemView_ActivateItemOnSingleClick)
{
@ -83,7 +83,7 @@ QIcon MainWindow::getStockIcon(QString const& name, int fallback)
if (icon.isNull() && fallback >= 0)
{
icon = style()->standardIcon(QStyle::StandardPixmap(fallback), 0, this);
icon = style()->standardIcon(QStyle::StandardPixmap(fallback), nullptr, this);
}
return icon;
@ -140,11 +140,6 @@ MainWindow::MainWindow(Session& session, Prefs& prefs, TorrentModel& model, bool
myPrefs(prefs),
myModel(model),
myLastFullUpdateTime(0),
mySessionDialog(),
myPrefsDialog(),
myAboutDialog(),
myStatsDialog(),
myDetailsDialog(),
myFilterModel(prefs),
myTorrentDelegate(new TorrentDelegate(this)),
myTorrentDelegateMin(new TorrentDelegateMin(this)),
@ -156,7 +151,7 @@ MainWindow::MainWindow(Session& session, Prefs& prefs, TorrentModel& model, bool
{
setAcceptDrops(true);
QAction* sep = new QAction(this);
auto* sep = new QAction(this);
sep->setSeparator(true);
ui.setupUi(this);
@ -271,7 +266,7 @@ MainWindow::MainWindow(Session& session, Prefs& prefs, TorrentModel& model, bool
qMakePair(ui.action_SortByState, static_cast<int>(SortMode::SORT_BY_STATE))
};
QActionGroup* actionGroup = new QActionGroup(this);
auto* actionGroup = new QActionGroup(this);
for (auto const& mode : sortModes)
{
@ -286,7 +281,7 @@ MainWindow::MainWindow(Session& session, Prefs& prefs, TorrentModel& model, bool
myAltSpeedAction->setCheckable(true);
connect(myAltSpeedAction, SIGNAL(triggered()), this, SLOT(toggleSpeedMode()));
QMenu* menu = new QMenu(this);
auto* menu = new QMenu(this);
menu->addAction(ui.action_OpenFile);
menu->addAction(ui.action_AddURL);
menu->addSeparator();
@ -354,9 +349,7 @@ MainWindow::MainWindow(Session& session, Prefs& prefs, TorrentModel& model, bool
refreshSoon();
}
MainWindow::~MainWindow()
{
}
MainWindow::~MainWindow() = default;
void MainWindow::onSessionSourceChanged()
{
@ -390,8 +383,8 @@ void MainWindow::initStatusBar()
{
ui.optionsButton->setMenu(createOptionsMenu());
int const minimumSpeedWidth = ui.downloadSpeedLabel->fontMetrics().width(Formatter::uploadSpeedToString(Speed::fromKBps(
999.99)));
int const minimumSpeedWidth =
ui.downloadSpeedLabel->fontMetrics().boundingRect(Formatter::uploadSpeedToString(Speed::fromKBps(999.99))).width();
ui.downloadSpeedLabel->setMinimumWidth(minimumSpeedWidth);
ui.uploadSpeedLabel->setMinimumWidth(minimumSpeedWidth);
@ -407,7 +400,7 @@ QMenu* MainWindow::createOptionsMenu()
int const stockSpeeds[] = { 5, 10, 20, 30, 40, 50, 75, 100, 150, 200, 250, 500, 750 };
int const currentValue = myPrefs.get<int>(pref);
QActionGroup* actionGroup = new QActionGroup(this);
auto* actionGroup = new QActionGroup(this);
offAction = menu->addAction(tr("Unlimited"));
offAction->setCheckable(true);
@ -434,9 +427,9 @@ QMenu* MainWindow::createOptionsMenu()
auto const initSeedRatioSubMenu = [this](QMenu* menu, QAction*& offAction, QAction*& onAction, int pref, int enabledPref)
{
double const stockRatios[] = { 0.25, 0.50, 0.75, 1, 1.5, 2, 3 };
double const currentValue = myPrefs.get<double>(pref);
auto const currentValue = myPrefs.get<double>(pref);
QActionGroup* actionGroup = new QActionGroup(this);
auto* actionGroup = new QActionGroup(this);
offAction = menu->addAction(tr("Seed Forever"));
offAction->setCheckable(true);
@ -460,7 +453,7 @@ QMenu* MainWindow::createOptionsMenu()
}
};
QMenu* menu = new QMenu(this);
auto* menu = new QMenu(this);
initSpeedSubMenu(menu->addMenu(tr("Limit Download Speed")), myDlimitOffAction, myDlimitOnAction, Prefs::DSPEED,
Prefs::DSPEED_ENABLED);
@ -485,8 +478,8 @@ QMenu* MainWindow::createStatsModeMenu()
qMakePair(ui.action_SessionTransfer, SessionTransferStatsModeName)
};
QActionGroup* actionGroup = new QActionGroup(this);
QMenu* menu = new QMenu(this);
auto* actionGroup = new QActionGroup(this);
auto* menu = new QMenu(this);
for (auto const& mode : statsModes)
{
@ -561,7 +554,7 @@ void MainWindow::openProperties()
void MainWindow::setLocation()
{
RelocateDialog* d = new RelocateDialog(mySession, myModel, getSelectedTorrents(), this);
auto* d = new RelocateDialog(mySession, myModel, getSelectedTorrents(), this);
d->setAttribute(Qt::WA_DeleteOnClose, true);
d->show();
}
@ -947,7 +940,7 @@ torrent_ids_t MainWindow::getSelectedTorrents(bool withMetadataOnly) const
for (QModelIndex const& index : ui.listView->selectionModel()->selectedRows())
{
Torrent const* tor(index.data(TorrentModel::TorrentRole).value<Torrent const*>());
auto const* tor(index.data(TorrentModel::TorrentRole).value<Torrent const*>());
if (tor != nullptr && (!withMetadataOnly || tor->hasMetadata()))
{
@ -1261,7 +1254,7 @@ QLatin1String const SHOW_OPTIONS_CHECKBOX_NAME("show-options-checkbox");
void MainWindow::newTorrent()
{
MakeDialog* dialog = new MakeDialog(mySession, this);
auto* dialog = new MakeDialog(mySession, this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();
}
@ -1274,11 +1267,11 @@ void MainWindow::openTorrent()
d->setFileMode(QFileDialog::ExistingFiles);
d->setAttribute(Qt::WA_DeleteOnClose);
auto const l = qobject_cast<QGridLayout*>(d->layout());
auto* const l = qobject_cast<QGridLayout*>(d->layout());
if (l != nullptr)
{
QCheckBox* b = new QCheckBox(tr("Show &options dialog"));
auto* b = new QCheckBox(tr("Show &options dialog"));
b->setChecked(myPrefs.getBool(Prefs::OPTIONS_PROMPT));
b->setObjectName(SHOW_OPTIONS_CHECKBOX_NAME);
l->addWidget(b, l->rowCount(), 0, 1, -1, Qt::AlignLeft);
@ -1310,11 +1303,11 @@ void MainWindow::addTorrents(QStringList const& filenames)
{
bool showOptions = myPrefs.getBool(Prefs::OPTIONS_PROMPT);
QFileDialog const* const fileDialog = qobject_cast<QFileDialog const*>(sender());
auto const* const fileDialog = qobject_cast<QFileDialog const*>(sender());
if (fileDialog != nullptr)
{
QCheckBox const* const b = fileDialog->findChild<QCheckBox const*>(SHOW_OPTIONS_CHECKBOX_NAME);
auto const* const b = fileDialog->findChild<QCheckBox const*>(SHOW_OPTIONS_CHECKBOX_NAME);
if (b != nullptr)
{
@ -1332,7 +1325,7 @@ void MainWindow::addTorrent(AddData const& addMe, bool showOptions)
{
if (showOptions)
{
OptionsDialog* o = new OptionsDialog(mySession, myPrefs, addMe, this);
auto* o = new OptionsDialog(mySession, myPrefs, addMe, this);
o->show();
qApp->alert(o);
}
@ -1355,7 +1348,7 @@ void MainWindow::removeTorrents(bool const deleteFiles)
for (QModelIndex const& index : ui.listView->selectionModel()->selectedRows())
{
Torrent const* tor(index.data(TorrentModel::TorrentRole).value<Torrent const*>());
auto const* tor(index.data(TorrentModel::TorrentRole).value<Torrent const*>());
ids.insert(tor->id());
if (tor->connectedPeers())
@ -1429,7 +1422,7 @@ void MainWindow::removeTorrents(bool const deleteFiles)
msgBox.setDefaultButton(QMessageBox::Cancel);
msgBox.setIcon(QMessageBox::Question);
// hack needed to keep the dialog from being too narrow
auto layout = qobject_cast<QGridLayout*>(msgBox.layout());
auto* layout = qobject_cast<QGridLayout*>(msgBox.layout());
if (layout == nullptr)
{
@ -1437,7 +1430,7 @@ void MainWindow::removeTorrents(bool const deleteFiles)
msgBox.setLayout(layout);
}
QSpacerItem* spacer = new QSpacerItem(450, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
auto* spacer = new QSpacerItem(450, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
layout->addItem(spacer, layout->rowCount(), 0, 1, layout->columnCount());
if (msgBox.exec() == QMessageBox::Ok)

View File

@ -35,7 +35,7 @@ public:
MakeProgressDialog(Session& session, tr_metainfo_builder& builder, QWidget* parent = nullptr);
private slots:
void onButtonBoxClicked(QAbstractButton*);
void onButtonBoxClicked(QAbstractButton* button);
void onProgress();
private:
@ -181,7 +181,7 @@ void MakeDialog::makeTorrent()
trackers.size(), comment.isEmpty() ? nullptr : comment.toUtf8().constData(), ui.privateCheck->isChecked());
// pop up the dialog
MakeProgressDialog* dialog = new MakeProgressDialog(mySession, *myBuilder, this);
auto* dialog = new MakeProgressDialog(mySession, *myBuilder, this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->open();
}
@ -240,7 +240,7 @@ MakeDialog::MakeDialog(Session& session, QWidget* parent) :
ui.sourceFolderButton->setMode(PathButton::DirectoryMode);
ui.sourceFileButton->setMode(PathButton::FileMode);
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.filesSectionLayout);
cr->addLayout(ui.propertiesSectionLayout);
cr->update();
@ -258,9 +258,7 @@ MakeDialog::MakeDialog(Session& session, QWidget* parent) :
onSourceChanged();
}
MakeDialog::~MakeDialog()
{
}
MakeDialog::~MakeDialog() = default;
/***
****

View File

@ -90,7 +90,7 @@ OptionsDialog::OptionsDialog(Session& session, Prefs const& prefs, AddData const
if (myIsLocal)
{
myLocalDestination = downloadDir;
myLocalDestination.setPath(downloadDir);
}
connect(ui.destinationButton, SIGNAL(pathChanged(QString)), this, SLOT(onDestinationChanged()));
@ -281,7 +281,7 @@ void OptionsDialog::onAccepted()
for (int i = 0, n = myWanted.size(); i < n; ++i)
{
if (myWanted.at(i) == false)
if (!myWanted.at(i))
{
tr_variantListAddInt(l, i);
}
@ -343,7 +343,7 @@ void OptionsDialog::onDestinationChanged()
{
if (ui.destinationStack->currentWidget() == ui.destinationButton)
{
myLocalDestination = ui.destinationButton->path();
myLocalDestination.setPath(ui.destinationButton->path());
ui.freeSpaceLabel->setPath(myLocalDestination.absolutePath());
}
else

View File

@ -39,7 +39,7 @@ public:
virtual ~OptionsDialog();
private:
typedef QMap<uint32_t, int32_t> mybins_t;
using mybins_t = QMap<uint32_t, int32_t>;
private:
void reload();

View File

@ -106,7 +106,7 @@ void PathButton::paintEvent(QPaintEvent* /*event*/)
void PathButton::onClicked()
{
QFileDialog* dialog = new QFileDialog(window(), effectiveTitle());
auto* dialog = new QFileDialog(window(), effectiveTitle());
dialog->setFileMode(isDirMode() ? QFileDialog::Directory : QFileDialog::ExistingFile);
if (isDirMode())

View File

@ -341,7 +341,7 @@ void Prefs::initDefaults(tr_variant* d)
tr_variantDictAddInt(d, TR_KEY_main_window_width, 300);
tr_variantDictAddInt(d, TR_KEY_main_window_x, 50);
tr_variantDictAddInt(d, TR_KEY_main_window_y, 50);
tr_variantDictAddInt(d, TR_KEY_remote_session_port, atoi(TR_DEFAULT_RPC_PORT_STR));
tr_variantDictAddInt(d, TR_KEY_remote_session_port, strtol(TR_DEFAULT_RPC_PORT_STR, nullptr, 0));
tr_variantDictAddStr(d, TR_KEY_download_dir, tr_getDefaultDownloadDir());
tr_variantDictAddStr(d, TR_KEY_filter_mode, "all");
tr_variantDictAddStr(d, TR_KEY_main_window_layout_order, "menu,toolbar,filter,list,statusbar");

View File

@ -271,7 +271,7 @@ void PrefsDialog::lineEditingFinished()
if (prefWidget.is<QLineEdit>())
{
QLineEdit const* const lineEdit = prefWidget.as<QLineEdit>();
auto const* const lineEdit = prefWidget.as<QLineEdit>();
if (lineEdit->isModified())
{
@ -363,7 +363,7 @@ void PrefsDialog::initSpeedTab()
mySchedWidgets << ui.altSpeedLimitStartTimeEdit << ui.altSpeedLimitToLabel << ui.altSpeedLimitEndTimeEdit <<
ui.altSpeedLimitDaysLabel << ui.altSpeedLimitDaysCombo;
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.speedLimitsSectionLayout);
cr->addLayout(ui.altSpeedLimitsSectionLayout);
cr->update();
@ -418,7 +418,7 @@ void PrefsDialog::initNetworkTab()
linkWidgetToPref(ui.enableDhtCheck, Prefs::DHT_ENABLED);
linkWidgetToPref(ui.enableLpdCheck, Prefs::LPD_ENABLED);
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.incomingPeersSectionLayout);
cr->addLayout(ui.peerLimitsSectionLayout);
cr->update();
@ -479,7 +479,7 @@ void PrefsDialog::initPrivacyTab()
myBlockWidgets << ui.blocklistEdit << ui.blocklistStatusLabel << ui.updateBlocklistButton << ui.autoUpdateBlocklistCheck;
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.encryptionSectionLayout);
cr->addLayout(ui.blocklistSectionLayout);
cr->update();
@ -564,7 +564,7 @@ void PrefsDialog::initDownloadingTab()
linkWidgetToPref(ui.completionScriptButton, Prefs::SCRIPT_TORRENT_DONE_FILENAME);
linkWidgetToPref(ui.completionScriptEdit, Prefs::SCRIPT_TORRENT_DONE_FILENAME);
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.addingSectionLayout);
cr->addLayout(ui.downloadQueueSectionLayout);
cr->addLayout(ui.incompleteSectionLayout);
@ -639,9 +639,7 @@ PrefsDialog::PrefsDialog(Session& session, Prefs& prefs, QWidget* parent) :
adjustSize();
}
PrefsDialog::~PrefsDialog()
{
}
PrefsDialog::~PrefsDialog() = default;
void PrefsDialog::setPref(int key, QVariant const& v)
{
@ -745,7 +743,7 @@ void PrefsDialog::refreshPref(int key)
{
if (key == Prefs::ENCRYPTION)
{
QComboBox* comboBox(qobject_cast<QComboBox*>(w));
auto* comboBox = qobject_cast<QComboBox*>(w);
int const index = comboBox->findData(myPrefs.getInt(key));
comboBox->setCurrentIndex(index);
}

View File

@ -31,7 +31,7 @@ public:
virtual ~PrefsDialog();
private:
typedef QMap<int, QWidget*> key2widget_t;
using key2widget_t = QMap<int, QWidget*>;
private:
bool updateWidgetValue(QWidget* widget, int prefKey);

View File

@ -15,8 +15,6 @@
#include <QNetworkReply>
#include <QNetworkRequest>
#include <event2/buffer.h>
#include <libtransmission/transmission.h>
#include <libtransmission/rpcimpl.h>
#include <libtransmission/utils.h> // tr_free
@ -206,7 +204,7 @@ void RpcClient::localSessionCallback(tr_session* s, tr_variant* response, void*
{
Q_UNUSED(s)
RpcClient* self = static_cast<RpcClient*>(vself);
auto* self = static_cast<RpcClient*>(vself);
TrVariantPtr json = createVariant();
*json = *response;
@ -221,7 +219,7 @@ void RpcClient::networkRequestFinished(QNetworkReply* reply)
{
reply->deleteLater();
QFutureInterface<RpcResponse> promise = reply->property(REQUEST_FUTUREINTERFACE_PROPERTY_KEY).
auto promise = reply->property(REQUEST_FUTUREINTERFACE_PROPERTY_KEY).
value<QFutureInterface<RpcResponse>>();
#ifdef DEBUG_HTTP

View File

@ -25,7 +25,7 @@
class QByteArray;
class QNetworkAccessManager;
typedef std::shared_ptr<tr_variant> TrVariantPtr;
using TrVariantPtr = std::shared_ptr<tr_variant>;
Q_DECLARE_METATYPE(TrVariantPtr)
extern "C"
@ -45,7 +45,7 @@ struct RpcResponse
Q_DECLARE_METATYPE(QFutureInterface<RpcResponse>)
// The response future -- the RPC engine returns one for each request made.
typedef QFuture<RpcResponse> RpcResponseFuture;
using RpcResponseFuture = QFuture<RpcResponse>;
class RpcClient : public QObject
{

View File

@ -50,10 +50,10 @@ public:
private:
// Internally queued function. Takes the last response future, makes a
// request and returns a new response future.
typedef std::function<RpcResponseFuture(RpcResponseFuture const&)> QueuedFunction;
using QueuedFunction = std::function<RpcResponseFuture(RpcResponseFuture const&)>;
// Internally stored error handler function. Takes the last response future and returns nothing.
typedef std::function<void (RpcResponseFuture const&)> ErrorHandlerFunction;
using ErrorHandlerFunction = std::function<void (RpcResponseFuture const&)>;
private slots:
void stepFinished();
@ -65,7 +65,7 @@ private:
// normal closure, takes response and returns new future
template<typename Func, typename std::enable_if<
std::is_same<typename std::result_of<Func(RpcResponse const&)>::type, RpcResponseFuture>::value
std::is_same_v<typename std::invoke_result_t<Func, RpcResponse const&>, RpcResponseFuture>
>::type* = nullptr>
QueuedFunction normalizeFunc(Func const& func)
{
@ -77,7 +77,7 @@ private:
// closure without argument (first step), takes nothing and returns new future
template<typename Func, typename std::enable_if<
std::is_same<typename std::result_of<Func()>::type, RpcResponseFuture>::value
std::is_same_v<typename std::invoke_result_t<Func>, RpcResponseFuture>
>::type* = nullptr>
QueuedFunction normalizeFunc(Func const& func)
{
@ -89,7 +89,7 @@ private:
// closure without return value ("auxiliary"), takes response and returns nothing -- internally we reuse the last future
template<typename Func, typename std::enable_if<
std::is_same<typename std::result_of<Func(RpcResponse const&)>::type, void>::value
std::is_same_v<typename std::invoke_result_t<Func, RpcResponse const&>, void>
>::type* = nullptr>
QueuedFunction normalizeFunc(Func const& func)
{
@ -102,7 +102,7 @@ private:
// closure without argument and return value, takes nothing and returns nothing -- next function will also get nothing
template<typename Func, typename std::enable_if<
std::is_same<typename std::result_of<Func()>::type, void>::value
std::is_same_v<typename std::invoke_result_t<Func>, void>
>::type* = nullptr>
QueuedFunction normalizeFunc(Func const& func)
{
@ -115,7 +115,7 @@ private:
// normal error handler, takes last response
template<typename Func, typename std::enable_if<
std::is_same<typename std::result_of<Func(RpcResponse const&)>::type, void>::value
std::is_same_v<typename std::invoke_result_t<Func, RpcResponse const&>, void>
>::type* = nullptr>
ErrorHandlerFunction normalizeErrorHandler(Func const& func)
{
@ -127,7 +127,7 @@ private:
// error handler without an argument, takes nothing
template<typename Func, typename std::enable_if<
std::is_same<typename std::result_of<Func()>::type, void>::value
std::is_same_v<typename std::invoke_result_t<Func>, void>
>::type* = nullptr>
ErrorHandlerFunction normalizeErrorHandler(Func const& func)
{

View File

@ -42,7 +42,7 @@
namespace
{
typedef Torrent::KeyList KeyList;
using KeyList = Torrent::KeyList;
void addList(tr_variant* list, KeyList const& keys)
{
@ -94,7 +94,7 @@ void Session::sessionSet(tr_quark const key, QVariant const& value)
void Session::portTest()
{
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this]()
{
@ -123,7 +123,7 @@ void Session::copyMagnetLinkToClipboard(int torrentId)
tr_variantListAddInt(tr_variantDictAddList(&args, TR_KEY_ids, 1), torrentId);
tr_variantListAddStr(tr_variantDictAddList(&args, TR_KEY_fields, 1), "magnetLink");
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this, &args]()
{
@ -516,7 +516,7 @@ void Session::torrentRenamePath(torrent_ids_t const& ids, QString const& oldpath
tr_variantDictAddStr(&args, TR_KEY_path, oldpath.toUtf8().constData());
tr_variantDictAddStr(&args, TR_KEY_name, newname.toUtf8().constData());
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this, &args]()
{
@ -529,7 +529,7 @@ void Session::torrentRenamePath(torrent_ids_t const& ids, QString const& oldpath
tr_variantDictFindStr(r.args.get(), TR_KEY_path, &path, nullptr);
tr_variantDictFindStr(r.args.get(), TR_KEY_name, &name, nullptr);
QMessageBox* d = new QMessageBox(QMessageBox::Information, tr("Error Renaming Path"),
auto* d = new QMessageBox(QMessageBox::Information, tr("Error Renaming Path"),
tr("<p><b>Unable to rename \"%1\" as \"%2\": %3.</b></p><p>Please correct the errors and try again.</p>").
arg(QString::fromUtf8(path)).arg(QString::fromUtf8(name)).arg(r.result), QMessageBox::Close,
qApp->activeWindow());
@ -553,7 +553,7 @@ void Session::refreshTorrents(torrent_ids_t const& ids, KeyList const& keys)
addList(tr_variantDictAddList(&args, TR_KEY_fields, 0), keys);
addOptionalIds(&args, ids);
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this, &args]()
{
@ -596,7 +596,7 @@ void Session::sendTorrentRequest(char const* request, torrent_ids_t const& ids)
tr_variantInitDict(&args, 1);
addOptionalIds(&args, ids);
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this, request, &args]()
{
@ -663,7 +663,7 @@ void Session::initTorrents(torrent_ids_t const& ids)
void Session::refreshSessionStats()
{
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this]()
{
@ -680,7 +680,7 @@ void Session::refreshSessionStats()
void Session::refreshSessionInfo()
{
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this]()
{
@ -697,7 +697,7 @@ void Session::refreshSessionInfo()
void Session::updateBlocklist()
{
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this]()
{
@ -972,7 +972,7 @@ void Session::addTorrent(AddData const& addMe, tr_variant* args, bool trashOrigi
break;
}
RpcQueue* q = new RpcQueue();
auto* q = new RpcQueue();
q->add([this, args]()
{
@ -980,7 +980,7 @@ void Session::addTorrent(AddData const& addMe, tr_variant* args, bool trashOrigi
},
[addMe](RpcResponse const& r)
{
QMessageBox* d = new QMessageBox(QMessageBox::Warning, tr("Error Adding Torrent"),
auto* d = new QMessageBox(QMessageBox::Warning, tr("Error Adding Torrent"),
QString::fromLatin1("<p><b>%1</b></p><p>%2</p>").arg(r.result).arg(addMe.readableName()), QMessageBox::Close,
qApp->activeWindow());
QObject::connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater);
@ -1001,7 +1001,7 @@ void Session::addTorrent(AddData const& addMe, tr_variant* args, bool trashOrigi
if (tr_variantDictFindStr(dup, TR_KEY_name, &str, nullptr))
{
QString const name = QString::fromUtf8(str);
QMessageBox* d = new QMessageBox(QMessageBox::Warning, tr("Add Torrent"),
auto* d = new QMessageBox(QMessageBox::Warning, tr("Add Torrent"),
tr("<p><b>Unable to add \"%1\".</b></p><p>It is a duplicate of \"%2\" which is already added.</p>").
arg(addMe.readableShortName()).arg(name), QMessageBox::Close, qApp->activeWindow());
QObject::connect(d, &QMessageBox::rejected, d, &QMessageBox::deleteLater);

View File

@ -25,7 +25,7 @@ StatsDialog::StatsDialog(Session& session, QWidget* parent) :
{
ui.setupUi(this);
ColumnResizer* cr(new ColumnResizer(this));
auto* cr = new ColumnResizer(this);
cr->addLayout(ui.currentSessionSectionLayout);
cr->addLayout(ui.totalSectionLayout);
cr->update();
@ -38,9 +38,7 @@ StatsDialog::StatsDialog(Session& session, QWidget* parent) :
mySession.refreshSessionStats();
}
StatsDialog::~StatsDialog()
{
}
StatsDialog::~StatsDialog() = default;
void StatsDialog::setVisible(bool visible)
{

View File

@ -57,7 +57,6 @@ public:
QRect barRect;
QRect progressRect;
public:
ItemLayout(QString const& nameText, QString const& statusText, QString const& progressText, QIcon const& emblemIcon,
QFont const& baseFont, Qt::LayoutDirection direction, QPoint const& topLeft, int width);
@ -439,7 +438,7 @@ QIcon& TorrentDelegate::getWarningEmblem() const
void TorrentDelegate::paint(QPainter* painter, QStyleOptionViewItem const& option, QModelIndex const& index) const
{
Torrent const* tor(index.data(TorrentModel::TorrentRole).value<Torrent const*>());
auto const* tor(index.data(TorrentModel::TorrentRole).value<Torrent const*>());
painter->save();
painter->setClipRect(option.rect);
drawTorrent(painter, option, *tor);

View File

@ -62,7 +62,6 @@ public:
QRect statusRect;
QRect barRect;
public:
ItemLayout(QString const& nameText, QString const& statusText, QIcon const& emblemIcon, QFont const& baseFont,
Qt::LayoutDirection direction, QPoint const& topLeft, int width);

View File

@ -27,9 +27,7 @@ TorrentFilter::TorrentFilter(Prefs const& prefs) :
refilter();
}
TorrentFilter::~TorrentFilter()
{
}
TorrentFilter::~TorrentFilter() = default;
/***
****
@ -101,8 +99,8 @@ int compare(T const a, T const b)
bool TorrentFilter::lessThan(QModelIndex const& left, QModelIndex const& right) const
{
int val = 0;
Torrent const* a = sourceModel()->data(left, TorrentModel::TorrentRole).value<Torrent const*>();
Torrent const* b = sourceModel()->data(right, TorrentModel::TorrentRole).value<Torrent const*>();
auto const* a = sourceModel()->data(left, TorrentModel::TorrentRole).value<Torrent const*>();
auto const* b = sourceModel()->data(right, TorrentModel::TorrentRole).value<Torrent const*>();
switch (myPrefs.get<SortMode>(Prefs::SORT_MODE).mode())
{
@ -285,12 +283,12 @@ bool TorrentFilter::activityFilterAcceptsTorrent(Torrent const* tor, FilterMode
bool TorrentFilter::filterAcceptsRow(int sourceRow, QModelIndex const& sourceParent) const
{
QModelIndex childIndex = sourceModel()->index(sourceRow, 0, sourceParent);
Torrent const* tor = childIndex.model()->data(childIndex, TorrentModel::TorrentRole).value<Torrent const*>();
auto const* tor = childIndex.model()->data(childIndex, TorrentModel::TorrentRole).value<Torrent const*>();
bool accepts = true;
if (accepts)
{
FilterMode const m = myPrefs.get<FilterMode>(Prefs::FILTER_MODE);
auto const m = myPrefs.get<FilterMode>(Prefs::FILTER_MODE);
accepts = activityFilterAcceptsTorrent(tor, m);
}

View File

@ -106,7 +106,7 @@ QVariant TorrentModel::data(QModelIndex const& index, int role) const
break;
case TorrentRole:
var = qVariantFromValue(t);
var = QVariant::fromValue(t);
break;
default:
@ -443,7 +443,7 @@ void TorrentModel::rowsAdd(torrents_t const& torrents)
{
for (auto const& tor : torrents)
{
auto const it = std::lower_bound(myTorrents.begin(), myTorrents.end(), tor, compare);
auto* const it = std::lower_bound(myTorrents.begin(), myTorrents.end(), tor, compare);
auto const row = std::distance(myTorrents.begin(), it);
beginInsertRows(QModelIndex(), row, row);

View File

@ -29,7 +29,7 @@ public:
}
// QWidget
virtual QSize sizeHint() const
QSize sizeHint() const override
{
QStyleOptionHeader option;
option.rect = QRect(0, 0, 100, 100);
@ -41,7 +41,7 @@ public:
protected:
// QWidget
virtual void paintEvent(QPaintEvent* /*event*/)
void paintEvent(QPaintEvent* /*event*/) override
{
QStyleOptionHeader option;
option.initFrom(this);
@ -55,7 +55,7 @@ protected:
painter.drawItemText(option.rect, Qt::AlignCenter, option.palette, true, myText, QPalette::ButtonText);
}
virtual void mouseDoubleClickEvent(QMouseEvent* /*event*/)
void mouseDoubleClickEvent(QMouseEvent* /*event*/) override
{
emit static_cast<TorrentView*>(parent())->headerDoubleClicked();
}

View File

@ -41,7 +41,6 @@ public:
QRect iconRect;
QRect textRect;
public:
ItemLayout(QString const& text, bool suppressColors, Qt::LayoutDirection direction, QPoint const& topLeft, int width);
QSize size() const
@ -98,13 +97,13 @@ QSize TrackerDelegate::sizeHint(QStyleOptionViewItem const& option, TrackerInfo
QSize TrackerDelegate::sizeHint(QStyleOptionViewItem const& option, QModelIndex const& index) const
{
TrackerInfo const trackerInfo = index.data(TrackerModel::TrackerRole).value<TrackerInfo>();
auto const trackerInfo = index.data(TrackerModel::TrackerRole).value<TrackerInfo>();
return sizeHint(option, trackerInfo);
}
void TrackerDelegate::paint(QPainter* painter, QStyleOptionViewItem const& option, QModelIndex const& index) const
{
TrackerInfo const trackerInfo = index.data(TrackerModel::TrackerRole).value<TrackerInfo>();
auto const trackerInfo = index.data(TrackerModel::TrackerRole).value<TrackerInfo>();
painter->save();
painter->setClipRect(option.rect);
drawBackground(painter, option, index);

View File

@ -42,7 +42,7 @@ QVariant TrackerModel::data(QModelIndex const& index, int role) const
break;
case TrackerRole:
var = qVariantFromValue(trackerInfo);
var = QVariant::fromValue(trackerInfo);
break;
default:

View File

@ -45,7 +45,7 @@ public:
QVariant data(QModelIndex const& index, int role = Qt::DisplayRole) const override;
private:
typedef QVector<TrackerInfo> rows_t;
using rows_t = QVector<TrackerInfo>;
private:
rows_t myRows;

View File

@ -24,6 +24,6 @@ void TrackerModelFilter::setShowBackupTrackers(bool b)
bool TrackerModelFilter::filterAcceptsRow(int sourceRow, QModelIndex const& sourceParent) const
{
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
TrackerInfo const trackerInfo = index.data(TrackerModel::TrackerRole).value<TrackerInfo>();
auto const trackerInfo = index.data(TrackerModel::TrackerRole).value<TrackerInfo>();
return myShowBackups || !trackerInfo.st.isBackup;
}

View File

@ -112,7 +112,7 @@ QIcon fileIcon()
std::unordered_map<QString, QIcon> iconCache;
QIcon const getMimeIcon(QString const& filename)
QIcon getMimeIcon(QString const& filename)
{
// If the suffix doesn't match a mime type, treat it as a folder.
// This heuristic is fast and yields good results for torrent names.
@ -183,10 +183,7 @@ QIcon Utils::guessMimeIcon(QString const& filename)
addAssociatedFileIcon(fileInfo, SHGFI_LARGEICON, icon);
}
if (!icon.isNull())
{
return icon;
}
return icon;
#else
@ -223,7 +220,7 @@ bool Utils::isValidUtf8(char const* s)
n = 1; // ASCII
}
else if ((*c & 0xc0) == 0x80)
{
{ // NOLINT(bugprone-branch-clone)
return false; // not valid
}
else if ((*c & 0xe0) == 0xc0)

View File

@ -67,7 +67,7 @@ int WatchDir::metainfoTest(QString const& filename) const
void WatchDir::onTimeout()
{
QTimer* t = qobject_cast<QTimer*>(sender());
auto* t = qobject_cast<QTimer*>(sender());
QString const filename = t->objectName();
if (metainfoTest(filename) == OK)
@ -134,7 +134,7 @@ void WatchDir::watcherActivated(QString const& path)
case ERROR:
{
// give the .torrent a few seconds to finish downloading
QTimer* t = new QTimer(this);
auto* t = new QTimer(this);
t->setObjectName(dir.absoluteFilePath(name));
t->setSingleShot(true);
connect(t, SIGNAL(timeout()), this, SLOT(onTimeout()));