From fe41442575b64956aec5c67f909f1eab7da1015b Mon Sep 17 00:00:00 2001 From: Ian Dean Date: Tue, 15 Oct 2013 12:32:21 +0100 Subject: iOS: Add standard paths implementation for iOS A standard paths implementation for iOS. The APIs used on iOS require that the source file be "Objective-C++" (with a .MM extension), as there are no APIs available in C++ for this. The implementation complies with the latest documentation on standard paths. Change-Id: I349d3c5d4ddb6fb1297a45dc9ae26b56ac528abb Reviewed-by: Thiago Macieira Reviewed-by: David Faure --- src/corelib/io/io.pri | 2 + src/corelib/io/qstandardpaths_ios.mm | 135 +++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 src/corelib/io/qstandardpaths_ios.mm (limited to 'src/corelib/io') diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index eab3981f7a..f06bf61b09 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -135,6 +135,8 @@ win32 { mac { macx { SOURCES += io/qstandardpaths_mac.cpp + } else:ios { + OBJECTIVE_SOURCES += io/qstandardpaths_ios.mm } else { SOURCES += io/qstandardpaths_unix.cpp } diff --git a/src/corelib/io/qstandardpaths_ios.mm b/src/corelib/io/qstandardpaths_ios.mm new file mode 100644 index 0000000000..332400eaf2 --- /dev/null +++ b/src/corelib/io/qstandardpaths_ios.mm @@ -0,0 +1,135 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtCore 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 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import + +#include "qstandardpaths.h" + +#ifndef QT_NO_STANDARDPATHS + +QT_BEGIN_NAMESPACE + +static QString pathForDirectory(NSSearchPathDirectory directory) +{ + return QString::fromNSString( + [NSSearchPathForDirectoriesInDomains(directory, NSUserDomainMask, YES) lastObject]); +} + +static QString bundlePath() +{ + return QString::fromNSString([[NSBundle mainBundle] bundlePath]); +} + +QString QStandardPaths::writableLocation(StandardLocation type) +{ + QString location; + + switch (type) { + case DesktopLocation: + location = pathForDirectory(NSDesktopDirectory); + break; + case DocumentsLocation: + location = pathForDirectory(NSDocumentDirectory); + break; + case FontsLocation: + location = bundlePath() + QLatin1String("/.fonts"); + break; + case ApplicationsLocation: + location = pathForDirectory(NSApplicationDirectory); + break; + case MusicLocation: + location = pathForDirectory(NSMusicDirectory); + break; + case MoviesLocation: + location = pathForDirectory(NSMoviesDirectory); + break; + case PicturesLocation: + location = pathForDirectory(NSPicturesDirectory); + break; + case TempLocation: + location = QString::fromNSString(NSTemporaryDirectory()); + break; + case HomeLocation: + location = bundlePath(); + break; + case DataLocation: + case GenericDataLocation: + location = pathForDirectory(NSDocumentDirectory); + break; + case CacheLocation: + case GenericCacheLocation: + location = pathForDirectory(NSCachesDirectory); + break; + case ConfigLocation: + location = pathForDirectory(NSDocumentDirectory); + break; + case DownloadLocation: + location = pathForDirectory(NSDownloadsDirectory); + break; + default: + break; + } + + switch (type) { + case RuntimeLocation: + break; + default: + // All other types must return something, so use the document directory + // as a reasonable fall-back (which will always exist). + if (location.isEmpty()) + location = pathForDirectory(NSDocumentDirectory); + break; + } + + return location; +} + +QStringList QStandardPaths::standardLocations(StandardLocation type) +{ + QStringList dirs; + const QString localDir = writableLocation(type); + dirs.prepend(localDir); + return dirs; +} + +QT_END_NAMESPACE + +#endif // QT_NO_STANDARDPATHS -- cgit v1.2.3