diff options
author | Patrick Burke <patrick.burke@nokia.com> | 2011-11-25 15:10:59 +1000 |
---|---|---|
committer | Danny Pope <daniel.pope@nokia.com> | 2012-02-01 02:46:23 +0100 |
commit | 164a5af14a267de2d2c9fd52ab4e149cc53b80da (patch) | |
tree | 131ded9c234956e92f11a3bb20665545fb1abe4d | |
parent | 8e42a138b77f8404c5ca619bf2a1c731683a043c (diff) |
ModelTweak: Unified file loading/saving classes
Again, there should be no user-visible functionality changes.
Change-Id: I100735a4c03c006e3c8986dd18359ca5d52d3405
Reviewed-by: Danny Pope <daniel.pope@nokia.com>
-rw-r--r-- | util/qt3d/modeltweak/QuickLoad.h | 38 | ||||
-rw-r--r-- | util/qt3d/modeltweak/QuickSave.h | 63 | ||||
-rw-r--r-- | util/qt3d/modeltweak/main.cpp | 6 | ||||
-rw-r--r-- | util/qt3d/modeltweak/modeltweak.pro | 6 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/ButtonBarPane.qml | 2 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/ModelTweak.qml | 20 | ||||
-rw-r--r-- | util/qt3d/modeltweak/qml/SaveButton.qml | 6 | ||||
-rw-r--r-- | util/qt3d/modeltweak/quickfile.cpp | 92 | ||||
-rw-r--r-- | util/qt3d/modeltweak/quickfile.h | 34 |
9 files changed, 143 insertions, 124 deletions
diff --git a/util/qt3d/modeltweak/QuickLoad.h b/util/qt3d/modeltweak/QuickLoad.h deleted file mode 100644 index 3ad0ee707..000000000 --- a/util/qt3d/modeltweak/QuickLoad.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef QUICKLOAD_H -#define QUICKLOAD_H - -#include <QObject> -#include <QFile> -#include <QUrl> -#include <QFileDialog> -#include <QDebug> - -class QuickLoad : public QObject -{ - Q_OBJECT - - QString _filename; - - Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged) - -public: - QuickLoad(QObject *parent=0) : QObject(parent) {} - - Q_INVOKABLE QString openModelFile() - { - QString qmlFilename = QFileDialog::getOpenFileName(0, tr("Open Model File"), "",tr("Model Files (*.*)")); - - setFilename(qmlFilename); - - return qmlFilename; - } - - QString filename() const { return _filename; } - void setFilename(const QString filename) { if (_filename != filename) _filename = filename; emit filenameChanged(filename); } - -signals: - void filenameChanged(const QString newFilename); - -}; - -#endif // QUICKLOAD_H diff --git a/util/qt3d/modeltweak/QuickSave.h b/util/qt3d/modeltweak/QuickSave.h deleted file mode 100644 index 8e854b20f..000000000 --- a/util/qt3d/modeltweak/QuickSave.h +++ /dev/null @@ -1,63 +0,0 @@ -#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 filename READ filename WRITE setFilename) - Q_PROPERTY(QString data READ data WRITE setData) - -public: - QuickSave(QObject *parent=0) : QObject(parent) {} - - Q_INVOKABLE QString save() const - { - QString filename = QFileDialog::getSaveFileName(0, tr("Save File"), "",tr("Files (*.qml)")); - - // FIXME: ensure fileName is appropriate as a qml Component - if (!filename.endsWith(".qml")) - filename.append(".qml"); - - QString modelFilename = QUrl(_filename).toLocalFile(); - - QDir outputDir = QFileInfo(filename).absoluteDir(); - QString relativeFilename = outputDir.relativeFilePath(modelFilename); - - QFile file(filename); - - 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(); - } - - QString filename() const { return _filename; } - void setFilename(const QString filename) { if (_filename != filename) _filename = filename; emit filenameChanged(filename); } - - QString data() const { return _data; } - void setData(const QString data) { if (_data != data) _data = data; emit dataChanged(data); } - -signals: - void filenameChanged(const QString newFilename); - void dataChanged(const QString newData); -}; - -#endif // QUICKSAVE_H diff --git a/util/qt3d/modeltweak/main.cpp b/util/qt3d/modeltweak/main.cpp index 300062b39..78e9c410c 100644 --- a/util/qt3d/modeltweak/main.cpp +++ b/util/qt3d/modeltweak/main.cpp @@ -46,15 +46,13 @@ #include <QtDeclarative> #include "../../../demos/quick3d/qmlres.h" -#include "QuickSave.h" -#include "QuickLoad.h" +#include "quickfile.h" QString filename; int main(int argc, char *argv[]) { - qmlRegisterType<QuickSave>("ModelTweak", 1, 0, "QuickSave"); - qmlRegisterType<QuickLoad>("ModelTweak", 1, 0, "QuickLoad"); + qmlRegisterType<QuickFile>("ModelTweak", 1, 0, "QuickFile"); QApplication app(argc, argv); QDeclarativeView3D view; diff --git a/util/qt3d/modeltweak/modeltweak.pro b/util/qt3d/modeltweak/modeltweak.pro index 0f628ee5f..1356a1c9f 100644 --- a/util/qt3d/modeltweak/modeltweak.pro +++ b/util/qt3d/modeltweak/modeltweak.pro @@ -7,7 +7,8 @@ CONFIG += qt3d_deploy_qml qt3dquick_deploy_pkg include(../../../pkg.pri) qtcAddDeployment() -SOURCES += main.cpp +SOURCES += main.cpp \ + quickfile.cpp symbian { qmlDeployment2.sources = qml\meshes\* @@ -21,7 +22,6 @@ OTHER_FILES += \ RC_FILE = modeltweak.rc HEADERS += \ - QuickSave.h \ - QuickLoad.h + quickfile.h diff --git a/util/qt3d/modeltweak/qml/ButtonBarPane.qml b/util/qt3d/modeltweak/qml/ButtonBarPane.qml index 9be2df30e..ece16573f 100644 --- a/util/qt3d/modeltweak/qml/ButtonBarPane.qml +++ b/util/qt3d/modeltweak/qml/ButtonBarPane.qml @@ -17,7 +17,7 @@ Flow { BlenderToggle { width: buttonWidth buttonText: "Load!" - onClicked: quickLoad.openModelFile() + onClicked: quickFile.load() } BlenderToggle { diff --git a/util/qt3d/modeltweak/qml/ModelTweak.qml b/util/qt3d/modeltweak/qml/ModelTweak.qml index 3175164f4..86ec6458f 100644 --- a/util/qt3d/modeltweak/qml/ModelTweak.qml +++ b/util/qt3d/modeltweak/qml/ModelTweak.qml @@ -48,20 +48,16 @@ Rectangle { height: 768 color: "#444444" border.color: "black" - property alias targetMesh: quickLoad.filename + property alias targetMesh: quickFile.filename - QuickSave { - id: quickSave; - } - - QuickLoad { - id: quickLoad - filename: "meshes/monkey.3ds" + QuickFile { + id: quickFile + filename: "meshes/penguin.3ds" } Mesh { id: source_mesh - source: quickLoad.filename + source: quickFile.filename } Translation3D { id: transformTranslate; translate: Qt.vector3d(0, 0, 0); } @@ -74,7 +70,7 @@ Rectangle { id: mvpZY x: 0; y: 0; - camera.eye: Qt.vector3d(10, 0, 0); + camera.eye: Qt.vector3d(20, 0, 0); stateName: "ZYMaximised" property alias position: transformTranslate.translate; @@ -97,7 +93,7 @@ Rectangle { id: mvpXY x: parent.width/2 y: 0; - camera.eye: Qt.vector3d(0, 0, 10); + camera.eye: Qt.vector3d(0, 0, 20); stateName: "XYMaximised" property alias position: transformTranslate.translate; @@ -120,7 +116,7 @@ Rectangle { id: mvpXZ x: parent.width/2; y: parent.height/2; - camera.eye: Qt.vector3d(0, 10, 0); + camera.eye: Qt.vector3d(0, 20, 0); camera.upVector: Qt.vector3d(0, 0, -1); stateName: "XZMaximised" diff --git a/util/qt3d/modeltweak/qml/SaveButton.qml b/util/qt3d/modeltweak/qml/SaveButton.qml index 1cecdd173..9056c293d 100644 --- a/util/qt3d/modeltweak/qml/SaveButton.qml +++ b/util/qt3d/modeltweak/qml/SaveButton.qml @@ -59,9 +59,9 @@ BlenderToggle { " ]\n" + "}\n"; - quickSave.filename = source_mesh.source - quickSave.data = saveData - var result = quickSave.save() + quickFile.filename = source_mesh.source + quickFile.data = saveData + var result = quickFile.save() if (result !== "") console.log("If there was an error it will be after here:" + result) } diff --git a/util/qt3d/modeltweak/quickfile.cpp b/util/qt3d/modeltweak/quickfile.cpp new file mode 100644 index 000000000..8c8ad6b1b --- /dev/null +++ b/util/qt3d/modeltweak/quickfile.cpp @@ -0,0 +1,92 @@ +#include "quickfile.h" +#include <QFileDialog> +#include <QUrl> + +/*! + \qmlclass QuickFile QuickFile + \brief QuickFile is a quick-and-dirty file handling object that supports file-io that QML/Javascript doesn't. + \inherits QObject + + The QuickFile element is part of the \c{ModelTweak} namespace, + so the following must appear at the top of any QML file that + references it: + + \code + import ModelTweak 1.0 + \endcode + + \sa QObject +*/ + +/*! + \internal +*/ +QuickFile::QuickFile(QObject *parent) : + QObject(parent) +{ +} + +/*! + Prompts for a location and filename to save the qml \c{QuickFile::data} generated by ModelTweaker. + Returns an error message if the file was unsuccessfully saved, + or an empty string if the save was successful. +*/ +QString QuickFile::save() const +{ + QString filename = QFileDialog::getSaveFileName(0, tr("Save QML File"), "",tr("Files (*.qml)")); + + // FIXME: ensure fileName is appropriate as a qml Component + if (!filename.endsWith(".qml")) + filename.append(".qml"); + + QString modelFilename = QUrl(_filename).toLocalFile(); + + QDir outputDir = QFileInfo(filename).absoluteDir(); + QString relativeFilename = outputDir.relativeFilePath(modelFilename); + + QFile file(filename); + + 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(); +} + +/*! + Prompts for a location to load a model file from and stores it into the the \c{QuickFile::filename} + variable. +*/ +void QuickFile::load() +{ + QString qmlFilename = QFileDialog::getOpenFileName(0, tr("Load File"), "",tr("Model Files (*.*)")); + + setFilename(qmlFilename); +} + +QString QuickFile::filename() const { + return _filename; +} + +void QuickFile::setFilename(const QString filename) { + if (_filename != filename) + _filename = filename; + emit filenameChanged(filename); +} + +QString QuickFile::data() const { + return _data; +} + +void QuickFile::setData(const QString data) { + if (_data != data) + _data = data; + emit dataChanged(data); +} diff --git a/util/qt3d/modeltweak/quickfile.h b/util/qt3d/modeltweak/quickfile.h new file mode 100644 index 000000000..ba4e423e6 --- /dev/null +++ b/util/qt3d/modeltweak/quickfile.h @@ -0,0 +1,34 @@ +#ifndef QUICKFILE_H +#define QUICKFILE_H + +#include <QObject> + +class QuickFile : public QObject +{ + Q_OBJECT + + QString _filename; + QString _data; + + Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged) + Q_PROPERTY(QString data READ data WRITE setData NOTIFY dataChanged) + +public: + explicit QuickFile(QObject *parent = 0); + + QString filename() const; + void setFilename(const QString filename); + + QString data() const; + void setData(const QString data); + + Q_INVOKABLE QString save() const; + Q_INVOKABLE void load(); + +signals: + void filenameChanged(const QString newFilename); + void dataChanged(const QString newData); + +}; + +#endif // QUICKFILE_H |