-///////////////////////////////////////////////////////////////////////////////
-// Name: mac/corefoundation/stdpaths.cpp
-// Purpose: wxStandardPaths implementation for CoreFoundation systems
-// Author: David Elliott
-// Modified by:
-// Created: 2004-10-27
-// RCS-ID: $Id$
-// Copyright: (c) 2004 David Elliott <dfe@cox.net>
-// Licence: wxWindows licence
-///////////////////////////////////////////////////////////////////////////////
-
-// ============================================================================
-// declarations
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// headers
-// ----------------------------------------------------------------------------
-
-#include "wx/wxprec.h"
-
-#if wxUSE_STDPATHS
-
-#ifndef WX_PRECOMP
- #include "wx/intl.h"
-#endif //ndef WX_PRECOMP
-
-#include "wx/stdpaths.h"
-#include "wx/filename.h"
-#ifdef __WXMAC__
-#include "wx/mac/private.h"
-#endif
-#include "wx/mac/corefoundation/cfstring.h"
-
-#include <CoreFoundation/CFBundle.h>
-#include <CoreFoundation/CFURL.h>
-
-#define kDefaultPathStyle kCFURLPOSIXPathStyle
-
-// ============================================================================
-// implementation
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// wxStandardPathsCF ctors/dtor
-// ----------------------------------------------------------------------------
-
-wxStandardPathsCF::wxStandardPathsCF()
- : m_bundle(CFBundleGetMainBundle())
-{
- CFRetain(m_bundle);
- UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
-}
-
-wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle)
- : m_bundle(bundle)
-{
- CFRetain(m_bundle);
- UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
-}
-
-wxStandardPathsCF::~wxStandardPathsCF()
-{
- CFRelease(m_bundle);
-}
-
-// ----------------------------------------------------------------------------
-// wxStandardPathsCF Mac-specific methods
-// ----------------------------------------------------------------------------
-
-void wxStandardPathsCF::SetBundle(wxCFBundleRef bundle)
-{
- CFRetain(bundle);
- CFRelease(m_bundle);
- m_bundle = bundle;
-}
-
-// ----------------------------------------------------------------------------
-// generic functions in terms of which the other ones are implemented
-// ----------------------------------------------------------------------------
-
-static wxString BundleRelativeURLToPath(CFURLRef relativeURL)
-{
- CFURLRef absoluteURL = CFURLCopyAbsoluteURL(relativeURL);
- wxCHECK_MSG(absoluteURL, wxEmptyString, wxT("Failed to resolve relative URL to absolute URL"));
- CFStringRef cfStrPath = CFURLCopyFileSystemPath(absoluteURL,kDefaultPathStyle);
- CFRelease(absoluteURL);
- return wxCFStringRef(cfStrPath).AsString(wxLocale::GetSystemEncoding());
-}
-
-wxString wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const
-{
- wxCHECK_MSG(m_bundle, wxEmptyString,
- wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
- CFURLRef relativeURL = (*func)(m_bundle);
- wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get URL"));
- wxString ret(BundleRelativeURLToPath(relativeURL));
- CFRelease(relativeURL);
- return ret;
-}
-
-wxString wxStandardPathsCF::GetDocumentsDir() const
-{
-#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__)
- return wxMacFindFolderNoSeparator
- (
- kUserDomain,
- kDocumentsFolderType,
- kCreateFolder
- );
-#else
- return wxFileName::GetHomeDir() + wxT("/Documents");
-#endif
-}
-
-// ----------------------------------------------------------------------------
-// wxStandardPathsCF public API
-// ----------------------------------------------------------------------------
-
-wxString wxStandardPathsCF::GetConfigDir() const
-{
-#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__)
- return wxMacFindFolder((short)kLocalDomain, kPreferencesFolderType, kCreateFolder);
-#else
- return wxT("/Library/Preferences");
-#endif
-}
-
-wxString wxStandardPathsCF::GetUserConfigDir() const
-{
-#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__)
- return wxMacFindFolder((short)kUserDomain, kPreferencesFolderType, kCreateFolder);
-#else
- return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
-#endif
-}
-
-wxString wxStandardPathsCF::GetDataDir() const
-{
- return GetFromFunc(CFBundleCopySharedSupportURL);
-}
-
-wxString wxStandardPathsCF::GetExecutablePath() const
-{
-#ifdef __WXMAC__
-#if 1
- return GetFromFunc(CFBundleCopyBundleURL);
-#else
- // TODO remove if cf implementation ok
- ProcessInfoRec processinfo;
- ProcessSerialNumber procno ;
-#ifdef __LP64__
- FSRef fsRef;
-#else
- FSSpec fsSpec;
-#endif
-
- procno.highLongOfPSN = 0 ;
- procno.lowLongOfPSN = kCurrentProcess ;
- processinfo.processInfoLength = sizeof(ProcessInfoRec);
- processinfo.processName = NULL;
-#ifdef __LP64__
- processinfo.processAppRef = &fsRef;
-#else
- processinfo.processAppSpec = &fsSpec;
-#endif
-
- GetProcessInformation( &procno , &processinfo ) ;
-#ifdef __LP64__
- return wxMacFSRefToPath(&fsRef);
-#else
- return wxMacFSSpec2MacFilename(&fsSpec);
-#endif
-#endif
-
-#else
- return wxStandardPathsBase::GetExecutablePath();
-#endif
-}
-
-wxString wxStandardPathsCF::GetLocalDataDir() const
-{
-#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__)
- return AppendAppInfo(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder));
-#else
- return AppendAppInfo(wxT("/Library/Application Support"));
-#endif
-}
-
-wxString wxStandardPathsCF::GetUserDataDir() const
-{
-#if defined( __WXMAC__ ) && !defined(__WXOSX_IPHONE__)
- return AppendAppInfo(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder));
-#else
- return AppendAppInfo(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
-#endif
-}
-
-wxString wxStandardPathsCF::GetPluginsDir() const
-{
- return GetFromFunc(CFBundleCopyBuiltInPlugInsURL);
-}
-
-wxString wxStandardPathsCF::GetResourcesDir() const
-{
- return GetFromFunc(CFBundleCopyResourcesDirectoryURL);
-}
-
-wxString
-wxStandardPathsCF::GetLocalizedResourcesDir(const wxString& lang,
- ResourceCat category) const
-{
- return wxStandardPathsBase::
- GetLocalizedResourcesDir(lang, category) + _T(".lproj");
-}
-
-#endif // wxUSE_STDPATHS