summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@digia.com>2014-09-09 13:38:40 +0200
committerTim Jenssen <tim.jenssen@digia.com>2014-09-09 16:21:44 +0200
commit4ca49dc909a5e4c579e053735fd7d3eb1b0c5649 (patch)
treec7f0991123a17eb2668823d6df58edbea14abf1b
parent61b699b33640e0ea1145d2914146b93c67d393ff (diff)
downloadqt-creator-4ca49dc909a5e4c579e053735fd7d3eb1b0c5649.tar.gz
QmlDesigner: add more specifics
Fix: QTCREATORBUG-12798 Change-Id: I8d36bb4ccae05cdb28833317d74a06e7628540a1 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp52
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/OrientationCombobox.qml39
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/SliderSpecifics.qml147
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/SplitViewSpecifics.qml60
-rw-r--r--src/plugins/qmldesigner/componentsplugin/components.metainfo2
-rw-r--r--src/plugins/qmldesigner/componentsplugin/componentsplugin.qrc3
-rw-r--r--src/plugins/qmldesigner/designercore/include/propertyparser.h1
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertyparser.cpp76
8 files changed, 288 insertions, 92 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp
index fb5476883a..1818db81be 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp
@@ -475,33 +475,21 @@ PropertyNameList ObjectNodeInstance::ignoredProperties() const
QVariant ObjectNodeInstance::convertEnumToValue(const QVariant &value, const PropertyName &name)
{
- int idx = object()->metaObject()->indexOfProperty(name);
- QMetaProperty metaProperty = object()->metaObject()->property(idx);
-
- QVariant fixedValue = fixResourcePaths(value);
-
- if (value.canConvert<Enumeration>()) {
- Enumeration enumeration = value.value<Enumeration>();
- if (metaProperty.isValid() && metaProperty.isEnumType()) {
- fixedValue = metaProperty.enumerator().keyToValue(enumeration.name());
- } else if (metaProperty.isValid()
- && (QLatin1String(metaProperty.typeName()) == QLatin1String("int"))) {
-
- //If the target property is an integer handle an enum as binding
- QQmlExpression expression(context(), object(), enumeration.toString());
- fixedValue = expression.evaluate();
- if (expression.hasError())
- qDebug() << "Enum can not be evaluated:" << object() << name << enumeration;
- } else if (!metaProperty.isValid()) { //In this case this is most likely an attached property
- QQmlExpression expression(context(), object(), enumeration.toString());
- fixedValue = expression.evaluate();
-
- if (expression.hasError())
- qDebug() << "Enum can not be evaluated:" << object() << name << enumeration;
- }
+ Q_ASSERT(value.canConvert<Enumeration>());
+ int propertyIndex = object()->metaObject()->indexOfProperty(name);
+ QMetaProperty metaProperty = object()->metaObject()->property(propertyIndex);
+
+ QVariant adjustedValue;
+ Enumeration enumeration = value.value<Enumeration>();
+ if (metaProperty.isValid() && metaProperty.isEnumType()) {
+ adjustedValue = metaProperty.enumerator().keyToValue(enumeration.name());
+ } else {
+ QQmlExpression expression(context(), object(), enumeration.toString());
+ adjustedValue = expression.evaluate();
+ if (expression.hasError())
+ qDebug() << "Enumeration can not be evaluated:" << object() << name << enumeration;
}
-
- return fixedValue;
+ return adjustedValue;
}
void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVariant &value)
@@ -514,8 +502,12 @@ void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVar
if (!property.isValid())
return;
- QVariant fixedValue = fixResourcePaths(value);
- fixedValue = convertEnumToValue(fixedValue, name);
+ QVariant adjustedValue;
+ if (value.canConvert<Enumeration>())
+ adjustedValue = convertEnumToValue(value, name);
+ else
+ adjustedValue = fixResourcePaths(value);
+
QVariant oldValue = property.read();
if (oldValue.type() == QVariant::Url) {
@@ -529,10 +521,10 @@ void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVar
QQmlPropertyPrivate::setBinding(property, 0, QQmlPropertyPrivate::BypassInterceptor | QQmlPropertyPrivate::DontRemoveBinding);
}
- bool isWritten = property.write(convertSpecialCharacter(fixedValue));
+ bool isWritten = property.write(convertSpecialCharacter(adjustedValue));
if (!isWritten)
- qDebug() << "ObjectNodeInstance.setPropertyVariant: Cannot be written: " << object() << name << fixedValue;
+ qDebug() << "ObjectNodeInstance.setPropertyVariant: Cannot be written: " << object() << name << adjustedValue;
QVariant newValue = property.read();
if (newValue.type() == QVariant::Url) {
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/OrientationCombobox.qml b/src/plugins/qmldesigner/componentsplugin/Controls/OrientationCombobox.qml
new file mode 100644
index 0000000000..9428b090bf
--- /dev/null
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/OrientationCombobox.qml
@@ -0,0 +1,39 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+
+ComboBox {
+ backendValue: backendValues.orientation
+ implicitWidth: 180
+ model: [ "Horizontal", "Vertical" ]
+ scope: "Qt"
+}
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/SliderSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/SliderSpecifics.qml
new file mode 100644
index 0000000000..936d0c42e1
--- /dev/null
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/SliderSpecifics.qml
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+import HelperWidgets 2.0
+import QtQuick 2.1
+import QtQuick.Layouts 1.1
+Section {
+ caption: "Slider"
+ SectionLayout {
+ Label {
+ text: qsTr("Value")
+ toolTip: qsTr("Current value of the Slider. The default value is 0.0.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: backendValues.maximumValue.value
+ minimumValue: backendValues.minimumValue.value
+ decimals: 2
+ stepSize: backendValues.stepSize.value
+ backendValue: backendValues.value
+ implicitWidth: 180
+ }
+ ExpandingSpacer {}
+ }
+ Label {
+ text: qsTr("Maximum Value")
+ toolTip: qsTr("This property holds the maximum value of the Slider The default value is 1.0.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ backendValue: backendValues.maximumValue
+ implicitWidth: 180
+ }
+ ExpandingSpacer {
+
+ }
+ }
+ Label {
+ text: qsTr("Minimum Value")
+ toolTip: qsTr("This property holds the minimum value of the Slider. The default value is 0.0.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ backendValue: backendValues.minimumValue
+ implicitWidth: 180
+ }
+ ExpandingSpacer {
+
+ }
+ }
+ Label {
+ text: qsTr("Orientation")
+ toolTip: qsTr("This property holds the layout orientation of the Slider.")
+ }
+ SecondColumnLayout {
+ OrientationCombobox {
+ }
+ ExpandingSpacer {
+
+ }
+ }
+ Label {
+ text: qsTr("Step Size")
+ toolTip: qsTr("This property indicates the Slider step size.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ backendValue: backendValues.stepSize
+ implicitWidth: 180
+ }
+ ExpandingSpacer {}
+ }
+
+ Label {
+ text: qsTr("Active Focus On Press")
+ toolTip: qsTr("This property indicates whether the Slider should receive active focus when pressed.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.activeFocusOnPress.valueToString
+ backendValue: backendValues.activeFocusOnPress
+ implicitWidth: 180
+ }
+ ExpandingSpacer {}
+ }
+ Label {
+ text: qsTr("Tickmarks Enabled")
+ toolTip: qsTr("TIndicates whether the Slider should display tickmarks at step intervals.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.tickmarksEnabled.valueToString
+ backendValue: backendValues.tickmarksEnabled
+ implicitWidth: 180
+ }
+ ExpandingSpacer {}
+ }
+ Label {
+ text: qsTr("Update Value While Dragging")
+ toolTip: qsTr("Current value should be updated while the user is moving the Slider handle, or only when the button has been released.")
+ }
+
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.updateValueWhileDragging.valueToString
+ backendValue: backendValues.updateValueWhileDragging
+ implicitWidth: 180
+ }
+ }
+ }
+}
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/SplitViewSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/SplitViewSpecifics.qml
new file mode 100644
index 0000000000..a21372b159
--- /dev/null
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/SplitViewSpecifics.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import HelperWidgets 2.0
+import QtQuick.Layouts 1.0
+
+Column {
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("Split View")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Orientation")
+ toolTip: qsTr("This property holds the orientation of the SplitView.")
+ }
+
+ SecondColumnLayout {
+ OrientationCombobox {
+ }
+
+ ExpandingSpacer {
+
+ }
+ }
+
+ }
+ }
+}
diff --git a/src/plugins/qmldesigner/componentsplugin/components.metainfo b/src/plugins/qmldesigner/componentsplugin/components.metainfo
index 052fe68da3..701b453c39 100644
--- a/src/plugins/qmldesigner/componentsplugin/components.metainfo
+++ b/src/plugins/qmldesigner/componentsplugin/components.metainfo
@@ -171,7 +171,7 @@ MetaInfo {
libraryIcon: ":/componentsplugin/images/sliderh.png"
version: "1.0"
requiredImport: "QtQuick.Controls"
- Property { name: "orientation"; type: "int"; value: "0"; }
+ Property { name: "orientation"; type: "Enumeration"; value: "Qt.Vertical"; }
}
}
diff --git a/src/plugins/qmldesigner/componentsplugin/componentsplugin.qrc b/src/plugins/qmldesigner/componentsplugin/componentsplugin.qrc
index 37a76389a1..9183872a84 100644
--- a/src/plugins/qmldesigner/componentsplugin/componentsplugin.qrc
+++ b/src/plugins/qmldesigner/componentsplugin/componentsplugin.qrc
@@ -46,5 +46,8 @@
<file>Controls/TabViewSpecifics.qml</file>
<file>Controls/TabPositionComboBox.qml</file>
<file>Controls/CurrentIndexComboBox.qml</file>
+ <file>Controls/SplitViewSpecifics.qml</file>
+ <file>Controls/SliderSpecifics.qml</file>
+ <file>Controls/OrientationCombobox.qml</file>
</qresource>
</RCC>
diff --git a/src/plugins/qmldesigner/designercore/include/propertyparser.h b/src/plugins/qmldesigner/designercore/include/propertyparser.h
index 58940ae12e..d8a1c6b3b1 100644
--- a/src/plugins/qmldesigner/designercore/include/propertyparser.h
+++ b/src/plugins/qmldesigner/designercore/include/propertyparser.h
@@ -41,7 +41,6 @@ namespace PropertyParser {
QVariant read(const QString &typeStr, const QString &str, const MetaInfo &metaInfo);
QVariant read(const QString &typeStr, const QString &str);
QVariant read(int variantType, const QString &str);
-QString write(const QVariant &variant, const MetaInfo &metaInfo);
QVariant variantFromString(const QString &s);
} // namespace PropertyParser
diff --git a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
index 9f1aee3769..e74fe98ecd 100644
--- a/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertyparser.cpp
@@ -28,6 +28,7 @@
****************************************************************************/
#include "propertyparser.h"
+#include "enumeration.h"
#include <modelnode.h>
#include <metainfo.h>
@@ -178,6 +179,15 @@ QVector3D vector3DFromString(const QString &s, bool *ok)
return QVector3D(xCoord, yCoord, zCoord);
}
+QmlDesigner::Enumeration enumerationFromString(const QString &string, bool *ok)
+{
+ QmlDesigner::Enumeration tEnumeration(string);
+ if (ok)
+ *ok = !tEnumeration.scope().isEmpty() && !tEnumeration.name().isEmpty();
+ return tEnumeration;
+}
+
+
} //namespace
namespace QmlDesigner {
@@ -238,8 +248,12 @@ QVariant read(int variantType, const QString &str)
value = vector3DFromString(str, &conversionOk);
break;
default: {
- value = QVariant(str);
- value.convert(static_cast<QVariant::Type>(variantType));
+ if (variantType == QMetaType::type("Enumeration")) {
+ value = QVariant::fromValue<Enumeration>(enumerationFromString(str, &conversionOk));
+ } else {
+ value = QVariant(str);
+ value.convert(static_cast<QVariant::Type>(variantType));
+ }
break;
}
}
@@ -251,7 +265,6 @@ QVariant read(int variantType, const QString &str)
}
return value;
- return QVariant();
}
QVariant variantFromString(const QString &s)
@@ -273,63 +286,6 @@ QVariant variantFromString(const QString &s)
return QVariant(s);
}
-QString write(const QVariant &variant)
-{
- if (!variant.isValid()) {
- qWarning() << "Trying to serialize invalid QVariant";
- return QString();
- }
- QString value;
- switch (variant.type()) {
- case QMetaType::QPoint:
- {
- QPoint p = variant.toPoint();
- value = QString("%1,%2").arg(QString::number(p.x()), QString::number(p.y()));
- break;
- }
- case QMetaType::QPointF:
- {
- QPointF p = variant.toPointF();
- value = QString("%1,%2").arg(QString::number(p.x(), 'f'), QString::number(p.y(), 'f'));
- break;
- }
- case QMetaType::QSize:
- {
- QSize s = variant.toSize();
- value = QString("%1x%2").arg(QString::number(s.width()), QString::number(s.height()));
- break;
- }
- case QMetaType::QSizeF:
- {
- QSizeF s = variant.toSizeF();
- value = QString("%1x%2").arg(QString::number(s.width(), 'f'), QString::number(s.height(), 'f'));
- break;
- }
- case QMetaType::QRect:
- {
- QRect r = variant.toRect();
- value = QString("%1,%2,%3x%4").arg(QString::number(r.x()), QString::number(r.y()),
- QString::number(r.width()), QString::number(r.height()));
- break;
- }
- case QMetaType::QRectF:
- {
- QRectF r = variant.toRectF();
- value = QString("%1,%2,%3x%4").arg(QString::number(r.x(), 'f'), QString::number(r.y(), 'f'),
- QString::number(r.width(), 'f'), QString::number(r.height(), 'f'));
- break;
- }
- default:
- QVariant strVariant = variant;
- strVariant.convert(QVariant::String);
- if (!strVariant.isValid())
- qWarning() << Q_FUNC_INFO << "cannot serialize type " << QMetaType::typeName(variant.type());
- value = strVariant.toString();
- }
-
- return value;
-}
-
} // namespace PropertyParser
} // namespace Internal
} // namespace Designer