diff --git a/src/Mod/TechDraw/App/DrawPage.cpp b/src/Mod/TechDraw/App/DrawPage.cpp
index 368149e62e..e3a0de09cd 100644
--- a/src/Mod/TechDraw/App/DrawPage.cpp
+++ b/src/Mod/TechDraw/App/DrawPage.cpp
@@ -41,6 +41,7 @@
#include "DrawViewDimension.h"
#include "DrawViewPart.h"
#include "Preferences.h"
+#include "DrawUtil.h"
using namespace TechDraw;
@@ -468,6 +469,13 @@ bool DrawPage::AllowPageOverride(void)
return Preferences::getPreferenceGroup("General")->GetBool("AllowPageOverride", true);
}
+//! get a translated label string from the context (ex TaskActiveView), the base name (ex ActiveView) and
+//! the unique name within the document (ex ActiveView001), and use it to update the Label property.
+void DrawPage::translateLabel(std::string context, std::string baseName, std::string uniqueName)
+{
+ Label.setValue(DrawUtil::translateArbitrary(context, baseName, uniqueName));
+}
+
// Python Drawing feature ---------------------------------------------------------
diff --git a/src/Mod/TechDraw/App/DrawPage.h b/src/Mod/TechDraw/App/DrawPage.h
index 3c2952c050..a637190930 100644
--- a/src/Mod/TechDraw/App/DrawPage.h
+++ b/src/Mod/TechDraw/App/DrawPage.h
@@ -106,6 +106,9 @@ public:
bool hasObject(App::DocumentObject* obj);
+ void translateLabel(std::string context, std::string baseName, std::string uniqueName);
+
+
protected:
void onBeforeChange(const App::Property* prop) override;
void onChanged(const App::Property* prop) override;
diff --git a/src/Mod/TechDraw/App/DrawPagePy.xml b/src/Mod/TechDraw/App/DrawPagePy.xml
index 6b7abf2b2e..b0eda4c9d2 100644
--- a/src/Mod/TechDraw/App/DrawPagePy.xml
+++ b/src/Mod/TechDraw/App/DrawPagePy.xml
@@ -28,6 +28,13 @@
getAllViews() - returns a list of all the views on page including Views inside Collections
+
+
+ translateLabel(translationContext, objectBaseName, objectUniqueName).
+ No return value. Replace the current label with a translated version where possible.
+
+
+
Returns the width of this page
diff --git a/src/Mod/TechDraw/App/DrawPagePyImp.cpp b/src/Mod/TechDraw/App/DrawPagePyImp.cpp
index 8d147bf1a6..aec6cdc6aa 100644
--- a/src/Mod/TechDraw/App/DrawPagePyImp.cpp
+++ b/src/Mod/TechDraw/App/DrawPagePyImp.cpp
@@ -121,6 +121,49 @@ PyObject* DrawPagePy::requestPaint(PyObject* args)
Py_Return;
}
+//! replace the current Label with a translated version
+PyObject* DrawPagePy::translateLabel(PyObject *args)
+{
+ PyObject* pyContext;
+ PyObject* pyBaseName;
+ PyObject* pyUniqueName;
+ std::string context;
+ std::string baseName;
+ std::string uniqueName;
+
+ if (!PyArg_ParseTuple(args, "OOO", &pyContext, &pyBaseName, &pyUniqueName)) {
+ throw Py::TypeError("Could not translate label - bad parameters.");
+ }
+
+ Py_ssize_t size = 0;
+ const char* cContext = PyUnicode_AsUTF8AndSize(pyContext, &size);
+ if (cContext) {
+ context = std::string(cContext, size);
+ } else {
+ throw Py::TypeError("Could not translate label - context not available.");
+ }
+
+ const char* cBaseName = PyUnicode_AsUTF8AndSize(pyBaseName, &size);
+ if (cBaseName) {
+ baseName = std::string(cBaseName, size);
+ } else {
+ throw Py::TypeError("Could not translate label - base name not available.");
+ }
+
+ const char* cUniqueName = PyUnicode_AsUTF8AndSize(pyUniqueName, &size);
+ if (cUniqueName) {
+ uniqueName = std::string(cUniqueName, size);
+ } else {
+ throw Py::TypeError("Could not translate label - unique name not available.");
+ }
+
+ // we have the 3 parameters we need for DrawPage::translateLabel
+ DrawPage* page = getDrawPagePtr();
+ page->translateLabel(context, baseName, uniqueName);
+
+ Py_Return;
+}
+
Py::Float DrawPagePy::getPageWidth() const
{
return Py::Float(getDrawPagePtr()->getPageWidth());
diff --git a/src/Mod/TechDraw/App/DrawSVGTemplate.cpp b/src/Mod/TechDraw/App/DrawSVGTemplate.cpp
index f6ff7edfb7..3773b3632f 100644
--- a/src/Mod/TechDraw/App/DrawSVGTemplate.cpp
+++ b/src/Mod/TechDraw/App/DrawSVGTemplate.cpp
@@ -43,7 +43,6 @@
#include "DrawUtil.h"
#include "XMLQuery.h"
-
using namespace TechDraw;
PROPERTY_SOURCE(TechDraw::DrawSVGTemplate, TechDraw::DrawTemplate)
@@ -250,6 +249,12 @@ std::map DrawSVGTemplate::getEditableTextsFromTemplate
return editables;
}
+//! get a translated label string from the context (ex TaskActiveView), the base name (ex ActiveView) and
+//! the unique name within the document (ex ActiveView001), and use it to update the Label property.
+void DrawSVGTemplate::translateLabel(std::string context, std::string baseName, std::string uniqueName)
+{
+ Label.setValue(DrawUtil::translateArbitrary(context, baseName, uniqueName));
+}
// Python Template feature ---------------------------------------------------------
namespace App {
diff --git a/src/Mod/TechDraw/App/DrawSVGTemplate.h b/src/Mod/TechDraw/App/DrawSVGTemplate.h
index c010bb80ee..030ebc33f1 100644
--- a/src/Mod/TechDraw/App/DrawSVGTemplate.h
+++ b/src/Mod/TechDraw/App/DrawSVGTemplate.h
@@ -57,6 +57,9 @@ public:
QString processTemplate();
+ void translateLabel(std::string context, std::string baseName, std::string uniqueName);
+
+
protected:
void replaceFileIncluded(std::string newTemplateFileName);
std::map getEditableTextsFromTemplate();
diff --git a/src/Mod/TechDraw/App/DrawSVGTemplatePy.xml b/src/Mod/TechDraw/App/DrawSVGTemplatePy.xml
index befd68c3f7..99f28d9f9e 100644
--- a/src/Mod/TechDraw/App/DrawSVGTemplatePy.xml
+++ b/src/Mod/TechDraw/App/DrawSVGTemplatePy.xml
@@ -23,5 +23,12 @@
setEditFieldContent(EditFieldName, NewContent) - sets a specific Editable Text Field to a new value
+
+
+ translateLabel(translationContext, objectBaseName, objectUniqueName).
+ No return value. Replace the current label with a translated version where possible.
+
+
+
diff --git a/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp b/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp
index cc6608097c..4a0a0f0cd6 100644
--- a/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp
+++ b/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp
@@ -36,6 +36,49 @@ std::string DrawSVGTemplatePy::representation() const
return std::string("");
}
+//! replace the current Label with a translated version
+PyObject* DrawSVGTemplatePy::translateLabel(PyObject *args)
+{
+ PyObject* pyContext;
+ PyObject* pyBaseName;
+ PyObject* pyUniqueName;
+ std::string context;
+ std::string baseName;
+ std::string uniqueName;
+
+ if (!PyArg_ParseTuple(args, "OOO", &pyContext, &pyBaseName, &pyUniqueName)) {
+ throw Py::TypeError("Could not translate label - bad parameters.");
+ }
+
+ Py_ssize_t size = 0;
+ const char* cContext = PyUnicode_AsUTF8AndSize(pyContext, &size);
+ if (cContext) {
+ context = std::string(cContext, size);
+ } else {
+ throw Py::TypeError("Could not translate label - context not available.");
+ }
+
+ const char* cBaseName = PyUnicode_AsUTF8AndSize(pyBaseName, &size);
+ if (cBaseName) {
+ baseName = std::string(cBaseName, size);
+ } else {
+ throw Py::TypeError("Could not translate label - base name not available.");
+ }
+
+ const char* cUniqueName = PyUnicode_AsUTF8AndSize(pyUniqueName, &size);
+ if (cUniqueName) {
+ uniqueName = std::string(cUniqueName, size);
+ } else {
+ throw Py::TypeError("Could not translate label - unique name not available.");
+ }
+
+ // we have the 3 parameters we need for DrawSVGTemplate::translateLabel
+ auto svgTemplate = getDrawSVGTemplatePtr();
+ svgTemplate->translateLabel(context, baseName, uniqueName);
+
+ Py_Return;
+}
+
PyObject *DrawSVGTemplatePy::getCustomAttributes(const char* ) const
{
return nullptr;
diff --git a/src/Mod/TechDraw/App/DrawUtil.cpp b/src/Mod/TechDraw/App/DrawUtil.cpp
index 9f6c8251f5..578fcf7f29 100644
--- a/src/Mod/TechDraw/App/DrawUtil.cpp
+++ b/src/Mod/TechDraw/App/DrawUtil.cpp
@@ -61,6 +61,7 @@
#include
#include
#include
+#include
#include
#include
@@ -1594,6 +1595,18 @@ void DrawUtil::copyFile(std::string inSpec, std::string outSpec)
}
}
+//! static method that provides a translated std::string for objects that are not derived from DrawView
+std::string DrawUtil::translateArbitrary(std::string context, std::string baseName, std::string uniqueName)
+{
+ std::string suffix("");
+ if (uniqueName.length() > baseName.length()) {
+ suffix = uniqueName.substr(baseName.length(), uniqueName.length() - baseName.length());
+ }
+ QString qTranslated = qApp->translate(context.c_str(), baseName.c_str());
+ std::string ssTranslated = Base::Tools::toStdString(qTranslated);
+ return ssTranslated + suffix;
+}
+
//============================
// various debugging routines.
diff --git a/src/Mod/TechDraw/App/DrawUtil.h b/src/Mod/TechDraw/App/DrawUtil.h
index b2a53be651..3d588984cc 100644
--- a/src/Mod/TechDraw/App/DrawUtil.h
+++ b/src/Mod/TechDraw/App/DrawUtil.h
@@ -252,6 +252,9 @@ public:
std::vector& intersections);
static void copyFile(std::string inSpec, std::string outSpec);
+ static std::string translateArbitrary(std::string context, std::string baseName, std::string uniqueName);
+
+
//debugging routines
static void dumpVertexes(const char* text, const TopoDS_Shape& s);
static void dumpEdge(const char* label, int i, TopoDS_Edge e);
diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp
index 4913c5fbc7..99a0e2eecb 100644
--- a/src/Mod/TechDraw/App/DrawView.cpp
+++ b/src/Mod/TechDraw/App/DrawView.cpp
@@ -45,12 +45,15 @@
using namespace TechDraw;
+using DU = DrawUtil;
//===========================================================================
// DrawView
//===========================================================================
#if 0 // needed for Qt's lupdate utility
+ QT_TRANSLATE_NOOP("DrawPage", "Page");
+ QT_TRANSLATE_NOOP("DrawSVGTemplate", "Template");
QT_TRANSLATE_NOOP("DrawView", "View");
QT_TRANSLATE_NOOP("DrawViewPart", "View");
QT_TRANSLATE_NOOP("DrawViewSection", "Section");
@@ -622,22 +625,10 @@ void DrawView::translateLabel(std::string context, std::string baseName, std::st
// Base::Console().Message("DV::translateLabel - context: %s baseName: %s uniqueName: %s\n",
// context.c_str(), baseName.c_str(), uniqueName.c_str());
- Label.setValue(translateArbitrary(context, baseName, uniqueName));
+ Label.setValue(DU::translateArbitrary(context, baseName, uniqueName));
// Base::Console().Message("DV::translateLabel - new label: %s\n", Label.getValue());
}
-//! static method that provides a translated std::string for objects that are not derived from DrawView
-std::string DrawView::translateArbitrary(std::string context, std::string baseName, std::string uniqueName)
-{
- std::string suffix("");
- if (uniqueName.length() > baseName.length()) {
- suffix = uniqueName.substr(baseName.length(), uniqueName.length() - baseName.length());
- }
- QString qTranslated = qApp->translate(context.c_str(), baseName.c_str());
- std::string ssTranslated = Base::Tools::toStdString(qTranslated);
- return ssTranslated + suffix;
-}
-
PyObject *DrawView::getPyObject(void)
{
if (PythonObject.is(Py::_None())) {
diff --git a/src/Mod/TechDraw/App/DrawView.h b/src/Mod/TechDraw/App/DrawView.h
index bf1873f0a2..4082c1fcb3 100644
--- a/src/Mod/TechDraw/App/DrawView.h
+++ b/src/Mod/TechDraw/App/DrawView.h
@@ -114,9 +114,6 @@ public:
bool overrideKeepUpdated(void) { return m_overrideKeepUpdated; }
void translateLabel(std::string context, std::string baseName, std::string uniqueName);
- static std::string translateArbitrary(std::string context, std::string baseName, std::string uniqueName);
-
-
protected:
void onChanged(const App::Property* prop) override;
diff --git a/src/Mod/TechDraw/App/DrawWeldSymbol.cpp b/src/Mod/TechDraw/App/DrawWeldSymbol.cpp
index d456b988bf..f172875ca0 100644
--- a/src/Mod/TechDraw/App/DrawWeldSymbol.cpp
+++ b/src/Mod/TechDraw/App/DrawWeldSymbol.cpp
@@ -30,8 +30,7 @@
#include "DrawWeldSymbolPy.h" // generated from DrawWeldSymbolPy.xml
#include "DrawLeaderLine.h"
#include "DrawTileWeld.h"
-#include "DrawView.h" // for translateArbitrary
-
+#include "DrawUtil.h"
using namespace TechDraw;
@@ -80,7 +79,7 @@ void DrawWeldSymbol::onSettingDocument()
auto tile1Obj( doc->addObject( "TechDraw::DrawTileWeld", tileName1.c_str() ) );
DrawTileWeld* tile1 = dynamic_cast(tile1Obj);
if (tile1) {
- tile1->Label.setValue(DrawView::translateArbitrary("DrawTileWeld", "TileWeld", tileName1));
+ tile1->Label.setValue(DrawUtil::translateArbitrary("DrawTileWeld", "TileWeld", tileName1));
tile1->TileParent.setValue(this);
}
@@ -88,7 +87,7 @@ void DrawWeldSymbol::onSettingDocument()
auto tile2Obj( doc->addObject( "TechDraw::DrawTileWeld", tileName2.c_str() ) );
DrawTileWeld* tile2 = dynamic_cast(tile2Obj);
if (tile2) {
- tile2->Label.setValue(DrawView::translateArbitrary("DrawTileWeld", "TileWeld", tileName2));
+ tile2->Label.setValue(DrawUtil::translateArbitrary("DrawTileWeld", "TileWeld", tileName2));
tile2->TileParent.setValue(this);
tile2->TileRow.setValue(-1); //other side is row -1
}
diff --git a/src/Mod/TechDraw/Gui/Command.cpp b/src/Mod/TechDraw/Gui/Command.cpp
index 40475d567a..68594b892a 100644
--- a/src/Mod/TechDraw/Gui/Command.cpp
+++ b/src/Mod/TechDraw/Gui/Command.cpp
@@ -116,8 +116,13 @@ void CmdTechDrawPageDefault::activated(int iMsg)
openCommand(QT_TRANSLATE_NOOP("Command", "Drawing create page"));
doCommand(Doc, "App.activeDocument().addObject('TechDraw::DrawPage', '%s')",
PageName.c_str());
+ doCommand(Doc, "App.activeDocument().%s.translateLabel('DrawPage', 'Page', '%s')",
+ PageName.c_str(), PageName.c_str());
+
doCommand(Doc, "App.activeDocument().addObject('TechDraw::DrawSVGTemplate', '%s')",
TemplateName.c_str());
+ doCommand(Doc, "App.activeDocument().%s.translateLabel('DrawSVGTemplate', 'Template', '%s')",
+ TemplateName.c_str(), TemplateName.c_str());
doCommand(Doc, "App.activeDocument().%s.Template = '%s'", TemplateName.c_str(),
templateFileName.toStdString().c_str());
@@ -187,10 +192,14 @@ void CmdTechDrawPageTemplate::activated(int iMsg)
openCommand(QT_TRANSLATE_NOOP("Command", "Drawing create page"));
doCommand(Doc, "App.activeDocument().addObject('TechDraw::DrawPage', '%s')",
PageName.c_str());
+ doCommand(Doc, "App.activeDocument().%s.translateLabel('DrawPage', 'Page', '%s')",
+ PageName.c_str(), PageName.c_str());
// Create the Template Object to attach to the page
doCommand(Doc, "App.activeDocument().addObject('TechDraw::DrawSVGTemplate', '%s')",
TemplateName.c_str());
+ doCommand(Doc, "App.activeDocument().%s.translateLabel('DrawSVGTemplate', 'Template', '%s')",
+ TemplateName.c_str(), TemplateName.c_str());
//why is "Template" property set twice? -wf
// once to set DrawSVGTemplate.Template to OS template file name