From 32840628ae602844b64decd3885def04fada1115 Mon Sep 17 00:00:00 2001 From: Ryan K <114723629+ryankembrey@users.noreply.github.com> Date: Fri, 14 Nov 2025 05:45:05 +1100 Subject: [PATCH 01/21] BIM: Update sketch command name to be consistent with other workbenches (#24278) Co-authored-by: Ryan Kembrey --- src/Mod/BIM/bimcommands/BimSketch.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Mod/BIM/bimcommands/BimSketch.py b/src/Mod/BIM/bimcommands/BimSketch.py index fcc38849ff..101a81d400 100644 --- a/src/Mod/BIM/bimcommands/BimSketch.py +++ b/src/Mod/BIM/bimcommands/BimSketch.py @@ -31,11 +31,10 @@ QT_TRANSLATE_NOOP = FreeCAD.Qt.QT_TRANSLATE_NOOP class BIM_Sketch: - def GetResources(self): return { "Pixmap": "Sketch", - "MenuText": QT_TRANSLATE_NOOP("BIM_Sketch", "Sketch"), + "MenuText": QT_TRANSLATE_NOOP("BIM_Sketch", "New Sketch"), "ToolTip": QT_TRANSLATE_NOOP( "BIM_Sketch", "Creates a new sketch in the current working plane" ), From 9c22fc55f9e3ad8dfddee5d5aba898116b2febc7 Mon Sep 17 00:00:00 2001 From: Furgo <148809153+furgo16@users.noreply.github.com> Date: Thu, 13 Nov 2025 19:46:38 +0100 Subject: [PATCH 02/21] BIM: Update search box text for material search (#24754) * BIM: Update search box text for material search * BIM: change Material Manager title to title case * BIM: change Material Manager search placeholder text to sentence case * BIM: reword reference to tree to avoid confusion with the Tree View * BIM: Rename button text for creating Multi-Material for consistency --- src/Mod/BIM/bimcommands/BimMaterial.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Mod/BIM/bimcommands/BimMaterial.py b/src/Mod/BIM/bimcommands/BimMaterial.py index f5b64f497e..b7f3b71d9f 100644 --- a/src/Mod/BIM/bimcommands/BimMaterial.py +++ b/src/Mod/BIM/bimcommands/BimMaterial.py @@ -85,7 +85,7 @@ class BIM_Material: w = PARAMS.GetInt("BimMaterialDialogWidth", 230) h = PARAMS.GetInt("BimMaterialDialogHeight", 350) self.dlg.resize(w, h) - self.dlg.setWindowTitle(translate("BIM", "Select material")) + self.dlg.setWindowTitle(translate("BIM", "Select Material")) self.dlg.setWindowIcon(QtGui.QIcon(":/icons/Arch_Material.svg")) mw = FreeCADGui.getMainWindow() self.dlg.move(mw.frameGeometry().topLeft() + mw.rect().center() - self.dlg.rect().center()) @@ -104,8 +104,8 @@ class BIM_Material: searchLayout = QtGui.QHBoxLayout() searchLayout.setSpacing(2) searchBox = MatLineEdit(self.dlg) - searchBox.setPlaceholderText(translate("BIM", "Search Objects")) - searchBox.setToolTip(translate("BIM", "Searches for objects in the tree")) + searchBox.setPlaceholderText(translate("BIM", "Search materials")) + searchBox.setToolTip(translate("BIM", "Searches for materials in the list")) self.dlg.searchBox = searchBox searchLayout.addWidget(searchBox) searchBox.textChanged.connect(self.onSearch) @@ -138,7 +138,7 @@ class BIM_Material: buttonCreate.clicked.connect(self.onCreate) # create multi - buttonMulti = QtGui.QPushButton(translate("BIM", "Create new Multi-Material"), self.dlg) + buttonMulti = QtGui.QPushButton(translate("BIM", "New Multi-Material"), self.dlg) buttonMulti.setIcon(QtGui.QIcon(":/icons/Arch_Material_Multi.svg")) createButtonsLayout.addWidget(buttonMulti, 0, 1) buttonMulti.clicked.connect(self.onMulti) From bb37dfda0e6e689d497f038656f3c2430a089eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B4=A9=CA=9C=E1=B4=8F=C9=B4=E1=B4=87=E1=B4=85=CA=80?= =?UTF-8?q?=E1=B4=8F=C9=AA=E1=B4=85?= <73050054+PhoneDroid@users.noreply.github.com> Date: Thu, 13 Nov 2025 13:53:54 -0500 Subject: [PATCH 03/21] [ BIM ]: Refactor - Save Preset Stringify (#25140) * [ BIM ]: Refactor Save Preset Stringify * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/Mod/BIM/bimcommands/BimProjectManager.py | 58 +++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/Mod/BIM/bimcommands/BimProjectManager.py b/src/Mod/BIM/bimcommands/BimProjectManager.py index be39199e3b..73d2e5bf87 100644 --- a/src/Mod/BIM/bimcommands/BimProjectManager.py +++ b/src/Mod/BIM/bimcommands/BimProjectManager.py @@ -458,36 +458,42 @@ class BIM_ProjectManager: for i in range(self.form.groupsList.count()): groups.append(self.form.groupsList.item(i).text()) - s = "# FreeCAD BIM Project setup preset " + name + "\n" - s += "groupNewDocument=" + str(int(self.form.groupNewProject.isChecked())) + "\n" - s += "projectName=" + self.form.projectName.text() + "\n" - s += "groupSite=" + str(int(self.form.groupSite.isChecked())) + "\n" + form = self.form - s += "siteName=" + self.form.siteName.text() + "\n" - s += "siteAddress=" + self.form.siteAddress.text() + "\n" - s += "siteLongitude=" + str(self.form.siteLongitude.value()) + "\n" - s += "siteLatitude=" + str(self.form.siteLatitude.value()) + "\n" - s += "siteDeviation=" + str(self.form.siteDeviation.value()) + "\n" - s += "siteElevation=" + self.form.siteElevation.text() + "\n" + presets: dict[str, object] = { + "groupNewDocument": int(form.groupNewProject.isChecked()), + "projectName": form.projectName.text(), + "groupSite": int(form.groupSite.isChecked()), + "siteName": form.siteName.text(), + "siteAddress": form.siteAddress.text(), + "siteLongitude": form.siteLongitude.value(), + "siteLatitude": form.siteLatitude.value(), + "siteDeviation": form.siteDeviation.value(), + "siteElevation": form.siteElevation.text(), + "groupBuilding": int(form.groupBuilding.isChecked()), + "buildingName": form.buildingName.text(), + "buildingUse": form.buildingUse.currentIndex(), + "buildingLength": form.buildingLength.text(), + "buildingWidth": form.buildingWidth.text(), + "countVAxes": form.countVAxes.value(), + "distVAxes": form.distVAxes.text(), + "countHAxes": form.countHAxes.value(), + "distHAxes": form.distHAxes.text(), + "countLevels": form.countLevels.value(), + "levelHeight": form.levelHeight.text(), + "lineWidth": form.lineWidth.value(), + "lineColor": form.lineColor.property("color").getRgbF()[:3], + "groups": ";;".join(groups), + "addHumanFigure": int(form.addHumanFigure.isChecked()), + } - s += "groupBuilding=" + str(int(self.form.groupBuilding.isChecked())) + "\n" - s += "buildingName=" + self.form.buildingName.text() + "\n" - s += "buildingUse=" + str(self.form.buildingUse.currentIndex()) + "\n" - s += "buildingLength=" + self.form.buildingLength.text() + "\n" - s += "buildingWidth=" + self.form.buildingWidth.text() + "\n" - s += "countVAxes=" + str(self.form.countVAxes.value()) + "\n" - s += "distVAxes=" + self.form.distVAxes.text() + "\n" - s += "countHAxes=" + str(self.form.countHAxes.value()) + "\n" - s += "distHAxes=" + self.form.distHAxes.text() + "\n" - s += "countLevels=" + str(self.form.countLevels.value()) + "\n" - s += "levelHeight=" + self.form.levelHeight.text() + "\n" - s += "lineWidth=" + str(self.form.lineWidth.value()) + "\n" - s += "lineColor=" + str(self.form.lineColor.property("color").getRgbF()[:3]) + "\n" - s += "groups=" + ";;".join(groups) + "\n" - s += "addHumanFigure=" + str(int(self.form.addHumanFigure.isChecked())) + "\n" + preset = f"# FreeCAD BIM Project setup preset { name }\n" + + for key, value in presets.items(): + preset += f"{ key }={ value }\n" f = open(os.path.join(presetdir, name + ".txt"), "w") - f.write(s) + f.write(preset) f.close() self.fillPresets() From e8f826d0edfc98328b52e4ffe91dec3d4a3a237b Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Thu, 13 Nov 2025 13:35:28 -0600 Subject: [PATCH 04/21] Build: Bump minor version of main branch from 1.1 to 1.2 (#25274) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35fb32f9d5..8b964c6269 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ endif() project(FreeCAD) set(PACKAGE_VERSION_MAJOR "1") -set(PACKAGE_VERSION_MINOR "1") +set(PACKAGE_VERSION_MINOR "2") set(PACKAGE_VERSION_PATCH "0") # number of patch release (e.g. "4" for the 0.18.4 release) set(PACKAGE_VERSION_SUFFIX "dev") # either "dev" for development snapshot or "" (empty string) set(PACKAGE_BUILD_VERSION "0") # used when the same FreeCAD version will be re-released (for example using an updated LibPack) From 10709bd4670ae14541575910559e9b6154f05589 Mon Sep 17 00:00:00 2001 From: luzpaz Date: Thu, 13 Nov 2025 14:53:35 -0500 Subject: [PATCH 05/21] Fix typos and grammar (#24827) * Fix typos and grammar Fixes typos and grammar in several files. * fix missed typo * Remove unnecessary line in LeadInOut.py --------- Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com> --- src/Mod/CAM/Path/Dressup/Gui/LeadInOut.py | 30 +++++++++++------------ src/Mod/Draft/importDXF.py | 2 +- src/Tools/updatecrowdin.py | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Mod/CAM/Path/Dressup/Gui/LeadInOut.py b/src/Mod/CAM/Path/Dressup/Gui/LeadInOut.py index 3f301d8899..d6c1fcc536 100644 --- a/src/Mod/CAM/Path/Dressup/Gui/LeadInOut.py +++ b/src/Mod/CAM/Path/Dressup/Gui/LeadInOut.py @@ -671,7 +671,7 @@ class ObjectDressup: lead.append(self.createStraightMove(obj, lineBegin, begin)) # prepend "LineZ" style lead-in - vertical inclined line - # Should be apply only on straight Path segment + # Should be applied only on straight Path segment elif styleIn == "LineZ": # tangent vector in XY plane # normal vector is vertical @@ -686,7 +686,7 @@ class ObjectDressup: lead.append(self.createStraightMove(obj, lineBegin, begin)) # prepend "ArcZ" style lead-in - vertical Arc - # Should be apply only on straight Path segment + # Should be applied only on straight Path segment elif styleIn == "ArcZ": # tangent vector in XY plane # normal vector is vertical @@ -704,7 +704,7 @@ class ObjectDressup: arcBegin = begin + tangent + normal lead.extend(self.createArcZMoveDown(obj, arcBegin, begin, arcRadius)) - # replace 'begin' position by first lead-in command + # replace 'begin' position with first lead-in command begin = lead[0].positionBegin() if styleIn in ("Arc3d", "Line3d"): @@ -728,12 +728,12 @@ class ObjectDressup: if obj.StyleOut == "Helix" and outInstrPrev: """change Z for previous helix lead-out - Can not do it in getLeadEnd(), - because no any information about next moves there while creating Lead-out""" + Unable to do it in getLeadEnd(), due to lack of + existing information about next moves while creating Lead-out""" posPrevZ = outInstrPrev.positionEnd().z if posPrevZ > beginZ: """previous profile upper than this - mean procesing one stepdown profile""" + mean processing one stepdown profile""" halfStepZ = (posPrevZ - beginZ) / 2 outInstrPrev.param["Z"] = posPrevZ - halfStepZ @@ -847,7 +847,7 @@ class ObjectDressup: else: lead[-1].param["Z"] = self.baseOp.StartDepth.Value - # append travel moves to clearance height after finish all profiles + # append travel moves to clearance height after finishing all profiles if last and obj.StyleOut != "No Retract": lead += self.getTravelEnd(obj) @@ -888,7 +888,7 @@ class ObjectDressup: return i - # Increase travel length from begin + # Increase travel length from 'begin' def getOvertravelIn(self, obj, source, length, start, end): startPoint = source[start].positionBegin() endPoint = source[end].positionEnd() @@ -901,12 +901,12 @@ class ObjectDressup: instrLength = instr.pathLength() if Path.Geom.isRoughly(measuredLength + instrLength, length, 1): - # get needed length and not need to cut last command + # get needed length without needing to cut last command commands = source[end - i : end + 1] return commands elif measuredLength + instrLength > length: - # measured length exceed needed length and need cut command + # measured length exceeds needed length and needs cut command commands = source[end - i + 1 : end + 1] newLength = length - measuredLength newInstr = self.cutInstrBegin(obj, instr, newLength) @@ -938,12 +938,12 @@ class ObjectDressup: instrLength = instr.pathLength() if Path.Geom.isRoughly(measuredLength + instrLength, length, 1): - # get needed length and not need to cut last command + # get needed length without needing to cut last command commands = source[start : start + i + 1] return commands elif measuredLength + instrLength > length: - # measured length exceed needed length and need cut command + # measured length exceeds needed length and needs cut command commands = source[start : start + i] newLength = length - measuredLength newInstr = self.cutInstrEnd(obj, instr, newLength) @@ -1051,7 +1051,7 @@ class ObjectDressup: source = PathLanguage.Maneuver.FromPath(PathUtils.getPathWithPlacement(obj.Base)).instr maneuver = PathLanguage.Maneuver() - # Knowing weather a given instruction is the first cutting move is easy, + # Knowing whether a given instruction is the first cutting move is easy, # we just use a flag and set it to false afterwards. To find the last # cutting move we need to search the list in reverse order. @@ -1067,10 +1067,10 @@ class ObjectDressup: # Process all instructions for i, instr in enumerate(source): - # Process not mill instruction + # Process without mill instruction if not self.isCuttingMove(instr): if not instr.isMove(): - # non-move instruction get added verbatim + # non-move instruction gets added verbatim commands.append(instr) else: moveDir = self.getMoveDir(instr) diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index 01b3aeb068..b1205dec35 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -1522,7 +1522,7 @@ def drawSpline(spline, forceShape=False): if nbfitp != len(fitpoints): raise ValueError("Wrong number of fit points") if rational == all((w == 1.0 or w is None) for w in weights): - raise ValueError("inconsistant rational flag") + raise ValueError("Inconsistent rational flag") if len(weights) == 0: weights = None elif len(weights) != len(controlpoints): diff --git a/src/Tools/updatecrowdin.py b/src/Tools/updatecrowdin.py index f57f85cea1..8eeadd359b 100755 --- a/src/Tools/updatecrowdin.py +++ b/src/Tools/updatecrowdin.py @@ -337,7 +337,7 @@ def load_token(): token = file.read().strip() if token: return token - # if file does'nt exists read from CROWDIN_TOKEN + # if file doesn't exist, read from CROWDIN_TOKEN return os.environ.get("CROWDIN_TOKEN") From a18f45914ba73c6c2d66631d8d900d62326bdeee Mon Sep 17 00:00:00 2001 From: FEA-eng <59876896+FEA-eng@users.noreply.github.com> Date: Wed, 12 Nov 2025 11:50:02 +0100 Subject: [PATCH 06/21] FEM: Update constraint_tie.py --- src/Mod/Fem/femobjects/constraint_tie.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Fem/femobjects/constraint_tie.py b/src/Mod/Fem/femobjects/constraint_tie.py index c8945fce12..a541e89d92 100644 --- a/src/Mod/Fem/femobjects/constraint_tie.py +++ b/src/Mod/Fem/femobjects/constraint_tie.py @@ -102,7 +102,7 @@ class ConstraintTie(base_fempythonobject.BaseFemPythonObject): type="App::PropertyInteger", name="ConnectedSectors", group="Geometry", - doc="Number of connected sectors", + doc="Number of connected sectors used for results display", value=1, ) ) From 888ba973a5feeaf9110429ccd84bb0ceaeda4f2e Mon Sep 17 00:00:00 2001 From: Rahul Paul <179798584+Mr-Rahul-Paul@users.noreply.github.com> Date: Fri, 14 Nov 2025 01:28:21 +0530 Subject: [PATCH 07/21] Fix(TechDraw): Capitalize OK button in TemplateFields (#24866) --- src/Mod/TechDraw/TechDrawTools/TaskFillTemplateFields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/TechDraw/TechDrawTools/TaskFillTemplateFields.py b/src/Mod/TechDraw/TechDrawTools/TaskFillTemplateFields.py index d7c2c4b859..266beebb8d 100644 --- a/src/Mod/TechDraw/TechDrawTools/TaskFillTemplateFields.py +++ b/src/Mod/TechDraw/TechDrawTools/TaskFillTemplateFields.py @@ -423,7 +423,7 @@ class TaskFillTemplateFields: QtCore.QObject.connect( self.okbox, QtCore.SIGNAL("rejected()"), self.close ) - self.okbox.button(QtGui.QDialogButtonBox.Ok).setText("&Ok") + self.okbox.button(QtGui.QDialogButtonBox.Ok).setText("&OK") self.okbox.button(QtGui.QDialogButtonBox.Cancel).setText("&Cancel") self.button = self.okbox.button(QtGui.QDialogButtonBox.Ok) self.button.setEnabled(True) From a704ac301dd61c63b035cd515b19c03eb50e29ee Mon Sep 17 00:00:00 2001 From: Rehan Ahmed Date: Fri, 14 Nov 2025 01:49:19 +0530 Subject: [PATCH 08/21] Fix case inconsistencies (#24812) * Fix case inconsistency - Input Hints * Fix case inconsistency - Quick Measure * Fix case inconsistency - Navigation Indicator * Fix case inconsistency - BIM Status Widget * Remove .ts translation file changes --------- Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com> --- src/Gui/MainWindow.cpp | 4 ++-- src/Mod/BIM/BimStatus.py | 2 +- src/Mod/Tux/NavigationIndicatorGui.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 97fa37757b..a2cf7d4dbd 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -427,7 +427,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags f) d->hintLabel = new InputHintWidget(statusBar()); d->hintLabel->setObjectName(QStringLiteral("hintLabel")); //: A context menu action used to show or hide the input hints in the status bar - d->hintLabel->setWindowTitle(tr("Input hints")); + d->hintLabel->setWindowTitle(tr("Input Hints")); statusBar()->addWidget(d->hintLabel); @@ -437,7 +437,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags f) statusBar()->addPermanentWidget(d->rightSideLabel); d->rightSideLabel->setObjectName(QStringLiteral("rightSideLabel")); //: A context menu action used to enable or disable quick measure in the status bar - d->rightSideLabel->setWindowTitle(tr("Quick measure")); + d->rightSideLabel->setWindowTitle(tr("Quick Measure")); auto hGrp = App::GetApplication().GetParameterGroupByPath( "User parameter:BaseApp/Preferences/NotificationArea" diff --git a/src/Mod/BIM/BimStatus.py b/src/Mod/BIM/BimStatus.py index 590188c7c4..0af62adda1 100644 --- a/src/Mod/BIM/BimStatus.py +++ b/src/Mod/BIM/BimStatus.py @@ -123,7 +123,7 @@ def setStatusIcons(show=True): statuswidget.setObjectName("BIMStatusWidget") text = translate( "BIMStatusWidget", - "BIM status widget", + "BIM Status Widget", "A context menu action used to show or hide this toolbar widget", ) statuswidget.setWindowTitle(text) diff --git a/src/Mod/Tux/NavigationIndicatorGui.py b/src/Mod/Tux/NavigationIndicatorGui.py index fd740138b6..3e6062356a 100644 --- a/src/Mod/Tux/NavigationIndicatorGui.py +++ b/src/Mod/Tux/NavigationIndicatorGui.py @@ -668,7 +668,7 @@ indicator.adjustSize() indicator.setObjectName("NavigationIndicator") text = QtGui.QApplication.translate( "NavigationIndicator", - "Navigation indicator", + "Navigation Indicator", "A context menu action used to show or hide the 'Navigation indicator' toolbar widget", ) indicator.setWindowTitle(text) From cdc798ec124463a2319141b9e737933fcb6a89ed Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Thu, 13 Nov 2025 13:18:34 -0600 Subject: [PATCH 09/21] CI: Update CrowdIn action to use 1.1 release branch --- .github/workflows/push_crowdin_translations.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/push_crowdin_translations.yml b/.github/workflows/push_crowdin_translations.yml index 28ff4df7c3..fe8e42f42a 100644 --- a/.github/workflows/push_crowdin_translations.yml +++ b/.github/workflows/push_crowdin_translations.yml @@ -13,6 +13,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 with: fetch-depth: 0 + ref: releases/FreeCAD-1-1 - name: Install Qt ≥ 6.8 uses: jurplel/install-qt-action@d325aaf2a8baeeda41ad0b5d39f84a6af9bcf005 From b0a79a6f2cc716088e5a8dc57d439b1fef5a47ef Mon Sep 17 00:00:00 2001 From: tarman3 Date: Wed, 5 Nov 2025 20:46:23 +0200 Subject: [PATCH 10/21] CAM: DressupArray - Fix python import --- src/Mod/CAM/Path/Dressup/Gui/Array.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Mod/CAM/Path/Dressup/Gui/Array.py b/src/Mod/CAM/Path/Dressup/Gui/Array.py index f2a42dbead..43b0b14033 100644 --- a/src/Mod/CAM/Path/Dressup/Gui/Array.py +++ b/src/Mod/CAM/Path/Dressup/Gui/Array.py @@ -1,20 +1,14 @@ # SPDX-License-Identifier: LGPL-2.1-or-later -from PySide.QtCore import QT_TRANSLATE_NOOP -import FreeCAD -import Path -import Path.Base.Util as PathUtil -import Path.Dressup.Array as DressupArray -import Path.Dressup.Utils as PathDressup -import Path.Main.Stock as PathStock -import PathScripts.PathUtils as PathUtils - -from PySide import QtGui -from PySide.QtCore import QT_TRANSLATE_NOOP import FreeCAD import FreeCADGui import Path -import PathGui +import Path.Dressup.Array as DressupArray +import Path.Dressup.Utils as PathDressup + +from PySide.QtCore import QT_TRANSLATE_NOOP + +translate = FreeCAD.Qt.translate class DressupArrayViewProvider(object): From a19db66c8b3e908ae242c82ead0e25784c16fb29 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Tue, 11 Nov 2025 16:59:36 -0600 Subject: [PATCH 11/21] CI: Add GitHub token for Crowdin sync --- .github/workflows/fetch_crowdin_translations.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/fetch_crowdin_translations.yml b/.github/workflows/fetch_crowdin_translations.yml index 3a9e27b8e7..0d94439c99 100644 --- a/.github/workflows/fetch_crowdin_translations.yml +++ b/.github/workflows/fetch_crowdin_translations.yml @@ -62,6 +62,7 @@ jobs: title: "Update translations from Crowdin" body: "Automatic Crowdin update." labels: "translations, automated" + token: ${{ secrets.GH_TOKEN_FOR_CROWDIN_SYNC }} delete-branch: true add-paths: | src From 9e6509a3a49b39a395ce574611a6385c7cb6e480 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 13 Nov 2025 05:13:23 -0800 Subject: [PATCH 12/21] Avoid using non-Standard std::locale::empty() for MSVC --- src/Base/Reader.cpp | 4 ---- src/Base/Writer.cpp | 8 -------- 2 files changed, 12 deletions(-) diff --git a/src/Base/Reader.cpp b/src/Base/Reader.cpp index 19e4e1c75c..b80fbaedc5 100644 --- a/src/Base/Reader.cpp +++ b/src/Base/Reader.cpp @@ -65,11 +65,7 @@ using namespace std; Base::XMLReader::XMLReader(const char* FileName, std::istream& str) : _File(FileName) { -#ifdef _MSC_VER - str.imbue(std::locale::empty()); -#else str.imbue(std::locale::classic()); -#endif // create the parser parser = XMLReaderFactory::createXMLReader(); // NOLINT diff --git a/src/Base/Writer.cpp b/src/Base/Writer.cpp index 65b4bef898..cd1126e945 100644 --- a/src/Base/Writer.cpp +++ b/src/Base/Writer.cpp @@ -318,11 +318,7 @@ void Writer::putNextEntry(const char* file, const char* obj) ZipWriter::ZipWriter(const char* FileName) : ZipStream(FileName) { -#ifdef _MSC_VER - ZipStream.imbue(std::locale::empty()); -#else ZipStream.imbue(std::locale::classic()); -#endif ZipStream.precision(std::numeric_limits::digits10 + 1); ZipStream.setf(std::ios::fixed, std::ios::floatfield); } @@ -330,11 +326,7 @@ ZipWriter::ZipWriter(const char* FileName) ZipWriter::ZipWriter(std::ostream& os) : ZipStream(os) { -#ifdef _MSC_VER - ZipStream.imbue(std::locale::empty()); -#else ZipStream.imbue(std::locale::classic()); -#endif ZipStream.precision(std::numeric_limits::digits10 + 1); ZipStream.setf(std::ios::fixed, std::ios::floatfield); } From 93868d54b73eb3da8510f0292b863b651122845f Mon Sep 17 00:00:00 2001 From: Furgo <148809153+furgo16@users.noreply.github.com> Date: Fri, 14 Nov 2025 11:18:29 +0100 Subject: [PATCH 13/21] Define DlgScale task panel's tab order (#25300) * Define DlgScale task panel's tab order To improve keyboard navigation. Fixes: https://github.com/FreeCAD/FreeCAD/issues/23772 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/Mod/Part/Gui/DlgScale.ui | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Mod/Part/Gui/DlgScale.ui b/src/Mod/Part/Gui/DlgScale.ui index 5aa3237ce5..d7224558e4 100644 --- a/src/Mod/Part/Gui/DlgScale.ui +++ b/src/Mod/Part/Gui/DlgScale.ui @@ -226,6 +226,15 @@ + + rbUniform + dsbUniformScale + rbNonUniform + dsbXScale + dsbYScale + dsbZScale + treeWidget + From 04279e27dddc513adf0f4589f8e4fee3334e3a6e Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 14 Nov 2025 12:56:24 +0100 Subject: [PATCH 14/21] Rebase (#23621) --- src/Gui/CommandDoc.cpp | 4 ++-- src/Gui/CommandStd.cpp | 2 +- src/Gui/GraphvizView.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 7993916936..01ecbea146 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -658,7 +658,7 @@ StdCmdExportDependencyGraph::StdCmdExportDependencyGraph() : Command("Std_ExportDependencyGraph") { sGroup = "Tools"; - sMenuText = QT_TR_NOOP("Export Dependency &Graph"); + sMenuText = QT_TR_NOOP("Export Dependency &Graph…"); sToolTipText = QT_TR_NOOP("Exports the dependency graph as a Graphviz (.gv) file"); sStatusTip = sToolTipText; sWhatsThis = "Std_ExportDependencyGraph"; @@ -673,7 +673,7 @@ void StdCmdExportDependencyGraph::activated(int iMsg) QString format = QStringLiteral("%1 (*.gv)").arg(Gui::GraphvizView::tr("Graphviz format")); QString fn = Gui::FileDialog::getSaveFileName( Gui::getMainWindow(), - Gui::GraphvizView::tr("Export graph"), + Gui::GraphvizView::tr("Export Graph"), QString(), format ); diff --git a/src/Gui/CommandStd.cpp b/src/Gui/CommandStd.cpp index 377b811027..bb6f6db683 100644 --- a/src/Gui/CommandStd.cpp +++ b/src/Gui/CommandStd.cpp @@ -457,7 +457,7 @@ StdCmdDlgCustomize::StdCmdDlgCustomize() : Command("Std_DlgCustomize") { sGroup = "Tools"; - sMenuText = QT_TR_NOOP("Cu&stomize…"); + sMenuText = QT_TR_NOOP("Cu&stomize"); sToolTipText = QT_TR_NOOP("Opens a dialog to edit toolbars, shortcuts, and macros"); sWhatsThis = "Std_DlgCustomize"; sStatusTip = sToolTipText; diff --git a/src/Gui/GraphvizView.cpp b/src/Gui/GraphvizView.cpp index 3d70eb06c5..3ec3a17c3f 100644 --- a/src/Gui/GraphvizView.cpp +++ b/src/Gui/GraphvizView.cpp @@ -502,7 +502,7 @@ bool GraphvizView::onMsg(const char* pMsg, const char**) QString selectedFilter; QString fn = Gui::FileDialog::getSaveFileName( this, - tr("Export graph"), + tr("Export Graph"), QString(), filter.join(QLatin1String(";;")), &selectedFilter @@ -604,7 +604,7 @@ void GraphvizView::printPdf() QString selectedFilter; QString fn = Gui::FileDialog::getSaveFileName( this, - tr("Export graph"), + tr("Export Graph"), QString(), filter.join(QLatin1String(";;")), &selectedFilter From 4417f501a5f2d73af6c5db91523dc8f4a69e151f Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 14 Nov 2025 13:12:41 +0100 Subject: [PATCH 15/21] GUI: DrawStyle submenu to Title Case (#24220) --- src/Gui/CommandView.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 85840c69be..72cb4620da 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -776,7 +776,7 @@ void StdCmdDrawStyle::languageChange() auto pcAction = qobject_cast(_pcAction); QList a = pcAction->actions(); - a[0]->setText(QCoreApplication::translate("Std_DrawStyle", "&1 As is")); + a[0]->setText(QCoreApplication::translate("Std_DrawStyle", "&1 As Is")); a[0]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Normal mode")); a[1]->setText(QCoreApplication::translate("Std_DrawStyle", "&2 Points")); @@ -785,16 +785,16 @@ void StdCmdDrawStyle::languageChange() a[2]->setText(QCoreApplication::translate("Std_DrawStyle", "&3 Wireframe")); a[2]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Wireframe mode")); - a[3]->setText(QCoreApplication::translate("Std_DrawStyle", "&4 Hidden line")); + a[3]->setText(QCoreApplication::translate("Std_DrawStyle", "&4 Hidden Line")); a[3]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Hidden line mode")); - a[4]->setText(QCoreApplication::translate("Std_DrawStyle", "&5 No shading")); + a[4]->setText(QCoreApplication::translate("Std_DrawStyle", "&5 No Shading")); a[4]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "No shading mode")); a[5]->setText(QCoreApplication::translate("Std_DrawStyle", "&6 Shaded")); a[5]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Shaded mode")); - a[6]->setText(QCoreApplication::translate("Std_DrawStyle", "&7 Flat lines")); + a[6]->setText(QCoreApplication::translate("Std_DrawStyle", "&7 Flat Lines")); a[6]->setToolTip(QCoreApplication::translate("Std_DrawStyle", "Flat lines mode")); } From 26615ea5d879aa12111f0d1a4a03fd9e84dc954d Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 14 Nov 2025 13:31:26 +0100 Subject: [PATCH 16/21] GUI: Restore view items and some dialog titles to Title Case (#24222) --- src/Gui/CommandView.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 72cb4620da..03ba52ed44 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -401,7 +401,7 @@ void StdCmdFreezeViews::activated(int iMsg) for (QList::Iterator it = acts.begin() + offset; it != acts.end(); ++it, index++) { if (!(*it)->isVisible()) { savedViews++; - QString viewnr = QString(QObject::tr("Restore view &%1")).arg(index); + QString viewnr = QString(QObject::tr("Restore View &%1")).arg(index); (*it)->setText(viewnr); (*it)->setToolTip(QString::fromLatin1(ppReturn)); (*it)->setVisible(true); @@ -433,7 +433,7 @@ void StdCmdFreezeViews::onSaveViews() // Save the views to an XML file QString fn = FileDialog::getSaveFileName( getMainWindow(), - QObject::tr("Save frozen views"), + QObject::tr("Save Frozen Views"), QString(), QStringLiteral("%1 (*.cam)").arg(QObject::tr("Frozen views")) ); @@ -479,7 +479,7 @@ void StdCmdFreezeViews::onRestoreViews() if (savedViews > 0) { auto ret = QMessageBox::question( getMainWindow(), - QObject::tr("Restore views"), + QObject::tr("Restore Views"), QObject::tr( "Importing the restored views would clear the already stored views.\n" "Continue?" @@ -495,7 +495,7 @@ void StdCmdFreezeViews::onRestoreViews() // Restore the views from an XML file QString fn = FileDialog::getOpenFileName( getMainWindow(), - QObject::tr("Restore frozen views"), + QObject::tr("Restore Frozen Views"), QString(), QStringLiteral("%1 (*.cam)").arg(QObject::tr("Frozen views")) ); @@ -506,7 +506,7 @@ void StdCmdFreezeViews::onRestoreViews() if (!file.open(QFile::ReadOnly)) { QMessageBox::critical( getMainWindow(), - QObject::tr("Restore views"), + QObject::tr("Restore Views"), QObject::tr("Cannot open file '%1'.").arg(fn) ); return; @@ -573,7 +573,7 @@ void StdCmdFreezeViews::onRestoreViews() } for (int i = 0; i < numRestoredViews; i++) { QString setting = cameras[i]; - QString viewnr = QString(QObject::tr("Restore view &%1")).arg(i + 1); + QString viewnr = QString(QObject::tr("Restore View &%1")).arg(i + 1); acts[i + offset]->setText(viewnr); acts[i + offset]->setToolTip(setting); acts[i + offset]->setVisible(true); From 84dfab257f2f512839d09ff24f168ff028a42695 Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 14 Nov 2025 13:49:01 +0100 Subject: [PATCH 17/21] GUI: CommandDoc.cpp more dialog titles to Title Case (#24250) * GUI: CommandDoc.cpp more dialog titles to Title Case * Rebase --- src/Gui/CommandDoc.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 01ecbea146..421a079c14 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -136,7 +136,7 @@ void StdCmdOpen::activated(int iMsg) QString selectedFilter; QStringList fileList = FileDialog::getOpenFileNames( getMainWindow(), - QObject::tr("Open document"), + QObject::tr("Open Document"), QString(), formatList, &selectedFilter @@ -150,7 +150,7 @@ void StdCmdOpen::activated(int iMsg) if (dict.isEmpty()) { QMessageBox::critical( getMainWindow(), - qApp->translate("StdCmdOpen", "Cannot open file"), + qApp->translate("StdCmdOpen", "Cannot Open File"), qApp->translate("StdCmdOpen", "Loading the file %1 is not supported").arg(fileList.front()) ); } @@ -233,7 +233,7 @@ void StdCmdImport::activated(int iMsg) QString selectedFilter = QString::fromStdString(hPath->GetASCII("FileImportFilter")); QStringList fileList = FileDialog::getOpenFileNames( getMainWindow(), - QObject::tr("Import file"), + QObject::tr("Import File"), QString(), formatList, &selectedFilter @@ -431,7 +431,7 @@ void StdCmdExport::activated(int iMsg) if (selection.empty()) { QMessageBox::warning( Gui::getMainWindow(), - QCoreApplication::translate("StdCmdExport", "No selection"), + QCoreApplication::translate("StdCmdExport", "No Selection"), QCoreApplication::translate( "StdCmdExport", "Select objects to export before using the Export command." @@ -515,7 +515,7 @@ void StdCmdExport::activated(int iMsg) // Launch the file selection modal dialog QString filename = FileDialog::getSaveFileName( getMainWindow(), - QObject::tr("Export file"), + QObject::tr("Export File"), defaultFilename, formatList, &selectedFilter @@ -581,7 +581,7 @@ void StdCmdMergeProjects::activated(int iMsg) QString exe = qApp->applicationName(); QString project = FileDialog::getOpenFileName( Gui::getMainWindow(), - QString::fromUtf8(QT_TR_NOOP("Merge document")), + QString::fromUtf8(QT_TR_NOOP("Merge Document")), FileDialog::getWorkingDirectory(), QString::fromUtf8(QT_TR_NOOP("%1 document (*.FCStd)")).arg(exe) ); @@ -593,7 +593,7 @@ void StdCmdMergeProjects::activated(int iMsg) if (proj == info) { QMessageBox::critical( Gui::getMainWindow(), - QString::fromUtf8(QT_TR_NOOP("Merge document")), + QString::fromUtf8(QT_TR_NOOP("Merge Document")), QString::fromUtf8(QT_TR_NOOP("Cannot merge document with itself.")) ); return; @@ -1319,7 +1319,7 @@ void StdCmdDuplicateSelection::activated(int iMsg) if (!unsaved.empty()) { QMessageBox::critical( getMainWindow(), - QObject::tr("Unsaved document"), + QObject::tr("Unsaved Document"), QObject::tr( "The exported object contains an external link. Save the document." "at least once before exporting." @@ -1341,7 +1341,7 @@ void StdCmdDuplicateSelection::activated(int iMsg) if (hasXLink && !doc->isSaved()) { auto ret = QMessageBox::question( getMainWindow(), - qApp->translate("Std_DuplicateSelection", "Object dependencies"), + qApp->translate("Std_DuplicateSelection", "Object Dependencies"), qApp->translate( "Std_DuplicateSelection", "To link to external objects, the document must be saved at least once.\n" @@ -1531,7 +1531,7 @@ void StdCmdDelete::activated(int iMsg) auto ret = QMessageBox::warning( Gui::getMainWindow(), - qApp->translate("Std_Delete", "Object dependencies"), + qApp->translate("Std_Delete", "Object Dependencies"), bodyMessage, QMessageBox::Yes, QMessageBox::No @@ -1574,7 +1574,7 @@ void StdCmdDelete::activated(int iMsg) catch (const Base::Exception& e) { QMessageBox::critical( getMainWindow(), - QObject::tr("Delete failed"), + QObject::tr("Delete Failed"), QString::fromLatin1(e.what()) ); e.reportException(); @@ -1582,7 +1582,7 @@ void StdCmdDelete::activated(int iMsg) catch (...) { QMessageBox::critical( getMainWindow(), - QObject::tr("Delete failed"), + QObject::tr("Delete Failed"), QStringLiteral("Unknown error") ); } @@ -1639,7 +1639,7 @@ void StdCmdRefresh::activated([[maybe_unused]] int iMsg) catch (Base::Exception& /*e*/) { auto ret = QMessageBox::warning( getMainWindow(), - QObject::tr("Dependency error"), + QObject::tr("Dependency Error"), qApp->translate( "Std_Refresh", "The document contains dependency cycles.\n" @@ -2121,7 +2121,7 @@ protected: if (failed) { QMessageBox::critical( getMainWindow(), - QObject::tr("Expression error"), + QObject::tr("Expression Error"), QObject::tr( "Failed to parse some of the expressions.\n" "Check the report view for more details." @@ -2155,7 +2155,7 @@ protected: abortCommand(); QMessageBox::critical( getMainWindow(), - QObject::tr("Failed to paste expressions"), + QObject::tr("Failed to Paste Expressions"), QString::fromLatin1(e.what()) ); e.reportException(); From dbf1f00c0182c8c553771d37eae1ae6b3853af40 Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:07:25 +0100 Subject: [PATCH 18/21] GUI: DlgParameterImp.cpp more dialog titles to Title Case (#24258) --- src/Gui/Dialogs/DlgParameterImp.cpp | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Gui/Dialogs/DlgParameterImp.cpp b/src/Gui/Dialogs/DlgParameterImp.cpp index 95f9f2d417..eda7f7cf0a 100644 --- a/src/Gui/Dialogs/DlgParameterImp.cpp +++ b/src/Gui/Dialogs/DlgParameterImp.cpp @@ -540,7 +540,7 @@ void ParameterGroup::onDeleteSelectedItem() if (sel && sel->isSelected() && sel->parent()) { if (QMessageBox::question( this, - tr("Remove group"), + tr("Remove Group"), tr("Remove this parameter group?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No @@ -579,7 +579,7 @@ void ParameterGroup::onCreateSubgroup() bool ok; QString name = QInputDialog::getText( this, - QObject::tr("New sub-group"), + QObject::tr("New Sub-Group"), QObject::tr("Enter the name:"), QLineEdit::Normal, QString(), @@ -596,7 +596,7 @@ void ParameterGroup::onCreateSubgroup() if (hGrp->HasGroup(name.toLatin1())) { QMessageBox::critical( this, - tr("Existing sub-group"), + tr("Existing Sub-Group"), tr("The sub-group '%1' already exists.").arg(name) ); return; @@ -613,7 +613,7 @@ void ParameterGroup::onExportToFile() { QString file = FileDialog::getSaveFileName( this, - tr("Export parameter to file"), + tr("Export Parameter to File"), QString(), QStringLiteral("XML (*.FCParam)") ); @@ -631,7 +631,7 @@ void ParameterGroup::onImportFromFile() { QString file = FileDialog::getOpenFileName( this, - tr("Import parameter from file"), + tr("Import Parameter From File"), QString(), QStringLiteral("XML (*.FCParam)") ); @@ -659,7 +659,7 @@ void ParameterGroup::onImportFromFile() catch (const Base::Exception&) { QMessageBox::critical( this, - tr("Import error"), + tr("Import Error"), tr("Reading from '%1' failed.").arg(file) ); } @@ -815,7 +815,7 @@ void ParameterValue::onCreateTextItem() bool ok; QString name = QInputDialog::getText( this, - QObject::tr("New text item"), + QObject::tr("New Text Item"), QObject::tr("Enter the name:"), QLineEdit::Normal, QString(), @@ -832,7 +832,7 @@ void ParameterValue::onCreateTextItem() if (name == QLatin1String(it.first.c_str())) { QMessageBox::critical( this, - tr("Existing item"), + tr("Existing Item"), tr("The item '%1' already exists.").arg(name) ); return; @@ -841,7 +841,7 @@ void ParameterValue::onCreateTextItem() QString val = QInputDialog::getText( this, - QObject::tr("New text item"), + QObject::tr("New Text Item"), QObject::tr("Enter text:"), QLineEdit::Normal, QString(), @@ -860,7 +860,7 @@ void ParameterValue::onCreateIntItem() bool ok; QString name = QInputDialog::getText( this, - QObject::tr("New integer item"), + QObject::tr("New Integer Item"), QObject::tr("Enter the name:"), QLineEdit::Normal, QString(), @@ -877,7 +877,7 @@ void ParameterValue::onCreateIntItem() if (name == QLatin1String(it.first.c_str())) { QMessageBox::critical( this, - tr("Existing item"), + tr("Existing Item"), tr("The item '%1' already exists.").arg(name) ); return; @@ -886,7 +886,7 @@ void ParameterValue::onCreateIntItem() int val = QInputDialog::getInt( this, - QObject::tr("New integer item"), + QObject::tr("New Integer Item"), QObject::tr("Enter number:"), 0, -2147483647, @@ -908,7 +908,7 @@ void ParameterValue::onCreateUIntItem() bool ok; QString name = QInputDialog::getText( this, - QObject::tr("New unsigned item"), + QObject::tr("New Unsigned Item"), QObject::tr("Enter the name:"), QLineEdit::Normal, QString(), @@ -925,7 +925,7 @@ void ParameterValue::onCreateUIntItem() if (name == QLatin1String(it.first.c_str())) { QMessageBox::critical( this, - tr("Existing item"), + tr("Existing Item"), tr("The item '%1' already exists.").arg(name) ); return; @@ -953,7 +953,7 @@ void ParameterValue::onCreateFloatItem() bool ok; QString name = QInputDialog::getText( this, - QObject::tr("New float item"), + QObject::tr("New Float Item"), QObject::tr("Enter the name:"), QLineEdit::Normal, QString(), @@ -970,7 +970,7 @@ void ParameterValue::onCreateFloatItem() if (name == QLatin1String(it.first.c_str())) { QMessageBox::critical( this, - tr("Existing item"), + tr("Existing Item"), tr("The item '%1' already exists.").arg(name) ); return; @@ -979,7 +979,7 @@ void ParameterValue::onCreateFloatItem() double val = QInputDialog::getDouble( this, - QObject::tr("New float item"), + QObject::tr("New Float Item"), QObject::tr("Enter number:"), 0, -2147483647, @@ -1000,7 +1000,7 @@ void ParameterValue::onCreateBoolItem() bool ok; QString name = QInputDialog::getText( this, - QObject::tr("New boolean item"), + QObject::tr("New Boolean Item"), QObject::tr("Enter the name:"), QLineEdit::Normal, QString(), @@ -1017,7 +1017,7 @@ void ParameterValue::onCreateBoolItem() if (name == QLatin1String(it.first.c_str())) { QMessageBox::critical( this, - tr("Existing item"), + tr("Existing Item"), tr("The item '%1' already exists.").arg(name) ); return; @@ -1028,7 +1028,7 @@ void ParameterValue::onCreateBoolItem() list << QStringLiteral("true") << QStringLiteral("false"); QString val = QInputDialog::getItem( this, - QObject::tr("New boolean item"), + QObject::tr("New Boolean Item"), QObject::tr("Choose an item:"), list, 0, From 3aaa2251456bce0248fd3b9bc325b13835e52d49 Mon Sep 17 00:00:00 2001 From: FEA-eng <59876896+FEA-eng@users.noreply.github.com> Date: Tue, 11 Nov 2025 14:14:22 +0100 Subject: [PATCH 19/21] Spreadsheet: Update SheetTableView.cpp --- src/Mod/Spreadsheet/Gui/SheetTableView.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp index e7fb931511..f7c4fa6fb6 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp @@ -191,12 +191,12 @@ SheetTableView::SheetTableView(QWidget* parent) return act; }; - actionProperties = createAction("", tr("Properties…"), &SheetTableView::cellProperties); + actionProperties = createAction("", tr("Properties"), &SheetTableView::cellProperties); contextMenu.addSeparator(); actionRecompute = createAction(":/icons/view-refresh.svg", tr("Recompute"), &SheetTableView::onRecompute); actionBind = createAction("", tr("Bind…"), &SheetTableView::onBind); - actionConf = createAction("", tr("Configuration Table…"), &SheetTableView::onConfSetup); + actionConf = createAction("", tr("Configuration Table"), &SheetTableView::onConfSetup); contextMenu.addSeparator(); actionMerge = createAction( ":/icons/SpreadsheetMergeCells.svg", From 2903f480ae5ed83354bfe4f65a99a17d67a70384 Mon Sep 17 00:00:00 2001 From: revaarathore11 Date: Fri, 14 Nov 2025 19:40:03 +0530 Subject: [PATCH 20/21] Fix tooltip text mismatch for 'Dimensions only' in Sketcher Preferences (#24825) --- src/Mod/Sketcher/Gui/SketcherSettings.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.ui b/src/Mod/Sketcher/Gui/SketcherSettings.ui index fefa7e7964..6606c3cbbf 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettings.ui +++ b/src/Mod/Sketcher/Gui/SketcherSettings.ui @@ -344,7 +344,7 @@ This setting is only for the toolbar. Whichever you choose, all tools are always Choose a visibility mode for the On-View-Parameters: 'Disabled': On-View-Parameters are completely disabled. -'Only dimensional': Only dimensional On-View-Parameters are visible. They are the most useful. For example the radius of a circle. +'Dimensional only': Only dimensional On-View-Parameters are visible. They are the most useful. For example, the radius of a circle. 'All': Both dimensional and positional On-View-Parameters. Positionals are the (x,y) position of the cursor. For example for the center of a circle. From cc7706ec6f28870b9b9bf8845bfc02745f091f65 Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 14 Nov 2025 15:33:12 +0100 Subject: [PATCH 21/21] Core: 'Stop macro recording' menu text to Title Case (#24302) * Core: 'Stop-macro-recording' menu text to Title Case The modified text appears in the menu during a recording session. * Rebase --- src/Gui/CommandMacro.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/CommandMacro.cpp b/src/Gui/CommandMacro.cpp index 0fea7e6c9e..e283e419f8 100644 --- a/src/Gui/CommandMacro.cpp +++ b/src/Gui/CommandMacro.cpp @@ -64,7 +64,7 @@ void StdCmdDlgMacroRecord::activated(int iMsg) if (cDlg.exec() && getAction()) { getAction()->setIcon(Gui::BitmapFactory().iconFromTheme("media-playback-stop")); getAction()->setText( - QCoreApplication::translate("StdCmdDlgMacroRecord", "S&top macro recording") + QCoreApplication::translate("StdCmdDlgMacroRecord", "S&top Macro Recording") ); getAction()->setToolTip( QCoreApplication::translate("StdCmdDlgMacroRecord", "Stop the macro recording session")