aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-10-29 22:25:11 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-10-30 09:51:36 +0000
commit19e7cc53a7189c5c35a478d06b435433297771c5 (patch)
treea1b1958cdaf36813b362b943acc4a55ba5294b27 /src
parent390fb0d4a8e4f308b225a86b48205b14633cf0e2 (diff)
Simplify TextField & TextArea placeholder
Better not expose the extra Text item in the API. Ideally it should be implemented as a scenegraph node. We might even want to promote the placeholderText property (and add placeholderColor) to TextInput and TextEdit in Qt Quick core. Change-Id: I4f443c77d1c696b87a50ee184f868713dd50316f Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/imports/controls/TextArea.qml10
-rw-r--r--src/imports/controls/TextField.qml10
-rw-r--r--src/imports/controls/doc/images/qtlabscontrols-textfield-placeholder.pngbin1588 -> 0 bytes
-rw-r--r--src/imports/controls/doc/src/qtlabscontrols-customize.qdoc9
-rw-r--r--src/imports/templates/plugins.qmltypes4
-rw-r--r--src/templates/qquicktextarea.cpp52
-rw-r--r--src/templates/qquicktextarea_p.h8
-rw-r--r--src/templates/qquicktextarea_p_p.h3
-rw-r--r--src/templates/qquicktextfield.cpp51
-rw-r--r--src/templates/qquicktextfield_p.h8
-rw-r--r--src/templates/qquicktextfield_p_p.h3
11 files changed, 50 insertions, 108 deletions
diff --git a/src/imports/controls/TextArea.qml b/src/imports/controls/TextArea.qml
index c4c7833d..564bd108 100644
--- a/src/imports/controls/TextArea.qml
+++ b/src/imports/controls/TextArea.qml
@@ -43,10 +43,10 @@ T.TextArea {
implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
background ? background.implicitWidth : 0,
- placeholder ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
+ placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
background ? background.implicitHeight : 0,
- placeholder ? placeholder.implicitHeight + topPadding + bottomPadding : 0)
+ placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
@@ -54,13 +54,14 @@ T.TextArea {
selectionColor: Theme.selectionColor
selectedTextColor: Theme.selectedTextColor
- //! [placeholder]
- placeholder: Text {
+ Text {
+ id: placeholder
x: control.leftPadding
y: control.topPadding
width: control.width - (control.leftPadding + control.rightPadding)
height: control.height - (control.topPadding + control.bottomPadding)
+ text: control.placeholderText
font: control.font
color: control.Theme.disabledColor
horizontalAlignment: control.horizontalAlignment
@@ -68,5 +69,4 @@ T.TextArea {
visible: !control.length
elide: Text.ElideRight
}
- //! [placeholder]
}
diff --git a/src/imports/controls/TextField.qml b/src/imports/controls/TextField.qml
index e65fbf40..4e3c15c6 100644
--- a/src/imports/controls/TextField.qml
+++ b/src/imports/controls/TextField.qml
@@ -42,9 +42,9 @@ T.TextField {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
- placeholder ? placeholder.implicitWidth + leftPadding + rightPadding : 0)
+ placeholder.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
- placeholder ? placeholder.implicitHeight + topPadding + bottomPadding : 0)
+ placeholder.implicitHeight + topPadding + bottomPadding)
padding: 6
@@ -53,13 +53,14 @@ T.TextField {
selectedTextColor: Theme.selectedTextColor
verticalAlignment: TextInput.AlignVCenter
- //! [placeholder]
- placeholder: Text {
+ Text {
+ id: placeholder
x: control.leftPadding
y: control.topPadding
width: control.width - (control.leftPadding + control.rightPadding)
height: control.height - (control.topPadding + control.bottomPadding)
+ text: control.placeholderText
font: control.font
color: control.Theme.disabledColor
horizontalAlignment: control.horizontalAlignment
@@ -67,7 +68,6 @@ T.TextField {
visible: !control.displayText
elide: Text.ElideRight
}
- //! [placeholder]
//! [background]
background: Rectangle {
diff --git a/src/imports/controls/doc/images/qtlabscontrols-textfield-placeholder.png b/src/imports/controls/doc/images/qtlabscontrols-textfield-placeholder.png
deleted file mode 100644
index b040315f..00000000
--- a/src/imports/controls/doc/images/qtlabscontrols-textfield-placeholder.png
+++ /dev/null
Binary files differ
diff --git a/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc b/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc
index 05100f16..c88d0200 100644
--- a/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc
+++ b/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc
@@ -422,8 +422,7 @@
\section1 Customizing TextField
- TextField consists of two visual items: \l {TextField::background}{background}
- and \l {TextField::placeholder}{placeholder}.
+ TextField offers a customizable \l {TextField::background}{background} item.
\section3 Background
@@ -431,12 +430,6 @@
\snippet TextField.qml background
- \section3 Placeholder
-
- \image qtlabscontrols-textfield-placeholder.png
-
- \snippet TextField.qml placeholder
-
\section1 Customizing ToolBar
diff --git a/src/imports/templates/plugins.qmltypes b/src/imports/templates/plugins.qmltypes
index 571ed723..1aa4a52b 100644
--- a/src/imports/templates/plugins.qmltypes
+++ b/src/imports/templates/plugins.qmltypes
@@ -853,7 +853,7 @@ Module {
Property { name: "implicitWidth"; type: "double" }
Property { name: "implicitHeight"; type: "double" }
Property { name: "background"; type: "QQuickItem"; isPointer: true }
- Property { name: "placeholder"; type: "QQuickText"; isPointer: true }
+ Property { name: "placeholderText"; type: "string" }
Signal {
name: "pressAndHold"
Parameter { name: "event"; type: "QQuickMouseEvent"; isPointer: true }
@@ -1130,7 +1130,7 @@ Module {
Property { name: "implicitWidth"; type: "double" }
Property { name: "implicitHeight"; type: "double" }
Property { name: "background"; type: "QQuickItem"; isPointer: true }
- Property { name: "placeholder"; type: "QQuickText"; isPointer: true }
+ Property { name: "placeholderText"; type: "string" }
Signal {
name: "pressAndHold"
Parameter { name: "mouse"; type: "QQuickMouseEvent"; isPointer: true }
diff --git a/src/templates/qquicktextarea.cpp b/src/templates/qquicktextarea.cpp
index e9b33399..4c23ba9b 100644
--- a/src/templates/qquicktextarea.cpp
+++ b/src/templates/qquicktextarea.cpp
@@ -58,12 +58,12 @@ QT_BEGIN_NAMESPACE
\ingroup qtlabscontrols-input
\brief A multi line text input control.
- TextArea is a multi-line text editor. TextArea extends TextEdit
- with a \l placeholder text functionality, and adds decoration.
+ TextArea is a multi-line text editor. TextArea extends TextEdit with
+ a \l {placeholderText}{placeholder text} functionality, and adds decoration.
\code
TextArea {
- placeholder.text: qsTr("Enter description")
+ placeholderText: qsTr("Enter description")
}
\endcode
@@ -71,7 +71,7 @@ QT_BEGIN_NAMESPACE
*/
QQuickTextAreaPrivate::QQuickTextAreaPrivate()
- : background(Q_NULLPTR), placeholder(Q_NULLPTR), accessibleAttached(Q_NULLPTR)
+ : background(Q_NULLPTR), accessibleAttached(Q_NULLPTR)
{
#ifndef QT_NO_ACCESSIBILITY
QAccessible::installActivationObserver(this);
@@ -171,16 +171,6 @@ void QQuickTextAreaPrivate::_q_readOnlyChanged(bool isReadOnly)
#endif
}
-void QQuickTextAreaPrivate::_q_placeholderTextChanged(const QString &text)
-{
-#ifndef QT_NO_ACCESSIBILITY
- if (accessibleAttached)
- accessibleAttached->setDescription(text);
-#else
- Q_UNUSED(text)
-#endif
-}
-
#ifndef QT_NO_ACCESSIBILITY
void QQuickTextAreaPrivate::accessibilityActiveChanged(bool active)
{
@@ -192,8 +182,7 @@ void QQuickTextAreaPrivate::accessibilityActiveChanged(bool active)
if (accessibleAttached) {
accessibleAttached->setRole(accessibleRole());
accessibleAttached->set_readOnly(q->isReadOnly());
- if (placeholder)
- accessibleAttached->setDescription(placeholder->text());
+ accessibleAttached->setDescription(placeholder);
} else {
qWarning() << "QQuickTextArea: " << q << " QQuickAccessibleAttached object creation failed!";
}
@@ -265,39 +254,26 @@ void QQuickTextArea::setBackground(QQuickItem *background)
}
/*!
- \qmlproperty Text Qt.labs.controls::TextArea::placeholder
-
- This property holds the placeholder text item.
+ \qmlproperty string Qt.labs.controls::TextArea::placeholderText
- \sa {Customizing TextArea}
+ This property holds the placeholder text.
*/
-QQuickText *QQuickTextArea::placeholder() const
+QString QQuickTextArea::placeholderText() const
{
Q_D(const QQuickTextArea);
return d->placeholder;
}
-void QQuickTextArea::setPlaceholder(QQuickText *placeholder)
+void QQuickTextArea::setPlaceholderText(const QString &text)
{
Q_D(QQuickTextArea);
- if (d->placeholder != placeholder) {
- if (d->placeholder) {
- QObjectPrivate::disconnect(d->placeholder, &QQuickText::textChanged,
- d, &QQuickTextAreaPrivate::_q_placeholderTextChanged);
- delete d->placeholder;
- }
- d->placeholder = placeholder;
- if (placeholder && !placeholder->parentItem()) {
- placeholder->setParentItem(this);
- QObjectPrivate::connect(d->placeholder, &QQuickText::textChanged,
- d, &QQuickTextAreaPrivate::_q_placeholderTextChanged);
- } else {
+ if (d->placeholder != text) {
+ d->placeholder = text;
#ifndef QT_NO_ACCESSIBILITY
- if (d->accessibleAttached)
- d->accessibleAttached->setDescription(QLatin1Literal(""));
+ if (d->accessibleAttached)
+ d->accessibleAttached->setDescription(text);
#endif
- }
- emit placeholderChanged();
+ emit placeholderTextChanged();
}
}
diff --git a/src/templates/qquicktextarea_p.h b/src/templates/qquicktextarea_p.h
index a77cfeb8..13022ce5 100644
--- a/src/templates/qquicktextarea_p.h
+++ b/src/templates/qquicktextarea_p.h
@@ -64,7 +64,7 @@ class Q_LABSTEMPLATES_EXPORT QQuickTextArea : public QQuickTextEdit
Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged FINAL)
Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged FINAL)
Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
- Q_PROPERTY(QQuickText *placeholder READ placeholder WRITE setPlaceholder NOTIFY placeholderChanged FINAL)
+ Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText NOTIFY placeholderTextChanged FINAL)
public:
explicit QQuickTextArea(QQuickItem *parent = Q_NULLPTR);
@@ -76,15 +76,15 @@ public:
QQuickItem *background() const;
void setBackground(QQuickItem *background);
- QQuickText *placeholder() const;
- void setPlaceholder(QQuickText *placeholder);
+ QString placeholderText() const;
+ void setPlaceholderText(const QString &text);
Q_SIGNALS:
void fontChanged();
void implicitWidthChanged();
void implicitHeightChanged();
void backgroundChanged();
- void placeholderChanged();
+ void placeholderTextChanged();
void pressAndHold(QQuickMouseEvent *event);
protected:
diff --git a/src/templates/qquicktextarea_p_p.h b/src/templates/qquicktextarea_p_p.h
index ba71ecf8..2960f7bf 100644
--- a/src/templates/qquicktextarea_p_p.h
+++ b/src/templates/qquicktextarea_p_p.h
@@ -85,7 +85,6 @@ public:
void implicitHeightChanged() Q_DECL_OVERRIDE;
void _q_readOnlyChanged(bool isReadOnly);
- void _q_placeholderTextChanged(const QString &text);
#ifndef QT_NO_ACCESSIBILITY
void accessibilityActiveChanged(bool active) Q_DECL_OVERRIDE;
@@ -93,7 +92,7 @@ public:
#endif
QQuickItem *background;
- QQuickText *placeholder;
+ QString placeholder;
QQuickPressAndHoldHelper pressAndHoldHelper;
QQuickAccessibleAttached *accessibleAttached;
};
diff --git a/src/templates/qquicktextfield.cpp b/src/templates/qquicktextfield.cpp
index b55c799e..dd8ef362 100644
--- a/src/templates/qquicktextfield.cpp
+++ b/src/templates/qquicktextfield.cpp
@@ -59,8 +59,8 @@ QT_BEGIN_NAMESPACE
\ingroup qtlabscontrols-input
\brief A single line text input control.
- TextField is a single line text editor. TextField extends TextInput
- with a \l placeholder text functionality, and adds decoration.
+ TextField is a single line text editor. TextField extends TextInput with
+ a \l {placeholderText}{placeholder text} functionality, and adds decoration.
\table
\row \li \image qtlabscontrols-textfield-normal.png
@@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE
\code
TextField {
- placeholder.text: qsTr("Enter name")
+ placeholderText: qsTr("Enter name")
}
\endcode
@@ -90,7 +90,6 @@ QT_BEGIN_NAMESPACE
QQuickTextFieldPrivate::QQuickTextFieldPrivate()
: background(Q_NULLPTR)
- , placeholder(Q_NULLPTR)
, accessibleAttached(Q_NULLPTR)
{
#ifndef QT_NO_ACCESSIBILITY
@@ -193,16 +192,6 @@ void QQuickTextFieldPrivate::_q_readOnlyChanged(bool isReadOnly)
#endif
}
-void QQuickTextFieldPrivate::_q_placeholderTextChanged(const QString &text)
-{
-#ifndef QT_NO_ACCESSIBILITY
- if (accessibleAttached)
- accessibleAttached->setDescription(text);
-#else
- Q_UNUSED(text)
-#endif
-}
-
void QQuickTextFieldPrivate::_q_echoModeChanged(QQuickTextField::EchoMode echoMode)
{
#ifndef QT_NO_ACCESSIBILITY
@@ -225,8 +214,7 @@ void QQuickTextFieldPrivate::accessibilityActiveChanged(bool active)
accessibleAttached->setRole(accessibleRole());
accessibleAttached->set_readOnly(m_readOnly);
accessibleAttached->set_passwordEdit((m_echoMode == QQuickTextField::Password || m_echoMode == QQuickTextField::PasswordEchoOnEdit) ? true : false);
- if (placeholder)
- accessibleAttached->setDescription(placeholder->text());
+ accessibleAttached->setDescription(placeholder);
} else {
qWarning() << "QQuickTextField: " << q << " QQuickAccessibleAttached object creation failed!";
}
@@ -298,39 +286,26 @@ void QQuickTextField::setBackground(QQuickItem *background)
}
/*!
- \qmlproperty Text Qt.labs.controls::TextField::placeholder
-
- This property holds the placeholder text item.
+ \qmlproperty string Qt.labs.controls::TextField::placeholderText
- \sa {Customizing TextField}
+ This property holds the placeholder text.
*/
-QQuickText *QQuickTextField::placeholder() const
+QString QQuickTextField::placeholderText() const
{
Q_D(const QQuickTextField);
return d->placeholder;
}
-void QQuickTextField::setPlaceholder(QQuickText *placeholder)
+void QQuickTextField::setPlaceholderText(const QString &text)
{
Q_D(QQuickTextField);
- if (d->placeholder != placeholder) {
- if (d->placeholder) {
- QObjectPrivate::disconnect(d->placeholder, &QQuickText::textChanged,
- d, &QQuickTextFieldPrivate::_q_placeholderTextChanged);
- delete d->placeholder;
- }
- d->placeholder = placeholder;
- if (placeholder && !placeholder->parentItem()) {
- placeholder->setParentItem(this);
- QObjectPrivate::connect(d->placeholder, &QQuickText::textChanged,
- d, &QQuickTextFieldPrivate::_q_placeholderTextChanged);
- } else {
+ if (d->placeholder != text) {
+ d->placeholder = text;
#ifndef QT_NO_ACCESSIBILITY
- if (d->accessibleAttached)
- d->accessibleAttached->setDescription(QLatin1Literal(""));
+ if (d->accessibleAttached)
+ d->accessibleAttached->setDescription(text);
#endif
- }
- emit placeholderChanged();
+ emit placeholderTextChanged();
}
}
diff --git a/src/templates/qquicktextfield_p.h b/src/templates/qquicktextfield_p.h
index 445cf3d9..c219fa79 100644
--- a/src/templates/qquicktextfield_p.h
+++ b/src/templates/qquicktextfield_p.h
@@ -64,7 +64,7 @@ class Q_LABSTEMPLATES_EXPORT QQuickTextField : public QQuickTextInput
Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged FINAL)
Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged FINAL)
Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
- Q_PROPERTY(QQuickText *placeholder READ placeholder WRITE setPlaceholder NOTIFY placeholderChanged FINAL)
+ Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText NOTIFY placeholderTextChanged FINAL)
public:
explicit QQuickTextField(QQuickItem *parent = Q_NULLPTR);
@@ -76,15 +76,15 @@ public:
QQuickItem *background() const;
void setBackground(QQuickItem *background);
- QQuickText *placeholder() const;
- void setPlaceholder(QQuickText *placeholder);
+ QString placeholderText() const;
+ void setPlaceholderText(const QString &text);
Q_SIGNALS:
void fontChanged();
void implicitWidthChanged();
void implicitHeightChanged();
void backgroundChanged();
- void placeholderChanged();
+ void placeholderTextChanged();
void pressAndHold(QQuickMouseEvent *mouse);
protected:
diff --git a/src/templates/qquicktextfield_p_p.h b/src/templates/qquicktextfield_p_p.h
index 324ee6fb..459e0847 100644
--- a/src/templates/qquicktextfield_p_p.h
+++ b/src/templates/qquicktextfield_p_p.h
@@ -85,7 +85,6 @@ public:
void implicitHeightChanged() Q_DECL_OVERRIDE;
void _q_readOnlyChanged(bool isReadOnly);
- void _q_placeholderTextChanged(const QString &text);
void _q_echoModeChanged(QQuickTextField::EchoMode echoMode);
#ifndef QT_NO_ACCESSIBILITY
@@ -94,7 +93,7 @@ public:
#endif
QQuickItem *background;
- QQuickText *placeholder;
+ QString placeholder;
QQuickPressAndHoldHelper pressAndHoldHelper;
QQuickAccessibleAttached *accessibleAttached;
};