From aa143f5a5b0b032ed7e72e9c87d8222057f65ad2 Mon Sep 17 00:00:00 2001 From: luz paz Date: Wed, 3 Nov 2021 11:13:10 -0400 Subject: [PATCH 01/17] Mesh: Convert comments from DE->EN Bringing uniformity to documenting FreeCAD --- src/Mod/Mesh/App/Core/Approximation.h | 2 +- src/Mod/Mesh/App/Core/Elements.cpp | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Mod/Mesh/App/Core/Approximation.h b/src/Mod/Mesh/App/Core/Approximation.h index 99d73be059..524fca7d25 100644 --- a/src/Mod/Mesh/App/Core/Approximation.h +++ b/src/Mod/Mesh/App/Core/Approximation.h @@ -514,7 +514,7 @@ public: dKoeff[ ct ] = pKoef[ ct ]; } /** - * Destruktor. Deletes the ImpicitSurface instance + * Destructor. Deletes the ImpicitSurface instance * of the WildMagic library */ ~FunctionContainer(){ delete pImplSurf; } diff --git a/src/Mod/Mesh/App/Core/Elements.cpp b/src/Mod/Mesh/App/Core/Elements.cpp index bd434698ce..53bc252add 100644 --- a/src/Mod/Mesh/App/Core/Elements.cpp +++ b/src/Mod/Mesh/App/Core/Elements.cpp @@ -180,22 +180,22 @@ MeshFacetArray& MeshFacetArray::operator = (const MeshFacetArray &rclFAry) bool MeshGeomEdge::ContainedByOrIntersectBoundingBox ( const Base::BoundBox3f &rclBB ) const { - // Test, ob alle Eckpunkte der Edge sich auf einer der 6 Seiten der BB befinden + // Test whether all corner points of the Edge are on one of the 6 sides of the BB if ((GetBoundBox() && rclBB) == false) return false; - // Test, ob Edge-BB komplett in BB liegt + // Test whether Edge-BB is completely in BB if (rclBB.IsInBox(GetBoundBox())) return true; - // Test, ob einer der Eckpunkte in BB liegt + // Test whether one of the corner points is in BB for (int i=0;i<2;i++) { if (rclBB.IsInBox(_aclPoints[i])) return true; } - // "echter" Test auf Schnitt + // "real" test for cut if (IntersectBoundingBox(rclBB)) return true; @@ -487,7 +487,7 @@ bool MeshGeomFacet::IsPointOf (const Base::Vector3f &rclPoint, float fDistance) clProjPt.ProjectToPlane(_aclPoints[0], clNorm); - // Kante P0 --> P1 + // Edge P0 --> P1 clEdge = clP1 - clP0; fLP = clProjPt.DistanceToLine(clP0, clEdge); if (fLP > 0.0f) @@ -500,9 +500,9 @@ bool MeshGeomFacet::IsPointOf (const Base::Vector3f &rclPoint, float fDistance) } else return false; - } + } - // Kante P0 --> P2 + // Edge P0 --> P2 clEdge = clP2 - clP0; fLP = clProjPt.DistanceToLine(clP0, clEdge); if (fLP > 0.0f) @@ -515,9 +515,9 @@ bool MeshGeomFacet::IsPointOf (const Base::Vector3f &rclPoint, float fDistance) } else return false; - } + } - // Kante P1 --> P2 + // Edge P1 --> P2 clEdge = clP2 - clP1; fLP = clProjPt.DistanceToLine(clP1, clEdge); if (fLP > 0.0f) @@ -537,7 +537,7 @@ bool MeshGeomFacet::IsPointOf (const Base::Vector3f &rclPoint, float fDistance) bool MeshGeomFacet::IsPointOfFace (const Base::Vector3f& rclP, float fDistance) const { - // effektivere Implementierung als in MeshGeomFacet::IsPointOf + // more effective implementation than in MeshGeomFacet::IsPointOf // Base::Vector3f a(_aclPoints[0].x, _aclPoints[0].y, _aclPoints[0].z); Base::Vector3f b(_aclPoints[1].x, _aclPoints[1].y, _aclPoints[1].z); @@ -907,7 +907,7 @@ bool MeshGeomFacet::Foraminate (const Base::Vector3f &P, const Base::Vector3f &d bool MeshGeomFacet::IntersectPlaneWithLine (const Base::Vector3f &rclPt, const Base::Vector3f &rclDir, Base::Vector3f &rclRes) const { - // berechne den Schnittpunkt Gerade <-> Ebene + // calculate the intersection of the straight line <-> plane if ( fabs(rclDir * GetNormal()) < 1e-3f ) return false; // line and plane are parallel @@ -979,7 +979,7 @@ void MeshGeomFacet::SubSample (float fStep, std::vector &rclPoin Base::Vector3f clVecAC(C - A); Base::Vector3f clVecBC(C - B); - // laengste Achse entspricht AB + // longest axis corresponds to AB float fLenAB = clVecAB.Length(); float fLenAC = clVecAC.Length(); float fLenBC = clVecBC.Length(); From 95fbe4a753ecb64cded47d5f4c33006053b4ebc0 Mon Sep 17 00:00:00 2001 From: luz paz Date: Wed, 3 Nov 2021 11:17:05 -0400 Subject: [PATCH 02/17] Mesh: separating translation section in Mesh.qrc --- src/Mod/Mesh/Gui/Resources/Mesh.qrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Mod/Mesh/Gui/Resources/Mesh.qrc b/src/Mod/Mesh/Gui/Resources/Mesh.qrc index 3c358b6c78..5dbfb6d409 100644 --- a/src/Mod/Mesh/Gui/Resources/Mesh.qrc +++ b/src/Mod/Mesh/Gui/Resources/Mesh.qrc @@ -42,6 +42,8 @@ icons/RegularSolids/Mesh_Ellipsoid.svg icons/RegularSolids/Mesh_Sphere.svg icons/RegularSolids/Mesh_Torus.svg + + translations/Mesh_af.qm translations/Mesh_de.qm translations/Mesh_fi.qm From da4ff7589f93796ba24dffcd9200086179062e4c Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Wed, 3 Nov 2021 14:31:11 -0500 Subject: [PATCH 03/17] Spreadsheet: Fix copy of empty but used cell --- src/Mod/Spreadsheet/App/PropertySheet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Spreadsheet/App/PropertySheet.cpp b/src/Mod/Spreadsheet/App/PropertySheet.cpp index 286b72890f..265f8d7697 100644 --- a/src/Mod/Spreadsheet/App/PropertySheet.cpp +++ b/src/Mod/Spreadsheet/App/PropertySheet.cpp @@ -351,7 +351,7 @@ void PropertySheet::copyCells(Base::Writer& writer, const std::vector& ra writer.incInd(); do { auto cell = getValue(*range); - if (cell) { + if (cell && cell->isUsed()) { cell->save(writer); } else { From 56a90ed675628a4ac0a5528441e4545a67594502 Mon Sep 17 00:00:00 2001 From: Uwe Date: Thu, 4 Nov 2021 00:52:08 +0100 Subject: [PATCH 04/17] Squashed commit of the following: commit b5aa19950f09d9a391b189a578073b9920943294 Author: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Tue Nov 2 14:37:19 2021 +0100 Std: Fix OpenSCAD navigation string Holding down SHIFT is not required when zooming with the MMB. --- src/Gui/OpenSCADNavigationStyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/OpenSCADNavigationStyle.cpp b/src/Gui/OpenSCADNavigationStyle.cpp index 1681ce5281..75b34dac11 100644 --- a/src/Gui/OpenSCADNavigationStyle.cpp +++ b/src/Gui/OpenSCADNavigationStyle.cpp @@ -69,7 +69,7 @@ const char* OpenSCADNavigationStyle::mouseButtons(ViewerMode mode) case NavigationStyle::DRAGGING: return QT_TR_NOOP("Press left mouse button and move mouse"); case NavigationStyle::ZOOMING: - return QT_TR_NOOP("Press SHIFT and middle or right mouse button"); + return QT_TR_NOOP("Press middle mouse button or SHIFT and right mouse button"); default: return "No description"; } From fc193e3614c839453a6b660543fdbb76ab52c69f Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Wed, 3 Nov 2021 19:16:31 -0500 Subject: [PATCH 05/17] Spreadsheet: Prevent marking a cell dirty when the content didn't change --- src/Mod/Spreadsheet/Gui/SheetModel.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Mod/Spreadsheet/Gui/SheetModel.cpp b/src/Mod/Spreadsheet/Gui/SheetModel.cpp index ed12e8ad44..c289dcc121 100644 --- a/src/Mod/Spreadsheet/Gui/SheetModel.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetModel.cpp @@ -547,6 +547,16 @@ bool SheetModel::setData(const QModelIndex & index, const QVariant & value, int try { QString str = value.toString(); + + // Check to see if this is already the value in the cell, and skip the update if so + auto cell = sheet->getCell(address); + if (cell) { + std::string oldContent; + cell->getStringContent(oldContent); + if (str == QString::fromStdString(oldContent)) + return true; + } + Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Edit cell")); // Because of possible complication of recursively escaped // characters, let's take a shortcut and bypass the command From 62a2f2cd0f9cdb6c58b1e7f1167a0fdd88287099 Mon Sep 17 00:00:00 2001 From: Uwe Date: Thu, 4 Nov 2021 01:30:19 +0100 Subject: [PATCH 06/17] [skip ci] update links in Windows installer until not all issues are sorted out with the new domain this should not be backported to the 0.19 branch --- src/WindowsInstaller/include/declarations.nsh | 4 ++-- src/WindowsInstaller/include/gui.nsh | 2 +- src/WindowsInstaller/lang/dutch.nsh | 2 +- src/WindowsInstaller/lang/english.nsh | 2 +- src/WindowsInstaller/lang/french.nsh | 2 +- src/WindowsInstaller/lang/galician.nsh | 2 +- src/WindowsInstaller/lang/german.nsh | 2 +- src/WindowsInstaller/lang/hungarian.nsh | 2 +- src/WindowsInstaller/lang/indonesian.nsh | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/WindowsInstaller/include/declarations.nsh b/src/WindowsInstaller/include/declarations.nsh index 03e26d9b6a..c63da6e971 100644 --- a/src/WindowsInstaller/include/declarations.nsh +++ b/src/WindowsInstaller/include/declarations.nsh @@ -26,9 +26,9 @@ Configuration and variables of FreeCAD installer !define APP_DIR_USERDATA ${APP_NAME} #!define APP_DIR_USERDATA "${APP_NAME}${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}" !define APP_INFO "${APP_NAME} - Your Own 3D Parametric Modeler" -!define APP_WEBPAGE "https://freecadweb.org/" +!define APP_WEBPAGE "https://freecad.org/" !define APP_WEBPAGE_INFO "${APP_NAME} Website" -!define APP_WIKI "https://www.freecadweb.org/wiki/Main_Page" +!define APP_WIKI "https://www.freecad.org/wiki/Main_Page" !define APP_WIKI_INFO "${APP_NAME} Wiki" !define APP_COPYRIGHT "${APP_NAME} is Copyright © 2001-${COPYRIGHT_YEAR} by the ${APP_NAME} Team" diff --git a/src/WindowsInstaller/include/gui.nsh b/src/WindowsInstaller/include/gui.nsh index ac0d6b5c80..16a285284f 100644 --- a/src/WindowsInstaller/include/gui.nsh +++ b/src/WindowsInstaller/include/gui.nsh @@ -66,7 +66,7 @@ BrandingText " " !define MUI_FINISHPAGE_SHOWREADME_FUNCTION StartFreeCAD !define MUI_FINISHPAGE_SHOWREADME_TEXT $(FinishPageRun) !define MUI_FINISHPAGE_LINK $(TEXT_FINISH_WEBSITE) -!define MUI_FINISHPAGE_LINK_LOCATION "https://freecadweb.org/" +!define MUI_FINISHPAGE_LINK_LOCATION "https://freecad.org/" #!define MUI_PAGE_CUSTOMFUNCTION_SHOW CheckDesktopShortcut !insertmacro MUI_PAGE_FINISH diff --git a/src/WindowsInstaller/lang/dutch.nsh b/src/WindowsInstaller/lang/dutch.nsh index e3cc15322f..07ddce249d 100644 --- a/src/WindowsInstaller/lang/dutch.nsh +++ b/src/WindowsInstaller/lang/dutch.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Dit installatie programma zal FreeCAD op uw syst #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "FreeCAD-Document" diff --git a/src/WindowsInstaller/lang/english.nsh b/src/WindowsInstaller/lang/english.nsh index 138c5aada0..fcf401586c 100644 --- a/src/WindowsInstaller/lang/english.nsh +++ b/src/WindowsInstaller/lang/english.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "This wizard will guide you through the installat #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org/ for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org/ for the latest news, support and tips" #${LangFileString} FileTypeTitle "FreeCAD-Document" diff --git a/src/WindowsInstaller/lang/french.nsh b/src/WindowsInstaller/lang/french.nsh index 5b4132444f..c75e5b9ce5 100644 --- a/src/WindowsInstaller/lang/french.nsh +++ b/src/WindowsInstaller/lang/french.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Cet assistant va vous guider tout au long de l'i #${LangFileString} TEXT_CONFIGURE_PYTHON "Compilation des scripts Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Créer un raccourci sur le bureau" -${LangFileString} TEXT_FINISH_WEBSITE "Consulter les dernières nouvelles, trucs et astuces sur le site freecadweb.org" +${LangFileString} TEXT_FINISH_WEBSITE "Consulter les dernières nouvelles, trucs et astuces sur le site freecad.org" #${LangFileString} FileTypeTitle "Document FreeCAD" diff --git a/src/WindowsInstaller/lang/galician.nsh b/src/WindowsInstaller/lang/galician.nsh index 48d684f2d9..f66e93e863 100644 --- a/src/WindowsInstaller/lang/galician.nsh +++ b/src/WindowsInstaller/lang/galician.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Este asistente vai-no guiar na instalación do F #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "Documento FreeCAD" diff --git a/src/WindowsInstaller/lang/german.nsh b/src/WindowsInstaller/lang/german.nsh index 44e831d58e..dbb04b10df 100644 --- a/src/WindowsInstaller/lang/german.nsh +++ b/src/WindowsInstaller/lang/german.nsh @@ -15,7 +15,7 @@ ${LangFileString} TEXT_WELCOME "Dieser Assistent wird Sie durch die Installation #${LangFileString} TEXT_CONFIGURE_PYTHON "Kompiliere Python Skripte..." ${LangFileString} TEXT_FINISH_DESKTOP "Ein Symbol auf der Arbeitsoberfläche erzeugen" -${LangFileString} TEXT_FINISH_WEBSITE "Besuchen Sie freecadweb.org für aktuelle Neuigkeiten" +${LangFileString} TEXT_FINISH_WEBSITE "Besuchen Sie freecad.org für aktuelle Neuigkeiten" #${LangFileString} FileTypeTitle "FreeCAD-Dokument" diff --git a/src/WindowsInstaller/lang/hungarian.nsh b/src/WindowsInstaller/lang/hungarian.nsh index 5230dc66a4..55e6ac43d5 100644 --- a/src/WindowsInstaller/lang/hungarian.nsh +++ b/src/WindowsInstaller/lang/hungarian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "A varázsló segítségével tudja telepíteni a #${LangFileString} TEXT_CONFIGURE_PYTHON "Python parancsfájlok fordítása..." ${LangFileString} TEXT_FINISH_DESKTOP "Indítóikon létrehozása Asztalon" -${LangFileString} TEXT_FINISH_WEBSITE "Látogasson el a freecadweb.org oldalra az aktuális hírekért, támogatásért és tippekért" +${LangFileString} TEXT_FINISH_WEBSITE "Látogasson el a freecad.org oldalra az aktuális hírekért, támogatásért és tippekért" #${LangFileString} FileTypeTitle "FreeCAD-dokumentum" diff --git a/src/WindowsInstaller/lang/indonesian.nsh b/src/WindowsInstaller/lang/indonesian.nsh index 1b92dd13b3..09282cc38a 100644 --- a/src/WindowsInstaller/lang/indonesian.nsh +++ b/src/WindowsInstaller/lang/indonesian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Program ini akan memandu anda dalam melakukan in #${LangFileString} TEXT_CONFIGURE_PYTHON "Proses kompilasi skrip Python ..." ${LangFileString} TEXT_FINISH_DESKTOP "Membuat pintasan ikon di destop" -${LangFileString} TEXT_FINISH_WEBSITE "Kunjungi freecadweb.org untuk berita terbaru serta dukungan" +${LangFileString} TEXT_FINISH_WEBSITE "Kunjungi freecad.org untuk berita terbaru serta dukungan" #${LangFileString} FileTypeTitle "Dokumen-FreeCAD" From 0f35d5abe615245503d896fc67608036cb506208 Mon Sep 17 00:00:00 2001 From: Uwe Date: Thu, 4 Nov 2021 01:34:16 +0100 Subject: [PATCH 07/17] [skip ci] update links in Windows installer - missing part until not all issues are sorted out with the new domain this should not be backported to the 0.19 branch --- src/WindowsInstaller/lang/arabic.nsh | 2 +- src/WindowsInstaller/lang/basque.nsh | 2 +- src/WindowsInstaller/lang/catalan.nsh | 2 +- src/WindowsInstaller/lang/czech.nsh | 2 +- src/WindowsInstaller/lang/danish.nsh | 2 +- src/WindowsInstaller/lang/italian.nsh | 2 +- src/WindowsInstaller/lang/japanese.nsh | 2 +- src/WindowsInstaller/lang/norwegian.nsh | 2 +- src/WindowsInstaller/lang/polish.nsh | 2 +- src/WindowsInstaller/lang/portuguese.nsh | 2 +- src/WindowsInstaller/lang/portugueseBR.nsh | 2 +- src/WindowsInstaller/lang/romanian.nsh | 2 +- src/WindowsInstaller/lang/russian.nsh | 2 +- src/WindowsInstaller/lang/slovak.nsh | 2 +- src/WindowsInstaller/lang/spanish.nsh | 2 +- src/WindowsInstaller/lang/swedish.nsh | 2 +- src/WindowsInstaller/lang/turkish.nsh | 2 +- src/WindowsInstaller/lang/ukrainian.nsh | 2 +- src/WindowsInstaller/setup/configure.nsh | 4 ++-- 19 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/WindowsInstaller/lang/arabic.nsh b/src/WindowsInstaller/lang/arabic.nsh index a97346e770..f7771f51af 100644 --- a/src/WindowsInstaller/lang/arabic.nsh +++ b/src/WindowsInstaller/lang/arabic.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "هذا المساعد سوف يرشدك خلال #${LangFileString} TEXT_CONFIGURE_PYTHON "بناء سكربتات بايثون..." ${LangFileString} TEXT_FINISH_DESKTOP "إنشاء اختصار سطح المكتب" -${LangFileString} TEXT_FINISH_WEBSITE "زيارة freecadweb.org لمشاهدة آخر الاخبار, الدعم والأفكار" +${LangFileString} TEXT_FINISH_WEBSITE "زيارة freecad.org لمشاهدة آخر الاخبار, الدعم والأفكار" #${LangFileString} FileTypeTitle "مستند - ليك" diff --git a/src/WindowsInstaller/lang/basque.nsh b/src/WindowsInstaller/lang/basque.nsh index 981d11bf20..7f4bfe2c86 100644 --- a/src/WindowsInstaller/lang/basque.nsh +++ b/src/WindowsInstaller/lang/basque.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Morroi honek $(^NameDA) aplikazioaren instalazio #${LangFileString} TEXT_CONFIGURE_PYTHON "Python script-ak konpilatzen..." ${LangFileString} TEXT_FINISH_DESKTOP "Sortu mahaigaineko lasterbidea" -${LangFileString} TEXT_FINISH_WEBSITE "Bisitatu freecadweb.org azken berriak, aholkuak eta laguntza lortzeko" +${LangFileString} TEXT_FINISH_WEBSITE "Bisitatu freecad.org azken berriak, aholkuak eta laguntza lortzeko" #${LangFileString} FileTypeTitle "FreeCAD-dokumentua" diff --git a/src/WindowsInstaller/lang/catalan.nsh b/src/WindowsInstaller/lang/catalan.nsh index 12a77adc31..2c9c5d32dc 100644 --- a/src/WindowsInstaller/lang/catalan.nsh +++ b/src/WindowsInstaller/lang/catalan.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Aquest assistent us guiarà en la instal·lació #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "Document FreeCAD" diff --git a/src/WindowsInstaller/lang/czech.nsh b/src/WindowsInstaller/lang/czech.nsh index 807cf7c82e..399945e327 100644 --- a/src/WindowsInstaller/lang/czech.nsh +++ b/src/WindowsInstaller/lang/czech.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Tento pomocník vás provede instalací FreeCADu #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "FreeCAD-dokumentů" diff --git a/src/WindowsInstaller/lang/danish.nsh b/src/WindowsInstaller/lang/danish.nsh index 9c43044e6f..9ef681a349 100644 --- a/src/WindowsInstaller/lang/danish.nsh +++ b/src/WindowsInstaller/lang/danish.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Denne guide vil installere FreeCAD på din compu #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "FreeCAD-Dokument" diff --git a/src/WindowsInstaller/lang/italian.nsh b/src/WindowsInstaller/lang/italian.nsh index 589ac1e945..4eff2860c0 100644 --- a/src/WindowsInstaller/lang/italian.nsh +++ b/src/WindowsInstaller/lang/italian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Verrete guidati nell'installazione di $(^NameDA) #${LangFileString} TEXT_CONFIGURE_PYTHON "Compilazione degli script Python in corso..." ${LangFileString} TEXT_FINISH_DESKTOP "Crea icona sul desktop" -${LangFileString} TEXT_FINISH_WEBSITE "Visitate freecadweb.org per ultime novità, aiuto e suggerimenti" +${LangFileString} TEXT_FINISH_WEBSITE "Visitate freecad.org per ultime novità, aiuto e suggerimenti" #${LangFileString} FileTypeTitle "Documento di FreeCAD" diff --git a/src/WindowsInstaller/lang/japanese.nsh b/src/WindowsInstaller/lang/japanese.nsh index b973095539..7320c9cfdc 100644 --- a/src/WindowsInstaller/lang/japanese.nsh +++ b/src/WindowsInstaller/lang/japanese.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "このウィザードが、あなたのFreeCAD #${LangFileString} TEXT_CONFIGURE_PYTHON "Pythonスクリプトをコンパイルしています..." ${LangFileString} TEXT_FINISH_DESKTOP "デスクトップにショートカットを作成する" -${LangFileString} TEXT_FINISH_WEBSITE "freecadweb.orgを開いて最新ニュースやサポート、ヒントなどを入手する" +${LangFileString} TEXT_FINISH_WEBSITE "freecad.orgを開いて最新ニュースやサポート、ヒントなどを入手する" #${LangFileString} FileTypeTitle "FreeCAD文書" diff --git a/src/WindowsInstaller/lang/norwegian.nsh b/src/WindowsInstaller/lang/norwegian.nsh index 6069b9278f..2e3293b4f1 100644 --- a/src/WindowsInstaller/lang/norwegian.nsh +++ b/src/WindowsInstaller/lang/norwegian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Denne veiviseren installerer FreeCAD på datamas #${LangFileString} TEXT_CONFIGURE_PYTHON "Kompilerer Python script..." ${LangFileString} TEXT_FINISH_DESKTOP "Lager snarveg på skrivebordet" -${LangFileString} TEXT_FINISH_WEBSITE "Besøk freecadweb.org for de seneste nyhetene, hjelp og støtte" +${LangFileString} TEXT_FINISH_WEBSITE "Besøk freecad.org for de seneste nyhetene, hjelp og støtte" #${LangFileString} FileTypeTitle "FreeCAD-dokument" diff --git a/src/WindowsInstaller/lang/polish.nsh b/src/WindowsInstaller/lang/polish.nsh index 861959f5a4..8e9ad43d90 100644 --- a/src/WindowsInstaller/lang/polish.nsh +++ b/src/WindowsInstaller/lang/polish.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Kreator przeprowadzi Ciebie przez proces instala #${LangFileString} TEXT_CONFIGURE_PYTHON "Kompilowanie skryptów Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Utwórz skrót na pulpicie" -${LangFileString} TEXT_FINISH_WEBSITE "Odwiedź freecadweb.org by poznać wiadomości i wskazówki lub skorzystać ze wsparcia" +${LangFileString} TEXT_FINISH_WEBSITE "Odwiedź freecad.org by poznać wiadomości i wskazówki lub skorzystać ze wsparcia" #${LangFileString} FileTypeTitle "Dokument FreeCAD" diff --git a/src/WindowsInstaller/lang/portuguese.nsh b/src/WindowsInstaller/lang/portuguese.nsh index df7aa3fbb5..24757e9b59 100644 --- a/src/WindowsInstaller/lang/portuguese.nsh +++ b/src/WindowsInstaller/lang/portuguese.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Este assistente de instalação irá guiá-lo at #${LangFileString} TEXT_CONFIGURE_PYTHON "Compilando os scripts de Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Criar um atalho no ambiente de trabalho" -${LangFileString} TEXT_FINISH_WEBSITE "Visite freecadweb.org para as últimas notícias, suporte e dicas" +${LangFileString} TEXT_FINISH_WEBSITE "Visite freecad.org para as últimas notícias, suporte e dicas" #${LangFileString} FileTypeTitle "Documento FreeCAD" diff --git a/src/WindowsInstaller/lang/portugueseBR.nsh b/src/WindowsInstaller/lang/portugueseBR.nsh index b2925508e4..2658c70d98 100644 --- a/src/WindowsInstaller/lang/portugueseBR.nsh +++ b/src/WindowsInstaller/lang/portugueseBR.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Este assistente guiará você durante a instala #${LangFileString} TEXT_CONFIGURE_PYTHON "Compilando scripts Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Criar atalho na área de trabalho" -${LangFileString} TEXT_FINISH_WEBSITE "Visite freecadweb.org para ver as últimas novidades do FreeCAD!" +${LangFileString} TEXT_FINISH_WEBSITE "Visite freecad.org para ver as últimas novidades do FreeCAD!" #${LangFileString} FileTypeTitle "Documento-FreeCAD" diff --git a/src/WindowsInstaller/lang/romanian.nsh b/src/WindowsInstaller/lang/romanian.nsh index c95950fe2c..2dadf8a9c5 100644 --- a/src/WindowsInstaller/lang/romanian.nsh +++ b/src/WindowsInstaller/lang/romanian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Acest asistent vă va ghida în procesul de inst #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "Document FreeCAD" diff --git a/src/WindowsInstaller/lang/russian.nsh b/src/WindowsInstaller/lang/russian.nsh index 92cc4169fd..879ebce14f 100644 --- a/src/WindowsInstaller/lang/russian.nsh +++ b/src/WindowsInstaller/lang/russian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Этот мастер проведет вас ч #${LangFileString} TEXT_CONFIGURE_PYTHON "Компиляция скриптов Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Создать ярлык на рабочем столе" -${LangFileString} TEXT_FINISH_WEBSITE "Перейти на freecadweb.org за новостями, поддержкой и советами" +${LangFileString} TEXT_FINISH_WEBSITE "Перейти на freecad.org за новостями, поддержкой и советами" #${LangFileString} FileTypeTitle "FreeCAD-Document" diff --git a/src/WindowsInstaller/lang/slovak.nsh b/src/WindowsInstaller/lang/slovak.nsh index 14e0aef61e..910538a125 100644 --- a/src/WindowsInstaller/lang/slovak.nsh +++ b/src/WindowsInstaller/lang/slovak.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Tento sprievodca Vám pomáha inštalovať FreeC #${LangFileString} TEXT_CONFIGURE_PYTHON "Kompilácia Python skriptov..." ${LangFileString} TEXT_FINISH_DESKTOP "Vytvoriť skratku pre pracovnú plochu" -${LangFileString} TEXT_FINISH_WEBSITE "Navštívte freecadweb.org pre posledné novinky, podporu a tipy" +${LangFileString} TEXT_FINISH_WEBSITE "Navštívte freecad.org pre posledné novinky, podporu a tipy" #${LangFileString} FileTypeTitle "FreeCAD dokument" diff --git a/src/WindowsInstaller/lang/spanish.nsh b/src/WindowsInstaller/lang/spanish.nsh index eb6c5a2079..3540bf480b 100644 --- a/src/WindowsInstaller/lang/spanish.nsh +++ b/src/WindowsInstaller/lang/spanish.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Este programa instalará FreeCAD en su ordenador #${LangFileString} TEXT_CONFIGURE_PYTHON "Compilando guiones Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Crear acceso directo en el escritorio" -${LangFileString} TEXT_FINISH_WEBSITE "Visite freecadweb.org para últimas noticias, ayuda y consejos" +${LangFileString} TEXT_FINISH_WEBSITE "Visite freecad.org para últimas noticias, ayuda y consejos" #${LangFileString} FileTypeTitle "Documento FreeCAD" diff --git a/src/WindowsInstaller/lang/swedish.nsh b/src/WindowsInstaller/lang/swedish.nsh index 22bb333d20..0176d07b3f 100644 --- a/src/WindowsInstaller/lang/swedish.nsh +++ b/src/WindowsInstaller/lang/swedish.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Denna guide tar dig igenom installationen av $(^ #${LangFileString} TEXT_CONFIGURE_PYTHON "Kompilerar Pythonskript..." ${LangFileString} TEXT_FINISH_DESKTOP "Skapa skrivbordsgenväg" -${LangFileString} TEXT_FINISH_WEBSITE "Besök freecadweb.org för de senaste nyheterna, support och tips" +${LangFileString} TEXT_FINISH_WEBSITE "Besök freecad.org för de senaste nyheterna, support och tips" #${LangFileString} FileTypeTitle "FreeCAD-dokument" diff --git a/src/WindowsInstaller/lang/turkish.nsh b/src/WindowsInstaller/lang/turkish.nsh index dd1511abcf..12f4eedab2 100644 --- a/src/WindowsInstaller/lang/turkish.nsh +++ b/src/WindowsInstaller/lang/turkish.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "Bu sihirbaz size FreeCAD programını kuracak.$\ #${LangFileString} TEXT_CONFIGURE_PYTHON "Compiling Python scripts..." ${LangFileString} TEXT_FINISH_DESKTOP "Create desktop shortcut" -${LangFileString} TEXT_FINISH_WEBSITE "Visit freecadweb.org for the latest news, support and tips" +${LangFileString} TEXT_FINISH_WEBSITE "Visit freecad.org for the latest news, support and tips" #${LangFileString} FileTypeTitle "FreeCAD-Document" diff --git a/src/WindowsInstaller/lang/ukrainian.nsh b/src/WindowsInstaller/lang/ukrainian.nsh index d1e4f975f2..fac5191ab4 100644 --- a/src/WindowsInstaller/lang/ukrainian.nsh +++ b/src/WindowsInstaller/lang/ukrainian.nsh @@ -14,7 +14,7 @@ ${LangFileString} TEXT_WELCOME "За допомогою цього майстр #${LangFileString} TEXT_CONFIGURE_PYTHON "Обробка скриптів Python..." ${LangFileString} TEXT_FINISH_DESKTOP "Створити значок на стільниці" -${LangFileString} TEXT_FINISH_WEBSITE "Відвідати freecadweb.org, щоб ознайомитися з новинами, довідковими матеріалами та підказками" +${LangFileString} TEXT_FINISH_WEBSITE "Відвідати freecad.org, щоб ознайомитися з новинами, довідковими матеріалами та підказками" #${LangFileString} FileTypeTitle "Документ FreeCAD" diff --git a/src/WindowsInstaller/setup/configure.nsh b/src/WindowsInstaller/setup/configure.nsh index dae07512f0..d42ef4d6bb 100644 --- a/src/WindowsInstaller/setup/configure.nsh +++ b/src/WindowsInstaller/setup/configure.nsh @@ -45,9 +45,9 @@ Section -InstallData WriteRegStr SHCTX ${APP_UNINST_KEY} "DisplayVersion" "${APP_VERSION}" WriteRegStr SHCTX ${APP_UNINST_KEY} "DisplayIcon" "$INSTDIR\${APP_RUN}" WriteRegStr SHCTX ${APP_UNINST_KEY} "URLUpdateInfo" "${APP_WEBPAGE}" - WriteRegStr SHCTX ${APP_UNINST_KEY} "URLInfoAbout" "https://www.freecadweb.org/" + WriteRegStr SHCTX ${APP_UNINST_KEY} "URLInfoAbout" "https://www.freecad.org/" WriteRegStr SHCTX ${APP_UNINST_KEY} "Publisher" "${APP_NAME} Team" - WriteRegStr SHCTX ${APP_UNINST_KEY} "HelpLink" "https://forum.freecadweb.org/" + WriteRegStr SHCTX ${APP_UNINST_KEY} "HelpLink" "https://forum.freecad.org/" WriteRegDWORD SHCTX ${APP_UNINST_KEY} "NoModify" 0x00000001 WriteRegDWORD SHCTX ${APP_UNINST_KEY} "NoRepair" 0x00000001 WriteRegStr SHCTX ${APP_UNINST_KEY} "StartMenu" "$SMPROGRAMS\$StartmenuFolder" From 095d859b14934aa4f2a03062b86ba17089a9420a Mon Sep 17 00:00:00 2001 From: Uwe Date: Thu, 4 Nov 2021 02:04:21 +0100 Subject: [PATCH 08/17] [skpi ci] Win installer: update MSVC version --- src/WindowsInstaller/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WindowsInstaller/README.md b/src/WindowsInstaller/README.md index 542f264de7..777ce80e43 100644 --- a/src/WindowsInstaller/README.md +++ b/src/WindowsInstaller/README.md @@ -20,7 +20,7 @@ To build the installer you can do the following: (You can alternatively get nsProcess from https://nsis.sourceforge.io/NsProcess_plugin) 7. Copy all FreeCAD files to the folder "~\FreeCAD" e.g. "C:\FreeCAD\Installer\FreeCAD" -8. If you use a version of FreeCAD that was compiled using another MSVC version than MSVC 2017, +8. If you use a version of FreeCAD that was compiled using another MSVC version than MSVC 2019, copy its distributable DLLs to the folder FILES_DEPS (see step 3). 9. Right-click on the file FreeCAD-installer.nsi and choose "Compile NSIS script" to compile the installer. From f36126770ca08c7b0d5d32587b8bb7e7b4394d96 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 4 Nov 2021 10:50:09 +0100 Subject: [PATCH 09/17] App: harmonize API of App::Application * make getHomePath() static and return a std::string * make getExecutableName() static and return a std::string --- src/App/Application.cpp | 8 ++++---- src/App/Application.h | 4 ++-- src/App/ApplicationPy.cpp | 2 +- src/App/Document.cpp | 2 +- src/Gui/Application.cpp | 8 ++++---- src/Gui/ApplicationPy.cpp | 6 +++--- src/Gui/Assistant.cpp | 8 ++++---- src/Gui/BitmapFactory.cpp | 6 +++--- src/Gui/Command.cpp | 2 +- src/Gui/DlgActionsImp.cpp | 2 +- src/Gui/DlgMacroExecuteImp.cpp | 6 +++--- src/Gui/DocumentRecovery.cpp | 2 +- src/Gui/DownloadItem.cpp | 2 +- src/Gui/GuiApplication.cpp | 2 +- src/Gui/MainWindow.cpp | 4 ++-- src/Gui/NetworkRetriever.cpp | 6 +++--- src/Gui/SoFCOffscreenRenderer.cpp | 4 ++-- src/Gui/Splashscreen.cpp | 2 +- src/Gui/WidgetFactory.cpp | 2 +- src/Mod/Import/App/AppImportPy.cpp | 2 +- src/Mod/Import/Gui/AppImportGuiPy.cpp | 2 +- src/Mod/Path/Gui/AppPathGuiPy.cpp | 6 +++--- src/Mod/Raytracing/App/AppRaytracingPy.cpp | 2 +- 23 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index d51a6740fc..faac993af3 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1040,14 +1040,14 @@ Application::TransactionSignaller::~TransactionSignaller() { } } -const char* Application::getHomePath(void) const +std::string Application::getHomePath() { - return _mConfig["AppHomePath"].c_str(); + return mConfig["AppHomePath"]; } -const char* Application::getExecutableName(void) const +std::string Application::getExecutableName() { - return _mConfig["ExeName"].c_str(); + return mConfig["ExeName"]; } std::string Application::getTempPath() diff --git a/src/App/Application.h b/src/App/Application.h index 0d38fcfdab..fbd20abc7c 100644 --- a/src/App/Application.h +++ b/src/App/Application.h @@ -395,8 +395,8 @@ public: /** @name Application directories */ //@{ - const char* getHomePath(void) const; - const char* getExecutableName(void) const; + static std::string getHomePath(); + static std::string getExecutableName(); /*! Returns the temporary directory. By default, this is set to the system's temporary directory but can be customized by the user. diff --git a/src/App/ApplicationPy.cpp b/src/App/ApplicationPy.cpp index 0eaa6ac788..de213ff32e 100644 --- a/src/App/ApplicationPy.cpp +++ b/src/App/ApplicationPy.cpp @@ -691,7 +691,7 @@ PyObject* Application::sGetHomePath(PyObject * /*self*/, PyObject *args) if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception - Py::String homedir(GetApplication().getHomePath(),"utf-8"); + Py::String homedir(Application::getHomePath(),"utf-8"); return Py::new_reference_to(homedir); } diff --git a/src/App/Document.cpp b/src/App/Document.cpp index f6ec4f46ac..0c6fceb43f 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1685,7 +1685,7 @@ std::string Document::getTransientDirectoryName(const std::string& uuid, const s std::stringstream s; QCryptographicHash hash(QCryptographicHash::Sha1); hash.addData(filename.c_str(), filename.size()); - s << App::Application::getTempPath() << GetApplication().getExecutableName() + s << App::Application::getTempPath() << App::Application::getExecutableName() << "_Doc_" << uuid << "_" << hash.result().toHex().left(6).constData() << "_" << QCoreApplication::applicationPid(); diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index e0ce35be61..0dc5ed879a 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -1955,13 +1955,13 @@ void Application::runApplication(void) mainApp.setApplicationName(QString::fromUtf8(it->second.c_str())); } else { - mainApp.setApplicationName(QString::fromUtf8(App::GetApplication().getExecutableName())); + mainApp.setApplicationName(QString::fromStdString(App::Application::getExecutableName())); } #ifndef Q_OS_MACX mainApp.setWindowIcon(Gui::BitmapFactory().pixmap(App::Application::Config()["AppIcon"].c_str())); #endif QString plugin; - plugin = QString::fromUtf8(App::GetApplication().getHomePath()); + plugin = QString::fromStdString(App::Application::getHomePath()); plugin += QLatin1String("/plugins"); QCoreApplication::addLibraryPath(plugin); @@ -2127,7 +2127,7 @@ void Application::runApplication(void) // init the Inventor subsystem initOpenInventor(); - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); it = cfg.find("WindowTitle"); if (it != cfg.end()) { @@ -2267,7 +2267,7 @@ void Application::runApplication(void) try { std::stringstream s; - s << App::Application::getTempPath() << App::GetApplication().getExecutableName() + s << App::Application::getTempPath() << App::Application::getExecutableName() << "_" << QCoreApplication::applicationPid() << ".lock"; // open a lock file with the PID Base::FileInfo fi(s.str()); diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index cf23554b0d..82a883cb1f 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -1029,7 +1029,7 @@ PyObject* Application::sAddResPath(PyObject * /*self*/, PyObject *args) PyMem_Free(filePath); if (QDir::isRelativePath(path)) { // Home path ends with '/' - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); path = home + path; } @@ -1048,7 +1048,7 @@ PyObject* Application::sAddLangPath(PyObject * /*self*/, PyObject *args) PyMem_Free(filePath); if (QDir::isRelativePath(path)) { // Home path ends with '/' - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); path = home + path; } @@ -1066,7 +1066,7 @@ PyObject* Application::sAddIconPath(PyObject * /*self*/, PyObject *args) PyMem_Free(filePath); if (QDir::isRelativePath(path)) { // Home path ends with '/' - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); path = home + path; } diff --git a/src/Gui/Assistant.cpp b/src/Gui/Assistant.cpp index f903c7a28f..e905fe8dfd 100644 --- a/src/Gui/Assistant.cpp +++ b/src/Gui/Assistant.cpp @@ -85,8 +85,8 @@ bool Assistant::startAssistant() if (proc->state() != QProcess::Running) { #ifdef Q_OS_WIN QString app; - app = QDir::toNativeSeparators(QString::fromUtf8 - (App::GetApplication().getHomePath()) + QLatin1String("bin/")); + app = QDir::toNativeSeparators(QString::fromStdString + (App::Application::getHomePath()) + QLatin1String("bin/")); #elif defined(Q_OS_MAC) QString app = QCoreApplication::applicationDirPath() + QDir::separator(); #else @@ -95,8 +95,8 @@ bool Assistant::startAssistant() app += QLatin1String("assistant"); // get the name of the executable and the doc path - QString exe = QString::fromUtf8(App::GetApplication().getExecutableName()); - QString doc = QString::fromUtf8(App::Application::getHelpDir().c_str()); + QString exe = QString::fromStdString(App::Application::getExecutableName()); + QString doc = QString::fromStdString(App::Application::getHelpDir()); QString qhc = doc + exe.toLower() + QLatin1String(".qhc"); diff --git a/src/Gui/BitmapFactory.cpp b/src/Gui/BitmapFactory.cpp index bfa5317cf1..2e9ffd7156 100644 --- a/src/Gui/BitmapFactory.cpp +++ b/src/Gui/BitmapFactory.cpp @@ -97,15 +97,15 @@ BitmapFactoryInst& BitmapFactoryInst::instance(void) std::map::const_iterator it; it = App::GetApplication().Config().find("ProgramIcons"); if (it != App::GetApplication().Config().end()) { - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); QString path = QString::fromUtf8(it->second.c_str()); if (QDir(path).isRelative()) { path = QFileInfo(QDir(home), path).absoluteFilePath(); } _pcSingleton->addPath(path); } - _pcSingleton->addPath(QString::fromLatin1("%1/icons").arg(QString::fromUtf8(App::GetApplication().getHomePath()))); - _pcSingleton->addPath(QString::fromLatin1("%1/icons").arg(QString::fromUtf8(App::GetApplication().Config()["UserAppData"].c_str()))); + _pcSingleton->addPath(QString::fromLatin1("%1/icons").arg(QString::fromStdString(App::Application::getHomePath()))); + _pcSingleton->addPath(QString::fromLatin1("%1/icons").arg(QString::fromStdString(App::Application::getUserAppDataDir()))); _pcSingleton->addPath(QLatin1String(":/icons/")); _pcSingleton->addPath(QLatin1String(":/Icons/")); } diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index cd95d3ae31..3f44c28d87 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -1117,7 +1117,7 @@ void MacroCommand::activated(int iMsg) d = QDir(QString::fromUtf8(cMacroPath.c_str())); } else { - QString dirstr = QString::fromUtf8(App::GetApplication().getHomePath()) + QString::fromUtf8("Macro"); + QString dirstr = QString::fromStdString(App::Application::getHomePath()) + QString::fromLatin1("Macro"); d = QDir(dirstr); } diff --git a/src/Gui/DlgActionsImp.cpp b/src/Gui/DlgActionsImp.cpp index 35aa3b9f0b..f2c85ebb99 100644 --- a/src/Gui/DlgActionsImp.cpp +++ b/src/Gui/DlgActionsImp.cpp @@ -71,7 +71,7 @@ DlgCustomActionsImp::DlgCustomActionsImp( QWidget* parent ) for (unsigned int i=0; iactionMacros->insertItem(0,d[i],QVariant(false)); - QString systemMacroDirStr = QString::fromUtf8(App::GetApplication().getHomePath()) + QString::fromUtf8("Macro"); + QString systemMacroDirStr = QString::fromStdString(App::Application::getHomePath()) + QString::fromLatin1("Macro"); d = QDir(systemMacroDirStr, QLatin1String("*.FCMacro *.py")); if (d.exists()) { for (unsigned int i=0; isetText(0, dir[i]); } - QString dirstr = QString::fromUtf8(App::GetApplication().getHomePath()) + QString::fromUtf8("Macro"); + QString dirstr = QString::fromStdString(App::Application::getHomePath()) + QString::fromLatin1("Macro"); dir = QDir(dirstr, QLatin1String("*.FCMacro *.py")); ui->systemMacroListBox->clear(); @@ -268,7 +268,7 @@ void DlgMacroExecuteImp::accept() dir =QDir(this->macroPath); } else { - QString dirstr = QString::fromUtf8(App::GetApplication().getHomePath()) + QString::fromUtf8("Macro"); + QString dirstr = QString::fromStdString(App::Application::getHomePath()) + QString::fromLatin1("Macro"); dir = QDir(dirstr); } @@ -319,7 +319,7 @@ void DlgMacroExecuteImp::on_editButton_clicked() else { //index == 1 system-wide item = ui->systemMacroListBox->currentItem(); - dir.setPath(QString::fromUtf8(App::GetApplication().getHomePath()) + QString::fromUtf8("Macro")); + dir.setPath(QString::fromStdString(App::Application::getHomePath()) + QString::fromLatin1("Macro")); } if (!item) diff --git a/src/Gui/DocumentRecovery.cpp b/src/Gui/DocumentRecovery.cpp index 4f2d60006e..924c4e32fb 100644 --- a/src/Gui/DocumentRecovery.cpp +++ b/src/Gui/DocumentRecovery.cpp @@ -666,7 +666,7 @@ void DocumentRecoveryHandler::checkForPreviousCrashes(const std::function locks = tmp.entryInfoList(); for (QList::iterator it = locks.begin(); it != locks.end(); ++it) { QString bn = it->baseName(); diff --git a/src/Gui/DownloadItem.cpp b/src/Gui/DownloadItem.cpp index 43e59a26ba..6e87fbc5e8 100644 --- a/src/Gui/DownloadItem.cpp +++ b/src/Gui/DownloadItem.cpp @@ -273,7 +273,7 @@ void DownloadItem::init() QString DownloadItem::getDownloadDirectory() const { - QString exe = QString::fromLatin1(App::GetApplication().getExecutableName()); + QString exe = QString::fromStdString(App::Application::getExecutableName()); QString path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); QString dirPath = QDir(path).filePath(exe); Base::Reference hPath = App::GetApplication().GetUserParameter().GetGroup("BaseApp") diff --git a/src/Gui/GuiApplication.cpp b/src/Gui/GuiApplication.cpp index b254658000..1a9e7e335f 100644 --- a/src/Gui/GuiApplication.cpp +++ b/src/Gui/GuiApplication.cpp @@ -177,7 +177,7 @@ public: , running(false) { timer->setSingleShot(true); - std::string exeName = App::GetApplication().getExecutableName(); + std::string exeName = App::Application::getExecutableName(); serverName = QString::fromStdString(exeName); } diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 35a335e9c3..b0dfe66630 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -1490,7 +1490,7 @@ QPixmap MainWindow::aboutImage() const if (!about_path.empty() && about_image.isNull()) { QString path = QString::fromUtf8(about_path.c_str()); if (QDir(path).isRelative()) { - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); path = QFileInfo(QDir(home), path).absoluteFilePath(); } about_image.load(path); @@ -1517,7 +1517,7 @@ QPixmap MainWindow::splashImage() const if (splash_image.isNull()) { QString path = QString::fromUtf8(splash_path.c_str()); if (QDir(path).isRelative()) { - QString home = QString::fromUtf8(App::GetApplication().getHomePath()); + QString home = QString::fromStdString(App::Application::getHomePath()); path = QFileInfo(QDir(home), path).absoluteFilePath(); } diff --git a/src/Gui/NetworkRetriever.cpp b/src/Gui/NetworkRetriever.cpp index 8ba993e207..38e8528f62 100644 --- a/src/Gui/NetworkRetriever.cpp +++ b/src/Gui/NetworkRetriever.cpp @@ -418,7 +418,7 @@ Action * StdCmdDownloadOnlineHelp::createAction(void) { Action *pcAction; - QString exe = QString::fromLatin1(App::GetApplication().getExecutableName()); + QString exe = QString::fromStdString(App::Application::getExecutableName()); pcAction = new Action(this,getMainWindow()); pcAction->setText(QCoreApplication::translate( this->className(), getMenuText())); @@ -437,7 +437,7 @@ Action * StdCmdDownloadOnlineHelp::createAction(void) void StdCmdDownloadOnlineHelp::languageChange() { if (_pcAction) { - QString exe = QString::fromLatin1(App::GetApplication().getExecutableName()); + QString exe = QString::fromStdString(App::Application::getExecutableName()); _pcAction->setText(QCoreApplication::translate( this->className(), getMenuText())); _pcAction->setToolTip(QCoreApplication::translate( @@ -483,7 +483,7 @@ void StdCmdDownloadOnlineHelp::activated(int iMsg) bool canStart = false; // set output directory - QString path = QString::fromUtf8(App::GetApplication().getHomePath()); + QString path = QString::fromStdString(App::Application::getHomePath()); path += QString::fromLatin1("/doc/"); ParameterGrp::handle hURLGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/OnlineHelp"); path = QString::fromUtf8(hURLGrp->GetASCII( "DownloadLocation", path.toLatin1() ).c_str()); diff --git a/src/Gui/SoFCOffscreenRenderer.cpp b/src/Gui/SoFCOffscreenRenderer.cpp index a54220fac7..01c393fd46 100644 --- a/src/Gui/SoFCOffscreenRenderer.cpp +++ b/src/Gui/SoFCOffscreenRenderer.cpp @@ -166,7 +166,7 @@ void SoFCOffscreenRenderer::writeToImageFile(const char* filename, const char* c img.setText(QLatin1String("Description"), QString::fromUtf8(comment)); img.setText(QLatin1String("Creation Time"), QDateTime::currentDateTime().toString()); img.setText(QLatin1String("Software"), - QString::fromUtf8(App::GetApplication().getExecutableName())); + QString::fromStdString(App::Application::getExecutableName())); } QFile f(QString::fromUtf8(filename)); @@ -296,7 +296,7 @@ std::string SoFCOffscreenRenderer::createMIBA(const SbMatrix& mat) const com << " \n" ; com << " Unknown\n" ; com << " " << QDateTime::currentDateTime().toString().toLatin1().constData() << "\n" ; - com << " " << App::GetApplication().getExecutableName() << " " << major << "." << minor << "\n" ; + com << " " << App::Application::getExecutableName() << " " << major << "." << minor << "\n" ; com << " Unknown\n"; com << " 1.0\n"; com << " \n" ; diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 4b8e5b53fd..c899f92ae9 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -680,7 +680,7 @@ void AboutDialog::on_copyButton_clicked() QTextStream str(&data); std::map& config = App::Application::Config(); std::map::iterator it; - QString exe = QString::fromLatin1(App::GetApplication().getExecutableName()); + QString exe = QString::fromStdString(App::Application::getExecutableName()); QString major = QString::fromLatin1(config["BuildVersionMajor"].c_str()); QString minor = QString::fromLatin1(config["BuildVersionMinor"].c_str()); diff --git a/src/Gui/WidgetFactory.cpp b/src/Gui/WidgetFactory.cpp index b68456e7a4..241c35f655 100644 --- a/src/Gui/WidgetFactory.cpp +++ b/src/Gui/WidgetFactory.cpp @@ -431,7 +431,7 @@ void PyResource::load(const char* name) // checks whether it's a relative path if (fi.isRelative()) { QString cwd = QDir::currentPath (); - QString home= QDir(QString::fromUtf8(App::GetApplication().getHomePath())).path(); + QString home= QDir(QString::fromStdString(App::Application::getHomePath())).path(); // search in cwd and home path for the file // diff --git a/src/Mod/Import/App/AppImportPy.cpp b/src/Mod/Import/App/AppImportPy.cpp index f76e59bf15..88e7f2be6e 100644 --- a/src/Mod/Import/App/AppImportPy.cpp +++ b/src/Mod/Import/App/AppImportPy.cpp @@ -368,7 +368,7 @@ private: //makeHeader.SetName(new TCollection_HAsciiString((Standard_CString)Utf8Name.c_str())); makeHeader.SetAuthorValue (1, new TCollection_HAsciiString(hGrp->GetASCII("Author", "Author").c_str())); makeHeader.SetOrganizationValue (1, new TCollection_HAsciiString(hGrp->GetASCII("Company").c_str())); - makeHeader.SetOriginatingSystem(new TCollection_HAsciiString(App::GetApplication().getExecutableName())); + makeHeader.SetOriginatingSystem(new TCollection_HAsciiString(App::Application::getExecutableName().c_str())); makeHeader.SetDescriptionValue(1, new TCollection_HAsciiString("FreeCAD Model")); IFSelect_ReturnStatus ret = writer.Write(name8bit.c_str()); if (ret == IFSelect_RetError || ret == IFSelect_RetFail || ret == IFSelect_RetStop) { diff --git a/src/Mod/Import/Gui/AppImportGuiPy.cpp b/src/Mod/Import/Gui/AppImportGuiPy.cpp index 774c40e2f9..8f855a3a32 100644 --- a/src/Mod/Import/Gui/AppImportGuiPy.cpp +++ b/src/Mod/Import/Gui/AppImportGuiPy.cpp @@ -668,7 +668,7 @@ private: //makeHeader.SetName(new TCollection_HAsciiString((Standard_CString)Utf8Name.c_str())); makeHeader.SetAuthorValue (1, new TCollection_HAsciiString(hGrp->GetASCII("Author", "Author").c_str())); makeHeader.SetOrganizationValue (1, new TCollection_HAsciiString(hGrp->GetASCII("Company").c_str())); - makeHeader.SetOriginatingSystem(new TCollection_HAsciiString(App::GetApplication().getExecutableName())); + makeHeader.SetOriginatingSystem(new TCollection_HAsciiString(App::Application::getExecutableName().c_str())); makeHeader.SetDescriptionValue(1, new TCollection_HAsciiString("FreeCAD Model")); IFSelect_ReturnStatus ret = writer.Write(name8bit.c_str()); if (ret == IFSelect_RetError || ret == IFSelect_RetFail || ret == IFSelect_RetStop) { diff --git a/src/Mod/Path/Gui/AppPathGuiPy.cpp b/src/Mod/Path/Gui/AppPathGuiPy.cpp index a442244b41..062da3a069 100644 --- a/src/Mod/Path/Gui/AppPathGuiPy.cpp +++ b/src/Mod/Path/Gui/AppPathGuiPy.cpp @@ -82,7 +82,7 @@ private: wc.restoreCursor(); try { - std::string path = App::GetApplication().getHomePath(); + std::string path = App::Application::getHomePath(); path += "Mod/Path/PathScripts/post/"; QDir dir1(QString::fromUtf8(path.c_str()), QString::fromLatin1("*_pre.py")); std::string cMacroPath = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Macro") @@ -149,7 +149,7 @@ private: wc.restoreCursor(); try { - std::string path = App::GetApplication().getHomePath(); + std::string path = App::Application::getHomePath(); path += "Mod/Path/PathScripts/post/"; QDir dir1(QString::fromUtf8(path.c_str()), QString::fromLatin1("*_pre.py")); std::string cMacroPath = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Macro") @@ -225,7 +225,7 @@ private: if (objlist.size() == 0) throw Py::RuntimeError("No object to export"); - std::string path = App::GetApplication().getHomePath(); + std::string path = App::Application::getHomePath(); path += "Mod/Path/PathScripts/post/"; QDir dir1(QString::fromUtf8(path.c_str()), QString::fromLatin1("*_post.py")); std::string cMacroPath = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Macro") diff --git a/src/Mod/Raytracing/App/AppRaytracingPy.cpp b/src/Mod/Raytracing/App/AppRaytracingPy.cpp index 5b124e91fc..dc6a528415 100644 --- a/src/Mod/Raytracing/App/AppRaytracingPy.cpp +++ b/src/Mod/Raytracing/App/AppRaytracingPy.cpp @@ -222,7 +222,7 @@ private: if (! PyArg_ParseTuple(args.ptr(), "ss",&FileName,&DestDir)) throw Py::Exception(); - std::string resName = App::GetApplication().getHomePath(); + std::string resName = App::Application::getHomePath(); resName += "Mod"; resName += PATHSEP ; resName += "Raytracing"; From c18c330d38527b44fd354cd1281d0172df75f53e Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Thu, 4 Nov 2021 15:44:40 +0100 Subject: [PATCH 10/17] [Sketcher] Refactor Validate Sketch task UI to decrease confusion --- .../Sketcher/Gui/TaskSketcherValidation.ui | 113 +++++++++++------- 1 file changed, 67 insertions(+), 46 deletions(-) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui b/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui index 4cf647b8cf..d451104fd0 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui @@ -6,30 +6,43 @@ 0 0 - 311 - 453 + 266 + 684 Sketcher validation - - + + + + Reversed external geometry + + + + + + Find + + + + + + + Swap endpoints in constraints + + + + + + + + Missing coincidences - - - - Tolerance: - - - - - - @@ -47,6 +60,13 @@ + + + + Tolerance: + + + @@ -54,17 +74,13 @@ - - - - Highlight open vertexes - - + + - + Invalid constraints @@ -94,7 +110,35 @@ - + + + + Open and non-manifold vertexes + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + Highlight troublesome vertexes + + + + + + + Degenerated geometry @@ -117,30 +161,7 @@ - - - - Reversed external geometry - - - - - - Find - - - - - - - Swap endpoints in constraints - - - - - - - + Constraint orientation locking From 1c7ece5e148826eca9ea7f9a94e747df26871e98 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Thu, 4 Nov 2021 15:55:12 +0100 Subject: [PATCH 11/17] [Sketcher] Add tooltips in Validate Sketch task UI --- .../Sketcher/Gui/TaskSketcherValidation.ui | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui b/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui index d451104fd0..bde339ba91 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherValidation.ui @@ -22,6 +22,9 @@ + + Finds reversed external geometries + Find @@ -29,6 +32,9 @@ + + Fixes found reversed external geometries by swapping their endpoints + Swap endpoints in constraints @@ -39,12 +45,18 @@ + + Fixes found missing coincidences by adding extra coincident constrains + Missing coincidences + + If checked, construction geometries are ignored in the search + Ignore construction geometry @@ -55,6 +67,10 @@ + + Finds and displays missing coincidences found in the sketch +This is done by analyzing the sketch geometries and constraints + Find @@ -75,7 +91,11 @@ - + + + Defines the X/Y tolerance inside which missing coincidences are searched. + + @@ -88,6 +108,9 @@ + + Finds invalid/malformed constrains in the sketch + Find @@ -95,6 +118,9 @@ + + Tries to fix found invalid constraints + Fix @@ -102,6 +128,9 @@ + + Deletes constrains refering to external geometry + Delete constraints to external geom. @@ -130,6 +159,10 @@ + + Highlights open and non-manifold vertexes that could lead to error if sketch is used to generate solids +This is purely based on topological shape of the sketch and not on its geometry/constrain set. + Highlight troublesome vertexes @@ -146,6 +179,9 @@ + + Finds degenerated geometries in the sketch + Find @@ -153,6 +189,9 @@ + + Tries to fix found degenerated geometries + Fix @@ -169,6 +208,9 @@ + + Enables/updates constraint orientation locking + Enable/Update @@ -176,6 +218,9 @@ + + Disables constraint orientation locking + Disable From ce95ed8047dfc1dd763ef5ba7b01b88204f8b63f Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 4 Nov 2021 23:21:14 +0100 Subject: [PATCH 12/17] PD: [skip ci] open a transaction when creating a new body with DlgActiveBody --- src/Mod/PartDesign/Gui/DlgActiveBody.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Mod/PartDesign/Gui/DlgActiveBody.cpp b/src/Mod/PartDesign/Gui/DlgActiveBody.cpp index 9aeb1b6c36..fb4841d94f 100644 --- a/src/Mod/PartDesign/Gui/DlgActiveBody.cpp +++ b/src/Mod/PartDesign/Gui/DlgActiveBody.cpp @@ -28,6 +28,7 @@ # include #endif +#include #include #include "DlgActiveBody.h" @@ -92,10 +93,15 @@ void DlgActiveBody::accept() App::DocumentObject* selectedBody = selectedItems[0]->data(Qt::UserRole).value(); - if (selectedBody) + if (selectedBody) { activeBody = makeBodyActive(selectedBody, _doc); - else + } + else { + // A transaction must be created as otherwise the undo/redo is broken + App::GetApplication().setActiveTransaction(QT_TRANSLATE_NOOP("Command", "Add a Body"), true); activeBody = makeBody(_doc); + App::GetApplication().closeActiveTransaction(); + } QDialog::accept(); } From 2ffd911111de64e19d788b65d2412c734936c351 Mon Sep 17 00:00:00 2001 From: luz paz Date: Thu, 4 Nov 2021 06:27:24 -0400 Subject: [PATCH 13/17] Fix typos in source comments [skip ci] Found via `codespell -q 3 -L aci,ake,aline,alle,alledges,alocation,als,ang,anid,apoints,ba,beginn,behaviour,bloaded,bottome,byteorder,calculater,cancelled,cancelling,cas,cascade,centimetre,childs,colour,colours,commen,connexion,currenty,dof,doubleclick,dum,eiter,elemente,ende,feld,finde,findf,freez,hist,iff,indicies,initialisation,initialise,initialised,initialises,initialisiert,inout,ist,kilometre,lod,mantatory,methode,metres,millimetre,modell,nd,noe,normale,normaly,nto,numer,oder,ontop,orgin,orginx,orginy,ot,pard,parms,pres,programm,que,recurrance,rougly,seperator,serie,sinc,strack,substraction,te,thist,thru,tread,uint,unter,vertexes,wallthickness,whitespaces -S ./.git,*.po,*.ts,./ChangeLog.txt,./src/3rdParty,./src/Mod/Assembly/App/opendcm,./src/CXX,./src/zipios++,./src/Base/swig*,./src/Mod/Robot/App/kdl_cp,./src/Mod/Import/App/SCL,./src/WindowsInstaller,./src/Doc/FreeCAD.uml,./build/doc/SourceDocu` --- src/App/Application.h | 2 +- src/Mod/Fem/femtaskpanels/task_material_common.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App/Application.h b/src/App/Application.h index fbd20abc7c..2e7237ea9e 100644 --- a/src/App/Application.h +++ b/src/App/Application.h @@ -597,7 +597,7 @@ private: std::deque _pendingDocsReopen; std::map > _pendingDocMap; - // To prevent infinite recursion of reloading a partial document due a truely + // To prevent infinite recursion of reloading a partial document due a truly // missing object std::map > _docReloadAttempts; diff --git a/src/Mod/Fem/femtaskpanels/task_material_common.py b/src/Mod/Fem/femtaskpanels/task_material_common.py index 1ce0320928..4ceb7fa941 100644 --- a/src/Mod/Fem/femtaskpanels/task_material_common.py +++ b/src/Mod/Fem/femtaskpanels/task_material_common.py @@ -549,7 +549,7 @@ class _TaskPanel: # for example PoissonRatio value = Units.Quantity(inputfield_text).Value old_value = Units.Quantity(self.material[matProperty]).Value - # value = float(inputfield_text) # this fails on locale with komma + # value = float(inputfield_text) # this fails on locale with comma # https://forum.freecadweb.org/viewtopic.php?f=18&t=56912&p=523313#p523313 if value: if not (1 - variation < float(old_value) / value < 1 + variation): From 6d8207d0d8f303ae9bdd86e87e66bb1783566cc8 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Thu, 4 Nov 2021 12:06:25 +0100 Subject: [PATCH 14/17] [Examples] Add thumbnail to PDN example --- data/examples/PartDesignExample.FCStd | Bin 36250 -> 40455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/examples/PartDesignExample.FCStd b/data/examples/PartDesignExample.FCStd index 8e5278bc540dcd22c1981df81e67997cef4abac2..58a01160851a7570e92b2467beccd936eb6aaf92 100644 GIT binary patch delta 14708 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 uw>~ehe@u=S91QI5Im+I-2qGZOAN5mT|G#~n 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 From c878c6d960dc0167732e92789fd58d4d456c86b5 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Tue, 2 Nov 2021 19:07:23 +0100 Subject: [PATCH 15/17] [ViewProvider2DObject] Fix typo --- src/Mod/Part/Gui/ViewProvider2DObject.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Mod/Part/Gui/ViewProvider2DObject.h b/src/Mod/Part/Gui/ViewProvider2DObject.h index a6fd7b9221..135265d0b8 100644 --- a/src/Mod/Part/Gui/ViewProvider2DObject.h +++ b/src/Mod/Part/Gui/ViewProvider2DObject.h @@ -21,8 +21,8 @@ ***************************************************************************/ -#ifndef PARTGUI_IEWPROVIDER2DOBJECT_H -#define PARTGUI_IEWPROVIDER2DOBJECT_H +#ifndef PARTGUI_VIEWPROVIDER2DOBJECT_H +#define PARTGUI_VIEWPROVIDER2DOBJECT_H #include "ViewProvider.h" #include @@ -103,5 +103,5 @@ typedef Gui::ViewProviderPythonFeatureT ViewProvider2DObje } // namespace PartGui -#endif // PARTGUI_IEWPROVIDER2DOBJECT_H +#endif // PARTGUI_VIEWPROVIDER2DOBJECT_H From 2f3d7cfdf0a14e8bafd7886a71ed35bb149812a3 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Tue, 2 Nov 2021 19:25:12 +0100 Subject: [PATCH 16/17] [ViewProvider2DObject=>Sketcher] Fix grid visibility management Error in grid visibility equation that makes grid to disappear when saving document in Edit mode --- src/Mod/Part/Gui/ViewProvider2DObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Part/Gui/ViewProvider2DObject.cpp b/src/Mod/Part/Gui/ViewProvider2DObject.cpp index 3c1ad047a4..a19a47803c 100644 --- a/src/Mod/Part/Gui/ViewProvider2DObject.cpp +++ b/src/Mod/Part/Gui/ViewProvider2DObject.cpp @@ -274,7 +274,7 @@ void ViewProvider2DObjectGrid::onChanged(const App::Property* prop) ViewProviderPart::onChanged(prop); if (prop == &ShowGrid || prop == &ShowOnlyInEditMode || prop == &Visibility) { - if (ShowGrid.getValue() && Visibility.getValue() && !(ShowOnlyInEditMode.getValue() && !this->isEditing())) + if (ShowGrid.getValue() && ((Visibility.getValue() && !ShowOnlyInEditMode.getValue()) || this->isEditing())) createGrid(); else Gui::coinRemoveAllChildren(GridRoot); From 8751ced2d10beefda9c44fcb8b9fad2c46f48184 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Tue, 2 Nov 2021 19:46:42 +0100 Subject: [PATCH 17/17] [Sketcher] Removed lines that was introduced to workaround grid visibility management issues --- src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp index bebd6a5844..81a2ec0077 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherGeneral.cpp @@ -264,9 +264,6 @@ void TaskSketcherGeneral::onChangedSketchView(const Gui::ViewProvider& vp, QSignalBlocker block(widget); widget->checkGridView(sketchView->ShowGrid.getValue()); widget->enableGridSettings(sketchView->ShowGrid.getValue()); - if (sketchView->ShowGrid.getValue()) { - sketchView->createGrid(); - } } else if (&sketchView->GridSize == &prop) { QSignalBlocker block(widget); @@ -293,7 +290,6 @@ void TaskSketcherGeneral::onToggleGridView(bool on) Base::ConnectionBlocker block(changedSketchView); sketchView->ShowGrid.setValue(on); widget->enableGridSettings(on); - if (on) sketchView->createGrid(); } void TaskSketcherGeneral::onSetGridSize(double val)