From: Kevin Krammer Date: Wed, 7 Nov 2012 19:46:19 +0000 (+0100) Subject: Implement document save X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=1f6749c646d59c6cbff0591d774e2deaed946189;p=web%2Fkonrad%2FDeclarativeWidgets.git Implement document save --- diff --git a/examples/text-editor/editor.cpp b/examples/text-editor/editor.cpp index 6a5a123..bc31e74 100644 --- a/examples/text-editor/editor.cpp +++ b/examples/text-editor/editor.cpp @@ -1,6 +1,8 @@ #include "editor.h" +#include #include +#include Editor::Editor(QObject *parent) : QObject(parent) @@ -18,8 +20,43 @@ QTextDocument *Editor::document() const return m_document; } +void Editor::setFileName(const QString &fileName) +{ + if (fileName == m_fileName) + return; + + m_fileName = fileName; + emit fileNameChanged(fileName); +} + +QString Editor::fileName() const +{ + return m_fileName; +} + void Editor::newDocument() { + m_fileName = QString(); m_document->clear(); m_document->setModified(false); } + +void Editor::save() +{ + if (m_fileName.isEmpty()) { + emit requestSaveFileName(); + return; + } + + QFile file(m_fileName); + if (!file.open(QIODevice::WriteOnly)) { + emit requestSaveFileName(); + return; + } + + QTextStream stream(&file); + stream << m_document->toPlainText(); + file.close(); + + m_document->setModified(false); +} diff --git a/examples/text-editor/editor.h b/examples/text-editor/editor.h index c6c6b74..e774435 100644 --- a/examples/text-editor/editor.h +++ b/examples/text-editor/editor.h @@ -9,6 +9,7 @@ class Editor : public QObject { Q_OBJECT Q_PROPERTY(QTextDocument* document READ document CONSTANT) + Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY fileNameChanged) public: explicit Editor(QObject *parent = 0); @@ -16,11 +17,20 @@ class Editor : public QObject QTextDocument *document() const; + void setFileName(const QString &fileName); + QString fileName() const; + + Q_SIGNALS: + void fileNameChanged(const QString &fileName); + void requestSaveFileName(); + public Q_SLOTS: void newDocument(); + void save(); private: QTextDocument *m_document; + QString m_fileName; }; #endif // EDITOR_H diff --git a/examples/text-editor/main.qml b/examples/text-editor/main.qml index 4eeaebc..d84f474 100644 --- a/examples/text-editor/main.qml +++ b/examples/text-editor/main.qml @@ -20,6 +20,7 @@ MainWindow { Action { text: qsTr("Save") + onTriggered: _editor.save() } Separator {} @@ -144,5 +145,16 @@ MainWindow { } } - Component.onCompleted: textEdit.document = _editor.document + Component.onCompleted: { + textEdit.document = _editor.document + _editor.requestSaveFileName.connect(askForSaveFileName) + } + + function askForSaveFileName() { + var fileName = FileDialog.getSaveFileName() + if (fileName.length > 0) { + _editor.fileName = fileName + _editor.save() + } + } }