From 5cdf13d6bd053a5dfee9b64ab46b282ab3311bbf Mon Sep 17 00:00:00 2001 From: WandererFan Date: Mon, 2 Jun 2025 12:24:05 -0400 Subject: [PATCH] Merge pull request #21377 from WandererFan/Removesnprintf [TD]remove snprintf --- src/Mod/TechDraw/Gui/CommandExtensionDims.cpp | 33 ++++++++----------- src/Mod/TechDraw/Gui/TaskCustomizeFormat.cpp | 6 +--- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp b/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp index 5c6b4299ea..5f351ac2d6 100644 --- a/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp +++ b/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp @@ -105,43 +105,36 @@ namespace TechDrawGui { //=========================================================================== // TechDraw_ExtensionInsertDiameter //=========================================================================== - -void execInsertPrefixChar(Gui::Command* cmd, std::string prefixFormat, const QAction *action = nullptr) { +void execInsertPrefixChar(Gui::Command* cmd, const std::string& prefixFormat) { // insert a prefix character into the format specifier std::vector selection; - if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("Command","TechDraw Insert Prefix"))) { + if (!_checkSelection(cmd, selection, QObject::tr("TechDraw Insert Prefix").toStdString())) { return; } std::string prefixText(prefixFormat); if (prefixFormat.find("%s") != std::string::npos) { DlgTemplateField ui(Gui::getMainWindow()); - const int MAX_PREFIX_LENGTH = 31; - - if (action) { - if (action->objectName() == QStringLiteral("TechDraw_ExtensionInsertRepetition")) { - ui.setFieldName(QT_TR_NOOP("Repeat Count")); - } - } - - ui.setFieldLength(MAX_PREFIX_LENGTH); - ui.setFieldContent(""); + ui.setFieldName(QObject::tr("Repeat Count").toStdString()); + ui.setFieldContent("1"); if (ui.exec() != QDialog::Accepted) { return; } - char prefixData[(MAX_PREFIX_LENGTH + 1)*4]; - snprintf(prefixData, sizeof(prefixData), prefixFormat.c_str(), ui.getFieldContent().toUtf8().constData()); - prefixText = prefixData; + QString numberFromDialog = ui.getFieldContent(); + QString qPrefixText = QStringLiteral("%1× ").arg(numberFromDialog); + prefixText = qPrefixText.toStdString(); } + size_t prefixSize = prefixText.capacity(); - Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Insert Prefix")); + Gui::Command::openCommand(QObject::tr("Insert Prefix").toStdString().c_str()); for (auto selected : selection) { auto object = selected.getObject(); if (object->isDerivedFrom()) { auto dim = static_cast(selected.getObject()); std::string formatSpec = dim->FormatSpec.getStrValue(); - formatSpec = prefixText + formatSpec; + formatSpec.reserve(formatSpec.capacity() + prefixSize); + formatSpec.insert(0, prefixText); dim->FormatSpec.setValue(formatSpec); } } @@ -234,7 +227,7 @@ void CmdTechDrawExtensionInsertRepetition::activated(int iMsg) { Q_UNUSED(iMsg); - execInsertPrefixChar(this, "%s× ", this->getAction()->action()); //× Multiplication sign U+00D7 + execInsertPrefixChar(this, "%s× "); //× Multiplication sign U+00D7 } bool CmdTechDrawExtensionInsertRepetition::isActive() @@ -341,7 +334,7 @@ void CmdTechDrawExtensionInsertPrefixGroup::activated(int iMsg) execInsertPrefixChar(this, "□"); break; case 2: //insert "n×" as prefix - execInsertPrefixChar(this, "%s× ", pcAction->actions().at(iMsg)); + execInsertPrefixChar(this, "%s× "); break; case 3: //remove prefix characters execRemovePrefixChar(this); diff --git a/src/Mod/TechDraw/Gui/TaskCustomizeFormat.cpp b/src/Mod/TechDraw/Gui/TaskCustomizeFormat.cpp index 5653c4f04b..9128392050 100644 --- a/src/Mod/TechDraw/Gui/TaskCustomizeFormat.cpp +++ b/src/Mod/TechDraw/Gui/TaskCustomizeFormat.cpp @@ -173,11 +173,7 @@ void TaskCustomizeFormat::onFormatChanged() QString formatPreview = ui->leFormat->text(); if (isDimension) { - constexpr int size(80); - char buffer[size]; - std::string formatString = formatPreview.toUtf8().constData(); - auto usedSize = snprintf(buffer, size, formatString.c_str(), dimRawValue); - formatPreview = QString::fromUtf8(buffer, usedSize); + formatPreview = QString::asprintf(formatPreview.toUtf8(), dimRawValue); } ui->lbShowPreview->setText(formatPreview); }