From 63a4ecea93e278eeaa5de23d774d4dee06d9c4fa Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 19 Aug 2019 16:01:05 +0200 Subject: TextEditor: Add modified handling Add a modified property to the document and add handling in onClosing(). Connect the actions to call close() instead of Qt.quit() for it to become active. Change-Id: I0fec75629db64e91508ed8ba45d4fb60be146b1b Reviewed-by: Mitch Curtis --- .../quickcontrols2/texteditor/documenthandler.cpp | 15 +++++++++++++++ examples/quickcontrols2/texteditor/documenthandler.h | 7 +++++++ examples/quickcontrols2/texteditor/qml/texteditor.qml | 19 +++++++++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/examples/quickcontrols2/texteditor/documenthandler.cpp b/examples/quickcontrols2/texteditor/documenthandler.cpp index 25a83592..5def1b61 100644 --- a/examples/quickcontrols2/texteditor/documenthandler.cpp +++ b/examples/quickcontrols2/texteditor/documenthandler.cpp @@ -80,7 +80,11 @@ void DocumentHandler::setDocument(QQuickTextDocument *document) if (document == m_document) return; + if (m_document) + m_document->textDocument()->disconnect(this); m_document = document; + if (m_document) + connect(m_document->textDocument(), &QTextDocument::modificationChanged, this, &DocumentHandler::modifiedChanged); emit documentChanged(); } @@ -370,3 +374,14 @@ void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat &format cursor.select(QTextCursor::WordUnderCursor); cursor.mergeCharFormat(format); } + +bool DocumentHandler::modified() const +{ + return m_document && m_document->textDocument()->isModified(); +} + +void DocumentHandler::setModified(bool m) +{ + if (m_document) + m_document->textDocument()->setModified(m); +} diff --git a/examples/quickcontrols2/texteditor/documenthandler.h b/examples/quickcontrols2/texteditor/documenthandler.h index a6125bc3..97e55658 100644 --- a/examples/quickcontrols2/texteditor/documenthandler.h +++ b/examples/quickcontrols2/texteditor/documenthandler.h @@ -84,6 +84,8 @@ class DocumentHandler : public QObject Q_PROPERTY(QString fileType READ fileType NOTIFY fileUrlChanged) Q_PROPERTY(QUrl fileUrl READ fileUrl NOTIFY fileUrlChanged) + Q_PROPERTY(bool modified READ modified WRITE setModified NOTIFY modifiedChanged) + public: explicit DocumentHandler(QObject *parent = nullptr); @@ -124,6 +126,9 @@ public: QString fileType() const; QUrl fileUrl() const; + bool modified() const; + void setModified(bool m); + public Q_SLOTS: void load(const QUrl &fileUrl); void saveAs(const QUrl &fileUrl); @@ -150,6 +155,8 @@ Q_SIGNALS: void loaded(const QString &text); void error(const QString &message); + void modifiedChanged(); + private: void reset(); QTextCursor textCursor() const; diff --git a/examples/quickcontrols2/texteditor/qml/texteditor.qml b/examples/quickcontrols2/texteditor/qml/texteditor.qml index a1cb3435..6c95335b 100644 --- a/examples/quickcontrols2/texteditor/qml/texteditor.qml +++ b/examples/quickcontrols2/texteditor/qml/texteditor.qml @@ -80,7 +80,7 @@ ApplicationWindow { } Shortcut { sequence: StandardKey.Quit - onActivated: Qt.quit() + onActivated: close() } Shortcut { sequence: StandardKey.Copy @@ -121,7 +121,7 @@ ApplicationWindow { } MenuItem { text: qsTr("&Quit") - onTriggered: Qt.quit() + onTriggered: close() } } @@ -205,6 +205,14 @@ ApplicationWindow { id: errorDialog } + MessageDialog { + id : quitDialog + title: qsTr("Quit?") + text: qsTr("The file has been modified. Quit anyway?") + buttons: (MessageDialog.Yes | MessageDialog.No) + onYesClicked: Qt.quit() + } + header: ToolBar { leftPadding: 8 @@ -449,4 +457,11 @@ ApplicationWindow { onTriggered: colorDialog.open() } } + + onClosing: { + if (document.modified) { + quitDialog.open() + close.accepted = false + } + } } -- cgit v1.2.3