]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/corefoundation/stdpaths_cf.cpp
fix MinGW/gcc compilation issue
[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#include "wx/wxprec.h"
13
14#if wxUSE_STDPATHS
15
16#ifndef WX_PRECOMP
17 #include "wx/intl.h"
18#endif //ndef WX_PRECOMP
19
20#include "wx/stdpaths.h"
21#include "wx/filename.h"
22#include "wx/mac/corefoundation/cfstring.h"
23
24#if defined(__DARWIN__)
25#include <CoreFoundation/CFBundle.h>
26#include <CoreFoundation/CFURL.h>
27#else
28#include <CFBundle.h>
29#include <CFURL.h>
30#endif
31
32#if defined(__WXCOCOA__) || defined(__WXMAC_OSX__)
33#define kDefaultPathStyle kCFURLPOSIXPathStyle
34#else
35#define kDefaultPathStyle kCFURLHFSPathStyle
36#endif
37
38static wxString BundleRelativeURLToPath(CFURLRef relativeURL)
39{
40 CFURLRef absoluteURL = CFURLCopyAbsoluteURL(relativeURL);
41 wxCHECK_MSG(absoluteURL, wxEmptyString, wxT("Failed to resolve relative URL to absolute URL"));
42 CFStringRef cfStrPath = CFURLCopyFileSystemPath(absoluteURL,kDefaultPathStyle);
43 CFRelease(absoluteURL);
44 return wxMacCFStringHolder(cfStrPath).AsString(wxLocale::GetSystemEncoding());
45}
46
47wxStandardPathsCF::wxStandardPathsCF()
48: m_bundle(CFBundleGetMainBundle())
49{
50 CFRetain(m_bundle);
51}
52
53wxStandardPathsCF::wxStandardPathsCF(struct __CFBundle *bundle)
54: m_bundle(bundle)
55{
56 CFRetain(m_bundle);
57}
58
59wxStandardPathsCF::~wxStandardPathsCF()
60{
61 CFRelease(m_bundle);
62}
63
64void wxStandardPathsCF::SetBundle(struct __CFBundle *bundle)
65{
66 CFRetain(bundle);
67 CFRelease(m_bundle);
68 m_bundle = bundle;
69}
70
71wxString wxStandardPathsCF::GetConfigDir() const
72{
73 // TODO: What do we do for pure Carbon?
74 return wxT("/Library/Preferences");
75}
76
77wxString wxStandardPathsCF::GetUserConfigDir() const
78{
79 // TODO: What do we do for pure Carbon?
80 return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
81}
82
83wxString wxStandardPathsCF::GetDataDir() const
84{
85 wxCHECK_MSG(m_bundle, wxEmptyString, wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
86 CFURLRef relativeURL = CFBundleCopySharedSupportURL(m_bundle);
87 wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get SharedSupport URL"));
88 wxString ret(BundleRelativeURLToPath(relativeURL));
89 CFRelease(relativeURL);
90 return ret;
91}
92
93wxString wxStandardPathsCF::GetLocalDataDir() const
94{
95 return AppendAppName(wxT("/Library/Application Support"));
96}
97
98wxString wxStandardPathsCF::GetUserDataDir() const
99{
100 return AppendAppName(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
101}
102
103wxString wxStandardPathsCF::GetPluginsDir() const
104{
105 wxCHECK_MSG(m_bundle, wxEmptyString, wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
106 CFURLRef relativeURL = CFBundleCopyBuiltInPlugInsURL(m_bundle);
107 wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get BuiltInPlugIns URL"));
108 wxString ret(BundleRelativeURLToPath(relativeURL));
109 CFRelease(relativeURL);
110 return ret;
111}
112
113#endif // wxUSE_STDPATHS