diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2012-01-17 10:42:26 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-19 11:11:02 +0100 |
commit | de0a5f28bc565c971989e68a19c8621a2309ed91 (patch) | |
tree | c1508783394682a2aab90fba81d7871a9c9a6036 /src/quick/items/qquicktext.cpp | |
parent | bab2eaf3da299c471dd898c89cf356984b077412 (diff) |
Add a baseUrl property to Text and TextEdit.
Specifies the base URL which embedded links in rich text are resolved
against. By default this is the URL of the item.
Task-number: QTBUG-23655
Change-Id: Ib51b8503a18d9ac4e1801c77b77b3595d8f4912a
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquicktext.cpp')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index fb9022072a..c5999435eb 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -119,7 +119,7 @@ QQuickTextDocumentWithImageResources::~QQuickTextDocumentWithImageResources() QVariant QQuickTextDocumentWithImageResources::loadResource(int type, const QUrl &name) { QDeclarativeContext *context = qmlContext(parent()); - QUrl url = context->resolvedUrl(name); + QUrl url = m_baseUrl.resolved(name); if (type == QTextDocument::ImageResource) { QDeclarativePixmap *p = loadPixmap(context, url); @@ -160,7 +160,7 @@ QSizeF QQuickTextDocumentWithImageResources::intrinsicSize( QSizeF size(width, height); if (!hasWidth || !hasHeight) { QDeclarativeContext *context = qmlContext(parent()); - QUrl url = context->resolvedUrl(QUrl(imageFormat.name())); + QUrl url = m_baseUrl.resolved(QUrl(imageFormat.name())); QDeclarativePixmap *p = loadPixmap(context, url); if (!p->isReady()) { @@ -198,12 +198,21 @@ void QQuickTextDocumentWithImageResources::drawObject( QImage QQuickTextDocumentWithImageResources::image(const QTextImageFormat &format) { QDeclarativeContext *context = qmlContext(parent()); - QUrl url = context->resolvedUrl(QUrl(format.name())); + QUrl url = m_baseUrl.resolved(QUrl(format.name())); QDeclarativePixmap *p = loadPixmap(context, url); return p->image(); } +void QQuickTextDocumentWithImageResources::setBaseUrl(const QUrl &url, bool clear) +{ + m_baseUrl = url; + if (clear) { + clearResources(); + markContentsDirty(0, characterCount()); + } +} + QDeclarativePixmap *QQuickTextDocumentWithImageResources::loadPixmap( QDeclarativeContext *context, const QUrl &url) { @@ -901,6 +910,7 @@ void QQuickTextPrivate::ensureDoc() Q_Q(QQuickText); doc = new QQuickTextDocumentWithImageResources(q); doc->setDocumentMargin(0); + doc->setBaseUrl(q->baseUrl()); FAST_CONNECT(doc, SIGNAL(imagesLoaded()), q, SLOT(q_imagesLoaded())); } } @@ -1717,6 +1727,45 @@ void QQuickText::setElideMode(QQuickText::TextElideMode mode) emit elideModeChanged(d->elideMode); } +/*! + \qmlproperty url QtQuick2::Text::baseUrl + + This property specifies a base URL which is used to resolve relative URLs + within the text. + + By default is the url of the Text element. +*/ + +QUrl QQuickText::baseUrl() const +{ + Q_D(const QQuickText); + if (d->baseUrl.isEmpty()) { + if (QDeclarativeContext *context = qmlContext(this)) + const_cast<QQuickTextPrivate *>(d)->baseUrl = context->baseUrl(); + } + return d->baseUrl; +} + +void QQuickText::setBaseUrl(const QUrl &url) +{ + Q_D(QQuickText); + if (baseUrl() != url) { + d->baseUrl = url; + + if (d->doc) + d->doc->setBaseUrl(url); + emit baseUrlChanged(); + } +} + +void QQuickText::resetBaseUrl() +{ + if (QDeclarativeContext *context = qmlContext(this)) + setBaseUrl(context->baseUrl()); + else + setBaseUrl(QUrl()); +} + /*! \internal */ QRectF QQuickText::boundingRect() const { |