]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/corefoundation/stdpaths_cf.cpp
added wxWindow::GetPrev/NextSibling()
[wxWidgets.git] / src / mac / corefoundation / stdpaths_cf.cpp
... / ...
CommitLineData
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
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#include "wx/wxprec.h"
21
22#if wxUSE_STDPATHS
23
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"
30#ifdef __WXMAC__
31#include "wx/mac/private.h"
32#endif
33#include "wx/mac/corefoundation/cfstring.h"
34
35#include <CoreFoundation/CFBundle.h>
36#include <CoreFoundation/CFURL.h>
37
38#define kDefaultPathStyle kCFURLPOSIXPathStyle
39
40// ============================================================================
41// implementation
42// ============================================================================
43
44// ----------------------------------------------------------------------------
45// wxStandardPathsCF ctors/dtor
46// ----------------------------------------------------------------------------
47
48wxStandardPathsCF::wxStandardPathsCF()
49 : m_bundle(CFBundleGetMainBundle())
50{
51 CFRetain(m_bundle);
52 UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
53}
54
55wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle)
56 : m_bundle(bundle)
57{
58 CFRetain(m_bundle);
59 UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
60}
61
62wxStandardPathsCF::~wxStandardPathsCF()
63{
64 CFRelease(m_bundle);
65}
66
67// ----------------------------------------------------------------------------
68// wxStandardPathsCF Mac-specific methods
69// ----------------------------------------------------------------------------
70
71void wxStandardPathsCF::SetBundle(wxCFBundleRef bundle)
72{
73 CFRetain(bundle);
74 CFRelease(m_bundle);
75 m_bundle = bundle;
76}
77
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);
88 return wxMacCFStringHolder(cfStrPath).AsString(wxLocale::GetSystemEncoding());
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
102wxString wxStandardPathsCF::GetDocumentsDir() const
103{
104#ifdef __WXMAC__
105 return wxMacFindFolderNoSeparator
106 (
107#if TARGET_API_MAC_OSX
108 kUserDomain,
109#else
110 kOnSystemDisk,
111#endif
112 kDocumentsFolderType,
113 kCreateFolder
114 );
115#else
116 return wxFileName::GetHomeDir() + wxT("/Documents");
117#endif
118}
119
120// ----------------------------------------------------------------------------
121// wxStandardPathsCF public API
122// ----------------------------------------------------------------------------
123
124wxString wxStandardPathsCF::GetConfigDir() const
125{
126#ifdef __WXMAC__
127 return wxMacFindFolder((short)kLocalDomain, kPreferencesFolderType, kCreateFolder);
128#else
129 return wxT("/Library/Preferences");
130#endif
131}
132
133wxString wxStandardPathsCF::GetUserConfigDir() const
134{
135#ifdef __WXMAC__
136 return wxMacFindFolder((short)kUserDomain, kPreferencesFolderType, kCreateFolder);
137#else
138 return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
139#endif
140}
141
142wxString wxStandardPathsCF::GetDataDir() const
143{
144 return GetFromFunc(CFBundleCopySharedSupportURL);
145}
146
147// TODO: implement this using real CoreFoundation API instead of Carbon API
148wxString wxStandardPathsCF::GetExecutablePath() const
149{
150#ifdef __WXMAC__
151 ProcessInfoRec processinfo;
152 ProcessSerialNumber procno ;
153 FSSpec fsSpec;
154
155 procno.highLongOfPSN = 0 ;
156 procno.lowLongOfPSN = kCurrentProcess ;
157 processinfo.processInfoLength = sizeof(ProcessInfoRec);
158 processinfo.processName = NULL;
159 processinfo.processAppSpec = &fsSpec;
160
161 GetProcessInformation( &procno , &processinfo ) ;
162#ifdef __LP64__
163 return wxMacFSRefToPath(&fsRef);
164#else
165 return wxMacFSSpec2MacFilename(&fsSpec);
166#endif
167#else
168 return wxStandardPathsBase::GetExecutablePath();
169#endif
170}
171
172wxString wxStandardPathsCF::GetLocalDataDir() const
173{
174#ifdef __WXMAC__
175 return AppendAppInfo(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder));
176#else
177 return AppendAppInfo(wxT("/Library/Application Support"));
178#endif
179}
180
181wxString wxStandardPathsCF::GetUserDataDir() const
182{
183#ifdef __WXMAC__
184 return AppendAppInfo(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder));
185#else
186 return AppendAppInfo(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
187#endif
188}
189
190wxString wxStandardPathsCF::GetPluginsDir() const
191{
192 return GetFromFunc(CFBundleCopyBuiltInPlugInsURL);
193}
194
195wxString wxStandardPathsCF::GetResourcesDir() const
196{
197 return GetFromFunc(CFBundleCopyResourcesDirectoryURL);
198}
199
200wxString
201wxStandardPathsCF::GetLocalizedResourcesDir(const wxString& lang,
202 ResourceCat category) const
203{
204 return wxStandardPathsBase::
205 GetLocalizedResourcesDir(lang, category) + _T(".lproj");
206}
207
208#endif // wxUSE_STDPATHS