]> git.saurik.com Git - wxWidgets.git/blame - src/mac/corefoundation/stdpaths_cf.cpp
DC headers don't need to be in gtk/private.h
[wxWidgets.git] / src / mac / corefoundation / stdpaths_cf.cpp
CommitLineData
726b98e9
DE
1///////////////////////////////////////////////////////////////////////////////
2// Name: mac/corefoundation/stdpaths.cpp
3// Purpose: wxStandardPaths implementation for CoreFoundation systems
4// Author: David Elliott
5// Modified by:
6// Created: 2004-10-27
7// RCS-ID: $Id$
8// Copyright: (c) 2004 David Elliott <dfe@cox.net>
9// Licence: wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
3af9f2de
VZ
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
726b98e9 20#include "wx/wxprec.h"
07158944
VZ
21
22#if wxUSE_STDPATHS
23
726b98e9
DE
24#ifndef WX_PRECOMP
25 #include "wx/intl.h"
26#endif //ndef WX_PRECOMP
27
28#include "wx/stdpaths.h"
29#include "wx/filename.h"
f5158fa6
SC
30#ifdef __WXMAC__
31#include "wx/mac/private.h"
32#endif
726b98e9
DE
33#include "wx/mac/corefoundation/cfstring.h"
34
35#include <CoreFoundation/CFBundle.h>
36#include <CoreFoundation/CFURL.h>
37
726b98e9 38#define kDefaultPathStyle kCFURLPOSIXPathStyle
726b98e9 39
3af9f2de
VZ
40// ============================================================================
41// implementation
42// ============================================================================
43
44// ----------------------------------------------------------------------------
45// wxStandardPathsCF ctors/dtor
46// ----------------------------------------------------------------------------
726b98e9 47
fc480dc1 48wxStandardPathsCF::wxStandardPathsCF()
3af9f2de 49 : m_bundle(CFBundleGetMainBundle())
726b98e9
DE
50{
51 CFRetain(m_bundle);
2b147f2e 52 UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
726b98e9
DE
53}
54
3af9f2de
VZ
55wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle)
56 : m_bundle(bundle)
726b98e9
DE
57{
58 CFRetain(m_bundle);
2b147f2e 59 UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
726b98e9
DE
60}
61
fc480dc1 62wxStandardPathsCF::~wxStandardPathsCF()
726b98e9
DE
63{
64 CFRelease(m_bundle);
65}
66
3af9f2de
VZ
67// ----------------------------------------------------------------------------
68// wxStandardPathsCF Mac-specific methods
69// ----------------------------------------------------------------------------
70
71void wxStandardPathsCF::SetBundle(wxCFBundleRef bundle)
726b98e9
DE
72{
73 CFRetain(bundle);
74 CFRelease(m_bundle);
75 m_bundle = bundle;
76}
77
3af9f2de
VZ
78// ----------------------------------------------------------------------------
79// generic functions in terms of which the other ones are implemented
80// ----------------------------------------------------------------------------
81
82static wxString BundleRelativeURLToPath(CFURLRef relativeURL)
83{
84 CFURLRef absoluteURL = CFURLCopyAbsoluteURL(relativeURL);
85 wxCHECK_MSG(absoluteURL, wxEmptyString, wxT("Failed to resolve relative URL to absolute URL"));
86 CFStringRef cfStrPath = CFURLCopyFileSystemPath(absoluteURL,kDefaultPathStyle);
87 CFRelease(absoluteURL);
504f8052 88 return wxCFStringRef(cfStrPath).AsString(wxLocale::GetSystemEncoding());
3af9f2de
VZ
89}
90
91wxString wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const
92{
93 wxCHECK_MSG(m_bundle, wxEmptyString,
94 wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
95 CFURLRef relativeURL = (*func)(m_bundle);
96 wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get URL"));
97 wxString ret(BundleRelativeURLToPath(relativeURL));
98 CFRelease(relativeURL);
99 return ret;
100}
101
17af82fb
VZ
102wxString wxStandardPathsCF::GetDocumentsDir() const
103{
747592e7 104#ifdef __WXMAC__
17af82fb
VZ
105 return wxMacFindFolderNoSeparator
106 (
17af82fb 107 kUserDomain,
17af82fb
VZ
108 kDocumentsFolderType,
109 kCreateFolder
110 );
747592e7
SC
111#else
112 return wxFileName::GetHomeDir() + wxT("/Documents");
113#endif
17af82fb
VZ
114}
115
3af9f2de
VZ
116// ----------------------------------------------------------------------------
117// wxStandardPathsCF public API
118// ----------------------------------------------------------------------------
119
fc480dc1 120wxString wxStandardPathsCF::GetConfigDir() const
726b98e9 121{
f5158fa6
SC
122#ifdef __WXMAC__
123 return wxMacFindFolder((short)kLocalDomain, kPreferencesFolderType, kCreateFolder);
124#else
726b98e9 125 return wxT("/Library/Preferences");
f5158fa6 126#endif
726b98e9
DE
127}
128
fc480dc1 129wxString wxStandardPathsCF::GetUserConfigDir() const
726b98e9 130{
f5158fa6
SC
131#ifdef __WXMAC__
132 return wxMacFindFolder((short)kUserDomain, kPreferencesFolderType, kCreateFolder);
133#else
726b98e9 134 return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
f5158fa6 135#endif
726b98e9
DE
136}
137
fc480dc1 138wxString wxStandardPathsCF::GetDataDir() const
726b98e9 139{
3af9f2de 140 return GetFromFunc(CFBundleCopySharedSupportURL);
726b98e9
DE
141}
142
ac7ad70d
RR
143wxString wxStandardPathsCF::GetExecutablePath() const
144{
ac371a87 145#ifdef __WXMAC__
0aa6452b
SC
146#if 1
147 return GetFromFunc(CFBundleCopyBundleURL);
148#else
149 // TODO remove if cf implementation ok
ac7ad70d
RR
150 ProcessInfoRec processinfo;
151 ProcessSerialNumber procno ;
0aa6452b
SC
152#ifdef __LP64__
153 FSRef fsRef;
154#else
ac7ad70d 155 FSSpec fsSpec;
0aa6452b
SC
156#endif
157
90412a12 158 procno.highLongOfPSN = 0 ;
ac7ad70d
RR
159 procno.lowLongOfPSN = kCurrentProcess ;
160 processinfo.processInfoLength = sizeof(ProcessInfoRec);
161 processinfo.processName = NULL;
0aa6452b
SC
162#ifdef __LP64__
163 processinfo.processAppRef = &fsRef;
164#else
ac7ad70d 165 processinfo.processAppSpec = &fsSpec;
0aa6452b
SC
166#endif
167
ac7ad70d 168 GetProcessInformation( &procno , &processinfo ) ;
8b71ebad
SC
169#ifdef __LP64__
170 return wxMacFSRefToPath(&fsRef);
171#else
ac7ad70d 172 return wxMacFSSpec2MacFilename(&fsSpec);
8b71ebad 173#endif
0aa6452b
SC
174#endif
175
ac371a87
VZ
176#else
177 return wxStandardPathsBase::GetExecutablePath();
178#endif
ac7ad70d
RR
179}
180
fc480dc1 181wxString wxStandardPathsCF::GetLocalDataDir() const
726b98e9 182{
f5158fa6 183#ifdef __WXMAC__
2b147f2e 184 return AppendAppInfo(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder));
f5158fa6 185#else
2b147f2e 186 return AppendAppInfo(wxT("/Library/Application Support"));
f5158fa6 187#endif
726b98e9
DE
188}
189
fc480dc1 190wxString wxStandardPathsCF::GetUserDataDir() const
726b98e9 191{
f5158fa6 192#ifdef __WXMAC__
2b147f2e 193 return AppendAppInfo(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder));
f5158fa6 194#else
2b147f2e 195 return AppendAppInfo(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
f5158fa6 196#endif
726b98e9
DE
197}
198
fc480dc1 199wxString wxStandardPathsCF::GetPluginsDir() const
726b98e9 200{
3af9f2de
VZ
201 return GetFromFunc(CFBundleCopyBuiltInPlugInsURL);
202}
203
204wxString wxStandardPathsCF::GetResourcesDir() const
205{
206 return GetFromFunc(CFBundleCopyResourcesDirectoryURL);
207}
208
209wxString
e0b3b9d0 210wxStandardPathsCF::GetLocalizedResourcesDir(const wxString& lang,
3af9f2de
VZ
211 ResourceCat category) const
212{
213 return wxStandardPathsBase::
214 GetLocalizedResourcesDir(lang, category) + _T(".lproj");
726b98e9
DE
215}
216
07158944 217#endif // wxUSE_STDPATHS