From 32d47387412e61539891d75e0a58bbf38154d90e Mon Sep 17 00:00:00 2001 From: Robert Griebl Date: Tue, 7 Mar 2023 01:12:43 +0100 Subject: [PATCH] Fix all relevant clang-tidy and clazy findings - clazy level 0, 1, 2 and manual - clang analyze, modernize and performance --- src/bricklink/cart.cpp | 14 ++++++++--- src/bricklink/cart.h | 10 ++++---- src/bricklink/core.cpp | 5 ++-- src/bricklink/database.cpp | 2 +- src/bricklink/delegate.cpp | 6 ++--- src/bricklink/io.cpp | 34 ++++++++++++------------- src/bricklink/io.h | 11 +++----- src/bricklink/item.cpp | 6 ++--- src/bricklink/item.h | 6 ++--- src/bricklink/lot.cpp | 5 ++-- src/bricklink/lot.h | 6 ++--- src/bricklink/model.cpp | 30 +++++++++++----------- src/bricklink/order.cpp | 24 +++++++++++++----- src/bricklink/order.h | 10 ++++---- src/bricklink/picture.cpp | 2 +- src/bricklink/priceguide.cpp | 10 ++++---- src/bricklink/priceguide_p.h | 2 +- src/bricklink/qmlapi.cpp | 12 ++++----- src/bricklink/qmlapi.h | 8 +++--- src/bricklink/store.cpp | 19 ++++++++++++-- src/bricklink/store.h | 16 ++++++++---- src/bricklink/wantedlist.cpp | 16 +++++++++--- src/bricklink/wantedlist.h | 10 ++++---- src/common/actionmanager.cpp | 11 ++++---- src/common/actionmanager.h | 6 ++--- src/common/announcements.cpp | 2 ++ src/common/application.cpp | 21 ++++++++-------- src/common/application.h | 4 +-- src/common/brickstore_wrapper.cpp | 17 +++++++------ src/common/brickstore_wrapper.h | 2 +- src/common/config.cpp | 8 +++--- src/common/currency.cpp | 2 +- src/common/document.cpp | 31 +++++++++++------------ src/common/document.h | 6 ++--- src/common/documentio.cpp | 21 ++++++++-------- src/common/documentmodel.cpp | 26 +++++++++++-------- src/common/documentmodel.h | 15 ++++++----- src/common/eventfilter.h | 6 ++--- src/common/filter.cpp | 24 ++++++++++-------- src/common/humanreadabletimedelta.h | 4 +-- src/common/printjob.cpp | 36 +++++++++++++-------------- src/common/printjob.h | 4 +-- src/common/recentfiles.cpp | 1 + src/common/script.cpp | 19 +++++++++++--- src/common/script.h | 12 ++++++--- src/common/scriptmanager.cpp | 20 +++++++-------- src/common/systeminfo.cpp | 6 ++--- src/common/uihelpers.cpp | 7 +----- src/common/uihelpers.h | 4 +-- src/desktop/additemdialog.cpp | 12 ++++----- src/desktop/announcementsdialog.cpp | 4 +-- src/desktop/bettercommandbutton.cpp | 2 +- src/desktop/betteritemdelegate.cpp | 2 +- src/desktop/betteritemdelegate.h | 2 +- src/desktop/checkforupdates.cpp | 2 +- src/desktop/consolidatedialog.cpp | 5 ++-- src/desktop/desktopapplication.cpp | 4 +-- src/desktop/desktopuihelpers.cpp | 11 +++----- src/desktop/desktopuihelpers.h | 2 +- src/desktop/developerconsole.cpp | 2 +- src/desktop/developerconsole.h | 2 +- src/desktop/documentdelegate.cpp | 18 +++++++------- src/desktop/flowlayout.cpp | 2 +- src/desktop/headerview.cpp | 17 +++++++------ src/desktop/importcartdialog.h | 2 +- src/desktop/importinventorydialog.cpp | 4 +-- src/desktop/importinventorywidget.cpp | 3 --- src/desktop/importinventorywidget.h | 1 - src/desktop/importorderdialog.h | 2 +- src/desktop/importwantedlistdialog.h | 2 +- src/desktop/inventorywidget.cpp | 2 +- src/desktop/mainwindow.cpp | 16 ++++++------ src/desktop/priceguidewidget.cpp | 2 +- src/desktop/printdialog.cpp | 6 ++--- src/desktop/progresscircle.cpp | 5 ++-- src/desktop/progressdialog.cpp | 2 +- src/desktop/selectdocumentdialog.cpp | 3 ++- src/desktop/selectmergemode.cpp | 4 +-- src/desktop/settingsdialog.cpp | 9 ++++--- src/desktop/smartvalidator.cpp | 2 +- src/desktop/viewpane.cpp | 15 +++++------ src/desktop/viewpane.h | 3 ++- src/ldraw/library.cpp | 17 ++++++------- src/ldraw/part.cpp | 2 +- src/ldraw/rendercontroller.cpp | 12 ++++----- src/ldraw/rendersettings.cpp | 6 ++--- src/ldraw/rendersettings.h | 2 +- src/utility/appstatistics.cpp | 1 + src/utility/chunkreader.cpp | 5 ++-- src/utility/exception.cpp | 7 +++--- src/utility/exception.h | 4 +-- src/utility/qparallelsort.h | 2 +- src/utility/transfer.cpp | 2 +- src/utility/transfer.h | 2 +- src/utility/utility.cpp | 8 +++--- src/utility/xmlhelpers.cpp | 18 +++++++------- src/utility/xmlhelpers.h | 4 +-- 97 files changed, 458 insertions(+), 383 deletions(-) diff --git a/src/bricklink/cart.cpp b/src/bricklink/cart.cpp index a1d9cb17..38c0b553 100755 --- a/src/bricklink/cart.cpp +++ b/src/bricklink/cart.cpp @@ -52,7 +52,7 @@ Cart::Cart() { } Cart::~Cart() -{ } +{ /* needed to use std::unique_ptr on d */ } const LotList &Cart::lots() const { @@ -283,7 +283,7 @@ Carts::Carts(Core *core) message = message + u": " + e.errorString(); } } - m_lastUpdated = QDateTime::currentDateTime(); + setLastUpdated(QDateTime::currentDateTime()); setUpdateStatus(success ? UpdateStatus::Ok : UpdateStatus::UpdateFailed); emit updateFinished(success, success ? QString { } : message); m_job = nullptr; @@ -418,6 +418,14 @@ void Carts::emitDataChanged(int row, int col) emit dataChanged(from, to); } +void Carts::setLastUpdated(const QDateTime &lastUpdated) +{ + if (lastUpdated != m_lastUpdated) { + m_lastUpdated = lastUpdated; + emit lastUpdatedChanged(lastUpdated); + } +} + void Carts::setUpdateStatus(UpdateStatus updateStatus) { if (updateStatus != m_updateStatus) { @@ -485,7 +493,7 @@ int Carts::columnCount(const QModelIndex &parent) const QVariant Carts::data(const QModelIndex &index, int role) const { if (!index.isValid() || (index.row() < 0) || (index.row() >= m_carts.size())) - return QVariant(); + return { }; Cart *cart = m_carts.at(index.row()); int col = index.column(); diff --git a/src/bricklink/cart.h b/src/bricklink/cart.h index ae2ea4c8..955d73ea 100755 --- a/src/bricklink/cart.h +++ b/src/bricklink/cart.h @@ -89,10 +89,9 @@ class Carts : public QAbstractTableModel Q_OBJECT QML_ELEMENT QML_UNCREATABLE("") - Q_PROPERTY(bool valid READ isValid NOTIFY updateFinished FINAL) Q_PROPERTY(BrickLink::UpdateStatus updateStatus READ updateStatus NOTIFY updateStatusChanged FINAL) - Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY updateFinished FINAL) - Q_PROPERTY(int count READ rowCount NOTIFY updateFinished FINAL) + Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY lastUpdatedChanged FINAL) + Q_PROPERTY(int count READ rowCount NOTIFY countChanged FINAL) public: enum Column { @@ -113,7 +112,6 @@ public: DomesticRole, }; - bool isValid() const { return m_valid; } QDateTime lastUpdated() const { return m_lastUpdated; } BrickLink::UpdateStatus updateStatus() const { return m_updateStatus; } @@ -137,16 +135,18 @@ signals: void updateFinished(bool success, const QString &message); void fetchLotsFinished(BrickLink::Cart *cart, bool success, const QString &message); void updateStatusChanged(BrickLink::UpdateStatus updateStatus); + void lastUpdatedChanged(const QDateTime &lastUpdated); + void countChanged(int count); private: Carts(Core *core); QVector parseGlobalCart(const QByteArray &data); int parseSellerCart(Cart *cart, const QByteArray &data); void emitDataChanged(int row, int col); + void setLastUpdated(const QDateTime &lastUpdated); void setUpdateStatus(UpdateStatus updateStatus); Core *m_core; - bool m_valid = false; UpdateStatus m_updateStatus = UpdateStatus::UpdateFailed; TransferJob *m_job = nullptr; QVector m_cartJobs; diff --git a/src/bricklink/core.cpp b/src/bricklink/core.cpp index f9ab2c98..3ad7a431 100755 --- a/src/bricklink/core.cpp +++ b/src/bricklink/core.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -109,7 +110,7 @@ QUrl Core::urlForLotsForSale(const Item *item, const Color *color) }; // workaround for BL not accepting the -X suffix for sets, instructions and boxes - QString id = QLatin1String(item->id()); + QString id = QString::fromLatin1(item->id()); char itt = item->itemTypeId(); if (itt == 'S' || itt == 'I' || itt == 'O') { @@ -461,7 +462,7 @@ void Core::setUpdateIntervals(const QMap &intervals) QString Core::countryIdFromName(const QString &name) const { // BrickLink doesn't use the standard ISO country names... - static const char * const brickLinkCountries[] = { + static const std::array brickLinkCountries = { "AF Afghanistan", "AL Albania", "DZ Algeria", diff --git a/src/bricklink/database.cpp b/src/bricklink/database.cpp index c27b2292..d6eee26a 100755 --- a/src/bricklink/database.cpp +++ b/src/bricklink/database.cpp @@ -188,7 +188,7 @@ void Database::cancelUpdate() void Database::read(const QString &fileName) { try { - stopwatch *sw = new stopwatch("Loading database"); + auto *sw = new stopwatch("Loading database"); QFile f(!fileName.isEmpty() ? fileName : core()->dataPath() + Database::defaultDatabaseName()); diff --git a/src/bricklink/delegate.cpp b/src/bricklink/delegate.cpp index 22d828f7..c1e75320 100755 --- a/src/bricklink/delegate.cpp +++ b/src/bricklink/delegate.cpp @@ -203,8 +203,8 @@ bool ToolTip::show(const Item *item, const Color *color, const QPoint &globalPos QString ToolTip::createItemToolTip(const Item *item, Picture *pic) const { - static const QString str = QLatin1String(R"(
%4
%2
%3
%1
)"); - static const QString img_left = QLatin1String(R"(
)"); + static const QString str = uR"(
%4
%2
%3
%1
)"_qs; + static const QString img_left = uR"(
)"_qs; QString note_left = u"" + ItemDelegate::tr("[Image is loading]") + u""; QString yearStr; QString id = QString::fromLatin1(item->id()); @@ -229,7 +229,7 @@ QString ToolTip::createItemToolTip(const Item *item, Picture *pic) const const QImage img = pic->image(); img.save(&buffer, "PNG"); - return str.arg(img_left.arg(QString::fromLatin1(ba.toBase64())).arg(img.width()).arg(img.height()), + return str.arg(img_left.arg(QLatin1String(ba.toBase64())).arg(img.width()).arg(img.height()), id, item->name(), yearStr); } } diff --git a/src/bricklink/io.cpp b/src/bricklink/io.cpp index e0d5b6e5..4d81bfad 100755 --- a/src/bricklink/io.cpp +++ b/src/bricklink/io.cpp @@ -27,8 +27,8 @@ static QDateTime parseESTDateTimeString(const QString &v) int h = sl.at(3).toInt() % 12; if (sl.at(6) == u"PM") h += 12; - return QDateTime({ sl.at(2).toInt(), sl.at(0).toInt(), sl.at(1).toInt() }, - { h, sl.at(4).toInt(), sl.at(5).toInt() }, est); + return QDateTime({ sl.at(2).toInt(), sl.at(0).toInt(), sl.at(1).toInt() }, + { h, sl.at(4).toInt(), sl.at(5).toInt() }, est); } else if (sl.size() == 3) { return QDateTime({ sl.at(2).toInt(), sl.at(0).toInt(), sl.at(1).toInt() }, { 0, 0, 0 }, Qt::UTC); @@ -298,7 +298,7 @@ QString IO::toInventoryRequest(const LotList &lots) } QString IO::toBrickLinkUpdateXML(const LotList &lots, - std::function differenceBaseLot) + const std::function &differenceBaseLot) { XmlHelpers::CreateXML xml("INVENTORY", "ITEM"); @@ -322,7 +322,7 @@ QString IO::toBrickLinkUpdateXML(const LotList &lots, xml.createText("LOTID", QString::number(lot->lotId())); int qdiff = lot->quantity() - base->quantity(); if (qdiff && (lot->quantity() > 0)) - xml.createText("QTY", QString::number(qdiff).prepend(QLatin1String(qdiff > 0 ? "+" : ""))); + xml.createText("QTY", QString::number(qdiff).prepend(qdiff > 0 ? u"+" : u"")); else if (qdiff && (lot->quantity() <= 0)) xml.createEmpty("DELETE"); @@ -394,16 +394,14 @@ IO::ParseResult::ParseResult(const LotList &lots) , m_ownLots(false) { } -IO::ParseResult::ParseResult(ParseResult &&pr) - : m_lots(pr.m_lots) - , m_currencyCode(pr.m_currencyCode) +IO::ParseResult::ParseResult(ParseResult &&pr) noexcept + : m_lots(std::move(pr.m_lots)) + , m_currencyCode(std::move(pr.m_currencyCode)) , m_ownLots(pr.m_ownLots) , m_invalidLotCount(pr.m_invalidLotCount) , m_fixedLotCount(pr.m_fixedLotCount) - , m_differenceModeBase(pr.m_differenceModeBase) -{ - pr.m_lots.clear(); -} + , m_differenceModeBase(std::move(pr.m_differenceModeBase)) +{ } IO::ParseResult::~ParseResult() { @@ -489,13 +487,13 @@ static void fromPartInventoryInternal(IO::ParseResult &pr, const Item *item, con bool addAsExtra = part.isExtra() && (extraParts == Status::Extra); bool found = false; - for (auto it = pr.lots().cbegin(); it != pr.lots().cend(); ++it) { - if (partItem == (*it)->item() && (partColor == (*it)->color()) - && (part.isAlternate() == (*it)->alternate()) - && (part.alternateId() == (*it)->alternateId()) - && (part.isCounterPart() == (*it)->counterPart()) - && (addAsExtra == ((*it)->status() == Status::Extra))) { - (*it)->setQuantity((*it)->quantity() + quantity * part.quantity()); + for (auto *lot : pr.lots()) { + if (partItem == lot->item() && (partColor == lot->color()) + && (part.isAlternate() == lot->alternate()) + && (part.alternateId() == lot->alternateId()) + && (part.isCounterPart() == lot->counterPart()) + && (addAsExtra == (lot->status() == Status::Extra))) { + lot->setQuantity(lot->quantity() + quantity * part.quantity()); found = true; break; } diff --git a/src/bricklink/io.h b/src/bricklink/io.h index db85b920..ca4124cf 100755 --- a/src/bricklink/io.h +++ b/src/bricklink/io.h @@ -10,9 +10,7 @@ #include "bricklink/global.h" #include "bricklink/lot.h" -namespace BrickLink { - -namespace IO { +namespace BrickLink::IO { class ParseResult { @@ -20,7 +18,7 @@ public: ParseResult() = default; ParseResult(const LotList &lots); ParseResult(const ParseResult &) = delete; - ParseResult(ParseResult &&pr); + ParseResult(ParseResult &&pr) noexcept; virtual ~ParseResult(); @@ -53,7 +51,7 @@ private: QString toWantedListXML(const LotList &lots, const QString &wantedList); QString toInventoryRequest(const LotList &lots); QString toBrickLinkUpdateXML(const LotList &lots, - std::function differenceBaseLot); + const std::function &differenceBaseLot); enum class Hint { Plain = 0x01, @@ -71,5 +69,4 @@ ParseResult fromPartInventory(const Item *item, const Color *color = nullptr, in Condition condition = Condition::New, Status extraParts = Status::Extra, PartOutTraits partOutTraits = { }, Status status = Status::Include); -} // namespace IO -} // namespace BrickLink +} // namespace BrickLink::IO diff --git a/src/bricklink/item.cpp b/src/bricklink/item.cpp index 33608dda..22232b62 100755 --- a/src/bricklink/item.cpp +++ b/src/bricklink/item.cpp @@ -30,10 +30,10 @@ void Item::setAppearsIn(const QHash>> &appearHash cair.m_colorBits.m_colorSize = quint32(colorVector.size()); m_appears_in.push_back(cair); - for (auto vecIt = colorVector.cbegin(); vecIt != colorVector.cend(); ++vecIt) { + for (const auto [qty, itemIndex] : colorVector) { AppearsInRecord iair; - iair.m_itemBits.m_quantity = vecIt->first; - iair.m_itemBits.m_itemIndex = vecIt->second; + iair.m_itemBits.m_quantity = qty; + iair.m_itemBits.m_itemIndex = itemIndex; m_appears_in.push_back(iair); } } diff --git a/src/bricklink/item.h b/src/bricklink/item.h index b1ab20f2..0f1783b9 100755 --- a/src/bricklink/item.h +++ b/src/bricklink/item.h @@ -15,9 +15,9 @@ namespace BrickLink { -typedef QPair AppearsInItem; -typedef QVector AppearsInColor; -typedef QHash AppearsIn; +using AppearsInItem = QPair; +using AppearsInColor = QVector; +using AppearsIn = QHash; class Item diff --git a/src/bricklink/lot.cpp b/src/bricklink/lot.cpp index 4e5ffb20..0dc7cf8d 100755 --- a/src/bricklink/lot.cpp +++ b/src/bricklink/lot.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only +#include #include #include "bricklink/core.h" @@ -154,7 +155,7 @@ Lot *Lot::restore(QDataStream &ds) std::unique_ptr inc; if (!item || !color) { - inc.reset(new Incomplete); + inc = std::make_unique(); if (!item) { inc->m_item_id = itemid.toLatin1(); inc->m_itemtype_id = itemtypeid; @@ -167,7 +168,7 @@ Lot *Lot::restore(QDataStream &ds) if (core()->applyChangeLog(item, color, inc.get())) inc.reset(); } - lot.reset(new Lot(item, color)); + lot = std::make_unique(item, color); if (inc) lot->setIncomplete(inc.release()); diff --git a/src/bricklink/lot.h b/src/bricklink/lot.h index 6122c354..517626e3 100755 --- a/src/bricklink/lot.h +++ b/src/bricklink/lot.h @@ -166,12 +166,12 @@ private: int m_quantity = 0; int m_bulk_quantity = 1; - int m_tier_quantity[3] = { 0, 0, 0 }; + std::array m_tier_quantity = { 0, 0, 0 }; int m_sale = 0; double m_price = 0; double m_cost = 0; - double m_tier_price[3] = { 0, 0, 0 }; + std::array m_tier_price = { 0, 0, 0 }; double m_weight = 0; @@ -184,7 +184,7 @@ private: friend class Core; }; -typedef QList LotList; +using LotList = QList; } // namespace BrickLink diff --git a/src/bricklink/model.cpp b/src/bricklink/model.cpp index b9f6d1ad..7e7fdef7 100644 --- a/src/bricklink/model.cpp +++ b/src/bricklink/model.cpp @@ -77,7 +77,7 @@ QModelIndex ColorModel::index(const Color *color) const QVariant ColorModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.column() != 0 || !color(index)) - return QVariant(); + return { }; QVariant res; const Color *c = color(index); @@ -104,7 +104,7 @@ QVariant ColorModel::headerData(int section, Qt::Orientation orient, int role) c { if ((orient == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) return tr("Color by %1").arg(sortOrder() == Qt::AscendingOrder ? tr("Name") : tr("Hue")); - return QVariant(); + return { }; } bool ColorModel::isFiltered() const @@ -265,7 +265,7 @@ QModelIndex CategoryModel::index(const Category *category) const QVariant CategoryModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.column() != 0 || !category(index)) - return QVariant(); + return { }; QVariant res; const Category *c = category(index); @@ -281,7 +281,7 @@ QVariant CategoryModel::headerData(int section, Qt::Orientation orient, int role { if ((orient == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) return tr("Category"); - return QVariant(); + return { }; } QHash CategoryModel::roleNames() const @@ -405,7 +405,7 @@ QModelIndex ItemTypeModel::index(const ItemType *itemtype) const QVariant ItemTypeModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.column() != 0 || !itemType(index)) - return QVariant(); + return { }; QVariant res; const ItemType *i = itemType(index); @@ -423,7 +423,7 @@ QVariant ItemTypeModel::headerData(int section, Qt::Orientation orient, int role { if ((orient == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) return tr("Name"); - return QVariant(); + return { }; } QHash ItemTypeModel::roleNames() const @@ -531,14 +531,14 @@ QModelIndex ItemModel::index(const Item *item) const QVariant ItemModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || !item(index)) - return QVariant(); + return { }; QVariant res; const Item *i = item(index); if (role == Qt::DisplayRole) { switch(index.column()) { - case 1: res = QLatin1String(i->id()); break; + case 1: res = QString::fromLatin1(i->id()); break; case 2: res = i->name(); break; } } else if (role == Qt::TextAlignmentRole) { @@ -568,7 +568,7 @@ QVariant ItemModel::headerData(int section, Qt::Orientation orient, int role) co case 2: return tr("Description"); } } - return QVariant(); + return { }; } QHash ItemModel::roleNames() const @@ -767,8 +767,8 @@ bool ItemModel::lessThan(const void *p1, const void *p2, int column) const const Item *i1 = static_cast(p1); const Item *i2 = static_cast(p2); - return Utility::naturalCompare((column == 2) ? i1->name() : QLatin1String(i1->id()), - (column == 2) ? i2->name() : QLatin1String(i2->id())) < 0; + return Utility::naturalCompare((column == 2) ? i1->name() : QString::fromLatin1(i1->id()), + (column == 2) ? i2->name() : QString::fromLatin1(i2->id())) < 0; } bool ItemModel::filterAccepts(const void *pointer) const @@ -937,7 +937,7 @@ void InternalInventoryModel::fillAppearsIn(const QVector &list) first_item = false; } - for (auto it = unique.begin(); it != unique.end(); ++it) { + for (auto it = unique.cbegin(); it != unique.cend(); ++it) { if (it->m_quantity >= list.count()) m_items.emplace_back(it->m_item, nullptr, -1); } @@ -1111,7 +1111,7 @@ QVariant InternalInventoryModel::headerData(int section, Qt::Orientation orient, case InventoryModel::ItemNameColumn: return tr("Description"); } } - return QVariant(); + return { }; } QHash InternalInventoryModel::roleNames() const @@ -1161,8 +1161,8 @@ bool InventoryModel::lessThan(const QModelIndex &left, const QModelIndex &right) case InventoryModel::QuantityColumn: return e1.m_quantity < e2.m_quantity; case InventoryModel::ItemIdColumn: - return (Utility::naturalCompare(QLatin1String(e1.m_item->id()), - QLatin1String(e2.m_item->id())) < 0); + return (Utility::naturalCompare(QString::fromLatin1(e1.m_item->id()), + QString::fromLatin1(e2.m_item->id())) < 0); case InventoryModel::ItemNameColumn: return (Utility::naturalCompare(e1.m_item->name(), e2.m_item->name()) < 0); case InventoryModel::ColorColumn: diff --git a/src/bricklink/order.cpp b/src/bricklink/order.cpp index 935dc2b7..6408298c 100755 --- a/src/bricklink/order.cpp +++ b/src/bricklink/order.cpp @@ -1,7 +1,8 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only - +#include +#include #include #include #include @@ -184,7 +185,7 @@ Order::Order(const QString &id, OrderType type) } Order::~Order() -{ } +{ /* needed to use std::unique_ptr on d */ } LotList Order::loadLots() const { @@ -795,13 +796,15 @@ void Orders::reloadOrdersFromCache() m_orders.clear(); endResetModel(); + emit countChanged(0); + if (m_core->userId().isEmpty()) return; QString path = m_core->dataPath() + u"orders/" + m_core->userId(); QFileInfo stamp(path + u"/.stamp"); - m_lastUpdated = stamp.lastModified(); + setLastUpdated(stamp.lastModified()); setUpdateStatus(stamp.exists() ? UpdateStatus::Ok : UpdateStatus::UpdateFailed); QThreadPool::globalInstance()->start([this, path]() { @@ -896,7 +899,7 @@ QHash Orders::parseOrdersXML(const QByteArray &data_) if (order || startOfOrder >= 0) throw Exception("Found a nested ORDER tag"); startOfOrder = int(xml.characterOffset()); - order.reset(new Order()); + order = std::make_unique(); QQmlEngine::setObjectOwnership(order.get(), QQmlEngine::CppOwnership); @@ -1012,6 +1015,15 @@ void Orders::appendOrderToModel(std::unique_ptr order) m_orders.append(o); endInsertRows(); + emit countChanged(rowCount()); +} + +void Orders::setLastUpdated(const QDateTime &lastUpdated) +{ + if (lastUpdated != m_lastUpdated) { + m_lastUpdated = lastUpdated; + emit lastUpdatedChanged(lastUpdated); + } } void Orders::setUpdateStatus(UpdateStatus updateStatus) @@ -1140,7 +1152,7 @@ void Orders::startUpdateInternal(const QDate &fromDate, const QDate &toDate, Q_ASSERT(m_jobs.isEmpty()); setUpdateStatus(UpdateStatus::Updating); - static const char *types[] = { "received", "placed" }; + static const std::array types = { "received", "placed" }; for (auto &type : types) { QUrl url(u"https://www.bricklink.com/orderExcelFinal.asp"_qs); QUrlQuery query; @@ -1217,7 +1229,7 @@ int Orders::columnCount(const QModelIndex &parent) const QVariant Orders::data(const QModelIndex &index, int role) const { if (!index.isValid() || (index.row() < 0) || (index.row() >= m_orders.size())) - return QVariant(); + return { }; Order *order = m_orders.at(index.row()); int col = index.column(); diff --git a/src/bricklink/order.h b/src/bricklink/order.h index 13040da2..c98ab5c6 100755 --- a/src/bricklink/order.h +++ b/src/bricklink/order.h @@ -173,10 +173,9 @@ class Orders : public QAbstractTableModel Q_OBJECT QML_ELEMENT QML_UNCREATABLE("") - Q_PROPERTY(bool valid READ isValid NOTIFY updateFinished FINAL) Q_PROPERTY(BrickLink::UpdateStatus updateStatus READ updateStatus NOTIFY updateStatusChanged FINAL) - Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY updateFinished FINAL) - Q_PROPERTY(int count READ rowCount NOTIFY updateFinished FINAL) + Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY lastUpdatedChanged FINAL) + Q_PROPERTY(int count READ rowCount NOTIFY countChanged FINAL) public: enum Column { @@ -199,7 +198,6 @@ public: TypeRole, }; - bool isValid() const { return m_valid; } QDateTime lastUpdated() const { return m_lastUpdated; } BrickLink::UpdateStatus updateStatus() const { return m_updateStatus; } @@ -228,6 +226,8 @@ signals: void updateProgress(int received, int total); void updateFinished(bool success, const QString &message); void updateStatusChanged(BrickLink::UpdateStatus updateStatus); + void lastUpdatedChanged(const QDateTime &lastUpdated); + void countChanged(int count); private: Orders(Core *core); @@ -237,6 +237,7 @@ private: void startUpdateInternal(const QDate &fromDate, const QDate &toDate, const QString &orderId); void updateOrder(std::unique_ptr order); void appendOrderToModel(std::unique_ptr order); + void setLastUpdated(const QDateTime &lastUpdated); void setUpdateStatus(UpdateStatus updateStatus); void emitDataChanged(int row, int col); void startUpdateAddress(Order *order); @@ -245,7 +246,6 @@ private: QString orderFilePath(QStringView fileName, OrderType type, const QDate &date) const; Core *m_core; - bool m_valid = false; BrickLink::UpdateStatus m_updateStatus = BrickLink::UpdateStatus::UpdateFailed; QString m_userId; QVector m_jobs; diff --git a/src/bricklink/picture.cpp b/src/bricklink/picture.cpp index 439503d2..7dbe6a85 100755 --- a/src/bricklink/picture.cpp +++ b/src/bricklink/picture.cpp @@ -127,7 +127,7 @@ PictureCache::PictureCache(Core *core, quint64 physicalMem) connect(core, &Core::transferFinished, this, [this](TransferJob *job) { if (job) { - if (Picture *pic = job->userData("picture").value()) + if (auto *pic = job->userData("picture").value()) d->transferJobFinished(job, pic); } }); diff --git a/src/bricklink/priceguide.cpp b/src/bricklink/priceguide.cpp index 7a6a9c4b..1e245912 100755 --- a/src/bricklink/priceguide.cpp +++ b/src/bricklink/priceguide.cpp @@ -104,7 +104,7 @@ SingleHTMLScrapePGRetriever::SingleHTMLScrapePGRetriever(Core *core) connect(m_core, &Core::transferFinished, this, [this](TransferJob *job) { if (job) { - if (PriceGuide *pg = job->userData("htmlPriceGuide").value()) + if (auto *pg = job->userData("htmlPriceGuide").value()) transferJobFinished(job, pg); } }); @@ -449,8 +449,8 @@ void BatchedAffiliateAPIPGRetriever::transferJobFinished(TransferJob *j) throw Exception("JSON data size mismatch: requested %1, got %2") .arg(m_currentBatch.size()).arg(data.size()); } - for (int i = 0; i < data.size(); ++i) { - const auto item = data[i].toObject(); + for (const auto &d : data) { + const auto item = d.toObject(); const QString itemId = item[u"item"][u"no"].toString(); const QString typeId = item[u"item"][u"type"].toString(); const int colorId = item[u"color_id"].toInt(); @@ -774,8 +774,8 @@ QIcon PriceGuideCache::iconForVatType(VatType vatType) QString PriceGuideCache::descriptionForVatType(VatType vatType) { - const QString inc = tr("VAT is included"); - const QString exc = tr("VAT is excluded"); + QString inc = tr("VAT is included"); + QString exc = tr("VAT is excluded"); switch (vatType) { case VatType::Excluded: return exc; diff --git a/src/bricklink/priceguide_p.h b/src/bricklink/priceguide_p.h index 6ea63437..2af887ae 100755 --- a/src/bricklink/priceguide_p.h +++ b/src/bricklink/priceguide_p.h @@ -29,7 +29,7 @@ class PriceGuideRetrieverInterface : public QObject public: PriceGuideRetrieverInterface(QObject *parent = nullptr); - virtual ~PriceGuideRetrieverInterface() = default; + ~PriceGuideRetrieverInterface() override = default; virtual QString name() const = 0; virtual QString id() const = 0; diff --git a/src/bricklink/qmlapi.cpp b/src/bricklink/qmlapi.cpp index 9f9f65e4..0893309d 100644 --- a/src/bricklink/qmlapi.cpp +++ b/src/bricklink/qmlapi.cpp @@ -566,7 +566,7 @@ QmlLot::QmlLot(const QmlLot ©) : copy.wrappedObject(), copy.m_documentLots) { } -QmlLot::QmlLot(QmlLot &&move) +QmlLot::QmlLot(QmlLot &&move) noexcept : QmlWrapperBase(move) { std::swap(m_documentLots, move.m_documentLots); @@ -580,7 +580,7 @@ QmlLot::~QmlLot() QmlLot QmlLot::create(Lot *&&lot) { - return QmlLot(std::move(lot), reinterpret_cast<::QmlDocumentLots *>(Owning)); + return { std::move(lot), reinterpret_cast<::QmlDocumentLots *>(Owning) }; } QmlLot &QmlLot::operator=(const QmlLot &assign) @@ -599,7 +599,7 @@ QImage QmlLot::image() const return pic ? pic->image() : dummy; } -void QmlLot::setQmlSetterCallback(QmlSetterCallback callback) +void QmlLot::setQmlSetterCallback(const QmlSetterCallback &callback) { s_changeLot = callback; } @@ -634,7 +634,7 @@ QmlLot::Setter::~Setter() QmlLot::Setter QmlLot::set() { - return Setter(this); + return { this }; } Lot *QmlLot::get() const @@ -904,8 +904,8 @@ InventoryModel *QmlBrickLink::inventoryModel(bool appearsIn, const QVariantList list.reserve(items.size()); for (int i = 0; i < int(items.size()); ++i) { - QVariant vitem = items.at(i); - QVariant vcolor = colors.at(i); + const QVariant &vitem = items.at(i); + const QVariant &vcolor = colors.at(i); const BrickLink::Item *item = nullptr; const BrickLink::Color *color = nullptr; diff --git a/src/bricklink/qmlapi.h b/src/bricklink/qmlapi.h index a909555e..7eca95c4 100644 --- a/src/bricklink/qmlapi.h +++ b/src/bricklink/qmlapi.h @@ -410,7 +410,7 @@ public: QmlLot(Lot *lot = nullptr, ::QmlDocumentLots *documentLots = nullptr); QmlLot(const Lot *lot); QmlLot(const QmlLot ©); - QmlLot(QmlLot &&move); + QmlLot(QmlLot &&move) noexcept; ~QmlLot(); static QmlLot create(Lot * &&lot); // QmlLot owns the lot @@ -502,10 +502,10 @@ public: QImage image() const; - typedef std::function QmlSetterCallback; + using QmlSetterCallback = std::function ; - static void setQmlSetterCallback(QmlSetterCallback callback); + static void setQmlSetterCallback(const QmlSetterCallback &callback); private: class Setter diff --git a/src/bricklink/store.cpp b/src/bricklink/store.cpp index 193a4dba..2820308a 100755 --- a/src/bricklink/store.cpp +++ b/src/bricklink/store.cpp @@ -35,16 +35,23 @@ BrickLink::Store::Store(Core *core) try { auto result = IO::fromBrickLinkXML(*job->data(), IO::Hint::Store); m_lots = result.takeLots(); - m_currencyCode = result.currencyCode(); - m_valid = true; + if (result.currencyCode() != m_currencyCode) { + m_currencyCode = result.currencyCode(); + emit currencyCodeChanged(m_currencyCode); + } } catch (const Exception &e) { success = false; message = tr("Failed to import the store inventory") + u": " + e.errorString(); } + if (success != m_valid) { + m_valid = success; + emit isValidChanged(success); + } } else { message = tr("Failed to download the store inventory") + u": " + job->errorString(); } setUpdateStatus(success ? UpdateStatus::Ok : UpdateStatus::UpdateFailed); + setLastUpdated(QDateTime::currentDateTime()); emit updateFinished(success, message); m_job = nullptr; } @@ -64,6 +71,14 @@ void BrickLink::Store::setUpdateStatus(UpdateStatus updateStatus) } } +void BrickLink::Store::setLastUpdated(const QDateTime &lastUpdated) +{ + if (lastUpdated != m_lastUpdated) { + m_lastUpdated = lastUpdated; + emit lastUpdatedChanged(lastUpdated); + } +} + bool BrickLink::Store::startUpdate() { if (updateStatus() == UpdateStatus::Updating) diff --git a/src/bricklink/store.h b/src/bricklink/store.h index 95c7963b..3acfedfd 100755 --- a/src/bricklink/store.h +++ b/src/bricklink/store.h @@ -20,13 +20,15 @@ class Store : public QObject Q_OBJECT QML_ELEMENT QML_UNCREATABLE("") - Q_PROPERTY(bool valid READ isValid NOTIFY updateFinished FINAL) + Q_PROPERTY(bool valid READ isValid NOTIFY isValidChanged FINAL) Q_PROPERTY(BrickLink::UpdateStatus updateStatus READ updateStatus NOTIFY updateStatusChanged FINAL) - Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY updateFinished FINAL) - Q_PROPERTY(QString currencyCode READ currencyCode NOTIFY updateFinished FINAL) - Q_PROPERTY(int lotCount READ lotCount NOTIFY updateFinished FINAL) + Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY lastUpdatedChanged FINAL) + Q_PROPERTY(QString currencyCode READ currencyCode NOTIFY currencyCodeChanged FINAL) + Q_PROPERTY(int lotCount READ lotCount NOTIFY lotCountChanged FINAL) public: + ~Store() override; + bool isValid() const { return m_valid; } QDateTime lastUpdated() const { return m_lastUpdated; } BrickLink::UpdateStatus updateStatus() const { return m_updateStatus; } @@ -41,12 +43,16 @@ signals: void updateStarted(); void updateProgress(int received, int total); void updateFinished(bool success, const QString &message); + void isValidChanged(bool valid); void updateStatusChanged(BrickLink::UpdateStatus updateStatus); + void lastUpdatedChanged(const QDateTime &lastUpdated); + void currencyCodeChanged(const QString ¤cyCode); + void lotCountChanged(int lotCount); private: Store(Core *core); - ~Store() override; void setUpdateStatus(UpdateStatus updateStatus); + void setLastUpdated(const QDateTime &lastUpdated); Core *m_core; bool m_valid = false; diff --git a/src/bricklink/wantedlist.cpp b/src/bricklink/wantedlist.cpp index 52c97ca9..a558008f 100755 --- a/src/bricklink/wantedlist.cpp +++ b/src/bricklink/wantedlist.cpp @@ -50,7 +50,7 @@ WantedList::WantedList() { } WantedList::~WantedList() -{ } +{ /* needed to use std::unique_ptr on d */ } const LotList &WantedList::lots() const { @@ -233,6 +233,7 @@ WantedLists::WantedLists(Core *core) connect(wantedList, &WantedList::itemLeftCountChanged, this, [this, row]() { emitDataChanged(row, ItemLeftCount); }); } endResetModel(); + emit countChanged(rowCount()); message.clear(); } catch (const Exception &e) { @@ -240,7 +241,7 @@ WantedLists::WantedLists(Core *core) message = message + u": " + e.errorString(); } } - m_lastUpdated = QDateTime::currentDateTime(); + setLastUpdated(QDateTime::currentDateTime()); setUpdateStatus(success ? UpdateStatus::Ok : UpdateStatus::UpdateFailed); emit updateFinished(success, success ? QString { } : message); m_job = nullptr; @@ -253,6 +254,7 @@ WantedLists::WantedLists(Core *core) qDeleteAll(m_wantedLists); m_wantedLists.clear(); endResetModel(); + emit countChanged(rowCount()); }); } @@ -317,6 +319,14 @@ void WantedLists::emitDataChanged(int row, int col) emit dataChanged(from, to); } +void WantedLists::setLastUpdated(const QDateTime &lastUpdated) +{ + if (lastUpdated != m_lastUpdated) { + m_lastUpdated = lastUpdated; + emit lastUpdatedChanged(lastUpdated); + } +} + void WantedLists::setUpdateStatus(UpdateStatus updateStatus) { if (updateStatus != m_updateStatus) { @@ -384,7 +394,7 @@ int WantedLists::columnCount(const QModelIndex &parent) const QVariant WantedLists::data(const QModelIndex &index, int role) const { if (!index.isValid() || (index.row() < 0) || (index.row() >= m_wantedLists.size())) - return QVariant(); + return { }; WantedList *wantedList = m_wantedLists.at(index.row()); int col = index.column(); diff --git a/src/bricklink/wantedlist.h b/src/bricklink/wantedlist.h index 202571e7..01f7a9cf 100755 --- a/src/bricklink/wantedlist.h +++ b/src/bricklink/wantedlist.h @@ -77,10 +77,9 @@ class WantedLists : public QAbstractTableModel Q_OBJECT QML_ELEMENT QML_UNCREATABLE("") - Q_PROPERTY(bool valid READ isValid NOTIFY updateFinished FINAL) Q_PROPERTY(BrickLink::UpdateStatus updateStatus READ updateStatus NOTIFY updateStatusChanged FINAL) - Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY updateFinished FINAL) - Q_PROPERTY(int count READ rowCount NOTIFY updateFinished FINAL) + Q_PROPERTY(QDateTime lastUpdated READ lastUpdated NOTIFY lastUpdatedChanged FINAL) + Q_PROPERTY(int count READ rowCount NOTIFY countChanged FINAL) public: enum Column { @@ -100,7 +99,6 @@ public: WantedListSortRole, }; - bool isValid() const { return m_valid; } QDateTime lastUpdated() const { return m_lastUpdated; } BrickLink::UpdateStatus updateStatus() const { return m_updateStatus; } @@ -124,16 +122,18 @@ signals: void updateFinished(bool success, const QString &message); void fetchLotsFinished(BrickLink::WantedList *wantedList, bool success, const QString &message); void updateStatusChanged(BrickLink::UpdateStatus updateStatus); + void lastUpdatedChanged(const QDateTime &lastUpdated); + void countChanged(int count); private: WantedLists(Core *core); QVector parseGlobalWantedList(const QByteArray &data); int parseWantedList(WantedList *wantedList, const QByteArray &data); void emitDataChanged(int row, int col); + void setLastUpdated(const QDateTime &lastUpdated); void setUpdateStatus(UpdateStatus updateStatus); Core *m_core; - bool m_valid = false; UpdateStatus m_updateStatus = UpdateStatus::UpdateFailed; TransferJob *m_job = nullptr; QVector m_wantedListJobs; diff --git a/src/common/actionmanager.cpp b/src/common/actionmanager.cpp index 41c0d568..033153d3 100755 --- a/src/common/actionmanager.cpp +++ b/src/common/actionmanager.cpp @@ -312,7 +312,7 @@ void ActionManager::loadCustomShortcuts() for (auto it = savedShortcuts.cbegin(); it != savedShortcuts.cend(); ++it) { QByteArray name = it.key().toLatin1(); if (auto *a = const_cast(action(name.constData()))) { - QKeySequence customShortcut = it.value().value(); + auto customShortcut = it.value().value(); a->m_customShortcut = customShortcut; a->m_shortcuts = { customShortcut }; updateShortcuts(a); @@ -669,7 +669,7 @@ QQuickAction *ActionManager::quickAction(const QString &name) return nullptr; } -bool ActionManager::createAll(std::function creator) +bool ActionManager::createAll(const std::function &creator) { if (!creator) return false; @@ -689,7 +689,7 @@ bool ActionManager::createAll(std::function { } : QList { shortcut }, extended); diff --git a/src/common/actionmanager.h b/src/common/actionmanager.h index f86620e3..13b79322 100755 --- a/src/common/actionmanager.h +++ b/src/common/actionmanager.h @@ -137,13 +137,13 @@ public: void retranslate(); - typedef QVector>> ActionTable; + using ActionTable = QVector>>; QAction *qAction(const char *name); Q_INVOKABLE QQuickAction *quickAction(const QString &name); - bool createAll(std::function creator); + bool createAll(const std::function &creator); QObject *connectActionTable(const ActionTable &actionTable); void disconnectActionTable(QObject *contextObject); @@ -151,7 +151,7 @@ public: Q_INVOKABLE QObject *connectQuickActionTable(const QJSValue &nameToCallable); Q_INVOKABLE void disconnectQuickActionTable(QObject *connectionContext); - static QString toolTipLabel(const QString &label, QKeySequence shortcut = { }, + static QString toolTipLabel(const QString &label, const QKeySequence &shortcut = { }, const QString &extended = { }); static QString toolTipLabel(const QString &label, const QList &shortcuts = { }, const QString &extended = { }); diff --git a/src/common/announcements.cpp b/src/common/announcements.cpp index f9388c47..2c793644 100755 --- a/src/common/announcements.cpp +++ b/src/common/announcements.cpp @@ -29,6 +29,7 @@ Announcements::Announcements(const QString &baseUrl, QObject *parent) m_wikiAnnouncementsUrl.append(u"/wiki/Announcements"_qs); const auto vl = Config::inst()->value(u"Announcements/ReadIds"_qs).toList(); + m_readIds.reserve(vl.size()); for (const QVariant &v : vl) m_readIds << v.toUInt(); } @@ -133,6 +134,7 @@ void Announcements::markAnnouncementRead(quint32 id) m_readIds.append(id); QVariantList vl; + vl.reserve(m_readIds.size()); for (const quint32 &readId : std::as_const(m_readIds)) vl << readId; diff --git a/src/common/application.cpp b/src/common/application.cpp index 21e5bf4f..533e79fe 100755 --- a/src/common/application.cpp +++ b/src/common/application.cpp @@ -27,6 +27,7 @@ #include #include +#include #include "bricklink/core.h" #include "bricklink/store.h" @@ -86,8 +87,8 @@ Application::Application(int &argc, char **argv) s_inst = this; - QCoreApplication::setApplicationName(QLatin1String(BRICKSTORE_NAME)); - QCoreApplication::setApplicationVersion(QLatin1String(BRICKSTORE_VERSION)); + QCoreApplication::setApplicationName(u"" BRICKSTORE_NAME ""_qs); + QCoreApplication::setApplicationVersion(u"" BRICKSTORE_VERSION ""_qs); QGuiApplication::setApplicationDisplayName(QCoreApplication::applicationName()); // QDirIterator dit(u":/"_qs, QDirIterator::Subdirectories); @@ -443,34 +444,34 @@ Application::~Application() QString Application::buildNumber() const { - return QLatin1String(BRICKSTORE_BUILD_NUMBER); + return u"" BRICKSTORE_BUILD_NUMBER ""_qs; } QString Application::applicationUrl() const { - return QLatin1String(BRICKSTORE_URL); + return u"" BRICKSTORE_URL ""_qs; } QString Application::gitHubUrl() const { - return QLatin1String(BRICKSTORE_GITHUB_URL); + return u"" BRICKSTORE_GITHUB_URL ""_qs; } QString Application::gitHubPagesUrl() const { - const auto sections = QString::fromLatin1(BRICKSTORE_GITHUB_URL).split(u"/"_qs); + const QStringList sections = QString::fromLatin1(BRICKSTORE_GITHUB_URL).split(u'/'); Q_ASSERT(sections.count() == 3); return sections[1] + u".github.io/" + sections[2]; } QString Application::databaseUrl() const { - return QLatin1String(BRICKSTORE_DATABASE_URL); + return u"" BRICKSTORE_DATABASE_URL ""_qs; } QString Application::ldrawUrl() const { - return QLatin1String(BRICKSTORE_DATABASE_URL); + return u"" BRICKSTORE_DATABASE_URL ""_qs; } void Application::openUrl(const QUrl &url) @@ -640,8 +641,8 @@ void Application::updateTranslations() once = true; } - m_trans_qt.reset(new QTranslator); - m_trans_brickstore.reset(new QTranslator); + m_trans_qt = std::make_unique(); + m_trans_brickstore = std::make_unique(); if (language != u"en") { if (m_trans_qt->load(u"qtbase_"_qs + language, i18n)) diff --git a/src/common/application.h b/src/common/application.h index ce9cc7e8..7de1bc0e 100644 --- a/src/common/application.h +++ b/src/common/application.h @@ -42,8 +42,8 @@ public: static void openUrl(const QUrl &url); - typedef std::tuple UILogMessage; - typedef void (*UIMessageHandler)(const UILogMessage &msg); + using UILogMessage = std::tuple; + using UIMessageHandler = void(*)(const UILogMessage &); void setUILoggingHandler(UIMessageHandler callback); diff --git a/src/common/brickstore_wrapper.cpp b/src/common/brickstore_wrapper.cpp index 215179d0..36a90bcb 100755 --- a/src/common/brickstore_wrapper.cpp +++ b/src/common/brickstore_wrapper.cpp @@ -114,12 +114,12 @@ Config *QmlBrickStore::config() const QString QmlBrickStore::versionNumber() const { - return QLatin1String(BRICKSTORE_VERSION); + return u"" BRICKSTORE_VERSION ""_qs; } QString QmlBrickStore::buildNumber() const { - return QLatin1String(BRICKSTORE_BUILD_NUMBER); + return u"" BRICKSTORE_BUILD_NUMBER ""_qs; } RecentFiles *QmlBrickStore::recentFiles() const @@ -368,8 +368,9 @@ QmlDocument::QmlDocument(Document *doc) QVariantList QmlDocument::qmlSortColumns() const { - QVariantList result; const auto sortColumns = m_doc->model()->sortColumns(); + QVariantList result; + result.reserve(sortColumns.size()); for (auto &sc : sortColumns) result.append(QVariantMap { { u"column"_qs, sc.first }, { u"order"_qs, sc.second } }); return result; @@ -579,7 +580,7 @@ QModelIndex QmlDocument::index(int row, int column, const QModelIndex &) const QModelIndex QmlDocument::parent(const QModelIndex &) const { - return QModelIndex(); + return { }; } QVariant QmlDocument::headerData(int section, Qt::Orientation o, int role) const @@ -653,7 +654,7 @@ void QmlDocument::emitForceLayout() void QmlDocument::internalMoveColumn(int viFrom, int viTo) { - int li = v2l[viFrom]; + int li = v2l.at(viFrom); m_doc->moveColumn(li, viFrom, viTo); } @@ -665,7 +666,7 @@ bool QmlDocument::internalIsColumnHidden(int li) const void QmlDocument::internalHideColumn(int vi, bool hidden) { - int li = v2l[vi]; + int li = v2l.at(vi); const auto &cd = m_doc->columnLayout().value(li); if (cd.m_hidden != hidden) @@ -1074,8 +1075,8 @@ void QmlDocumentLots::removeAt(int index) BrickLink::QmlLot QmlDocumentLots::at(int index) { if (index < 0 || index >= m_model->lotCount()) - return BrickLink::QmlLot { }; - return BrickLink::QmlLot(m_model->lots().at(index), this); + return { }; + return { m_model->lots().at(index), this }; } diff --git a/src/common/brickstore_wrapper.h b/src/common/brickstore_wrapper.h index 6d089314..ff44d961 100755 --- a/src/common/brickstore_wrapper.h +++ b/src/common/brickstore_wrapper.h @@ -248,7 +248,7 @@ public: signals: void countChanged(int newCount); - void sortOrderChanged(int newSortOrder); + void sortOrderChanged(Qt::SortOrder newSortOrder); void sortColumnChanged(int newSortColumn); void sortRoleNameChanged(QString newSortRoleName); diff --git a/src/common/config.cpp b/src/common/config.cpp index f2d3c295..d7d7f90a 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -41,7 +42,7 @@ static const char *application = "BrickStore"; Config::Config() - : QSettings(QLatin1String(organization), QLatin1String(application)) + : QSettings(QString::fromLatin1(organization), QString::fromLatin1(application)) { m_show_input_errors = value(u"General/ShowInputErrors"_qs, true).toBool(); m_show_difference_indicators = value(u"General/ShowDifferenceIndicators"_qs, false).toBool(); @@ -171,8 +172,9 @@ void Config::upgrade(int vmajor, int vminor, int vpatch) QVariantList Config::availableLanguages() const { - QVariantList al; const auto trs = translations(); + QVariantList al; + al.reserve(trs.size()); for (const Translation &tr : trs) { al.append(QVariantMap { { u"language"_qs, tr.language }, @@ -286,7 +288,7 @@ QMap Config::updateIntervals() const { QMap uiv = updateIntervalsDefault(); - static const char *lut[] = { "Picture", "PriceGuide", "Database" }; + static const std::array lut = { "Picture", "PriceGuide", "Database" }; for (const auto &iv : lut) uiv[iv] = value(u"BrickLink/UpdateInterval/"_qs + QLatin1String(iv), uiv[iv]).toInt(); diff --git a/src/common/currency.cpp b/src/common/currency.cpp index 16a6b1c0..fb1f83f9 100644 --- a/src/common/currency.cpp +++ b/src/common/currency.cpp @@ -85,7 +85,7 @@ Currency *Currency::inst() void Currency::parseRates(const QStringList &ratesList, QHash &ratesMap) { for (const QString &s : ratesList) { - QStringList sl = s.split(QLatin1Char('|')); + QStringList sl = s.split(u'|'); if (sl.count() == 2) { QString sym = sl[0]; double rate = sl[1].toDouble(); diff --git a/src/common/document.cpp b/src/common/document.cpp index 4f5ccfa2..1ae6249b 100755 --- a/src/common/document.cpp +++ b/src/common/document.cpp @@ -1,6 +1,8 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only +#include + #include #include #include @@ -885,8 +887,8 @@ void Document::selectLots(const BrickLink::LotList &selectedLots, const BrickLin QItemSelection newSelection; int colCount = m_model->columnCount(); - for (auto i = 0; i < selectedLots.size(); ++i) { - QModelIndex idx = m_model->index(selectedLots.at(i)); + for (const auto &selectedLot : selectedLots) { + QModelIndex idx = m_model->index(selectedLot); newSelection.select(idx, idx.siblingAtColumn(colCount - 1)); } @@ -1045,7 +1047,7 @@ void Document::setPriceToGuide(BrickLink::Time time, BrickLink::Price price, boo m_model->beginMacro(); - m_setToPG.reset(new SetToPriceGuideData); + m_setToPG = std::make_unique(); m_setToPG->changes.reserve(uint(sel.size())); m_setToPG->totalCount = int(sel.count()); m_setToPG->doneCount = 0; @@ -1738,7 +1740,7 @@ Document *Document::fromPartInventory(const BrickLink::Item *item, document->setThumbnail(thumbnail->image()); } else if ((thumbnail->updateStatus() == BrickLink::UpdateStatus::Loading) || (thumbnail->updateStatus() == BrickLink::UpdateStatus::Updating)) { - QMetaObject::Connection *conn = new QMetaObject::Connection; + auto *conn = new QMetaObject::Connection; *conn = connect(BrickLink::core()->pictureCache(), &BrickLink::PictureCache::pictureUpdated, document, [=](BrickLink::Picture *pic) { if (pic == thumbnail) { @@ -1820,6 +1822,7 @@ void Document::updateSelection() } std::sort(rows.begin(), rows.end()); + newSelectedLots.reserve(rows.size()); for (int row : std::as_const(rows)) newSelectedLots.append(m_model->filteredLots().at(row)); @@ -1833,7 +1836,7 @@ void Document::updateSelection() } void Document::applyTo(const LotList &lots, const char *actionName, - std::function callback) + const std::function &callback) { QString actionText; if (auto a = ActionManager::inst()->action(actionName)) @@ -2227,10 +2230,8 @@ QByteArray Document::saveColumnsState() const << qint32(m_columnData.size()) << qint32(sortColumns.size()); - for (int i = 0; i < sortColumns.size(); ++i) { - ds << qint32(sortColumns.at(i).first) - << (sortColumns.at(i).second == Qt::AscendingOrder); - } + for (const auto [section, order] : sortColumns) + ds << qint32(section) << (order == Qt::AscendingOrder); for (const auto &cd : m_columnData) { ds << qint32(cd.m_size) @@ -2266,10 +2267,8 @@ std::tuple, QVector>> Document::pa bool sortAscending = false; ds >> sortIndicator >> sortAscending; - if ((sortIndicator >= 0) && (sortIndicator < count)) { - sortColumns.append(qMakePair(sortIndicator, sortAscending - ? Qt::AscendingOrder : Qt::DescendingOrder)); - } + if ((sortIndicator >= 0) && (sortIndicator < count)) + sortColumns.emplace_back(sortIndicator, sortAscending ? Qt::AscendingOrder : Qt::DescendingOrder); } QVector columnData; @@ -2322,7 +2321,7 @@ bool Document::isBlockingOperationCancelable() const return bool(m_blockCancelCallback); } -void Document::setBlockingOperationCancelCallback(std::function cancelCallback) +void Document::setBlockingOperationCancelCallback(const std::function &cancelCallback) { const bool wasCancelable = isBlockingOperationCancelable(); m_blockCancelCallback = cancelCallback; @@ -2338,7 +2337,7 @@ void Document::setBlockingOperationTitle(const QString &title) } } -void Document::startBlockingOperation(const QString &title, std::function cancelCallback) +void Document::startBlockingOperation(const QString &title, const std::function &cancelCallback) { if (!m_blocked) { m_blocked = true; @@ -2527,7 +2526,7 @@ int Document::processAutosaves(AutosaveAction action) DocumentIO::BsxContents bsx; auto model = new DocumentModel(std::move(pr), true /*mark as modified*/); model->restoreSortFilterState(savedSortFilterState); - Document *doc = new Document(model, columnState, true /* is autosave restore*/); + auto *doc = new Document(model, columnState, true /* is autosave restore*/); if (!savedFileName.isEmpty()) { QFileInfo fi(savedFileName); diff --git a/src/common/document.h b/src/common/document.h index 0cf807a6..1f65bfa9 100755 --- a/src/common/document.h +++ b/src/common/document.h @@ -122,11 +122,11 @@ public: const LotList &selectedLots() const { return m_selectedLots; } bool isBlockingOperationActive() const; - void startBlockingOperation(const QString &title, std::function cancelCallback = { }); + void startBlockingOperation(const QString &title, const std::function &cancelCallback = { }); void endBlockingOperation(); bool isBlockingOperationCancelable() const; - void setBlockingOperationCancelCallback(std::function cancelCallback); + void setBlockingOperationCancelCallback(const std::function &cancelCallback); void cancelBlockingOperation(); QString blockingOperationTitle() const; @@ -264,7 +264,7 @@ signals: private: void applyTo(const LotList &lots, - const char *actionName, std::function callback); + const char *actionName, const std::function &callback); void priceGuideUpdated(BrickLink::PriceGuide *pg); void cancelPriceGuideUpdates(); enum ExportCheckMode { diff --git a/src/common/documentio.cpp b/src/common/documentio.cpp index 7f788fa2..9d043bb7 100755 --- a/src/common/documentio.cpp +++ b/src/common/documentio.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only +#include #include #include @@ -176,7 +177,7 @@ QCoro::Task DocumentIO::importLDrawModel(QString fileName) // this is a zip file - unpack the encrypted model2.ldr (pw: soho0909) - f.reset(new QTemporaryFile()); + f = std::make_unique(); if (f->open(QIODevice::ReadWrite)) { try { @@ -187,7 +188,7 @@ QCoro::Task DocumentIO::importLDrawModel(QString fileName) } } } else { - f.reset(new QFile(fn)); + f = std::make_unique(fn); } if (!f->open(QIODevice::ReadOnly)) @@ -311,8 +312,8 @@ bool DocumentIO::parseLDrawModelInternal(QFile *f, bool isStudio, const QString if (line.isEmpty()) continue; - if (line.at(0) == QLatin1Char('0')) { - const auto split = QStringView{line}.split(QLatin1Char(' '), Qt::SkipEmptyParts); + if (line.at(0) == u'0') { + const auto split = QStringView{line}.split(u' ', Qt::SkipEmptyParts); auto strPosition = [line](QStringView sv) { return sv.constData() - line.constData(); }; if ((split.count() >= 2) && (split.at(1) == u"FILE")) { @@ -330,10 +331,10 @@ bool DocumentIO::parseLDrawModelInternal(QFile *f, bool isStudio, const QString return false; // we need to seek! } - } else if (line.at(0) == QLatin1Char('1')) { + } else if (line.at(0) == u'1') { if (is_mpd && !is_mpd_model_found) continue; - const auto split = QStringView{line}.split(QLatin1Char(' '), Qt::SkipEmptyParts); + const auto split = QStringView{line}.split(u' ', Qt::SkipEmptyParts); auto strPosition = [line](QStringView sv) { return sv.constData() - line.constData(); }; if (split.count() >= 15) { @@ -341,7 +342,7 @@ bool DocumentIO::parseLDrawModelInternal(QFile *f, bool isStudio, const QString QString partname = line.mid(strPosition(split.at(14))).toLower(); QString partid = partname; - partid.truncate(partid.lastIndexOf(QLatin1Char('.'))); + partid.truncate(partid.lastIndexOf(u'.')); const BrickLink::Item *itemp = BrickLink::core()->item('P', partid.toLatin1()); @@ -568,7 +569,7 @@ Document *DocumentIO::parseBsxInventory(QIODevice *in) base.setIncomplete(new BrickLink::Incomplete); for (int i = 0; i < baseValues.size(); ++i) { - auto attr = baseValues.at(i); + const auto &attr = baseValues.at(i); auto it = tagHash.find(attr.name()); if (it != tagHash.end()) { (*it)(&base, attr.value().toString()); @@ -815,14 +816,14 @@ bool DocumentIO::createBsxInventory(QIODevice *out, const Document *doc) if (!columnLayout.isEmpty()) { xml.writeStartElement(u"ColumnLayout"_qs); xml.writeAttribute(u"Compressed"_qs, u"1"_qs); - xml.writeCDATA(QLatin1String(qCompress(columnLayout).toBase64())); + xml.writeCDATA(QString::fromLatin1(qCompress(columnLayout).toBase64())); xml.writeEndElement(); // ColumnLayout } QByteArray sortFilterState = doc->model()->saveSortFilterState(); if (!sortFilterState.isEmpty()) { xml.writeStartElement(u"SortFilterState"_qs); xml.writeAttribute(u"Compressed"_qs, u"1"_qs); - xml.writeCDATA(QLatin1String(qCompress(sortFilterState).toBase64())); + xml.writeCDATA(QString::fromLatin1(qCompress(sortFilterState).toBase64())); xml.writeEndElement(); // SortFilterState } xml.writeEndElement(); // GuiState diff --git a/src/common/documentmodel.cpp b/src/common/documentmodel.cpp index 057ab86a..4b3c2646 100755 --- a/src/common/documentmodel.cpp +++ b/src/common/documentmodel.cpp @@ -38,7 +38,7 @@ template struct FieldOp { template static Result returnType(Result (Lot::*)() const); - typedef decltype(returnType(G)) R; + using R = decltype(returnType(G)); static void copy(const Lot &from, Lot &to) { @@ -566,6 +566,7 @@ DocumentModel *DocumentModel::createTemporary(const LotList &list, const QVector { auto *model = new DocumentModel(1 /*dummy*/); LotList lots; + lots.reserve(list.size()); // the caller owns the items, so we have to copy here for (const Lot *lot : list) @@ -1025,7 +1026,7 @@ bool DocumentModel::mergeLotFields(const Lot &from, Lot &to, const FieldMergeMod return changed; } -void DocumentModel::setConsolidateFunction(std::function consolidateFunction) +void DocumentModel::setConsolidateFunction(const std::function &consolidateFunction) { s_consolidateFunction = consolidateFunction; } @@ -1544,7 +1545,7 @@ void DocumentModel::adjustLotCurrencyToModel(BrickLink::LotList &lots, const QSt } } -void DocumentModel::applyTo(const LotList &lots, std::function callback, +void DocumentModel::applyTo(const LotList &lots, const std::function &callback, const QString &actionText) { if (lots.isEmpty()) @@ -1725,7 +1726,7 @@ bool DocumentModel::setData(const QModelIndex &index, const QVariant &value, int if (!index.isValid() || (role != Qt::EditRole)) return false; - DocumentModel::Field f = static_cast(index.column()); + auto f = static_cast(index.column()); Lot *lot = this->lot(index); Lot lotCopy = *lot; @@ -1924,7 +1925,8 @@ void DocumentModel::initializeColumns() return QVariant::fromValue(pic ? pic->image() : QImage { }); }, .compareFn = [&](const Lot *l1, const Lot *l2) { - return Utility::naturalCompare(QLatin1String(l1->itemId()), QLatin1String(l2->itemId())); + return Utility::naturalCompare(QString::fromLatin1(l1->itemId()), + QString::fromLatin1(l2->itemId())); }, }); C(PartNo, Column { @@ -1937,7 +1939,8 @@ void DocumentModel::initializeColumns() lot->setItem(newItem); }, .compareFn = [&](const Lot *l1, const Lot *l2) { - return Utility::naturalCompare(QLatin1String(l1->itemId()), QLatin1String(l2->itemId())); + return Utility::naturalCompare(QString::fromLatin1(l1->itemId()), + QString::fromLatin1(l2->itemId())); }, }); C(Description, Column { @@ -2506,16 +2509,15 @@ QByteArray DocumentModel::saveSortFilterState() const ds << QByteArray("SFST") << qint32(4); ds << qint8(m_sortColumns.size()); - for (int i = 0; i < m_sortColumns.size(); ++i) - ds << qint8(m_sortColumns.at(i).first) << qint8(m_sortColumns.at(i).second); + for (const auto [section, order] : m_sortColumns) + ds << qint8(section) << qint8(order); ds << qint8(m_filter.size()); for (const auto &f : m_filter) ds << qint8(f.field()) << qint8(f.comparison()) << qint8(f.combination()) << f.expression(); ds << qint32(m_sortedLots.size()); - for (int i = 0; i < m_sortedLots.size(); ++i) { - auto *lot = m_sortedLots.at(i); + for (const auto &lot : m_sortedLots) { qint32 row = qint32(m_lotIndex.value(lot, -1)); bool visible = m_filteredLotIndex.contains(lot); @@ -2542,10 +2544,11 @@ bool DocumentModel::restoreSortFilterState(const QByteArray &ba) sortColumnsSize = 1; else ds >> sortColumnsSize; + sortColumns.reserve(sortColumnsSize); for (int i = 0; i < sortColumnsSize; ++i) { qint8 sortColumn, sortOrder; ds >> sortColumn >> sortOrder; - sortColumns << qMakePair(sortColumn, Qt::SortOrder(sortOrder)); + sortColumns.emplace_back(sortColumn, Qt::SortOrder(sortOrder)); } if (version <= 3) { @@ -2555,6 +2558,7 @@ bool DocumentModel::restoreSortFilterState(const QByteArray &ba) } else { qint8 filterSize; ds >> filterSize; + filter.reserve(filterSize); for (int i = 0; i < filterSize; ++i) { qint8 filterField, filterComparison, filterCombination; QString filterExpression; diff --git a/src/common/documentmodel.h b/src/common/documentmodel.h index e71c8cc8..ae08a20f 100644 --- a/src/common/documentmodel.h +++ b/src/common/documentmodel.h @@ -174,7 +174,7 @@ public: QCoro::Task addLots(BrickLink::LotList &&lots, AddLotMode addLotMode = AddLotMode::AddAsNew); QCoro::Task<> consolidateLots(BrickLink::LotList lots); - static void setConsolidateFunction(std::function consolidateFunction); + static void setConsolidateFunction(const std::function &consolidateFunction); static MergeModes possibleMergeModesForField(Field field); static FieldMergeModes createFieldMergeModes(MergeMode mergeMode = MergeMode::Ignore); @@ -191,11 +191,10 @@ public: QModelIndex index(const Lot *i, int column = 0) const; QModelIndex index(int row, int column, const QModelIndex &parent = { }) const override; - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override; - virtual QVariant data(const QModelIndex &index, int role) const override; - virtual QVariant headerData(int section, Qt::Orientation orientation, - int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex&) const override; bool setData(const QModelIndex&, const QVariant&, int) override; QVariant dataForEditRole(const Lot *lot, Field f) const; @@ -232,7 +231,7 @@ public: static DocumentModel *createTemporary(const LotList &list, const QVector &fakeIndexes = { }); - virtual ~DocumentModel() override; + ~DocumentModel() override; static const QVector &allDocuments(); @@ -287,7 +286,7 @@ public: LotDidNotChange = 0, }; - void applyTo(const LotList &lots, std::function callback, + void applyTo(const LotList &lots, const std::function &callback, const QString &actionText = { }); const Lot *differenceBaseLot(const Lot *lot) const; diff --git a/src/common/eventfilter.h b/src/common/eventfilter.h index 6e2d87ab..83404d14 100755 --- a/src/common/eventfilter.h +++ b/src/common/eventfilter.h @@ -24,13 +24,13 @@ public: Q_DECLARE_FLAGS(Result, ResultFlag) Q_FLAG(Result) - typedef std::function Type; + using Type = std::function; - inline explicit EventFilter(QObject *o, std::initializer_list types, Type filter) + inline explicit EventFilter(QObject *o, std::initializer_list types, const Type &filter) : EventFilter(o, o, types, filter) { } - inline explicit EventFilter(QObject *parent, QObject *o, std::initializer_list types, Type filter) + inline explicit EventFilter(QObject *parent, QObject *o, std::initializer_list types, const Type &filter) : QObject(parent) , m_filter(filter) , m_types(types) diff --git a/src/common/filter.cpp b/src/common/filter.cpp index 711c2b54..7cce9cd8 100644 --- a/src/common/filter.cpp +++ b/src/common/filter.cpp @@ -401,11 +401,13 @@ QVector> Filter::Parser::standardCombination for (token_table *tt = predefined; tt->m_symbols || tt->m_words; ++tt) { if (!(mask & tt->m_combination)) continue; - - foreach (QString word, Filter::tr(tt->m_words).split(u',')) - dct.append({ tt->m_combination, word }); - foreach (QString symbol, QString::fromLatin1(tt->m_symbols).split(u',')) - dct.append({ tt->m_combination, symbol }); + + const auto words = Filter::tr(tt->m_words).split(u','); + const auto symbols = QString::fromLatin1(tt->m_symbols).split(u','); + for (const auto &word : words) + dct.emplace_back(tt->m_combination, word); + for (const auto &symbol : symbols) + dct.emplace_back(tt->m_combination, symbol); } return dct; } @@ -438,11 +440,13 @@ QVector> Filter::Parser::standardComparisonTo for (token_table *tt = predefined; tt->m_symbols || tt->m_words; ++tt) { if (!(mask & tt->m_comparison)) continue; - - foreach (QString word, Filter::tr(tt->m_words).split(QLatin1Char(','))) - dct.append({ tt->m_comparison, word }); - foreach (QString symbol, QString::fromLatin1(tt->m_symbols).split(QLatin1Char(','))) - dct.append({ tt->m_comparison, symbol }); + + const auto words = Filter::tr(tt->m_words).split(u','); + const auto symbols = QString::fromLatin1(tt->m_symbols).split(u','); + for (const auto &word : words) + dct.emplace_back(tt->m_comparison, word); + for (const auto &symbol : symbols) + dct.emplace_back(tt->m_comparison, symbol); } return dct; } diff --git a/src/common/humanreadabletimedelta.h b/src/common/humanreadabletimedelta.h index 35135be0..23c6b80c 100755 --- a/src/common/humanreadabletimedelta.h +++ b/src/common/humanreadabletimedelta.h @@ -10,9 +10,9 @@ class HumanReadableTimeDelta { Q_DECLARE_TR_FUNCTIONS(HumanReadableTimeDelta) - HumanReadableTimeDelta() = delete; - public: static QString toString(const QDateTime &from, const QDateTime &to); + + HumanReadableTimeDelta() = delete; }; diff --git a/src/common/printjob.cpp b/src/common/printjob.cpp index 0888ac02..13b0c6ca 100755 --- a/src/common/printjob.cpp +++ b/src/common/printjob.cpp @@ -218,7 +218,7 @@ void QmlPrintPage::dump() } } -void QmlPrintPage::print(QPainter *p, double scale [2]) const +void QmlPrintPage::print(QPainter *p, double scaleX, double scaleY) const { for (const Cmd *c : m_cmds) { if (c->m_cmd == Cmd::Attributes) { @@ -229,7 +229,7 @@ void QmlPrintPage::print(QPainter *p, double scale [2]) const p->setFont(ac->m_font); if (ac->m_color.isValid()) - p->setPen(QPen(ac->m_color, int(ac->m_linewidth * (scale [0] + scale [1]) / 2.), Qt::PenStyle(ac->m_linestyle))); + p->setPen(QPen(ac->m_color, int(ac->m_linewidth * (scaleX + scaleY) / 2.), Qt::PenStyle(ac->m_linestyle))); else p->setPen(QPen(Qt::NoPen)); @@ -241,10 +241,10 @@ void QmlPrintPage::print(QPainter *p, double scale [2]) const else { const auto *dc = static_cast(c); - int x = int(dc->m_x * scale [0]); - int y = int(dc->m_y * scale [1]); - int w = int(dc->m_w * scale [0]); - int h = int(dc->m_h * scale [1]); + int x = int(dc->m_x * scaleX); + int y = int(dc->m_y * scaleY); + int w = int(dc->m_w * scaleX); + int h = int(dc->m_h * scaleY); switch (c->m_cmd) { case Cmd::Text: @@ -267,7 +267,7 @@ void QmlPrintPage::print(QPainter *p, double scale [2]) const break; case Cmd::Image: { - QImage img = dc->m_p1.value(); + auto img = dc->m_p1.value(); if (!img.isNull()) { QRect dr = QRect(x, y, w, h); @@ -318,10 +318,9 @@ double QmlPrintPage::lineWidth() const return m_attr.m_linewidth; } -void QmlPrintPage::attr_cmd() +void QmlPrintPage::pushAttrCmd() { - auto *ac = new AttrCmd(); - *ac = m_attr; + auto *ac = new AttrCmd(m_attr); ac->m_cmd = Cmd::Attributes; m_cmds.append(ac); } @@ -329,31 +328,31 @@ void QmlPrintPage::attr_cmd() void QmlPrintPage::setFont(const QFont &font) { m_attr.m_font = font; - attr_cmd(); + pushAttrCmd(); } void QmlPrintPage::setColor(const QColor &color) { m_attr.m_color = color; - attr_cmd(); + pushAttrCmd(); } void QmlPrintPage::setBgColor(const QColor &color) { m_attr.m_bgcolor = color; - attr_cmd(); + pushAttrCmd(); } void QmlPrintPage::setLineStyle(int linestyle) { m_attr.m_linestyle = linestyle; - attr_cmd(); + pushAttrCmd(); } void QmlPrintPage::setLineWidth(double linewidth) { m_attr.m_linewidth = linewidth; - attr_cmd(); + pushAttrCmd(); } @@ -545,9 +544,8 @@ bool QmlPrintJob::print(const QList &pages) QPdfWriter *prt = static_cast(m_pd); #endif - double scaling [2]; - scaling [0] = double(m_pd->logicalDpiX()) / 25.4; - scaling [1] = double(m_pd->logicalDpiY()) / 25.4; + double scaleX = double(m_pd->logicalDpiX()) / 25.4; + double scaleY = double(m_pd->logicalDpiY()) / 25.4; bool no_new_page = true; for (int i = 0; i < pageCount(); ++i) { @@ -559,7 +557,7 @@ bool QmlPrintJob::print(const QList &pages) if (!no_new_page && prt) prt->newPage(); - page->print(&p, scaling); + page->print(&p, scaleX, scaleY); no_new_page = false; } return true; diff --git a/src/common/printjob.h b/src/common/printjob.h index 2f9d0927..dbe75c0b 100755 --- a/src/common/printjob.h +++ b/src/common/printjob.h @@ -82,7 +82,7 @@ public: QmlPrintPage(const QmlPrintJob *job); void dump(); - void print(QPainter *p, double scale [2]) const; + void print(QPainter *p, double scaleX, double scaleY) const; private: struct Cmd { @@ -110,7 +110,7 @@ private: QVariant m_p2; }; - void attr_cmd(); + void pushAttrCmd(); private: QVector m_cmds; diff --git a/src/common/recentfiles.cpp b/src/common/recentfiles.cpp index 297a1ab7..6cab8e15 100755 --- a/src/common/recentfiles.cpp +++ b/src/common/recentfiles.cpp @@ -23,6 +23,7 @@ RecentFiles::RecentFiles(QObject *parent) auto config = Config::inst(); int size = config->beginReadArray(u"RecentFiles"_qs); size = std::clamp(size, 0, MaxRecentFiles); + m_pathsAndNames.reserve(size); for (int i = 0; i < size; ++i) { config->setArrayIndex(i); auto path = config->value(u"Path"_qs).toString(); diff --git a/src/common/script.cpp b/src/common/script.cpp index 93ef759b..d6646ba8 100755 --- a/src/common/script.cpp +++ b/src/common/script.cpp @@ -34,6 +34,10 @@ static QString formatJSError(const QJSValue &error) \note The documentation is missing on purpose - the API is not set in stone yet. */ +ExtensionScriptAction::ExtensionScriptAction(QObject *parent) + : QObject(parent) +{ } + QString ExtensionScriptAction::text() const { return m_text; @@ -155,6 +159,10 @@ void ExtensionScriptAction::componentComplete() */ +PrintingScriptAction::PrintingScriptAction(QObject *parent) + : QObject(parent) +{ } + QString PrintingScriptAction::text() const { return m_text; @@ -208,6 +216,7 @@ void PrintingScriptAction::executePrint(QPaintDevice *pd, Document *doc, bool se const auto lots = doc->model()->sortLotList(selectionOnly ? doc->selectedLots() : doc->model()->lots()); QVariantList itemList; + itemList.reserve(lots.size()); for (auto lot : lots) itemList << QVariant::fromValue(BrickLink::QmlLot(lot)); @@ -267,12 +276,16 @@ void PrintingScriptAction::executePrint(QPaintDevice *pd, Document *doc, bool se \e {(Optional)} A version string for this script. */ +Script::Script(QQuickItem *parent) + : QQuickItem(parent) +{ } + QString Script::name() const { return m_name; } -void Script::setName(QString name) +void Script::setName(const QString &name) { if (m_name != name) { @@ -286,7 +299,7 @@ QString Script::author() const return m_author; } -void Script::setAuthor(QString author) +void Script::setAuthor(const QString &author) { if (m_author != author) { m_author = author; @@ -299,7 +312,7 @@ QString Script::version() const return m_version; } -void Script::setVersion(QString version) +void Script::setVersion(const QString &version) { if (m_version != version) { m_version = version; diff --git a/src/common/script.h b/src/common/script.h index 74a30d6f..4ae9deb5 100755 --- a/src/common/script.h +++ b/src/common/script.h @@ -32,6 +32,8 @@ public: }; Q_ENUM(Location) + ExtensionScriptAction(QObject *parent = nullptr); + QString text() const; void setText(const QString &text); Location location() const; @@ -69,6 +71,8 @@ class PrintingScriptAction : public QObject, public QQmlParserStatus Q_PROPERTY(QJSValue printFunction READ printFunction WRITE setPrintFunction NOTIFY printFunctionChanged) public: + PrintingScriptAction(QObject *parent = nullptr); + QString text() const; void setText(const QString &text); @@ -101,12 +105,14 @@ class Script : public QQuickItem Q_PROPERTY(QString version READ version WRITE setVersion NOTIFY versionChanged) public: + Script(QQuickItem *parent = nullptr); + QString name() const; + void setName(const QString &name); QString author() const; - void setName(QString name); - void setAuthor(QString author); + void setAuthor(const QString &author); QString version() const; - void setVersion(QString version); + void setVersion(const QString &version); void addExtensionAction(ExtensionScriptAction *extensionAction); void addPrintingAction(PrintingScriptAction *printingAction); diff --git a/src/common/scriptmanager.cpp b/src/common/scriptmanager.cpp index 85d41b0f..e2894f81 100755 --- a/src/common/scriptmanager.cpp +++ b/src/common/scriptmanager.cpp @@ -36,7 +36,7 @@ static QString stringifyType(QMetaType mt) if (mt.metaObject()) { int qei = mt.metaObject()->indexOfClassInfo("QML.Element"); if (qei >= 0) { - const auto name = QString::fromLatin1(mt.metaObject()->classInfo(qei).value()); + auto name = QString::fromLatin1(mt.metaObject()->classInfo(qei).value()); if (name == u"auto") return QString::fromLatin1(mt.metaObject()->className()).section(u"::"_qs, -1); else @@ -57,7 +57,7 @@ static QString stringifyType(QMetaType mt) case QMetaType::QColor : return u"color"_qs; case QMetaType::Float : case QMetaType::Double : return u"real"_qs; - default : return QLatin1String(mt.name()); + default : return QString::fromLatin1(mt.name()); } } @@ -66,8 +66,8 @@ static QString stringify(const QVariant &value, int level = 0, bool indentFirstL static QString stringifyQObject(const QObject *o, const QMetaObject *mo, int level, bool indentFirstLine) { QString str; - QString indent = QString(level * 2, QLatin1Char(' ')); - QString nextIndent = QString((level + 1) * 2, QLatin1Char(' ')); + QString indent = QString(level * 2, u' '); + QString nextIndent = QString((level + 1) * 2, u' '); bool isGadget = mo->metaType().flags().testFlag(QMetaType::IsGadget); @@ -86,7 +86,7 @@ static QString stringifyQObject(const QObject *o, const QMetaObject *mo, int lev QMetaProperty p = mo->property(i); QVariant value = isGadget ? p.readOnGadget(o) : p.read(o); str = str + nextIndent + stringifyType(p.metaType()) + u' ' - + QLatin1String(p.name()) + u": " + stringify(value, level + 1, false) + u'\n'; + + QLatin1String(p.name()) + u": " + stringify(value, level + 1, false) + u'\n'; } /* for (int i = mo->methodOffset(); i < mo->methodCount(); ++i) { @@ -118,8 +118,8 @@ static QString stringifyQGadget(const void *g, const QMetaObject *mo, int level, static QString stringify(const QVariant &value, int level, bool indentFirstLine) { QString str; - QString indent = QString(level * 2, QLatin1Char(' ')); - QString nextIndent = QString((level + 1) * 2, QLatin1Char(' ')); + QString indent = QString(level * 2, u' '); + QString nextIndent = QString((level + 1) * 2, u' '); if (indentFirstLine) str.append(indent); @@ -179,7 +179,7 @@ static QString stringify(const QVariant &value, int level, bool indentFirstLine) break; } case QMetaType::QObjectStar: { - QObject *o = qvariant_cast(value); + auto *o = qvariant_cast(value); if (!o) { str.append(u""); break; @@ -195,7 +195,7 @@ static QString stringify(const QVariant &value, int level, bool indentFirstLine) if (meta.flags().testFlag(QMetaType::IsGadget)) { str.append(stringifyQGadget(value.data(), meta.metaObject(), level, false)); } else if (meta.flags().testFlag(QMetaType::PointerToQObject)) { - QObject *o = qvariant_cast(value); + auto *o = qvariant_cast(value); if (!o) { str.append(u""); break; @@ -307,7 +307,7 @@ std::tuple ScriptManager::executeString(const QString &s) { Q_ASSERT(m_engine); - const char script[] = + const char *script = "import BrickStore\n" "import BrickLink\n" "import QtQml\n" diff --git a/src/common/systeminfo.cpp b/src/common/systeminfo.cpp index 62ec87f9..2e7ce4ce 100755 --- a/src/common/systeminfo.cpp +++ b/src/common/systeminfo.cpp @@ -60,13 +60,13 @@ SystemInfo::SystemInfo() m_map[u"qt.version"_qs] = QString::fromLatin1(qVersion()); m_map[u"qt.debug"_qs] = QLibraryInfo::isDebugBuild(); m_map[u"qt.platformname"_qs] = QGuiApplication::platformName(); - m_map[u"build.compiler"_qs] = QLatin1String(BRICKSTORE_COMPILER_VERSION); + m_map[u"build.compiler"_qs] = u"" BRICKSTORE_COMPILER_VERSION ""_qs; m_map[u"build.arch"_qs] = QSysInfo::buildCpuArchitecture(); - m_map[u"build.host"_qs] = QLatin1String(BRICKSTORE_BUILD_HOST); + m_map[u"build.host"_qs] = u"" BRICKSTORE_BUILD_HOST ""_qs; m_map[u"build.qt.version"_qs] = QString::fromLatin1(QT_VERSION_STR); m_map[u"build.date"_qs] = QLocale::c().toDateTime(QString::fromLatin1(__DATE__ " " __TIME__) .simplified(), u"MMM d yyyy HH:mm:ss"_qs); - m_map[u"build.number"_qs] = QLatin1String(BRICKSTORE_BUILD_NUMBER); + m_map[u"build.number"_qs] = u"" BRICKSTORE_BUILD_NUMBER ""_qs; m_map[u"brickstore.locale"_qs] = QLocale().name().left(2); m_map[u"brickstore.version"_qs] = QCoreApplication::applicationVersion(); diff --git a/src/common/uihelpers.cpp b/src/common/uihelpers.cpp index fb8d4deb..3ec84417 100644 --- a/src/common/uihelpers.cpp +++ b/src/common/uihelpers.cpp @@ -15,8 +15,7 @@ static QString sanitizeFileName(const QString &name) static QVector illegal { '<', '>', ':', '"', '/', '\\', '|', '?', '*' }; QString result; - for (int i = 0; i < name.size(); ++i) { - auto c = name.at(i); + for (auto c : name) { auto u = c.unicode(); if ((u <= 31) || ((u < 128) && illegal.contains(char(u)))) @@ -53,10 +52,6 @@ QCoro::Task UIHelpers::showMessageBoxHelper(QString m co_return result; } -UIHelpers::UIHelpers() - -{ } - UIHelpers *UIHelpers::inst() { return s_inst; diff --git a/src/common/uihelpers.h b/src/common/uihelpers.h index 9e4c06e5..4ec6c0ee 100644 --- a/src/common/uihelpers.h +++ b/src/common/uihelpers.h @@ -21,8 +21,6 @@ class UIHelpers_ProgressDialogInterface : public QObject Q_OBJECT public: - virtual ~UIHelpers_ProgressDialogInterface() override { } - virtual QCoro::Task exec() = 0; virtual void progress(int, int) = 0; @@ -212,7 +210,7 @@ protected: QVector> m_toastMessages; bool m_toastMessageVisible = false; - UIHelpers(); + UIHelpers() = default; static UIHelpers *inst(); static UIHelpers *s_inst; diff --git a/src/desktop/additemdialog.cpp b/src/desktop/additemdialog.cpp index 5af2be63..f5b5ecf2 100644 --- a/src/desktop/additemdialog.cpp +++ b/src/desktop/additemdialog.cpp @@ -1,7 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only - +#include #include #include @@ -933,10 +933,10 @@ QByteArray AddItemDialog::saveBrowseState() const QByteArray compressedHistory; QDataStream dsCompressed(&compressedHistory, QIODevice::WriteOnly); - for (int i = 0; i < m_browseHistory.size(); ++i) - saveBrowseHistoryEntry(dsCompressed, m_browseHistory.at(i)); - for (int i = 0; i < m_browseStack.size(); ++i) - saveBrowseHistoryEntry(dsCompressed, m_browseStack.at(i)); + for (const auto &entry : m_browseHistory) + saveBrowseHistoryEntry(dsCompressed, entry); + for (const auto &entry : m_browseStack) + saveBrowseHistoryEntry(dsCompressed, entry); ds << qCompress(compressedHistory, 9); return ba; @@ -979,7 +979,7 @@ bool AddItemDialog::restoreBrowseState(const QByteArray &ba) if (compressedHistory.isEmpty() || (ds.status() != QDataStream::Ok)) return false; - dsCompressed.reset(new QDataStream(compressedHistory)); + dsCompressed = std::make_unique(compressedHistory); dsData = dsCompressed.get(); } diff --git a/src/desktop/announcementsdialog.cpp b/src/desktop/announcementsdialog.cpp index 62675c36..a940719f 100755 --- a/src/desktop/announcementsdialog.cpp +++ b/src/desktop/announcementsdialog.cpp @@ -27,9 +27,9 @@ AnnouncementsDialog::AnnouncementsDialog(const QString &markdown, QWidget *paren { setAttribute(Qt::WA_TranslucentBackground); - QVBoxLayout *top = new QVBoxLayout(this); + auto *top = new QVBoxLayout(this); - QHBoxLayout *lay = new QHBoxLayout; + auto *lay = new QHBoxLayout; lay->setSpacing(lay->spacing() * 2); lay->addStretch(1); diff --git a/src/desktop/bettercommandbutton.cpp b/src/desktop/bettercommandbutton.cpp index a22e5a9d..a59a89f4 100755 --- a/src/desktop/bettercommandbutton.cpp +++ b/src/desktop/bettercommandbutton.cpp @@ -209,7 +209,7 @@ void BetterCommandButton::updateAction() } else { const auto objects = m_action->associatedObjects(); for (auto *object : objects) { - if (QMenu *menu = qobject_cast(object)) { + if (auto *menu = qobject_cast(object)) { if (!menu->icon().isNull()) setIcon(menu->icon()); } diff --git a/src/desktop/betteritemdelegate.cpp b/src/desktop/betteritemdelegate.cpp index 39b4b092..e525341b 100755 --- a/src/desktop/betteritemdelegate.cpp +++ b/src/desktop/betteritemdelegate.cpp @@ -28,7 +28,7 @@ QSize BetterItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QMo void BetterItemDelegate::extendedPaint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, - std::function paintCallback) const + const std::function &paintCallback) const { QStyleOptionViewItem myoption(option); diff --git a/src/desktop/betteritemdelegate.h b/src/desktop/betteritemdelegate.h index e11e0d4f..4908408a 100755 --- a/src/desktop/betteritemdelegate.h +++ b/src/desktop/betteritemdelegate.h @@ -26,7 +26,7 @@ public: protected: void extendedPaint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index, - std::function paintCallback = { }) const; + const std::function &paintCallback = { }) const; protected: Options m_options; diff --git a/src/desktop/checkforupdates.cpp b/src/desktop/checkforupdates.cpp index a76b73cb..d44fa676 100755 --- a/src/desktop/checkforupdates.cpp +++ b/src/desktop/checkforupdates.cpp @@ -85,7 +85,7 @@ QCoro::Task<> CheckForUpdates::check(bool silent) qWarning() << "Cannot parse GitHub's latest tag_name:" << tag; auto assets = doc[u"assets"].toArray(); m_installerUrl.clear(); - for (const QJsonValue &&asset : assets) { + for (const QJsonValueRef &asset : assets) { QString name = asset[u"name"].toString(); #if defined(Q_OS_MACOS) if (name.startsWith(u"macOS-", Qt::CaseInsensitive)) { diff --git a/src/desktop/consolidatedialog.cpp b/src/desktop/consolidatedialog.cpp index 9b9fd4f7..a6cdc61b 100755 --- a/src/desktop/consolidatedialog.cpp +++ b/src/desktop/consolidatedialog.cpp @@ -284,9 +284,7 @@ bool ConsolidateDialog::validateCurrentPage() && w_defaultDoNotDeleteEmpty->isChecked(); m_destination = w_defaultDestination->currentData().value(); - for (int i = 0; i < m_list.size(); ++i) { - DocumentModel::Consolidate &c = m_list[i]; - + for (auto &c : m_list) { c.fieldMergeModes = m_fieldMergeModes; c.doNotDeleteEmpty = m_doNotDeleteEmpty; c.destinationIndex = calculateIndex(c, m_destination); @@ -333,6 +331,7 @@ void ConsolidateDialog::showIndividualMerge(int idx) auto destination = w_defaultDestination->currentData().value(); QVector fakeIndexes; + fakeIndexes.reserve(c.lots.size()); for (const auto lot : c.lots) fakeIndexes << int(m_documentLots.indexOf(lot)); diff --git a/src/desktop/desktopapplication.cpp b/src/desktop/desktopapplication.cpp index a9be761b..4ddc7559 100755 --- a/src/desktop/desktopapplication.cpp +++ b/src/desktop/desktopapplication.cpp @@ -185,7 +185,7 @@ DeveloperConsole *DesktopApplication::developerConsole() { if (!m_devConsole) { m_devConsole = new DeveloperConsole(u"\u2771\u2771\u2771 "_qs, [](QString command) { - return ScriptManager::inst()->executeString(command); + return ScriptManager::inst()->executeString(command); }); if (!m_loggingTimer.isActive()) m_loggingTimer.start(); @@ -235,7 +235,7 @@ bool DesktopApplication::notifyOtherInstance() bool res = server->listen(socketName); #if defined(Q_OS_UNIX) if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { - QFile::remove(QDir::cleanPath(QDir::tempPath()) + QLatin1Char('/') + socketName); + QFile::remove(QDir::cleanPath(QDir::tempPath()) + u'/' + socketName); res = server->listen(socketName); } #endif diff --git a/src/desktop/desktopuihelpers.cpp b/src/desktop/desktopuihelpers.cpp index aa4302d4..4815cf49 100644 --- a/src/desktop/desktopuihelpers.cpp +++ b/src/desktop/desktopuihelpers.cpp @@ -36,9 +36,6 @@ void DesktopUIHelpers::setDefaultParent(QWidget *defaultParent) s_defaultParent = defaultParent; } -DesktopUIHelpers::DesktopUIHelpers() -{ } - void DesktopUIHelpers::setPopupPos(QWidget *w, const QRect &pos) { QSize sh = w->sizeHint(); @@ -67,7 +64,7 @@ void DesktopUIHelpers::setPopupPos(QWidget *w, const QRect &pos) EventFilter::Result DesktopUIHelpers::selectAllFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::FocusIn) { - QFocusEvent *fe = static_cast(e); + auto *fe = static_cast(e); static const QVector validReasons = { Qt::MouseFocusReason, Qt::TabFocusReason, @@ -110,7 +107,7 @@ QCoro::Task DesktopUIHelpers::showMessageBox(QString } else { QByteArray out; - if (msg.contains(QLatin1Char('<'))) { + if (msg.contains(u'<')) { QTextDocument doc; doc.setHtml(msg); out = doc.toPlainText().toLocal8Bit(); @@ -167,7 +164,7 @@ QCoro::Task> DesktopUIHelpers::getInputDouble(QString text if (auto *sp = dlg.findChild()) { if (!unit.isEmpty()) - sp->setSuffix(QLatin1Char(' ') + unit); + sp->setSuffix(u' ' + unit); sp->setAlignment(Qt::AlignRight | Qt::AlignVCenter); sp->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType); sp->setCorrectionMode(QAbstractSpinBox::CorrectToNearestValue); @@ -198,7 +195,7 @@ QCoro::Task> DesktopUIHelpers::getInputInteger(QString text, if (auto *sp = dlg.findChild()) { if (!unit.isEmpty()) - sp->setSuffix(QLatin1Char(' ') + unit); + sp->setSuffix(u' ' + unit); sp->setAlignment(Qt::AlignRight | Qt::AlignVCenter); sp->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType); sp->setCorrectionMode(QAbstractSpinBox::CorrectToNearestValue); diff --git a/src/desktop/desktopuihelpers.h b/src/desktop/desktopuihelpers.h index 533cf59d..a7cbde4d 100644 --- a/src/desktop/desktopuihelpers.h +++ b/src/desktop/desktopuihelpers.h @@ -56,7 +56,7 @@ protected: void processToastMessages() override; private: - DesktopUIHelpers(); + DesktopUIHelpers() = default; std::unique_ptr m_currentToastMessage; diff --git a/src/desktop/developerconsole.cpp b/src/desktop/developerconsole.cpp index 83a01b1d..b0dfb9e0 100755 --- a/src/desktop/developerconsole.cpp +++ b/src/desktop/developerconsole.cpp @@ -20,7 +20,7 @@ DeveloperConsole::DeveloperConsole(const QString &prompt, - std::function(QString)> executeFunction, + const std::function(QString)> &executeFunction, QWidget *parent) : QFrame(parent) , m_log(new QPlainTextEdit) diff --git a/src/desktop/developerconsole.h b/src/desktop/developerconsole.h index 1743fe0b..251845b3 100755 --- a/src/desktop/developerconsole.h +++ b/src/desktop/developerconsole.h @@ -18,7 +18,7 @@ class DeveloperConsole : public QFrame Q_OBJECT public: - DeveloperConsole(const QString &prompt, std::function(QString)> executeFunction, + DeveloperConsole(const QString &prompt, const std::function(QString)> &executeFunction, QWidget *parent = nullptr); void setPrompt(const QString &prompt); diff --git a/src/desktop/documentdelegate.cpp b/src/desktop/documentdelegate.cpp index 2c585248..0ef7a921 100755 --- a/src/desktop/documentdelegate.cpp +++ b/src/desktop/documentdelegate.cpp @@ -352,7 +352,7 @@ void DocumentDelegate::paint(QPainter *p, const QStyleOptionViewItem &option, co if (lot->stockroom() == BrickLink::Stockroom::None) checkmark = -1; else - str = QLatin1Char('A' + char(lot->stockroom()) - char(BrickLink::Stockroom::A)); + str = QChar::fromLatin1('A' + char(lot->stockroom()) - char(BrickLink::Stockroom::A)); break; } @@ -595,7 +595,7 @@ bool DocumentDelegate::editorEvent(QEvent *e, QAbstractItemModel *model, const Q bool DocumentDelegate::nonInlineEdit(QEvent *e, const QStyleOptionViewItem &option, const QModelIndex &idx) { - QAbstractItemModel *model = const_cast(idx.model()); + auto *model = const_cast(idx.model()); bool accept = true; @@ -620,7 +620,7 @@ bool DocumentDelegate::nonInlineEdit(QEvent *e, const QStyleOptionViewItem &opti case DocumentModel::Stockroom: { bool noneKey = (QKeySequence(key) == QKeySequence(tr("-", "set stockroom to none"))); - const BrickLink::Stockroom value = idx.data(Qt::EditRole).value(); + const auto value = idx.data(Qt::EditRole).value(); BrickLink::Stockroom setValue = value; if (keypress && (key == Qt::Key_A)) @@ -642,7 +642,7 @@ bool DocumentDelegate::nonInlineEdit(QEvent *e, const QStyleOptionViewItem &opti bool newKey = (QKeySequence(key) == QKeySequence(tr("N", "set condition to new"))); bool usedKey = (QKeySequence(key) == QKeySequence(tr("U", "set condition to used"))); - const BrickLink::Condition value = idx.data(Qt::EditRole).value(); + const auto value = idx.data(Qt::EditRole).value(); BrickLink::Condition setValue = value; if (keypress && newKey) @@ -661,7 +661,7 @@ bool DocumentDelegate::nonInlineEdit(QEvent *e, const QStyleOptionViewItem &opti bool excludeKey = (QKeySequence(key) == QKeySequence(tr("E", "set status to exclude"))); bool extraKey = (QKeySequence(key) == QKeySequence(tr("X", "set status to extra"))); - const BrickLink::Status value = idx.data(Qt::EditRole).value(); + const auto value = idx.data(Qt::EditRole).value(); BrickLink::Status setValue = value; if (keypress && includeKey) @@ -705,7 +705,7 @@ bool DocumentDelegate::nonInlineEdit(QEvent *e, const QStyleOptionViewItem &opti connect(m_select_item, &QDialog::finished, this, [this](int result) { if (result == QDialog::Accepted) { auto ctxIdx = m_select_item->property("contextIndex").toModelIndex(); - QAbstractItemModel *ctxModel = const_cast(ctxIdx.model()); + auto *ctxModel = const_cast(ctxIdx.model()); setModelDataInternal(QVariant::fromValue(m_select_item->item()), ctxModel, ctxIdx); } }); @@ -735,7 +735,7 @@ bool DocumentDelegate::nonInlineEdit(QEvent *e, const QStyleOptionViewItem &opti connect(m_select_color, &QDialog::finished, this, [this](int result) { if (result == QDialog::Accepted) { auto ctxIdx = m_select_color->property("contextIndex").toModelIndex(); - QAbstractItemModel *ctxModel = const_cast(ctxIdx.model()); + auto *ctxModel = const_cast(ctxIdx.model()); setModelDataInternal(QVariant::fromValue(m_select_color->color()), ctxModel, ctxIdx); } }); @@ -980,7 +980,7 @@ void DocumentDelegate::setModelDataInternal(const QVariant &value, QAbstractItem QString DocumentDelegate::displayData(const QModelIndex &idx, const QVariant &display, bool toolTip) { QLocale loc; - static const QString dash = QStringLiteral("-"); + static const QString dash = u"-"_qs; switch (idx.column()) { case DocumentModel::Status: { @@ -1017,7 +1017,7 @@ QString DocumentDelegate::displayData(const QModelIndex &idx, const QVariant &di && (item->subCondition() != BrickLink::SubCondition::None)) { QString scStr; switch (item->subCondition()) { - case BrickLink::SubCondition::None : scStr = QStringLiteral("-"); break; + case BrickLink::SubCondition::None : scStr = u"-"_qs; break; case BrickLink::SubCondition::Sealed : scStr = tr("Sealed"); break; case BrickLink::SubCondition::Complete : scStr = tr("Complete"); break; case BrickLink::SubCondition::Incomplete: scStr = tr("Incomplete"); break; diff --git a/src/desktop/flowlayout.cpp b/src/desktop/flowlayout.cpp index 7e4cfe6c..df23e0cd 100755 --- a/src/desktop/flowlayout.cpp +++ b/src/desktop/flowlayout.cpp @@ -43,7 +43,7 @@ int FlowLayout::smartSpacing(QStyle::PixelMetric pm) const if (!p) { return -1; } else if (p->isWidgetType()) { - QWidget *pw = static_cast(p); + auto *pw = static_cast(p); return pw->style()->pixelMetric(pm, nullptr, pw); } else { return static_cast(p)->spacing(); diff --git a/src/desktop/headerview.cpp b/src/desktop/headerview.cpp index cd413f46..ec7b2182 100644 --- a/src/desktop/headerview.cpp +++ b/src/desktop/headerview.cpp @@ -26,7 +26,6 @@ class SectionItem : public QListWidgetItem { public: SectionItem() = default; - ~SectionItem() override; int logicalIndex() const { return m_lidx; } void setLogicalIndex(int idx) { m_lidx = idx; } @@ -35,9 +34,6 @@ private: int m_lidx = -1; }; -SectionItem::~SectionItem() -{ } - /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// @@ -148,9 +144,9 @@ HeaderView::HeaderView(Qt::Orientation o, QWidget *parent) } else { if (qApp->keyboardModifiers() == Qt::ShiftModifier) { bool found = false; - for (int i = 0; i < m_sortColumns.size(); ++i) { - if (m_sortColumns.at(i).first == section) { - m_sortColumns[i].second = Qt::SortOrder(1 - m_sortColumns.at(i).second); + for (auto &[s, order] : m_sortColumns) { + if (s == section) { + order = Qt::SortOrder(1 - order); found = true; break; } @@ -277,6 +273,10 @@ bool HeaderView::restoreLayout(const QByteArray &config) QVector positions; QVector isHiddens; + sizes.reserve(count); + positions.reserve(count); + isHiddens.reserve(count); + for (int i = 0; i < count; ++i) { qint32 size, position; bool isHidden; @@ -406,12 +406,13 @@ void HeaderView::showMenu(const QPoint &pos) return; QVector order; + order.reserve(count()); for (int vi = 0; vi < count(); ++vi) { int li = logicalIndex(vi); order << li; } - QMenu *m = new QMenu(this); + auto *m = new QMenu(this); m->setAttribute(Qt::WA_DeleteOnClose); m->addAction(tr("Configure columns..."))->setData(-1); diff --git a/src/desktop/importcartdialog.h b/src/desktop/importcartdialog.h index cb7dc4e0..e5e9adc0 100755 --- a/src/desktop/importcartdialog.h +++ b/src/desktop/importcartdialog.h @@ -24,7 +24,7 @@ public: protected: void keyPressEvent(QKeyEvent *e) override; - virtual void changeEvent(QEvent *e) override; + void changeEvent(QEvent *e) override; void languageChange(); protected slots: diff --git a/src/desktop/importinventorydialog.cpp b/src/desktop/importinventorydialog.cpp index 5ea004e4..ae9d0099 100644 --- a/src/desktop/importinventorydialog.cpp +++ b/src/desktop/importinventorydialog.cpp @@ -42,7 +42,7 @@ ImportInventoryDialog::ImportInventoryDialog(const BrickLink::Item *item, int qu setFocusProxy(m_select); } else { m_verifyLabel = new QLabel(this); - m_verifyLabel->setText(tr("Parting out:") + u" " + QString::fromLatin1(m_verifyItem->id()) + m_verifyLabel->setText(tr("Parting out:") + u" " + QLatin1String(m_verifyItem->id()) + u" " + m_verifyItem->name() + u" #include #include @@ -534,8 +535,8 @@ ViewPane *MainWindow::createViewPane(Document *activeDocument, QWidget *window) QDockWidget *MainWindow::createDock(QWidget *widget, const char *name) { - QDockWidget *dock = new QDockWidget(QString(), this); - dock->setObjectName(QString::fromLatin1(name)); + auto *dock = new QDockWidget(QString(), this); + dock->setObjectName(QLatin1String(name)); dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable); dock->setTitleBarWidget(new FancyDockTitleBar(dock)); dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); @@ -827,13 +828,13 @@ bool MainWindow::setupToolBar() if (an == u"-") { m_toolbar->addSeparator()->setObjectName(an); } else if (an == u"|") { - QWidget *spacer = new QWidget(); + auto *spacer = new QWidget(); spacer->setObjectName(an); int sp = 2 * style()->pixelMetric(QStyle::PM_ToolBarSeparatorExtent); spacer->setFixedSize(sp, sp); m_toolbar->addWidget(spacer); } else if (an == u"<>") { - QWidget *spacer = new QWidget(); + auto *spacer = new QWidget(); spacer->setObjectName(an); int sp = 2 * style()->pixelMetric(QStyle::PM_ToolBarSeparatorExtent); spacer->setMinimumSize(sp, sp); @@ -1060,7 +1061,7 @@ void MainWindow::createActions() QList MainWindow::contextMenuActions() const { - static const char *contextActions[] = { + static const std::array contextActions = { "edit_cut", "edit_copy", "edit_paste", @@ -1083,6 +1084,7 @@ QList MainWindow::contextMenuActions() const }; static QList actions; if (actions.isEmpty()) { + actions.reserve(contextActions.size()); for (const auto &an : contextActions) actions << ((an == QByteArray("-")) ? nullptr : ActionManager::inst()->qAction(an)); } @@ -1335,8 +1337,8 @@ QWidget *UndoAction::createWidget(QWidget *parent) button->setPopupMode(QToolButton::MenuButtonPopup); // we need a margin - otherwise the list will paint over the menu's border - QWidget *w = new QWidget(); - QVBoxLayout *l = new QVBoxLayout(w); + auto *w = new QWidget(); + auto *l = new QVBoxLayout(w); int fw = menu->style()->pixelMetric(QStyle::PM_DefaultFrameWidth); l->setContentsMargins(fw, fw, fw, fw); diff --git a/src/desktop/priceguidewidget.cpp b/src/desktop/priceguidewidget.cpp index c2d746db..33cdb9bc 100644 --- a/src/desktop/priceguidewidget.cpp +++ b/src/desktop/priceguidewidget.cpp @@ -635,7 +635,7 @@ void PriceGuideWidget::paintEvent(QPaintEvent *e) bool valid = d->m_pg && d->m_pg->isValid(); bool is_updating = d->m_pg && (d->m_pg->updateStatus() == BrickLink::UpdateStatus::Updating); - QString str = d->m_pg ? QStringLiteral("-") : QString(); + QString str = d->m_pg ? u"-"_qs : QString(); auto crate = Currency::inst()->rate(d->m_ccode); for (const cell &c : std::as_const(d->m_cells)) { diff --git a/src/desktop/printdialog.cpp b/src/desktop/printdialog.cpp index 3397bea8..d14665b8 100755 --- a/src/desktop/printdialog.cpp +++ b/src/desktop/printdialog.cpp @@ -64,7 +64,7 @@ PrintDialog::PrintDialog(bool asPdf, View *window) updateActions(); }); - QVBoxLayout *containerLayout = new QVBoxLayout(w_print_preview_container); + auto *containerLayout = new QVBoxLayout(w_print_preview_container); containerLayout->setContentsMargins(0, 0, 0, 0); containerLayout->addWidget(w_print_preview); @@ -288,8 +288,8 @@ void PrintDialog::updatePageRange() if (fromTo.size() == 1) { from = to = fromTo.at(0).toUInt(&ok); } else if (fromTo.size() == 2) { - QString fromStr = fromTo.at(0); - QString toStr = fromTo.at(1); + const QString &fromStr = fromTo.at(0); + const QString &toStr = fromTo.at(1); if (fromStr.isEmpty() && toStr.isEmpty()) { ok = false; diff --git a/src/desktop/progresscircle.cpp b/src/desktop/progresscircle.cpp index e538293a..7d6821a2 100644 --- a/src/desktop/progresscircle.cpp +++ b/src/desktop/progresscircle.cpp @@ -9,6 +9,7 @@ #include #include +#include #include "progresscircle.h" @@ -102,7 +103,7 @@ void ProgressCircle::resizeEvent(QResizeEvent *) void ProgressCircle::mousePressEvent(QMouseEvent *e) { - QMenu *m = new QMenu(this); + auto *m = new QMenu(this); connect(m, &QMenu::aboutToHide, m, &QObject::deleteLater); auto *a = m->addAction(tr("Cancel all active downloads")); a->setEnabled(m_online && ((m_value >= m_min) && (m_value < m_max))); @@ -140,7 +141,7 @@ void ProgressCircle::paintEvent(QPaintEvent *) if (sweepAngle) { if (!m_fill) { - m_fill.reset(new QConicalGradient(r.center(), qreal(45))); + m_fill = std::make_unique(r.center(), qreal(45)); m_fill->setColorAt(0, m_color); m_fill->setColorAt(0.25, m_color.lighter()); m_fill->setColorAt(0.5, m_color); diff --git a/src/desktop/progressdialog.cpp b/src/desktop/progressdialog.cpp index e59a56ae..e5d1c02a 100644 --- a/src/desktop/progressdialog.cpp +++ b/src/desktop/progressdialog.cpp @@ -35,7 +35,7 @@ ProgressDialog::ProgressDialog(const QString &title, TransferJob *job, QWidget * m_header->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); lay->addWidget(m_header); - QFrame *frame = new QFrame(this); + auto *frame = new QFrame(this); frame->setFrameStyle(int(QFrame::HLine) | int(QFrame::Sunken)); frame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); lay->addWidget(frame); diff --git a/src/desktop/selectdocumentdialog.cpp b/src/desktop/selectdocumentdialog.cpp index a11608c4..c2687484 100644 --- a/src/desktop/selectdocumentdialog.cpp +++ b/src/desktop/selectdocumentdialog.cpp @@ -50,7 +50,7 @@ SelectDocument::SelectDocument(const DocumentModel *self, QWidget *parent) for (const Document *doc : docs) { auto model = doc->model(); if (model != self) { - QListWidgetItem *item = new QListWidgetItem(doc->filePathOrTitle(), m_documentList); + auto *item = new QListWidgetItem(doc->filePathOrTitle(), m_documentList); item->setData(Qt::UserRole, QVariant::fromValue(model)); } } @@ -99,6 +99,7 @@ LotList SelectDocument::lots() const } LotList list; + list.reserve(srcList.size()); for (const Lot *lot : std::as_const(srcList)) list << new Lot(*lot); return list; diff --git a/src/desktop/selectmergemode.cpp b/src/desktop/selectmergemode.cpp index 3be04799..5360e3d2 100755 --- a/src/desktop/selectmergemode.cpp +++ b/src/desktop/selectmergemode.cpp @@ -169,7 +169,7 @@ void SelectMergeMode::createFields() for (const auto &mode : modes) { auto tb = new QToolButton(); tb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - tb->setIcon(QIcon::fromTheme(QLatin1String(mode.icon))); + tb->setIcon(QIcon::fromTheme(QString::fromLatin1(mode.icon))); tb->setText(tr(mode.name)); tb->setToolTip(tr(mode.toolTip)); tb->setAutoRaise(true); @@ -206,7 +206,7 @@ void SelectMergeMode::createFields() || (possibleModes & mode.mergeMode)) { auto tb = new QToolButton(); tb->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - tb->setIcon(QIcon::fromTheme(QLatin1String(mode.icon))); + tb->setIcon(QIcon::fromTheme(QString::fromLatin1(mode.icon))); tb->setText(tr(mode.name)); tb->setToolTip(tr(mode.toolTip)); tb->setCheckable(true); diff --git a/src/desktop/settingsdialog.cpp b/src/desktop/settingsdialog.cpp index 43b3a3c2..c9fd5e4c 100644 --- a/src/desktop/settingsdialog.cpp +++ b/src/desktop/settingsdialog.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only +#include #include #include #include @@ -72,7 +73,7 @@ public: { u"<>"_qs, QT_TR_NOOP("Flexible Space Separator") }, }; for (const auto &sep : separators) { - QAction *a = new QAction(this); + auto *a = new QAction(this); a->setObjectName(sep.first); a->setText(tr(sep.second)); m_separatorActions.insert(sep.first, a); @@ -173,7 +174,7 @@ public: if (indexes.size() != 1) return nullptr; - QMimeData *mimeData = new QMimeData(); + auto *mimeData = new QMimeData(); QByteArray encodedData; QDataStream ds(&encodedData, QIODevice::WriteOnly); @@ -679,7 +680,7 @@ static int day2sec(int d) static QString systemDirName(const QString &path) { - static const QStandardPaths::StandardLocation locations[] = { + static const std::array locations = { QStandardPaths::DesktopLocation, QStandardPaths::DocumentsLocation, QStandardPaths::MusicLocation, @@ -763,7 +764,7 @@ SettingsDialog::SettingsDialog(const QString &start_on_page, QWidget *parent) connect(w_bl_username, &QLineEdit::textChanged, this, [this](const QString &s) { - bool isWrong = s.contains(QLatin1Char('@')); + bool isWrong = s.contains(u'@'); bool wasWrong = w_bl_username->property("showInputError").toBool(); if (isWrong != wasWrong) { diff --git a/src/desktop/smartvalidator.cpp b/src/desktop/smartvalidator.cpp index 4e2325fd..c23e5dae 100755 --- a/src/desktop/smartvalidator.cpp +++ b/src/desktop/smartvalidator.cpp @@ -39,7 +39,7 @@ bool DotCommaFilter::eventFilter(QObject *o, QEvent *e) for (int i = 0; i < text.length(); ++i) { QChar &ir = text[i]; - if (ir == QLatin1Char('.') || ir == QLatin1Char(',')) { + if (ir == u'.' || ir == u',') { ir = QLocale::system().decimalPoint().at(0); fixed = (text != ke->text()); } diff --git a/src/desktop/viewpane.cpp b/src/desktop/viewpane.cpp index 1f8260bf..1fa9514e 100755 --- a/src/desktop/viewpane.cpp +++ b/src/desktop/viewpane.cpp @@ -55,7 +55,7 @@ public: QSize CollapsibleLabel::minimumSizeHint() const { - return QSize(0, 0); + return {0, 0}; } @@ -171,7 +171,8 @@ private: QTreeView *m_list; }; -ViewPane::ViewPane(std::function viewPaneCreate, Document *activeDocument) +ViewPane::ViewPane(const std::function &viewPaneCreate, + Document *activeDocument) : QWidget() , m_viewPaneCreate(viewPaneCreate) , m_openDocumentsMenu(new OpenDocumentsMenu(this)) @@ -566,19 +567,19 @@ void ViewPane::updateStatistics() QString wgtstr; if (qFuzzyCompare(stat.weight(), -std::numeric_limits::min())) { - wgtstr = QStringLiteral("-"); + wgtstr = u"-"_qs; } else { wgtstr = Utility::weightToString(std::abs(stat.weight()), Config::inst()->measurementSystem(), true /*optimize*/, true /*add unit*/); if (stat.weight() < 0) - wgtstr.prepend(QStringLiteral(u"\u2265 ")); + wgtstr.prepend(u"\u2265 "_qs); } m_weight->setText(wgtstr); QString valstr = Currency::toDisplayString(stat.value()); if (stat.minValue() < stat.value()) - valstr.prepend(QStringLiteral(u"\u2264 ")); + valstr.prepend(u"\u2264 "_qs); m_value->setText(valstr); b = !qFuzzyIsNull(stat.cost()); @@ -795,7 +796,7 @@ void ViewPane::createToolBar() addSeparator(); - QHBoxLayout *currencyLayout = new QHBoxLayout(); + auto *currencyLayout = new QHBoxLayout(); currencyLayout->setSpacing(0); currencyLayout->setSizeConstraint(QLayout::SetMaximumSize); m_value = new CollapsibleLabel(); @@ -838,7 +839,7 @@ void ViewPane::createToolBar() m_splitWindow = new QAction(this); m_splitWindow->setIcon(QIcon::fromTheme(u"document-new"_qs)); - QMenu *splitMenu = new QMenu(m_split); + auto *splitMenu = new QMenu(m_split); splitMenu->addAction(m_splitClose); splitMenu->addSeparator(); splitMenu->addAction(m_splitH); diff --git a/src/desktop/viewpane.h b/src/desktop/viewpane.h index 2e445315..c677c084 100755 --- a/src/desktop/viewpane.h +++ b/src/desktop/viewpane.h @@ -31,7 +31,8 @@ class ViewPane : public QWidget Q_OBJECT public: - ViewPane(std::function viewPaneCreate, Document *activeDocument); + ViewPane(const std::function &viewPaneCreate, + Document *activeDocument); ~ViewPane() override; void newWindow(); diff --git a/src/ldraw/library.cpp b/src/ldraw/library.cpp index 2457f8d9..0a0fcf1b 100644 --- a/src/ldraw/library.cpp +++ b/src/ldraw/library.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only #include +#include #include #include @@ -334,15 +335,15 @@ QCoro::Task Library::setPath(const QString &path, bool forceReload) } if (valid) { - static const char *subdirs[] = { "LEGO", "Unofficial/p/48", "Unofficial/p", "p/48", "p", - "Unofficial/parts", "parts", "models" }; + static const std::array subdirs = { "LEGO", "Unofficial/p/48", "Unofficial/p", "p/48", "p", + "Unofficial/parts", "parts", "models" }; for (auto subdir : subdirs) { if (m_zip) { m_searchpath << QString(u"!ZIP!ldraw/" + QLatin1String(subdir)); } else { QDir sdir(m_path); - QString s = QLatin1String(subdir); + QString s = QString::fromLatin1(subdir); if (sdir.cd(s)) m_searchpath << sdir.canonicalPath(); @@ -465,7 +466,7 @@ void Library::emitUpdateStartedIfNecessary() Part *Library::findPart(const QString &_filename, const QString &_parentdir) { QString filename = _filename; - filename.replace(QLatin1Char('\\'), QLatin1Char('/')); + filename.replace(u'\\', u'/'); QString parentdir = _parentdir; if (!parentdir.isEmpty() && !parentdir.startsWith(u"!ZIP!")) parentdir = QDir(parentdir).canonicalPath(); @@ -669,11 +670,9 @@ QStringList Library::potentialLDrawDirs() QStringList result; - for (auto dir = dirs.begin(); dir != dirs.end(); ++dir) { - if (!dir->isEmpty()) { - if (checkLDrawDir(*dir)) - result.append(*dir); - } + for (const auto &dir : std::as_const(dirs)) { + if (!dir.isEmpty() && checkLDrawDir(dir)) + result.append(dir); } return result; diff --git a/src/ldraw/part.cpp b/src/ldraw/part.cpp index 3eb777d6..1a220f8c 100755 --- a/src/ldraw/part.cpp +++ b/src/ldraw/part.cpp @@ -107,7 +107,7 @@ BfcCommandElement::BfcCommandElement(const QString &text) auto c = text.split(u' '); if ((c.count() >= 2) && (c.at(0) == u"BFC")) { for (int i = 1; i < c.length(); ++i) { - QString bfcCommand = c.at(i); + const QString &bfcCommand = c.at(i); if (bfcCommand == u"INVERTNEXT") m_invertNext = true; diff --git a/src/ldraw/rendercontroller.cpp b/src/ldraw/rendercontroller.cpp index 9f98b9c9..7cb592b4 100755 --- a/src/ldraw/rendercontroller.cpp +++ b/src/ldraw/rendercontroller.cpp @@ -324,7 +324,7 @@ void RenderController::fillVertexBuffers(Part *part, const BrickLink::Color *mod qsizetype oldSize = buffer.size(); size_t size = fs.size() * sizeof(float); buffer.resize(oldSize + qsizetype(size)); - float *ptr = reinterpret_cast(buffer.data() + oldSize); + auto *ptr = reinterpret_cast(buffer.data() + oldSize); memcpy(ptr, fs.begin(), size); }; @@ -394,8 +394,8 @@ void RenderController::fillVertexBuffers(Part *part, const BrickLink::Color *mod const float h2 = QVector3D::crossProduct(p2m - p0m, p2m - p1m).length() / (p1m - p0m).length() / 24; QRandomGenerator *rd = QRandomGenerator::global(); - float su = float(rd->generateDouble()); - float sv = float(rd->generateDouble()); + auto su = float(rd->generateDouble()); + auto sv = float(rd->generateDouble()); u[0] = su; v[0] = sv; @@ -431,8 +431,8 @@ void RenderController::fillVertexBuffers(Part *part, const BrickLink::Color *mod const float l1 = p0m.distanceToPoint(p1m) / 24; const float l3 = p0m.distanceToPoint(p3m)/ 24; QRandomGenerator *rd = QRandomGenerator::global(); - const float su = float(rd->generateDouble()); - const float sv = float(rd->generateDouble()); + const auto su = float(rd->generateDouble()); + const auto sv = float(rd->generateDouble()); u[0] = su; v[0] = sv; @@ -505,7 +505,7 @@ QQuick3DTextureData *RenderController::generateMaterialTextureData(const BrickLi if (texImage.isNull()) { const bool isSpeckle = color->isSpeckle(); - QString cacheName = QLatin1String(isSpeckle ? "Speckle" : "Glitter") + QString cacheName = (isSpeckle ? u"Speckle"_qs : u"Glitter"_qs) + u'_' + color->ldrawColor().name(QColor::HexArgb) + u'_' + color->particleColor().name(QColor::HexArgb) + u'_' + QString::number(double(color->particleMinSize())) diff --git a/src/ldraw/rendersettings.cpp b/src/ldraw/rendersettings.cpp index 1b2933c6..7ede590d 100755 --- a/src/ldraw/rendersettings.cpp +++ b/src/ldraw/rendersettings.cpp @@ -27,7 +27,7 @@ RenderSettings *RenderSettings::create(QQmlEngine *qe, QJSEngine *) return rs; } -void RenderSettings::forEachProperty(std::function callback) +void RenderSettings::forEachProperty(const std::function &callback) { const QMetaObject *mo = metaObject(); for (int i = mo->propertyOffset(); i < mo->propertyCount(); ++i) { @@ -48,7 +48,7 @@ void RenderSettings::load() const auto pdv = propertyDefaultValues(); forEachProperty([this, pdv](QMetaProperty &mp) { - QString name = QLatin1String(mp.name()); + QString name = QString::fromLatin1(mp.name()); auto v = Config::inst()->value(u"LDraw/RenderSettings/" + name); if (!v.isValid()) v = pdv.value(name); @@ -103,7 +103,7 @@ void RenderSettings::resetToDefaults() const auto pdv = propertyDefaultValues(); forEachProperty([this, pdv](QMetaProperty &mp) { - QString name = QLatin1String(mp.name()); + QString name = QString::fromLatin1(mp.name()); auto v = pdv.value(name); if (v.isValid()) mp.write(this, v); diff --git a/src/ldraw/rendersettings.h b/src/ldraw/rendersettings.h index e5f8cf5c..3a3ee460 100755 --- a/src/ldraw/rendersettings.h +++ b/src/ldraw/rendersettings.h @@ -90,7 +90,7 @@ private: RenderSettings(); static RenderSettings *s_inst; void setToDefault(); - void forEachProperty(std::function callback); + void forEachProperty(const std::function &callback); QQuaternion m_defaultRotation; bool m_orthographicCamera; diff --git a/src/utility/appstatistics.cpp b/src/utility/appstatistics.cpp index 25e6e4f6..87a8f3ef 100644 --- a/src/utility/appstatistics.cpp +++ b/src/utility/appstatistics.cpp @@ -52,6 +52,7 @@ void AppStatistics::removeSource(int sourceId) QVector AppStatistics::sourceIds() const { QVector sids; + sids.reserve(m_sources.size()); for (const auto &src : m_sources) sids << src.id; return sids; diff --git a/src/utility/chunkreader.cpp b/src/utility/chunkreader.cpp index d02fa28c..9e2f7b81 100644 --- a/src/utility/chunkreader.cpp +++ b/src/utility/chunkreader.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only +#include #include #include "chunkreader.h" @@ -212,9 +213,9 @@ bool ChunkWriter::endChunk() m_stream << len; m_file->seek(endpos); - static const char padbytes[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + static const std::array padbytes = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; if (len % 16) - m_stream.writeRawData(padbytes, 16 - len % 16); + m_stream.writeRawData(padbytes.data(), 16 - len % 16); m_stream << len << ci.version << ci.id; diff --git a/src/utility/exception.cpp b/src/utility/exception.cpp index 3136f959..e0d64417 100644 --- a/src/utility/exception.cpp +++ b/src/utility/exception.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only +#include #include #include @@ -27,8 +28,8 @@ Exception::Exception(const Exception ©) : m_errorString(copy.m_errorString) { } -Exception::Exception(Exception &&move) - : m_errorString(move.m_errorString) +Exception::Exception(Exception &&move) noexcept + : m_errorString(std::move(move.m_errorString)) { std::swap(m_whatBuffer, move.m_whatBuffer); } @@ -36,7 +37,7 @@ Exception::Exception(Exception &&move) const char *Exception::what() const noexcept { if (!m_whatBuffer) - m_whatBuffer.reset(new QByteArray); + m_whatBuffer = std::make_unique(); *m_whatBuffer = m_errorString.toLocal8Bit(); return m_whatBuffer->constData(); } diff --git a/src/utility/exception.h b/src/utility/exception.h index bffecaab..3320b900 100755 --- a/src/utility/exception.h +++ b/src/utility/exception.h @@ -22,9 +22,9 @@ public: explicit Exception(QFileDevice *f, const char *message); Exception(const Exception ©); - Exception(Exception &&move); + Exception(Exception &&move) noexcept; - virtual ~Exception() = default; + ~Exception() override = default; template inline Exception &arg(const Ts & ...ts) { diff --git a/src/utility/qparallelsort.h b/src/utility/qparallelsort.h index ac9cae92..65bd515c 100644 --- a/src/utility/qparallelsort.h +++ b/src/utility/qparallelsort.h @@ -164,7 +164,7 @@ static struct test_par_sort for (auto i = 0; i <= maxloop; ++i) { size_t count = size_t(1ULL << i); QByteArray msg = u"%3 test run %1 ... %2 values"_qs.arg(i).arg(count) - .arg(QString::fromLatin1(test.name)).toLatin1(); + .arg(QLatin1String(test.name)).toLatin1(); int *array = new int[count]; memcpy(array, src, sizeof(int) * count); diff --git a/src/utility/transfer.cpp b/src/utility/transfer.cpp index de1d99d0..0f168fe6 100644 --- a/src/utility/transfer.cpp +++ b/src/utility/transfer.cpp @@ -240,7 +240,7 @@ QString Transfer::defaultUserAgent() return s_default_user_agent; } -void Transfer::setInitFunction(std::function func) +void Transfer::setInitFunction(const std::function &func) { s_threadInitFunction = func; } diff --git a/src/utility/transfer.h b/src/utility/transfer.h index f754b546..1759601c 100644 --- a/src/utility/transfer.h +++ b/src/utility/transfer.h @@ -168,7 +168,7 @@ public: static void setDefaultUserAgent(const QString &ua); static QString defaultUserAgent(); - static void setInitFunction(std::function func); + static void setInitFunction(const std::function &func); signals: void overallProgress(int done, int total); diff --git a/src/utility/utility.cpp b/src/utility/utility.cpp index 8db65ac0..cfe87a9b 100644 --- a/src/utility/utility.cpp +++ b/src/utility/utility.cpp @@ -1,7 +1,7 @@ // Copyright (C) 2004-2023 Robert Griebl // SPDX-License-Identifier: GPL-3.0-only - +#include #include #include @@ -146,7 +146,7 @@ QColor Utility::contrastColor(const QColor &c, float f) QColor Utility::shadeColor(int n, float alpha) { - static QColor shades[12]; + static std::array shades; static bool once = false; if (!once) [[unlikely]] { for (int i = 0; i < 12; i++) @@ -197,7 +197,7 @@ QString Utility::weightToString(double w, QLocale::MeasurementSystem ms, bool op QString s = loc.toString(w, 'f', decimals); if (show_unit) { - s.append(QLatin1Char(' ')); + s.append(u' '); s.append(QLatin1String(unit)); } return s; @@ -234,7 +234,7 @@ QString Utility::localForInternationalCurrencySymbol(const QString &internationa QColor Utility::premultiplyAlpha(const QColor &c) { if (c.alpha()) { - QColor r = QColor(qPremultiply(c.rgba())); + auto r = QColor(qPremultiply(c.rgba())); r.setAlpha(255); return r; } diff --git a/src/utility/xmlhelpers.cpp b/src/utility/xmlhelpers.cpp index 50232b40..cae4676e 100755 --- a/src/utility/xmlhelpers.cpp +++ b/src/utility/xmlhelpers.cpp @@ -53,8 +53,8 @@ QIODevice *XmlHelpers::ParseXML::openFile(const QString &fileName) } XmlHelpers::ParseXML::ParseXML(QIODevice *file, const char *rootNodeName, const char *elementNodeName) - : m_rootNodeName(QLatin1String(rootNodeName)) - , m_elementNodeName(QLatin1String(elementNodeName)) + : m_rootNodeName(QString::fromLatin1(rootNodeName)) + , m_elementNodeName(QString::fromLatin1(elementNodeName)) , m_file(file) { } @@ -63,8 +63,8 @@ XmlHelpers::ParseXML::~ParseXML() delete m_file; } -void XmlHelpers::ParseXML::parse(std::function callback, - std::function rootCallback) +void XmlHelpers::ParseXML::parse(const std::function &callback, + const std::function &rootCallback) { QDomDocument doc; QString emsg; @@ -111,7 +111,7 @@ QString XmlHelpers::ParseXML::elementText(const QDomElement &parent, const char try { return elementText(parent, tagName); } catch (...) { - return QLatin1String(defaultText); + return QString::fromLatin1(defaultText); } } @@ -119,9 +119,9 @@ QString XmlHelpers::ParseXML::elementText(const QDomElement &parent, const char XmlHelpers::CreateXML::CreateXML(const char *rootNodeName, const char *elementNodeName) : m_domDoc(QString { }) - , m_elementNodeName(QLatin1String(elementNodeName)) + , m_elementNodeName(QString::fromLatin1(elementNodeName)) { - m_domRoot = m_domDoc.createElement(QLatin1String(rootNodeName)); + m_domRoot = m_domDoc.createElement(QString::fromLatin1(rootNodeName)); m_domDoc.appendChild(m_domRoot); } @@ -133,13 +133,13 @@ void XmlHelpers::CreateXML::createElement() void XmlHelpers::CreateXML::createText(const char *tagName, QStringView value) { - m_domItem.appendChild(m_domDoc.createElement(QLatin1String(tagName)) + m_domItem.appendChild(m_domDoc.createElement(QString::fromLatin1(tagName)) .appendChild(m_domDoc.createTextNode(value.toString())).parentNode()); } void XmlHelpers::CreateXML::createEmpty(const char *tagName) { - m_domItem.appendChild(m_domDoc.createElement(QLatin1String(tagName))); + m_domItem.appendChild(m_domDoc.createElement(QString::fromLatin1(tagName))); } QString XmlHelpers::CreateXML::toString() const diff --git a/src/utility/xmlhelpers.h b/src/utility/xmlhelpers.h index 22895118..9dcec5d1 100755 --- a/src/utility/xmlhelpers.h +++ b/src/utility/xmlhelpers.h @@ -22,8 +22,8 @@ public: ParseXML(QIODevice *file, const char *rootNodeName, const char *elementNodeName); ~ParseXML(); - void parse(std::function callback, - std::function rootCallback = { }); + void parse(const std::function &callback, + const std::function &rootCallback = { }); static QString elementText(const QDomElement &parent, const char *tagName); static QString elementText(const QDomElement &parent, const char *tagName, const char *defaultText);