]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/corefoundation/stdpaths_cf.cpp
don't generate wxEVT_CONTEXT_MENU messages for right clicks in the list control header
[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#if defined(__DARWIN__)
36#include <CoreFoundation/CFBundle.h>
37#include <CoreFoundation/CFURL.h>
38#else
39#include <CFBundle.h>
40#include <CFURL.h>
41#endif
42
43#if defined(__WXCOCOA__) || defined(__WXMAC_OSX__)
44#define kDefaultPathStyle kCFURLPOSIXPathStyle
45#else
46#define kDefaultPathStyle kCFURLHFSPathStyle
47#endif
48
49// ============================================================================
50// implementation
51// ============================================================================
52
53// ----------------------------------------------------------------------------
54// wxStandardPathsCF ctors/dtor
55// ----------------------------------------------------------------------------
56
57wxStandardPathsCF::wxStandardPathsCF()
58 : m_bundle(CFBundleGetMainBundle())
59{
60 CFRetain(m_bundle);
61}
62
63wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle)
64 : m_bundle(bundle)
65{
66 CFRetain(m_bundle);
67}
68
69wxStandardPathsCF::~wxStandardPathsCF()
70{
71 CFRelease(m_bundle);
72}
73
74// ----------------------------------------------------------------------------
75// wxStandardPathsCF Mac-specific methods
76// ----------------------------------------------------------------------------
77
78void wxStandardPathsCF::SetBundle(wxCFBundleRef bundle)
79{
80 CFRetain(bundle);
81 CFRelease(m_bundle);
82 m_bundle = bundle;
83}
84
85// ----------------------------------------------------------------------------
86// generic functions in terms of which the other ones are implemented
87// ----------------------------------------------------------------------------
88
89static wxString BundleRelativeURLToPath(CFURLRef relativeURL)
90{
91 CFURLRef absoluteURL = CFURLCopyAbsoluteURL(relativeURL);
92 wxCHECK_MSG(absoluteURL, wxEmptyString, wxT("Failed to resolve relative URL to absolute URL"));
93 CFStringRef cfStrPath = CFURLCopyFileSystemPath(absoluteURL,kDefaultPathStyle);
94 CFRelease(absoluteURL);
95 return wxMacCFStringHolder(cfStrPath).AsString(wxLocale::GetSystemEncoding());
96}
97
98wxString wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const
99{
100 wxCHECK_MSG(m_bundle, wxEmptyString,
101 wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
102 CFURLRef relativeURL = (*func)(m_bundle);
103 wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get URL"));
104 wxString ret(BundleRelativeURLToPath(relativeURL));
105 CFRelease(relativeURL);
106 return ret;
107}
108
109// ----------------------------------------------------------------------------
110// wxStandardPathsCF public API
111// ----------------------------------------------------------------------------
112
113wxString wxStandardPathsCF::GetConfigDir() const
114{
115#ifdef __WXMAC__
116 return wxMacFindFolder((short)kLocalDomain, kPreferencesFolderType, kCreateFolder);
117#else
118 return wxT("/Library/Preferences");
119#endif
120}
121
122wxString wxStandardPathsCF::GetUserConfigDir() const
123{
124#ifdef __WXMAC__
125 return wxMacFindFolder((short)kUserDomain, kPreferencesFolderType, kCreateFolder);
126#else
127 return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
128#endif
129}
130
131wxString wxStandardPathsCF::GetDataDir() const
132{
133 return GetFromFunc(CFBundleCopySharedSupportURL);
134}
135
136wxString wxStandardPathsCF::GetLocalDataDir() const
137{
138#ifdef __WXMAC__
139 return AppendAppName(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder));
140#else
141 return AppendAppName(wxT("/Library/Application Support"));
142#endif
143}
144
145wxString wxStandardPathsCF::GetUserDataDir() const
146{
147#ifdef __WXMAC__
148 return AppendAppName(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder));
149#else
150 return AppendAppName(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
151#endif
152}
153
154wxString wxStandardPathsCF::GetPluginsDir() const
155{
156 return GetFromFunc(CFBundleCopyBuiltInPlugInsURL);
157}
158
159wxString wxStandardPathsCF::GetResourcesDir() const
160{
161 return GetFromFunc(CFBundleCopyResourcesDirectoryURL);
162}
163
164wxString
165wxStandardPathsCF::GetLocalizedResourcesDir(const wxChar *lang,
166 ResourceCat category) const
167{
168 return wxStandardPathsBase::
169 GetLocalizedResourcesDir(lang, category) + _T(".lproj");
170}
171
172#endif // wxUSE_STDPATHS