7#ifndef QT_NO_STANDARDPATHS
11#include <private/qcore_mac_p.h>
13#ifndef QT_BOOTSTRAPPED
14#include <qcoreapplication.h>
17#import <Foundation/Foundation.h>
21using namespace Qt::StringLiterals;
24 NSSearchPathDomainMask mask)
26 return QString::fromNSString(
27 [NSSearchPathForDirectoriesInDomains(directory, mask, YES) lastObject]);
33 case QStandardPaths::DesktopLocation:
34 return NSDesktopDirectory;
35 case QStandardPaths::DocumentsLocation:
36 return NSDocumentDirectory;
37 case QStandardPaths::ApplicationsLocation:
38 return NSApplicationDirectory;
39 case QStandardPaths::MusicLocation:
40 return NSMusicDirectory;
41 case QStandardPaths::MoviesLocation:
42 return NSMoviesDirectory;
43 case QStandardPaths::PicturesLocation:
44 return NSPicturesDirectory;
45 case QStandardPaths::GenericDataLocation:
46 case QStandardPaths::RuntimeLocation:
47 case QStandardPaths::AppDataLocation:
48 case QStandardPaths::AppLocalDataLocation:
49 return NSApplicationSupportDirectory;
50 case QStandardPaths::GenericCacheLocation:
51 case QStandardPaths::CacheLocation:
52 return NSCachesDirectory;
53 case QStandardPaths::DownloadLocation:
54 return NSDownloadsDirectory;
55 case QStandardPaths::PublicShareLocation:
56 return NSSharedPublicDirectory;
57 case QStandardPaths::TemplatesLocation:
59 return (NSSearchPathDirectory)0;
65#ifndef QT_BOOTSTRAPPED
66 const QString org = QCoreApplication::organizationName();
69 const QString appName = QCoreApplication::applicationName();
70 if (!appName.isEmpty())
71 path += u'/' + appName;
79 bool appendOrgAndApp =
false)
82 const NSSearchPathDirectory dir = searchPathDirectory(type);
84 case QStandardPaths::HomeLocation:
85 path = QDir::homePath();
87 case QStandardPaths::TempLocation:
88 path = QDir::tempPath();
90#if defined(QT_PLATFORM_UIKIT)
92 case QStandardPaths::MusicLocation:
93 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Music"_L1;
95 case QStandardPaths::MoviesLocation:
96 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Movies"_L1;
98 case QStandardPaths::PicturesLocation:
99 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Pictures"_L1;
101 case QStandardPaths::DownloadLocation:
102 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Downloads"_L1;
104 case QStandardPaths::DesktopLocation:
105 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Desktop"_L1;
107 case QStandardPaths::ApplicationsLocation:
110 case QStandardPaths::FontsLocation:
111 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Fonts"_L1;
113 case QStandardPaths::ConfigLocation:
114 case QStandardPaths::GenericConfigLocation:
115 case QStandardPaths::AppConfigLocation:
116 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Preferences"_L1;
118 case QStandardPaths::StateLocation:
119 if (appendOrgAndApp) {
break; }
121 case QStandardPaths::GenericStateLocation:
122 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Preferences/State"_L1;
125 path = pathForDirectory(dir, mask);
129 if (appendOrgAndApp) {
131 case QStandardPaths::AppDataLocation:
132 case QStandardPaths::AppLocalDataLocation:
133 case QStandardPaths::AppConfigLocation:
134 case QStandardPaths::CacheLocation:
137 case QStandardPaths::StateLocation:
138 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Preferences"_L1;
150QString QStandardPaths::writableLocation(StandardLocation type)
152 QString location = baseWritableLocation(type, NSUserDomainMask,
true);
153 if (isTestModeEnabled())
154 location = location.replace(QDir::homePath(), QDir::homePath() +
"/.qttest"_L1);
159QStringList QStandardPaths::standardLocations(StandardLocation type)
163#if defined(QT_PLATFORM_UIKIT)
164 if (type == PicturesLocation)
165 dirs <<
"assets-library://"_L1;
168 if (type == GenericDataLocation || type == FontsLocation || type == ApplicationsLocation
169 || type == AppDataLocation || type == AppLocalDataLocation
170 || type == GenericCacheLocation || type == CacheLocation
171 || type == ConfigLocation || type == GenericConfigLocation
172 || type == AppConfigLocation) {
173 QList<NSSearchPathDomainMask> masks;
174 masks << NSLocalDomainMask;
175 if (type == FontsLocation || type == GenericCacheLocation)
176 masks << NSSystemDomainMask;
178 for (QList<NSSearchPathDomainMask>::const_iterator it = masks.begin();
179 it != masks.end(); ++it) {
180 const QString path = baseWritableLocation(type, *it,
true);
181 if (!path.isEmpty() && !dirs.contains(path))
186 if (type == AppDataLocation || type == AppLocalDataLocation) {
187 CFBundleRef mainBundle = CFBundleGetMainBundle();
189 if (QCFType<CFURLRef> resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle)) {
190 if (QCFType<CFURLRef> absoluteResouresURL = CFURLCopyAbsoluteURL(resourcesURL)) {
191 if (QCFType<CFStringRef> path = CFURLCopyFileSystemPath(absoluteResouresURL,
192 kCFURLPOSIXPathStyle)) {
193 dirs.append(QString::fromCFString(path));
200 const QString localDir = writableLocation(type);
201 if (!localDir.isEmpty())
202 dirs.prepend(localDir);
206#ifndef QT_BOOTSTRAPPED
207QString QStandardPaths::displayName(StandardLocation type)
210 if (QStandardPaths::HomeLocation == type)
211 return QCoreApplication::translate(
"QStandardPaths",
"Home");
216 if (QStandardPaths::TempLocation == type) {
218 return QCoreApplication::translate(
"QStandardPaths",
"Temporary Items");
222 if (QStandardPaths::ApplicationsLocation == type)
223 return QCoreApplication::translate(
"QStandardPaths",
"Applications");
225 const QCFString fsPath(standardLocations(type).constFirst());
226 if (QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
227 fsPath, kCFURLPOSIXPathStyle,
true)) {
229 CFURLCopyResourcePropertyForKey(url, kCFURLLocalizedNameKey, &name, NULL);
230 if (name && CFStringGetLength(name))
231 return QString::fromCFString(name);
234 return QFileInfo(baseWritableLocation(type)).fileName();
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
static QString baseWritableLocation(QStandardPaths::StandardLocation type, NSSearchPathDomainMask mask=NSUserDomainMask, bool appendOrgAndApp=false)
static NSSearchPathDirectory searchPathDirectory(QStandardPaths::StandardLocation type)
static void appendOrganizationAndApp(QString &path)
static QString pathForDirectory(NSSearchPathDirectory directory, NSSearchPathDomainMask mask)