aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquicktext.cpp
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-01-17 10:42:26 +1000
committerQt by Nokia <qt-info@nokia.com>2012-01-19 11:11:02 +0100
commitde0a5f28bc565c971989e68a19c8621a2309ed91 (patch)
treec1508783394682a2aab90fba81d7871a9c9a6036 /src/quick/items/qquicktext.cpp
parentbab2eaf3da299c471dd898c89cf356984b077412 (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.cpp55
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
{