aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2019-08-19 16:01:05 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2019-08-21 10:13:23 +0200
commit63a4ecea93e278eeaa5de23d774d4dee06d9c4fa (patch)
tree01e0b9031cb3dba9c5ec8af8ba95a87790d8b4c8
parent7c2ec7dc49799fffb2ed48a3a5afe2d8561ce3ee (diff)
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 <mitch.curtis@qt.io>
-rw-r--r--examples/quickcontrols2/texteditor/documenthandler.cpp15
-rw-r--r--examples/quickcontrols2/texteditor/documenthandler.h7
-rw-r--r--examples/quickcontrols2/texteditor/qml/texteditor.qml19
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
+ }
+ }
}