summaryrefslogtreecommitdiffstats
path: root/util/qt3d/modeltweak/QuickSave.h
blob: 9cba58350d8cb34c059176d91b86bcddb58d88c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef QUICKSAVE_H
#define QUICKSAVE_H

#include <QObject>
#include <QFile>
#include <QUrl>
#include <QFileDialog>
#include <QDebug>

class QuickSave : public QObject {
    Q_OBJECT

    QString _filename;
    QString _data;

    Q_PROPERTY(QString save READ save)
    Q_PROPERTY(QString filename READ filename WRITE setFilename)
    Q_PROPERTY(QString data READ data WRITE setData)
public:
    QuickSave(QObject *parent=0) : QObject(parent) {}

    QString save() const {
        QString qmlFilename = QFileDialog::getOpenFileName(0, tr("Save File"), "",tr("Files (*.qml)"));

        // FIXME: ensure fileName is appropriate as a qml Component
        if(!qmlFilename.endsWith(".qml"))
            qmlFilename.append(".qml");

        QString modelFilename = QUrl(_filename).toLocalFile();

        QDir outputDir = QFileInfo(qmlFilename).absoluteDir();
        QString relativeFilename = outputDir.relativeFilePath(modelFilename);

        QFile file(qmlFilename);

        qDebug("Attempting to write: %s", file.fileName().toAscii().constData());

        if (!file.open(QFile::WriteOnly))
            return file.errorString();

        QString dataToWrite = _data.arg(relativeFilename);

        file.write(dataToWrite.toUtf8());

        file.close();

        return QString();
    }

    //TODO: these really should be emitting signals upon changing;
    //      but we don't display them so it doesn't technically matter
    QString filename() const { return _filename; }
    void setFilename(const QString filename) { if (_filename != filename) _filename = filename; }

    QString data() const { return _data; }
    void setData(const QString data) { if (_data != data) _data = data; }

};

#endif // QUICKSAVE_H