From 74d0c2e2c1d5b8df5646ae6951a331b4e879d104 Mon Sep 17 00:00:00 2001 From: pavltom Date: Mon, 19 Feb 2024 17:37:09 +0100 Subject: [PATCH] [TechDraw] Add new Insert Repetition Count command --- src/Mod/TechDraw/Gui/CommandExtensionDims.cpp | 90 +++++++++++++++++-- src/Mod/TechDraw/Gui/DlgTemplateField.cpp | 5 ++ src/Mod/TechDraw/Gui/DlgTemplateField.h | 1 + src/Mod/TechDraw/Gui/Resources/TechDraw.qrc | 1 + .../TechDraw_ExtensionInsertRepetition.svg | 69 ++++++++++++++ src/Mod/TechDraw/Gui/Workbench.cpp | 1 + 6 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionInsertRepetition.svg diff --git a/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp b/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp index 40cb9569b7..60f07baa9c 100644 --- a/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp +++ b/src/Mod/TechDraw/Gui/CommandExtensionDims.cpp @@ -48,6 +48,7 @@ # include # include +#include "DlgTemplateField.h" #include "DrawGuiUtil.h" #include "TaskCustomizeFormat.h" #include "TaskSelectLineAttributes.h" @@ -99,20 +100,42 @@ namespace TechDrawGui { // TechDraw_ExtensionInsertDiameter //=========================================================================== -void execInsertPrefixChar(Gui::Command* cmd, std::string prefixChar) { +void execInsertPrefixChar(Gui::Command* cmd, std::string prefixFormat, const QAction *action = nullptr) { // insert a prefix character into the format specifier std::vector selection; if (!_checkSelection(cmd, selection, QT_TRANSLATE_NOOP("Command","TechDraw Insert Prefix"))) { return; } + std::string prefixText(prefixFormat); + if (prefixFormat.find("%s") != std::string::npos) { + DlgTemplateField ui; + const int MAX_PREFIX_LENGTH = 31; + + if (action) { + if (action->objectName() == QString::fromUtf8("TechDraw_ExtensionInsertRepetition")) { + ui.setFieldName(QT_TR_NOOP("Repeat Count")); + } + } + + ui.setFieldLength(MAX_PREFIX_LENGTH); + ui.setFieldContent(""); + 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; + } + Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Insert Prefix")); for (auto selected : selection) { auto object = selected.getObject(); if (object->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())) { auto dim = static_cast(selected.getObject()); std::string formatSpec = dim->FormatSpec.getStrValue(); - formatSpec = prefixChar + formatSpec; + formatSpec = prefixText + formatSpec; dim->FormatSpec.setValue(formatSpec); } } @@ -181,6 +204,40 @@ bool CmdTechDrawExtensionInsertSquare::isActive() return (havePage && haveView); } +//=========================================================================== +// TechDraw_ExtensionInsertRepetition +//=========================================================================== + +DEF_STD_CMD_A(CmdTechDrawExtensionInsertRepetition) + +CmdTechDrawExtensionInsertRepetition::CmdTechDrawExtensionInsertRepetition() + : Command("TechDraw_ExtensionInsertRepetition") +{ + sAppModule = "TechDraw"; + sGroup = QT_TR_NOOP("TechDraw"); + sMenuText = QT_TR_NOOP("Insert 'n×' Prefix"); + sToolTipText = QT_TR_NOOP("Insert repeated feature count at the beginning of the dimension text:
\ +- Select one or more dimensions
\ +- Click this tool"); + sWhatsThis = "TechDraw_ExtensionInsertRepetition"; + sStatusTip = sMenuText; + sPixmap = "TechDraw_ExtensionInsertRepetition"; +} + +void CmdTechDrawExtensionInsertRepetition::activated(int iMsg) +{ + Q_UNUSED(iMsg); + + execInsertPrefixChar(this, "%s× ", this->getAction()->action()); //× Multiplication sign U+00D7 +} + +bool CmdTechDrawExtensionInsertRepetition::isActive() +{ + bool havePage = DrawGuiUtil::needPage(this); + bool haveView = DrawGuiUtil::needView(this); + return (havePage && haveView); +} + //=========================================================================== // TechDraw_ExtensionRemovePrefixChar //=========================================================================== @@ -277,7 +334,10 @@ void CmdTechDrawExtensionInsertPrefixGroup::activated(int iMsg) case 1: //insert "□" as prefix execInsertPrefixChar(this, "□"); break; - case 2: //remove prefix characters + case 2: //insert "n×" as prefix + execInsertPrefixChar(this, "%s× ", pcAction->actions().at(iMsg)); + break; + case 3: //remove prefix characters execRemovePrefixChar(this); break; default: @@ -300,9 +360,13 @@ Gui::Action* CmdTechDrawExtensionInsertPrefixGroup::createAction() p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionInsertSquare")); p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionInsertSquare")); QAction* p3 = pcAction->addAction(QString()); - p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionRemovePrefixChar")); - p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionRemovePrefixChar")); - p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionRemovePrefixChar")); + p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionInsertRepetition")); + p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionInsertRepetition")); + p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionInsertRepetition")); + QAction* p4 = pcAction->addAction(QString()); + p4->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionRemovePrefixChar")); + p4->setObjectName(QString::fromLatin1("TechDraw_ExtensionRemovePrefixChar")); + p4->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionRemovePrefixChar")); _pcAction = pcAction; languageChange(); @@ -338,12 +402,19 @@ void CmdTechDrawExtensionInsertPrefixGroup::languageChange() - Click this tool")); arc2->setStatusTip(arc2->text()); QAction* arc3 = a[2]; - arc3->setText(QApplication::translate("TechDraw_ExtensionremovePrefixChar", "Remove Prefix")); - arc3->setToolTip(QApplication::translate("TechDraw_ExtensionremovePrefixChar", -"Remove prefix symbols at the beginning of the dimension text:
\ + arc3->setText(QApplication::translate("CmdTechDrawExtensionInsertRepetition", "Insert 'n×' Prefix")); + arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionInsertRepetition", +"Insert repeated feature count at the beginning of the dimension text:
\ - Select one or more dimensions
\ - Click this tool")); arc3->setStatusTip(arc3->text()); + QAction* arc4 = a[3]; + arc4->setText(QApplication::translate("TechDraw_ExtensionremovePrefixChar", "Remove Prefix")); + arc4->setToolTip(QApplication::translate("TechDraw_ExtensionremovePrefixChar", +"Remove prefix symbols at the beginning of the dimension text:
\ +- Select one or more dimensions
\ +- Click this tool")); + arc4->setStatusTip(arc4->text()); } bool CmdTechDrawExtensionInsertPrefixGroup::isActive() @@ -2391,6 +2462,7 @@ void CreateTechDrawCommandsExtensionDims() rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertPrefixGroup()); rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertDiameter()); rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertSquare()); + rcCmdMgr.addCommand(new CmdTechDrawExtensionInsertRepetition()); rcCmdMgr.addCommand(new CmdTechDrawExtensionRemovePrefixChar()); rcCmdMgr.addCommand(new CmdTechDrawExtensionIncreaseDecreaseGroup()); rcCmdMgr.addCommand(new CmdTechDrawExtensionIncreaseDecimal()); diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.cpp b/src/Mod/TechDraw/Gui/DlgTemplateField.cpp index b759638421..2acb8a2a4a 100644 --- a/src/Mod/TechDraw/Gui/DlgTemplateField.cpp +++ b/src/Mod/TechDraw/Gui/DlgTemplateField.cpp @@ -51,6 +51,11 @@ void DlgTemplateField::setFieldName(std::string name) ui->lblName->setText(qs); } +void DlgTemplateField::setFieldLength(int length) +{ + ui->leInput->setMaxLength(length); +} + void DlgTemplateField::setFieldContent(std::string content) { QString qs = QString::fromUtf8(content.data(), content.size()); diff --git a/src/Mod/TechDraw/Gui/DlgTemplateField.h b/src/Mod/TechDraw/Gui/DlgTemplateField.h index 0fe641b7d0..129d375822 100644 --- a/src/Mod/TechDraw/Gui/DlgTemplateField.h +++ b/src/Mod/TechDraw/Gui/DlgTemplateField.h @@ -42,6 +42,7 @@ public: ~DlgTemplateField() override = default; void setFieldName(std::string name); + void setFieldLength(int length); void setFieldContent(std::string content); QString getFieldContent(); diff --git a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc index 6f7b3cc2f4..bf5926dd53 100644 --- a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc +++ b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc @@ -114,6 +114,7 @@ icons/TechDraw_ExtensionHoleCircle.svg icons/TechDraw_ExtensionIncreaseDecimal.svg icons/TechDraw_ExtensionInsertDiameter.svg + icons/TechDraw_ExtensionInsertRepetition.svg icons/TechDraw_ExtensionInsertSquare.svg icons/TechDraw_ExtensionLineParallel.svg icons/TechDraw_ExtensionLinePerpendicular.svg diff --git a/src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionInsertRepetition.svg b/src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionInsertRepetition.svg new file mode 100644 index 0000000000..872174798d --- /dev/null +++ b/src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionInsertRepetition.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/TechDraw/Gui/Workbench.cpp b/src/Mod/TechDraw/Gui/Workbench.cpp index 896384243d..b65f014c64 100644 --- a/src/Mod/TechDraw/Gui/Workbench.cpp +++ b/src/Mod/TechDraw/Gui/Workbench.cpp @@ -150,6 +150,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *tooldimensions << "Separator"; *tooldimensions << "TechDraw_ExtensionInsertDiameter"; *tooldimensions << "TechDraw_ExtensionInsertSquare"; + *tooldimensions << "TechDraw_ExtensionInsertRepetition"; *tooldimensions << "TechDraw_ExtensionRemovePrefixChar"; *tooldimensions << "Separator"; *tooldimensions << "TechDraw_ExtensionIncreaseDecimal";