diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2024-02-23 01:34:10 -0700 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2024-02-27 23:33:13 -0700 |
commit | d063437539d84c6c9d2a1fdde8184d19d2887395 (patch) | |
tree | 4144ec57fbe837119981208aa34f6e1ec9ee01e2 /src/quick/items/qquicktextdocument.cpp | |
parent | c91ce0841cbb516f476819fe1c46dc0524abd6d3 (diff) |
Add TextDocument.errorString property
In bec8df96b7615c6ce419867254027773ea7fd6b1 we added status and removed
the translated error string. But actually it's a common pattern to have
the error string available too, so as to avoid needing to generate it
from an enum value.
Also, in the textEditStatusSwitch.qml snippet, setting textFormat is
necessary after fdbacf2d5c0a04925bcb3aecd7bf47da5fb69227
Pick-to: 6.7
Change-Id: Ie880efa4bf347b70eb6cc4005283b1fc50e15508
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quick/items/qquicktextdocument.cpp')
-rw-r--r-- | src/quick/items/qquicktextdocument.cpp | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/src/quick/items/qquicktextdocument.cpp b/src/quick/items/qquicktextdocument.cpp index 1fab2e6da0..deb5e711fe 100644 --- a/src/quick/items/qquicktextdocument.cpp +++ b/src/quick/items/qquicktextdocument.cpp @@ -119,7 +119,23 @@ QQuickTextDocument::Status QQuickTextDocument::status() const return d->status; } -void QQuickTextDocumentPrivate::setStatus(QQuickTextDocument::Status s) +/*! + \qmlproperty string QtQuick::TextDocument::errorString + \readonly + \since 6.7 + + This property holds a human-readable string describing the error that + occurred during loading or saving, if any; otherwise, an empty string. + + \sa status +*/ +QString QQuickTextDocument::errorString() const +{ + Q_D(const QQuickTextDocument); + return d->errorString; +} + +void QQuickTextDocumentPrivate::setStatus(QQuickTextDocument::Status s, const QString &err) { Q_Q(QQuickTextDocument); if (status == s) @@ -127,6 +143,13 @@ void QQuickTextDocumentPrivate::setStatus(QQuickTextDocument::Status s) status = s; emit q->statusChanged(); + + if (errorString == err) + return; + errorString = err; + emit q->errorStringChanged(); + if (!err.isEmpty()) + qmlWarning(q) << err; } /*! @@ -198,11 +221,10 @@ void QQuickTextDocument::setModified(bool modified) void QQuickTextDocumentPrivate::load() { - Q_Q(QQuickTextDocument); auto *doc = editor->document(); if (!doc) { - qmlWarning(q) << QQuickTextDocument::tr("Null document object: cannot load"); - setStatus(QQuickTextDocument::Status::ReadError); + setStatus(QQuickTextDocument::Status::ReadError, + QQuickTextDocument::tr("Null document object: cannot load")); return; } const QQmlContext *context = qmlContext(editor); @@ -227,7 +249,7 @@ void QQuickTextDocumentPrivate::load() else detectedFormat = Qt::PlainText; if (file.open(QFile::ReadOnly | QFile::Text)) { - setStatus(QQuickTextDocument::Status::Loading); + setStatus(QQuickTextDocument::Status::Loading, {}); QByteArray data = file.readAll(); doc->setBaseUrl(resolvedUrl.adjusted(QUrl::RemoveFilename)); const bool plainText = editor->textFormat() == QQuickTextEdit::PlainText; @@ -253,7 +275,7 @@ void QQuickTextDocumentPrivate::load() { doc->setPlainText(QString::fromUtf8(data)); } - setStatus(QQuickTextDocument::Status::Loaded); + setStatus(QQuickTextDocument::Status::Loaded, {}); qCDebug(lcTextDoc) << editor << "loaded" << filePath << "as" << editor->textFormat() << "detected" << detectedFormat #if QT_CONFIG(mimetype) @@ -263,16 +285,16 @@ void QQuickTextDocumentPrivate::load() doc->setModified(false); return; } - qmlWarning(q) << QQuickTextDocument::tr("Failed to read: %1").arg(file.errorString()); + setStatus(QQuickTextDocument::Status::ReadError, + QQuickTextDocument::tr("Failed to read: %1").arg(file.errorString())); } else { - qmlWarning(q) << QQuickTextDocument::tr("%1 does not exist").arg(filePath); + setStatus(QQuickTextDocument::Status::ReadError, + QQuickTextDocument::tr("%1 does not exist").arg(filePath)); } - setStatus(QQuickTextDocument::Status::ReadError); } void QQuickTextDocumentPrivate::writeTo(const QUrl &fileUrl) { - Q_Q(QQuickTextDocument); auto *doc = editor->document(); if (!doc) return; @@ -302,11 +324,11 @@ void QQuickTextDocumentPrivate::writeTo(const QUrl &fileUrl) QFile file(filePath); if (!file.open(QFile::WriteOnly | QFile::Truncate | (detectedFormat == Qt::RichText ? QFile::NotOpen : QFile::Text))) { - qmlWarning(q) << QQuickTextDocument::tr("Cannot save:") << file.errorString(); - setStatus(QQuickTextDocument::Status::WriteError); + setStatus(QQuickTextDocument::Status::WriteError, + QQuickTextDocument::tr("Cannot save: %1").arg(file.errorString())); return; } - setStatus(QQuickTextDocument::Status::Saving); + setStatus(QQuickTextDocument::Status::Saving, {}); QByteArray raw; switch (detectedFormat) { @@ -333,7 +355,7 @@ void QQuickTextDocumentPrivate::writeTo(const QUrl &fileUrl) file.write(raw); file.close(); - setStatus(QQuickTextDocument::Status::Saved); + setStatus(QQuickTextDocument::Status::Saved, {}); doc->setModified(false); } @@ -420,8 +442,8 @@ void QQuickTextDocument::saveAs(const QUrl &url) { Q_D(QQuickTextDocument); if (!url.isLocalFile()) { - qmlWarning(this) << QQuickTextDocument::tr("Can only save to local files"); - d->setStatus(QQuickTextDocument::Status::NonLocalFileError); + d->setStatus(QQuickTextDocument::Status::NonLocalFileError, + QQuickTextDocument::tr("Can only save to local files")); return; } d->writeTo(url); |