summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2013-11-01 16:29:32 +0100
committerThomas Hartmann <Thomas.Hartmann@digia.com>2013-11-01 16:30:38 +0100
commit318aec875ecc03e30f945ef54decab864db89a2a (patch)
tree823d22b432ed0c983c11a1fe714f84356f1891c5
parentdfacab0d5528c495c769bf6e69d0f74746db9691 (diff)
downloadqt-creator-318aec875ecc03e30f945ef54decab864db89a2a.tar.gz
QmlDesigner.PropertyEditor: Adding FileResourcesModel
This is a special StringList based model for files in the project hierarchy. Change-Id: Ie75961bdc0492febfab14c9b63be4bcec1bef1c6 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp166
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h90
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/propertyeditor.pri6
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp2
4 files changed, 262 insertions, 2 deletions
diff --git a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
new file mode 100644
index 0000000000..fb29dd6a9e
--- /dev/null
+++ b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#include "fileresourcesmodel.h"
+
+#include <model.h>
+
+#include <QFileDialog>
+#include <QDirIterator>
+#include <qmlanchorbindingproxy.h>
+
+static QString s_lastBrowserPath;
+
+FileResourcesModel::FileResourcesModel(QObject *parent) :
+ QObject(parent), m_filter("(*.*)"), m_lock(false)
+{
+}
+
+void FileResourcesModel::setAnchorBackend(const QVariant anchorBackend)
+{
+
+ QObject* anchorBackendObject = anchorBackend.value<QObject*>();
+
+ const QmlDesigner::Internal::QmlAnchorBindingProxy *backendCasted =
+ qobject_cast<const QmlDesigner::Internal::QmlAnchorBindingProxy *>(anchorBackendObject);
+
+ if (backendCasted)
+ m_path = backendCasted->getItemNode().modelNode().model()->fileUrl();
+
+ setupModel();
+ emit anchorBackendChanged();
+}
+
+QString FileResourcesModel::fileName() const
+{
+ return m_fileName.toString();
+}
+
+void FileResourcesModel::setFileNameStr(const QString &fileName)
+{
+ setFileName(QUrl(fileName));
+}
+void FileResourcesModel::setFileName(const QUrl &fileName)
+{
+ if (fileName == m_fileName)
+ return;
+
+ m_fileName = fileName;
+
+ emit fileNameChanged(fileName);
+}
+
+void FileResourcesModel::setPath(const QUrl &url)
+{
+ m_path = url;
+ setupModel();
+}
+
+QUrl FileResourcesModel::path() const
+{
+ return m_path;
+}
+
+void FileResourcesModel::setFilter(const QString &filter)
+{
+ m_filter = filter;
+}
+
+QString FileResourcesModel::filter() const
+{
+ return m_filter;
+}
+
+QStringList FileResourcesModel::fileModel() const
+{
+ return m_model;
+}
+
+void FileResourcesModel::openFileDialog()
+{
+ QString modelPath;
+
+ modelPath = m_path.toLocalFile();
+
+ m_lastModelPath = modelPath;
+
+ bool documentChanged = m_lastModelPath == modelPath;
+
+ //First we try the last path this browser widget was opened with
+ //if the document was not changed
+ QString path = documentChanged ? QString() : m_currentPath;
+
+
+ //If that one is not valid we try the path for the current file
+ if (path.isEmpty() && !m_fileName.isEmpty())
+ path = QFileInfo(modelPath + QLatin1String("/") + m_fileName.toString()).absoluteDir().absolutePath();
+
+
+ //Next we try to fall back to the path any file browser was opened with
+ if (!QFileInfo(path).exists())
+ path = s_lastBrowserPath;
+
+ //The last fallback is to try the path of the document
+ if (!QFileInfo(path).exists())
+ path = modelPath;
+
+ QString newFile = QFileDialog::getOpenFileName(0, tr("Open File"), path, m_filter);
+
+ if (!newFile.isEmpty()) {
+ setFileNameStr(newFile);
+
+ m_currentPath = QFileInfo(newFile).absolutePath();
+ s_lastBrowserPath = m_currentPath;
+ }
+}
+
+void FileResourcesModel::registerDeclarativeType()
+{
+ qmlRegisterType<FileResourcesModel>("HelperWidgets",2,0,"FileResourcesModel");
+}
+
+void FileResourcesModel::setupModel()
+{
+ m_lock = true;
+ m_model.clear();
+
+ QDir dir;
+
+ dir = QFileInfo(m_path.toLocalFile()).dir();
+
+ QStringList filterList = m_filter.split(' ');
+
+ QDirIterator it(dir.absolutePath(), filterList, QDir::Files, QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ QString absolutePath = it.next();
+ m_model.append(dir.relativeFilePath(absolutePath));
+ }
+
+ m_lock = false;
+}
diff --git a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h
new file mode 100644
index 0000000000..a6a3fb069d
--- /dev/null
+++ b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#ifndef FILERESOURCESMODEL_H
+#define FILERESOURCESMODEL_H
+
+#include <qmlitemnode.h>
+
+#include <QObject>
+#include <QStringList>
+#include <QUrl>
+#include <QtQml>
+
+class FileResourcesModel : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString fileName READ fileName WRITE setFileNameStr NOTIFY fileNameChanged)
+ Q_PROPERTY(QString filter READ filter WRITE setFilter)
+ Q_PROPERTY(QVariant anchorBackendProperty READ anchorBackend WRITE setAnchorBackend NOTIFY anchorBackendChanged)
+ Q_PROPERTY(QUrl path READ path WRITE setPath)
+ Q_PROPERTY(QStringList fileModel READ fileModel NOTIFY anchorBackendChanged)
+
+public:
+ explicit FileResourcesModel(QObject *parent = 0);
+
+ void setAnchorBackend(const QVariant anchorBackend);
+ QString fileName() const;
+ void setFileName(const QUrl &fileName);
+ void setFileNameStr(const QString &fileName);
+ void setPath(const QUrl &url);
+ QUrl path() const;
+ void setFilter(const QString &filter);
+ QString filter() const;
+ QStringList fileModel() const;
+ void setupModel();
+
+ Q_INVOKABLE void openFileDialog();
+
+ static void registerDeclarativeType();
+
+signals:
+ void fileNameChanged(const QUrl &fileName);
+ void anchorBackendChanged();
+
+public slots:
+
+private:
+ QVariant anchorBackend() const {return QVariant(); }
+
+private:
+ QUrl m_fileName;
+ QUrl m_path;
+ QString m_filter;
+ bool m_lock;
+ QString m_currentPath;
+ QString m_lastModelPath;
+ QStringList m_model;
+
+};
+
+QML_DECLARE_TYPE(FileResourcesModel)
+
+#endif // FILERESOURCESMODEL_H
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.pri b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.pri
index 61874b4252..3908f51c74 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.pri
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.pri
@@ -12,7 +12,8 @@ SOURCES += propertyeditorview.cpp \
quick2propertyeditorview.cpp \
gradientlineqmladaptor.cpp \
propertyeditorqmlbackend.cpp \
- propertyeditorwidget.cpp
+ propertyeditorwidget.cpp \
+ fileresourcesmodel.cpp
HEADERS += propertyeditorview.h \
qmlanchorbindingproxy.h \
@@ -27,7 +28,8 @@ HEADERS += propertyeditorview.h \
quick2propertyeditorview.h \
gradientlineqmladaptor.h \
propertyeditorqmlbackend.h \
- propertyeditorwidget.h
+ propertyeditorwidget.h \
+ fileresourcesmodel.h
QT += qml quick
diff --git a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
index 4184dc1bc6..67dcef3c30 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
@@ -30,6 +30,7 @@
#include "quick2propertyeditorview.h"
#include "propertyeditorvalue.h"
+#include "fileresourcesmodel.h"
#include <QVBoxLayout>
@@ -106,6 +107,7 @@ void Quick2PropertyEditorView::registerQmlTypes()
if (!declarativeTypesRegistered) {
declarativeTypesRegistered = true;
PropertyEditorValue::registerDeclarativeTypes();
+ FileResourcesModel::registerDeclarativeType();
}
}