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:
109 case QStandardPaths::PublicShareLocation:
110 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Public"_L1;
112 case QStandardPaths::TemplatesLocation:
113 path = pathForDirectory(NSDocumentDirectory, mask) +
"/Templates"_L1;
116 case QStandardPaths::FontsLocation:
117 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Fonts"_L1;
119 case QStandardPaths::ConfigLocation:
120 case QStandardPaths::GenericConfigLocation:
121 case QStandardPaths::AppConfigLocation:
122 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Preferences"_L1;
124 case QStandardPaths::StateLocation:
125 if (appendOrgAndApp) {
break; }
127 case QStandardPaths::GenericStateLocation:
128 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Preferences/State"_L1;
131 path = pathForDirectory(dir, mask);
135 if (appendOrgAndApp) {
137 case QStandardPaths::AppDataLocation:
138 case QStandardPaths::AppLocalDataLocation:
139 case QStandardPaths::AppConfigLocation:
140 case QStandardPaths::CacheLocation:
141 appendOrganizationAndApp(path);
143 case QStandardPaths::StateLocation:
144 path = pathForDirectory(NSLibraryDirectory, mask) +
"/Preferences"_L1;
145 appendOrganizationAndApp(path);
156QString QStandardPaths::writableLocation(StandardLocation type)
158 QString location = baseWritableLocation(type, NSUserDomainMask,
true);
159 if (isTestModeEnabled())
160 location = location.replace(QDir::homePath(), QDir::homePath() +
"/.qttest"_L1);
165QStringList QStandardPaths::standardLocations(StandardLocation type)
169#if defined(QT_PLATFORM_UIKIT)
170 if (type == PicturesLocation)
171 dirs << writableLocation(PicturesLocation) <<
"assets-library://"_L1;
174 if (type == GenericDataLocation || type == FontsLocation || type == ApplicationsLocation
175 || type == AppDataLocation || type == AppLocalDataLocation
176 || type == GenericCacheLocation || type == CacheLocation) {
177 QList<NSSearchPathDomainMask> masks;
178 masks << NSLocalDomainMask;
179 if (type == FontsLocation || type == GenericCacheLocation)
180 masks << NSSystemDomainMask;
182 for (QList<NSSearchPathDomainMask>::const_iterator it = masks.begin();
183 it != masks.end(); ++it) {
184 const QString path = baseWritableLocation(type, *it,
true);
185 if (!path.isEmpty() && !dirs.contains(path))
190 if (type == AppDataLocation || type == AppLocalDataLocation) {
191 CFBundleRef mainBundle = CFBundleGetMainBundle();
193 if (QCFType<CFURLRef> resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle)) {
194 if (QCFType<CFURLRef> absoluteResouresURL = CFURLCopyAbsoluteURL(resourcesURL)) {
195 if (QCFType<CFStringRef> path = CFURLCopyFileSystemPath(absoluteResouresURL,
196 kCFURLPOSIXPathStyle)) {
197 dirs.append(QString::fromCFString(path));
204 const QString localDir = writableLocation(type);
205 if (!localDir.isEmpty())
206 dirs.prepend(localDir);
210#ifndef QT_BOOTSTRAPPED
211QString QStandardPaths::displayName(StandardLocation type)
214 if (QStandardPaths::HomeLocation == type)
215 return QCoreApplication::translate(
"QStandardPaths",
"Home");
220 if (QStandardPaths::TempLocation == type) {
222 return QCoreApplication::translate(
"QStandardPaths",
"Temporary Items");
226 if (QStandardPaths::ApplicationsLocation == type)
227 return QCoreApplication::translate(
"QStandardPaths",
"Applications");
229 const QCFString fsPath(standardLocations(type).constFirst());
230 if (QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
231 fsPath, kCFURLPOSIXPathStyle,
true)) {
233 CFURLCopyResourcePropertyForKey(url, kCFURLLocalizedNameKey, &name, NULL);
234 if (name && CFStringGetLength(name))
235 return QString::fromCFString(name);
238 return QFileInfo(baseWritableLocation(type)).fileName();
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)