// Parameters: // overwrite - this option forces the current settings to overwrite any existing settings // that might be saved to the configured ini/settings folder. // // Notes: // The overwrite option applies to PCSX2 options only. Plugin option behavior will depend // on the plugins. // void AppConfig_OnChangedSettingsFolder( bool overwrite ) { PathDefs::GetDocuments().Mkdir(); GetSettingsFolder().Mkdir(); const wxString iniFilename( GetUiSettingsFilename() ); if( overwrite ) { if( wxFileExists( iniFilename ) && !wxRemoveFile( iniFilename ) ) throw Exception::AccessDenied(iniFilename) .SetBothMsgs(pxL("Failed to overwrite existing settings file; permission was denied.")); const wxString vmIniFilename( GetVmSettingsFilename() ); if( wxFileExists( vmIniFilename ) && !wxRemoveFile( vmIniFilename ) ) throw Exception::AccessDenied(vmIniFilename) .SetBothMsgs(pxL("Failed to overwrite existing settings file; permission was denied.")); } // Bind into wxConfigBase to allow wx to use our config internally, and delete whatever // comes out (cleans up prev config, if one). delete wxConfigBase::Set( OpenFileConfig( iniFilename ) ); GetAppConfig()->SetRecordDefaults(true); if( !overwrite ) AppLoadSettings(); AppApplySettings(); AppSaveSettings();//Make sure both ini files are created if needed. }
wxConfigBase* Pcsx2App::OpenInstallSettingsFile() { // Implementation Notes: // // As of 0.9.8 and beyond, PCSX2's versioning should be strong enough to base ini and // plugin compatibility on version information alone. This in turn allows us to ditch // the old system (CWD-based ini file mess) in favor of a system that simply stores // most core application-level settings in the registry. ScopedPtr<wxConfigBase> conf_install; #ifdef __WXMSW__ conf_install = new wxRegConfig(); #else // FIXME!! Linux / Mac // Where the heck should this information be stored? wxDirName usrlocaldir( PathDefs::GetUserLocalDataDir() ); //wxDirName usrlocaldir( wxStandardPaths::Get().GetDataDir() ); if( !usrlocaldir.Exists() ) { Console.WriteLn( L"Creating UserLocalData folder: " + usrlocaldir.ToString() ); usrlocaldir.Mkdir(); } wxFileName usermodefile( GetAppName() + L"-reg.ini" ); usermodefile.SetPath( usrlocaldir.ToString() ); conf_install = OpenFileConfig( usermodefile.GetFullPath() ); #endif return conf_install.DetachPtr(); }
static void SaveVmSettings() { ScopedPtr<wxFileConfig> vmini( OpenFileConfig( GetVmSettingsFilename() ) ); IniSaver vmsaver( vmini ); g_Conf->EmuOptions.LoadSave( vmsaver ); sApp.DispatchVmSettingsEvent( vmsaver ); }
static void LoadVmSettings() { // Load virtual machine options and apply some defaults overtop saved items, which // are regulated by the PCSX2 UI. ScopedPtr<wxFileConfig> vmini( OpenFileConfig( GetVmSettingsFilename() ) ); IniLoader vmloader( vmini ); g_Conf->EmuOptions.LoadSave( vmloader ); g_Conf->EmuOptions.GS.LimitScalar = g_Conf->Framerate.NominalScalar; if (g_Conf->EnablePresets){ g_Conf->IsOkApplyPreset(g_Conf->PresetIndex); } sApp.DispatchVmSettingsEvent( vmloader ); }
// Reset RunWizard so the FTWizard is run again on next PCSX2 start. void Pcsx2App::WipeUserModeSettings() { if (InstallationMode == InstallMode_Portable) { // Remove the portable.ini entry "RunWizard" conforming to this instance of PCSX2. wxFileName portableIniFile( GetPortableIniPath() ); ScopedPtr<wxFileConfig> conf_portable( OpenFileConfig( portableIniFile.GetFullPath() ) ); conf_portable->DeleteEntry(L"RunWizard"); } else { // Remove the registry entry "RunWizard" conforming to this instance of PCSX2. ScopedPtr<wxConfigBase> conf_install( OpenInstallSettingsFile() ); conf_install->DeleteEntry(L"RunWizard"); } }
// Portable installations are assumed to be run in either administrator rights mode, or run // from "insecure media" such as a removable flash drive. In these cases, the default path for // PCSX2 user documents becomes ".", which is the current working directory. // // Portable installation mode is typically enabled via the presence of an INI file in the // same directory that PCSX2 is installed to. // wxConfigBase* Pcsx2App::TestForPortableInstall() { InstallationMode = InstallMode_Registered; const wxFileName portableIniFile( GetPortableIniPath() ); const wxDirName portableDocsFolder( portableIniFile.GetPath() ); if (Startup.PortableMode || portableIniFile.FileExists()) { wxString FilenameStr = portableIniFile.GetFullPath(); if (Startup.PortableMode) Console.WriteLn( L"(UserMode) Portable mode requested via commandline switch!" ); else Console.WriteLn( L"(UserMode) Found portable install ini @ %s", FilenameStr.c_str() ); // Just because the portable ini file exists doesn't mean we can actually run in portable // mode. In order to determine our read/write permissions to the PCSX2, we must try to // modify the configured documents folder, and catch any ensuing error. ScopedPtr<wxFileConfig> conf_portable( OpenFileConfig( portableIniFile.GetFullPath() ) ); conf_portable->SetRecordDefaults(false); while( true ) { wxString accessFailedStr, createFailedStr; if (TestUserPermissionsRights( portableDocsFolder, createFailedStr, accessFailedStr )) break; wxDialogWithHelpers dialog( NULL, AddAppName(_("Portable mode error - %s")) ); wxTextCtrl* scrollText = new wxTextCtrl( &dialog, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_MULTILINE | wxTE_WORDWRAP ); if (!createFailedStr.IsEmpty()) scrollText->AppendText( createFailedStr + L"\n" ); if (!accessFailedStr.IsEmpty()) scrollText->AppendText( accessFailedStr + L"\n" ); dialog += dialog.Heading( _("PCSX2 has been installed as a portable application but cannot run due to the following errors:" ) ); dialog += scrollText | pxExpand.Border(wxALL, 16); dialog += 6; dialog += dialog.Text( GetMsg_PortableModeRights() ); // [TODO] : Add url for platform-relevant user permissions tutorials? (low priority) wxWindowID result = pxIssueConfirmation( dialog, MsgButtons().Retry().Cancel().Custom(_("Switch to User Documents Mode"), "switchmode") ); switch (result) { case wxID_CANCEL: throw Exception::StartupAborted( L"User canceled portable mode due to insufficient user access/permissions." ); case wxID_RETRY: // do nothing (continues while loop) break; case pxID_CUSTOM: wxDialogWithHelpers dialog2( NULL, AddAppName(_("%s is switching to local install mode.")) ); dialog2 += dialog2.Heading( _("Try to remove the file called \"portable.ini\" from your installation directory manually." ) ); dialog2 += 6; pxIssueConfirmation( dialog2, MsgButtons().OK() ); conf_portable.DetachPtr(); // Not sure but can't hurt return NULL; } } // Success -- all user-based folders have write access. PCSX2 should be able to run error-free! // Force-set the custom documents mode, and set the InstallationMode = InstallMode_Portable; DocsFolderMode = DocsFolder_Custom; CustomDocumentsFolder = portableDocsFolder; return conf_portable.DetachPtr(); } return NULL; }