wxString &OCPNPlatform::GetPluginDir() { if(m_PluginsDir.IsEmpty()){ wxStandardPaths& std_path = GetStdPaths(); // Get the PlugIns directory location m_PluginsDir = std_path.GetPluginsDir(); // linux: {prefix}/lib/opencpn // Mac: appname.app/Contents/PlugIns #ifdef __WXMSW__ m_PluginsDir += _T("\\plugins"); // Windows: {exe dir}/plugins #endif if( g_bportable ) { m_PluginsDir = GetHomeDir(); m_PluginsDir += _T("plugins"); } #ifdef __OCPN__ANDROID__ // something like: data/data/org.opencpn.opencpn wxFileName fdir = wxFileName::DirName(std_path.GetUserConfigDir()); fdir.RemoveLastDir(); m_PluginsDir = fdir.GetPath(); // m_PluginsDir = GetHomeDir(); // m_PluginsDir = _T("/data/data/org.opencpn.opencpn/lib") #endif } return m_PluginsDir; }
wxString &OCPNPlatform::GetSharedDataDir() { if(m_SData_Dir.IsEmpty()){ // Establish a "shared data" location /* From the wxWidgets documentation... * * wxStandardPaths::GetDataDir * wxString GetDataDir() const * Return the location of the applications global, i.e. not user-specific, data files. * Unix: prefix/share/appname * Windows: the directory where the executable file is located * Mac: appname.app/Contents/SharedSupport bundle subdirectory */ wxStandardPaths& std_path = GetStdPaths(); m_SData_Dir = std_path.GetDataDir(); appendOSDirSlash( &m_SData_Dir ); #ifdef __OCPN__ANDROID__ wxFileName fdir = wxFileName::DirName(std_path.GetUserConfigDir()); fdir.RemoveLastDir(); m_SData_Dir = fdir.GetPath(); m_SData_Dir += _T("/cache/"); #endif if( g_bportable ) m_SData_Dir = GetHomeDir(); } return m_SData_Dir; }
wxString &OCPNPlatform::GetPrivateDataDir() { if(m_PrivateDataDir.IsEmpty()){ // Establish the prefix of the location of user specific data files wxStandardPaths& std_path = GetStdPaths(); #ifdef __WXMSW__ m_PrivateDataDir = GetHomeDir(); // should be {Documents and Settings}\...... #elif defined __WXOSX__ m_PrivateDataDir = std_path.GetUserConfigDir(); // should be ~/Library/Preferences appendOSDirSlash(&m_PrivateDataDir); m_PrivateDataDir.Append(_T("opencpn")); #else m_PrivateDataDir = std_path.GetUserDataDir(); // should be ~/.opencpn #endif if( g_bportable ) m_PrivateDataDir = GetHomeDir(); #ifdef __OCPN__ANDROID__ m_PrivateDataDir = androidGetPrivateDir(); #endif } return m_PrivateDataDir; }
wxString &OCPNPlatform::GetExePath() { if(m_exePath.IsEmpty()){ wxStandardPaths& std_path = GetStdPaths(); m_exePath = std_path.GetExecutablePath(); } return m_exePath; }
wxString &OCPNPlatform::GetHomeDir() { if(m_homeDir.IsEmpty()){ // Establish a "home" location // wxStandardPaths& std_path = *dynamic_cast<wxStandardPaths*>(&wxApp::GetTraits()->GetStandardPaths()); wxStandardPaths& std_path = GetStdPaths(); // wxStandardPaths &std_path = ( wxStandardPaths) wxGetApp().GetTraits()->GetStandardPaths(); //TODO Why is the following preferred? Will not compile with gcc... // wxStandardPaths& std_path = wxApp::GetTraits()->GetStandardPaths(); #ifdef __unix__ std_path.SetInstallPrefix(wxString(PREFIX, wxConvUTF8)); #endif #ifdef __WXMSW__ m_homeDir = std_path.GetConfigDir(); // on w98, produces "/windows/Application Data" #else m_homeDir = std_path.GetUserConfigDir(); #endif // On android, make the private data dir on the sdcard, if it exists. // This make debugging easier, as it is not deleted whenever the APK is re-deployed. // This behaviour should go away at Release. #ifdef __OCPN__ANDROID__ if( wxDirExists(_T("/mnt/sdcard")) ){ m_homeDir = _T("/mnt/sdcard/.opencpn"); } #endif if( g_bportable ) m_homeDir = GetExePath(); #ifdef __WXOSX__ appendOSDirSlash(&m_homeDir); m_homeDir.Append(_T("opencpn")); #endif appendOSDirSlash( &m_homeDir ); } return m_homeDir; }
wxString &OCPNPlatform::GetConfigFileName() { if(m_config_file_name.IsEmpty()){ // Establish the location of the config file wxStandardPaths& std_path = GetStdPaths(); #ifdef __WXMSW__ m_config_file_name = _T("opencpn.ini"); m_config_file_name.Prepend( GetHomeDir() ); #elif defined __WXOSX__ m_config_file_name = std_path.GetUserConfigDir(); // should be ~/Library/Preferences appendOSDirSlash(&m_config_file_name); m_config_file_name.Append(_T("opencpn")); appendOSDirSlash(&m_config_file_name); m_config_file_name.Append(_T("opencpn.ini")); #else m_config_file_name = std_path.GetUserDataDir(); // should be ~/.opencpn appendOSDirSlash(&m_config_file_name); m_config_file_name.Append(_T("opencpn.conf")); #endif if( g_bportable ) { m_config_file_name = GetHomeDir(); #ifdef __WXMSW__ m_config_file_name += _T("opencpn.ini"); #elif defined __WXOSX__ m_config_file_name +=_T("opencpn.ini"); #else m_config_file_name += _T("opencpn.conf"); #endif } #ifdef __OCPN__ANDROID__ m_config_file_name = androidGetPrivateDir(); appendOSDirSlash(&m_config_file_name); m_config_file_name += _T("opencpn.conf"); #endif } return m_config_file_name; }
wxString &OCPNPlatform::GetHomeDir() { if(m_homeDir.IsEmpty()){ // Establish a "home" location // wxStandardPaths& std_path = *dynamic_cast<wxStandardPaths*>(&wxApp::GetTraits()->GetStandardPaths()); wxStandardPaths& std_path = GetStdPaths(); // wxStandardPaths &std_path = ( wxStandardPaths) wxGetApp().GetTraits()->GetStandardPaths(); //TODO Why is the following preferred? Will not compile with gcc... // wxStandardPaths& std_path = wxApp::GetTraits()->GetStandardPaths(); #ifdef __unix__ std_path.SetInstallPrefix(wxString(PREFIX, wxConvUTF8)); #endif #ifdef __WXMSW__ m_homeDir = std_path.GetConfigDir(); // on w98, produces "/windows/Application Data" #else m_homeDir = std_path.GetUserConfigDir(); #endif #ifdef __OCPN__ANDROID__ m_homeDir = androidGetHomeDir(); #endif if( g_bportable ) { wxFileName path(GetExePath()); m_homeDir = path.GetPath(); } #ifdef __WXOSX__ appendOSDirSlash(&m_homeDir); m_homeDir.Append(_T("opencpn")); #endif appendOSDirSlash( &m_homeDir ); } return m_homeDir; }
wxString &OCPNPlatform::GetPluginDir() { if(m_PluginsDir.IsEmpty()){ wxStandardPaths& std_path = GetStdPaths(); // Get the PlugIns directory location m_PluginsDir = std_path.GetPluginsDir(); // linux: {prefix}/lib/opencpn // Mac: appname.app/Contents/PlugIns #ifdef __WXMSW__ m_PluginsDir += _T("\\plugins"); // Windows: {exe dir}/plugins #endif if( g_bportable ) { m_PluginsDir = GetHomeDir(); m_PluginsDir += _T("plugins"); } } return m_PluginsDir; }