Implement document save
authorKevin Krammer <kevin.krammer@kdab.com>
Wed, 7 Nov 2012 19:46:19 +0000 (20:46 +0100)
committerKevin Krammer <kevin.krammer@kdab.com>
Wed, 7 Nov 2012 19:46:19 +0000 (20:46 +0100)
examples/text-editor/editor.cpp
examples/text-editor/editor.h
examples/text-editor/main.qml

index 6a5a123..bc31e74 100644 (file)
@@ -1,6 +1,8 @@
 #include "editor.h"
 
+#include <QFile>
 #include <QTextDocument>
+#include <QTextStream>
 
 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);
+}
index c6c6b74..e774435 100644 (file)
@@ -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
index 4eeaebc..d84f474 100644 (file)
@@ -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()
+    }
+  }
 }