Platform: add experimental StandardPaths
This complements the File/FolderDialog offering. Change-Id: I44a105724321092a6efc4126c8fb25f7d31b77e2 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
This commit is contained in:
parent
829c423290
commit
658b0f610a
|
@ -164,6 +164,7 @@ ApplicationWindow {
|
|||
fileMode: FileDialog.OpenFile
|
||||
selectedNameFilter: nameFilters[1]
|
||||
nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"]
|
||||
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
|
||||
onAccepted: document.load(file)
|
||||
}
|
||||
|
||||
|
@ -173,6 +174,7 @@ ApplicationWindow {
|
|||
defaultSuffix: document.fileType
|
||||
nameFilters: openDialog.nameFilters
|
||||
selectedNameFilter: document.fileType === "txt" ? nameFilters[0] : nameFilters[1]
|
||||
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
|
||||
onAccepted: document.saveAs(file)
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ HEADERS += \
|
|||
$$PWD/qquickplatformmenuitemgroup_p.h \
|
||||
$$PWD/qquickplatformmenuseparator_p.h \
|
||||
$$PWD/qquickplatformmessagedialog_p.h \
|
||||
$$PWD/qquickplatformstandardpaths_p.h \
|
||||
$$PWD/qquickplatformsystemtrayicon_p.h
|
||||
|
||||
SOURCES += \
|
||||
|
@ -26,4 +27,5 @@ SOURCES += \
|
|||
$$PWD/qquickplatformmenuitemgroup.cpp \
|
||||
$$PWD/qquickplatformmenuseparator.cpp \
|
||||
$$PWD/qquickplatformmessagedialog.cpp \
|
||||
$$PWD/qquickplatformstandardpaths.cpp \
|
||||
$$PWD/qquickplatformsystemtrayicon.cpp
|
||||
|
|
|
@ -66,6 +66,7 @@ QT_BEGIN_NAMESPACE
|
|||
FileDialog {
|
||||
id: fileDialog
|
||||
currentFile: document.source
|
||||
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
|
||||
}
|
||||
|
||||
MyDocument {
|
||||
|
@ -90,7 +91,7 @@ QT_BEGIN_NAMESPACE
|
|||
|
||||
\labs
|
||||
|
||||
\sa FolderDialog
|
||||
\sa FolderDialog, StandardPaths
|
||||
*/
|
||||
|
||||
QQuickPlatformFileDialog::QQuickPlatformFileDialog(QObject *parent)
|
||||
|
|
|
@ -65,6 +65,7 @@ QT_BEGIN_NAMESPACE
|
|||
FolderDialog {
|
||||
id: folderDialog
|
||||
currentFolder: viewer.folder
|
||||
folder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
|
||||
}
|
||||
|
||||
MyViewer {
|
||||
|
@ -89,7 +90,7 @@ QT_BEGIN_NAMESPACE
|
|||
|
||||
\labs
|
||||
|
||||
\sa FileDialog
|
||||
\sa FileDialog, StandardPaths
|
||||
*/
|
||||
|
||||
QQuickPlatformFolderDialog::QQuickPlatformFolderDialog(QObject *parent)
|
||||
|
|
|
@ -0,0 +1,159 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Labs Platform module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** 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 The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qquickplatformstandardpaths_p.h"
|
||||
|
||||
#include <QtQml/qqmlengine.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
/*!
|
||||
\qmltype StandardPaths
|
||||
\inherits QtObject
|
||||
\instantiates QQuickPlatformStandardPaths
|
||||
\inqmlmodule Qt.labs.platform
|
||||
\since 5.8
|
||||
\brief Provides access to the standard system paths.
|
||||
|
||||
The StandardPaths singleton type provides methods for querying the standard
|
||||
system paths. The standard paths are mostly useful in conjunction with the
|
||||
FileDialog and FolderDialog types.
|
||||
|
||||
\qml
|
||||
FileDialog {
|
||||
folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)
|
||||
}
|
||||
\endqml
|
||||
|
||||
\labs
|
||||
|
||||
\sa FileDialog, FolderDialog, QStandardPaths
|
||||
*/
|
||||
|
||||
static QList<QUrl> toUrlList(const QStringList &paths)
|
||||
{
|
||||
QList<QUrl> urls;
|
||||
urls.reserve(paths.size());
|
||||
for (const QString &path : paths)
|
||||
urls += QUrl::fromLocalFile(path);
|
||||
return urls;
|
||||
}
|
||||
|
||||
QQuickPlatformStandardPaths::QQuickPlatformStandardPaths(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
QObject *QQuickPlatformStandardPaths::create(QQmlEngine *engine, QJSEngine *scriptEngine)
|
||||
{
|
||||
Q_UNUSED(scriptEngine);
|
||||
return new QQuickPlatformStandardPaths(engine);
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod string Qt.labs.platform::StandardPaths::displayName(StandardLocation type)
|
||||
|
||||
\sa QStandardPaths::displayName()
|
||||
*/
|
||||
QString QQuickPlatformStandardPaths::displayName(QStandardPaths::StandardLocation type)
|
||||
{
|
||||
return QStandardPaths::displayName(type);
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod url Qt.labs.platform::StandardPaths::findExecutable(string executableName, list<string> paths)
|
||||
|
||||
\sa QStandardPaths::findExecutable()
|
||||
*/
|
||||
QUrl QQuickPlatformStandardPaths::findExecutable(const QString &executableName, const QStringList &paths)
|
||||
{
|
||||
return QUrl::fromLocalFile(QStandardPaths::findExecutable(executableName, paths));
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod url Qt.labs.platform::StandardPaths::locate(StandardLocation type, string fileName, LocateOptions options = LocateFile)
|
||||
|
||||
\sa QStandardPaths::locate()
|
||||
*/
|
||||
QUrl QQuickPlatformStandardPaths::locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options)
|
||||
{
|
||||
return QUrl::fromLocalFile(QStandardPaths::locate(type, fileName, options));
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod list<url> Qt.labs.platform::StandardPaths::locateAll(StandardLocation type, string fileName, LocateOptions options = LocateFile)
|
||||
|
||||
\sa QStandardPaths::locateAll()
|
||||
*/
|
||||
QList<QUrl> QQuickPlatformStandardPaths::locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options)
|
||||
{
|
||||
return toUrlList(QStandardPaths::locateAll(type, fileName, options));
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod void Qt.labs.platform::StandardPaths::setTestModeEnabled(bool testMode)
|
||||
|
||||
\sa QStandardPaths::setTestModeEnabled()
|
||||
*/
|
||||
void QQuickPlatformStandardPaths::setTestModeEnabled(bool testMode)
|
||||
{
|
||||
QStandardPaths::setTestModeEnabled(testMode);
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod list<url> Qt.labs.platform::StandardPaths::standardLocations(StandardLocation type)
|
||||
|
||||
\sa QStandardPaths::standardLocations()
|
||||
*/
|
||||
QList<QUrl> QQuickPlatformStandardPaths::standardLocations(QStandardPaths::StandardLocation type)
|
||||
{
|
||||
return toUrlList(QStandardPaths::standardLocations(type));
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod url Qt.labs.platform::StandardPaths::writableLocation(StandardLocation type)
|
||||
|
||||
\sa QStandardPaths::writableLocation()
|
||||
*/
|
||||
QUrl QQuickPlatformStandardPaths::writableLocation(QStandardPaths::StandardLocation type)
|
||||
{
|
||||
return QUrl::fromLocalFile(QStandardPaths::writableLocation(type));
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
|
@ -0,0 +1,90 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Qt Labs Platform module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** 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 The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QQUICKPLATFORMSTANDARDPATHS_P_H
|
||||
#define QQUICKPLATFORMSTANDARDPATHS_P_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include <QtCore/qobject.h>
|
||||
#include <QtCore/qstandardpaths.h>
|
||||
#include <QtCore/qurl.h>
|
||||
#include <QtQml/qqml.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QQmlEngine;
|
||||
class QJSEngine;
|
||||
|
||||
class QQuickPlatformStandardPaths : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(QStandardPaths::StandardLocation QStandardPaths::LocateOptions)
|
||||
|
||||
public:
|
||||
explicit QQuickPlatformStandardPaths(QObject *parent = nullptr);
|
||||
|
||||
static QObject *create(QQmlEngine *engine, QJSEngine *scriptEngine);
|
||||
|
||||
Q_INVOKABLE static QString displayName(QStandardPaths::StandardLocation type);
|
||||
Q_INVOKABLE static QUrl findExecutable(const QString &executableName, const QStringList &paths = QStringList());
|
||||
Q_INVOKABLE static QUrl locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile);
|
||||
Q_INVOKABLE static QList<QUrl> locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile);
|
||||
Q_INVOKABLE static void setTestModeEnabled(bool testMode);
|
||||
Q_INVOKABLE static QList<QUrl> standardLocations(QStandardPaths::StandardLocation type);
|
||||
Q_INVOKABLE static QUrl writableLocation(QStandardPaths::StandardLocation type);
|
||||
|
||||
private:
|
||||
Q_DISABLE_COPY(QQuickPlatformStandardPaths)
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QML_DECLARE_TYPE(QQuickPlatformStandardPaths)
|
||||
|
||||
#endif // QQUICKPLATFORMSTANDARDPATHS_P_H
|
|
@ -51,8 +51,13 @@
|
|||
#include "qquickplatformmenuitemgroup_p.h"
|
||||
#include "qquickplatformmenuseparator_p.h"
|
||||
|
||||
#include "qquickplatformstandardpaths_p.h"
|
||||
|
||||
#include "qquickplatformsystemtrayicon_p.h"
|
||||
|
||||
Q_DECLARE_METATYPE(QStandardPaths::StandardLocation)
|
||||
Q_DECLARE_METATYPE(QStandardPaths::LocateOptions)
|
||||
|
||||
static inline void initResources()
|
||||
{
|
||||
#ifdef QT_STATIC
|
||||
|
@ -89,7 +94,6 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri)
|
|||
qmlRegisterType<QQuickPlatformFolderDialog>(uri, 1, 0, "FolderDialog");
|
||||
qmlRegisterType<QQuickPlatformFontDialog>(uri, 1, 0, "FontDialog");
|
||||
qmlRegisterType<QQuickPlatformMessageDialog>(uri, 1, 0, "MessageDialog");
|
||||
qmlRegisterUncreatableType<QPlatformDialogHelper>(uri, 1, 0, "StandardButton", QQuickPlatformDialog::tr("Cannot create an instance of StandardButton"));
|
||||
|
||||
qmlRegisterType<QQuickPlatformMenu>(uri, 1, 0, "Menu");
|
||||
qmlRegisterType<QQuickPlatformMenuBar>(uri, 1, 0, "MenuBar");
|
||||
|
@ -97,6 +101,11 @@ void QtLabsPlatformPlugin::registerTypes(const char *uri)
|
|||
qmlRegisterType<QQuickPlatformMenuItemGroup>(uri, 1, 0, "MenuItemGroup");
|
||||
qmlRegisterType<QQuickPlatformMenuSeparator>(uri, 1, 0, "MenuSeparator");
|
||||
|
||||
qmlRegisterUncreatableType<QPlatformDialogHelper>(uri, 1, 0, "StandardButton", QQuickPlatformDialog::tr("Cannot create an instance of StandardButton"));
|
||||
qmlRegisterSingletonType<QQuickPlatformStandardPaths>(uri, 1, 0, "StandardPaths", QQuickPlatformStandardPaths::create);
|
||||
qRegisterMetaType<QStandardPaths::StandardLocation>();
|
||||
qRegisterMetaType<QStandardPaths::LocateOptions>();
|
||||
|
||||
qmlRegisterType<QQuickPlatformSystemTrayIcon>(uri, 1, 0, "SystemTrayIcon");
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:BSD$
|
||||
** You may use this file under the terms of the BSD license as follows:
|
||||
**
|
||||
** "Redistribution and use in source and binary forms, with or without
|
||||
** modification, are permitted provided that the following conditions are
|
||||
** met:
|
||||
** * Redistributions of source code must retain the above copyright
|
||||
** notice, this list of conditions and the following disclaimer.
|
||||
** * Redistributions in binary form must reproduce the above copyright
|
||||
** notice, this list of conditions and the following disclaimer in
|
||||
** the documentation and/or other materials provided with the
|
||||
** distribution.
|
||||
** * Neither the name of The Qt Company Ltd nor the names of its
|
||||
** contributors may be used to endorse or promote products derived
|
||||
** from this software without specific prior written permission.
|
||||
**
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtTest 1.0
|
||||
import Qt.labs.platform 1.0
|
||||
|
||||
TestCase {
|
||||
id: testCase
|
||||
name: "StandardPaths"
|
||||
|
||||
function test_standardLocation() {
|
||||
// Q_ENUMS(QStandardPaths::StandardLocation)
|
||||
compare(StandardPaths.DesktopLocation, 0)
|
||||
compare(StandardPaths.DocumentsLocation, 1)
|
||||
compare(StandardPaths.FontsLocation, 2)
|
||||
compare(StandardPaths.ApplicationsLocation, 3)
|
||||
compare(StandardPaths.MusicLocation, 4)
|
||||
compare(StandardPaths.MoviesLocation, 5)
|
||||
compare(StandardPaths.PicturesLocation, 6)
|
||||
compare(StandardPaths.TempLocation, 7)
|
||||
compare(StandardPaths.HomeLocation, 8)
|
||||
compare(StandardPaths.DataLocation, 9)
|
||||
compare(StandardPaths.CacheLocation, 10)
|
||||
compare(StandardPaths.GenericDataLocation, 11)
|
||||
compare(StandardPaths.RuntimeLocation, 12)
|
||||
compare(StandardPaths.ConfigLocation, 13)
|
||||
compare(StandardPaths.DownloadLocation, 14)
|
||||
compare(StandardPaths.GenericCacheLocation, 15)
|
||||
compare(StandardPaths.GenericConfigLocation, 16)
|
||||
compare(StandardPaths.AppDataLocation, 17)
|
||||
compare(StandardPaths.AppConfigLocation, 18)
|
||||
compare(StandardPaths.AppLocalDataLocation, StandardPaths.DataLocation)
|
||||
}
|
||||
|
||||
function test_locateOptions() {
|
||||
// Q_ENUMS(QStandardPaths::LocateOptions)
|
||||
compare(StandardPaths.LocateFile, 0)
|
||||
compare(StandardPaths.LocateDirectory, 1)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue