diff options
author | J-P Nurmi <jpnurmi@digia.com> | 2013-04-23 15:29:56 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-06-18 07:50:11 +0200 |
commit | 1037a7f7123dcf9f7b48a6a74118f746ddcbf3d5 (patch) | |
tree | e7e15c21b3f2d6d00ad548c831799cd092921bf5 /src/quick/items/qquicktext.cpp | |
parent | ef5e8d5b6e67d129687034eb4a582dc0462b2971 (diff) |
Add QQuickText::hoveredLink
Task-number: QTBUG-30804
Change-Id: I6c6993b152285f4bdf34d6e1aa04f25fa7ca41e0
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'src/quick/items/qquicktext.cpp')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index b46f2e5ab9..cc2cbb3cb3 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -107,6 +107,7 @@ void QQuickTextPrivate::init() Q_Q(QQuickText); q->setAcceptedMouseButtons(Qt::LeftButton); q->setFlag(QQuickItem::ItemHasContents); + q->setAcceptHoverEvents(true); } QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickItem *parent) @@ -2581,4 +2582,83 @@ void QQuickText::mouseReleaseEvent(QMouseEvent *event) QQuickItem::mouseReleaseEvent(event); } +bool QQuickTextPrivate::isLinkHoveredConnected() +{ + Q_Q(QQuickText); + IS_SIGNAL_CONNECTED(q, QQuickText, linkHovered, (const QString &)); +} + +/*! + \qmlsignal QtQuick2::Text::onLinkHovered(string link) + \since QtQuick 2.2 + + This handler is called when the user hovers a link embedded in the + text. The link must be in rich text or HTML format and the \a link + string provides access to the particular link. + + \sa hoveredLink +*/ + +/*! + \qmlproperty string QtQuick2::Text::hoveredLink + \since QtQuick 2.2 + + This property contains the link string when user hovers a link + embedded in the text. The link must be in rich text or HTML format + and the \a hoveredLink string provides access to the particular link. + + \sa onLinkHovered +*/ + +QString QQuickText::hoveredLink() const +{ + Q_D(const QQuickText); + if (const_cast<QQuickTextPrivate *>(d)->isLinkHoveredConnected()) { + if (d->extra.isAllocated()) + return d->extra->hoveredLink; + } else { +#ifndef QT_NO_CURSOR + if (QQuickWindow *wnd = window()) { + QPointF pos = QCursor::pos(wnd->screen()) - wnd->position() - mapToScene(QPointF(0, 0)); + return d->anchorAt(pos); + } +#endif // QT_NO_CURSOR + } + return QString(); +} + +void QQuickTextPrivate::processHoverEvent(QHoverEvent *event) +{ + Q_Q(QQuickText); + QString link; + if (event->type() != QEvent::HoverLeave) + link = anchorAt(event->posF()); + + if ((!extra.isAllocated() && !link.isEmpty()) || (extra.isAllocated() && extra->hoveredLink != link)) { + extra.value().hoveredLink = link; + emit q->linkHovered(extra->hoveredLink); + } +} + +void QQuickText::hoverEnterEvent(QHoverEvent *event) +{ + Q_D(QQuickText); + if (d->isLinkHoveredConnected()) + d->processHoverEvent(event); +} + +void QQuickText::hoverMoveEvent(QHoverEvent *event) +{ + Q_D(QQuickText); + if (d->isLinkHoveredConnected()) + d->processHoverEvent(event); +} + +void QQuickText::hoverLeaveEvent(QHoverEvent *event) +{ + Q_D(QQuickText); + if (d->isLinkHoveredConnected()) + d->processHoverEvent(event); +} + QT_END_NAMESPACE |