diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml
index 3f2956c93a0..b943e395d39 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml
@@ -11,8 +11,12 @@ AnimatedToolButton {
function setIcon() {
if (backendValue == null)
extendedFunctionButton.iconFromFile = "images/placeholder.png"
- else if (backendValue.isBound) {
- extendedFunctionButton.iconFromFile = "images/expression.png"
+ else if (backendValue.isBound ) {
+ if (backendValue.isTranslated) { //translations are a special case
+ extendedFunctionButton.iconFromFile = "images/placeholder.png"
+ } else {
+ extendedFunctionButton.iconFromFile = "images/expression.png"
+ }
} else {
if (backendValue.complexNode != null && backendValue.complexNode.exists) {
extendedFunctionButton.iconFromFile = "images/behaivour.png"
@@ -26,11 +30,16 @@ AnimatedToolButton {
setIcon();
}
property bool isBoundBackend: backendValue.isBound;
+ property string backendExpression: backendValue.expression;
onIsBoundBackendChanged: {
setIcon();
}
+ onBackendExpressionChanged: {
+ setIcon();
+ }
+
toolButtonStyle: "Qt::ToolButtonIconOnly"
popupMode: "QToolButton::InstantPopup";
property bool active: false;
diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml
index e1bb4c72384..0909caf8466 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml
@@ -9,6 +9,7 @@ QWidget {
property variant baseStateFlag
property alias text: lineEditWidget.text
property alias readOnly: lineEditWidget.readOnly
+ property alias translation: trCheckbox.visible
minimumHeight: 24;
@@ -68,7 +69,11 @@ QWidget {
}
onEditingFinished: {
- backendValue.value = text
+ if (backendValue.isTranslated) {
+ backendValue.expression = "qsTr(\"" + text + "\")"
+ } else {
+ backendValue.value = text
+ }
evaluate();
}
@@ -87,4 +92,30 @@ QWidget {
x: 0
visible: lineEdit.enabled
}
+ QCheckBox {
+ id: trCheckbox
+ y: 2
+ styleSheetFile: "checkbox_tr.css";
+ toolTip: qsTr("Translate this string")
+ x: lineEditWidget.width - 22
+ height: lineEdit.height - 2;
+ width: 24
+ visible: false
+ checked: backendValue.isTranslated
+ onToggled: {
+ if (trCheckbox.checked) {
+ backendValue.expression = "qsTr(\"" + lineEditWidget.text + "\")"
+ } else {
+ backendValue.value = lineEditWidget.text
+ }
+ evaluate();
+ }
+
+ onVisibleChanged: {
+ if (trCheckbox.visible) {
+ trCheckbox.raise();
+ lineEditWidget.styleSheet = "QLineEdit { padding-left: 32; padding-right: 62;}"
+ }
+ }
+ }
}
diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml
index 1662a2419e2..3f29936cbfb 100644
--- a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml
+++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml
@@ -18,6 +18,7 @@ GroupBox {
LineEdit {
backendValue: backendValues.text
baseStateFlag: isBaseState;
+ translation: true
}
}
}
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_checked.png b/src/libs/qmleditorwidgets/images/checkbox_tr_checked.png
new file mode 100644
index 00000000000..af0cedd9765
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_checked.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_checked_hover.png b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_hover.png
new file mode 100644
index 00000000000..5815357d255
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_hover.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_checked_pressed.png b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_pressed.png
new file mode 100644
index 00000000000..b4a3be55c33
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_checked_pressed.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked.png b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked.png
new file mode 100644
index 00000000000..528d1f9afe4
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_hover.png b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_hover.png
new file mode 100644
index 00000000000..6d038b0e6da
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_hover.png differ
diff --git a/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_pressed.png b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_pressed.png
new file mode 100644
index 00000000000..1b731b2e98e
Binary files /dev/null and b/src/libs/qmleditorwidgets/images/checkbox_tr_unchecked_pressed.png differ
diff --git a/src/libs/qmleditorwidgets/resources.qrc b/src/libs/qmleditorwidgets/resources.qrc
index ee4949f2dc2..16575214fc0 100644
--- a/src/libs/qmleditorwidgets/resources.qrc
+++ b/src/libs/qmleditorwidgets/resources.qrc
@@ -6,6 +6,12 @@
images/checkbox_unchecked.png
images/checkbox_unchecked_hover.png
images/checkbox_unchecked_pressed.png
+ images/checkbox_tr_checked.png
+ images/checkbox_tr_checked_hover.png
+ images/checkbox_tr_checked_pressed.png
+ images/checkbox_tr_unchecked.png
+ images/checkbox_tr_unchecked_hover.png
+ images/checkbox_tr_unchecked_pressed.png
images/eye_open.png
images/eye_crossed.png
images/lock.png
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
index 2ac8ce14900..a6d7019858f 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp
@@ -31,6 +31,7 @@
**************************************************************************/
#include "propertyeditorvalue.h"
+#include
#include
#include
#include
@@ -97,7 +98,7 @@ static bool cleverColorCompare(QVariant value1, QVariant value2)
void PropertyEditorValue::setValueWithEmit(const QVariant &value)
{
- if (m_value != value) {
+ if (m_value != value || isBound()) {
QVariant newValue = value;
if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QUrl")) {
@@ -190,6 +191,22 @@ void PropertyEditorValue::setIsValid(bool valid)
m_isValid = valid;
}
+bool PropertyEditorValue::isTranslated() const
+{
+ if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name()))
+ if (modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("QString") || modelNode().metaInfo().propertyTypeName(name()) == QLatin1String("string")) {
+ const QmlDesigner::QmlObjectNode objectNode(modelNode());
+ if (objectNode.isValid() && objectNode.hasBindingProperty(name())) {
+ //qsTr()
+ QRegExp rx("qsTr(\"*\")");
+ rx.setPatternSyntax(QRegExp::Wildcard);
+ return rx.exactMatch(expression());
+ }
+ return false;
+ }
+ return false;
+}
+
QmlDesigner::ModelNode PropertyEditorValue::modelNode() const
{
return m_modelNode;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
index ac4a3522731..a9bd25cd99f 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.h
@@ -86,6 +86,8 @@ class PropertyEditorValue : public QObject
Q_PROPERTY(bool isInSubState READ isInSubState NOTIFY valueChangedQml FINAL)
Q_PROPERTY(bool isBound READ isBound NOTIFY isBoundChanged FINAL)
Q_PROPERTY(bool isValid READ isValid NOTIFY isValidChanged FINAL)
+ Q_PROPERTY(bool isTranslated READ isTranslated NOTIFY valueChangedQml FINAL)
+
Q_PROPERTY(QString name READ name FINAL)
Q_PROPERTY(PropertyEditorNodeWrapper* complexNode READ complexNode NOTIFY complexNodeChanged FINAL)
@@ -109,6 +111,8 @@ public:
void setIsValid(bool valid);
+ bool isTranslated() const;
+
QString name() const;
void setName(const QString &name);