mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-01-31 01:15:24 +01:00
413 lines
13 KiB
C++
413 lines
13 KiB
C++
/* PCSX2 - PS2 Emulator for PCs
|
|
* Copyright (C) 2002-2010 PCSX2 Dev Team
|
|
*
|
|
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
|
* of the GNU Lesser General Public License as published by the Free Software Found-
|
|
* ation, either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with PCSX2.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "AppForwardDefs.h"
|
|
#include "PathDefs.h"
|
|
#include "CDVD/CDVDaccess.h"
|
|
#include <memory>
|
|
|
|
enum DocsModeType
|
|
{
|
|
// uses /home/user or /cwd for the program data. This is the default mode and is the most
|
|
// friendly to modern computing security requirements; as it isolates all file modification
|
|
// to a zone of the hard drive that has granted write permissions to the user.
|
|
DocsFolder_User,
|
|
|
|
// uses a custom location for program data. Typically the custom folder is either the
|
|
// absolute or relative location of the program -- absolute is preferred because it is
|
|
// considered more secure by MSW standards, due to DLL search rules.
|
|
//
|
|
// To enable PCSX2's "portable" mode, use this setting and specify "." for the custom
|
|
// documents folder.
|
|
DocsFolder_Custom,
|
|
};
|
|
|
|
namespace PathDefs
|
|
{
|
|
// complete pathnames are returned by these functions.
|
|
// These are used for initial default values when first configuring PCSX2, or when the
|
|
// user checks "Use Default paths" option provided on most path selectors. These are not
|
|
// used otherwise, in favor of the user-configurable specifications in the ini files.
|
|
|
|
extern wxDirName GetUserLocalDataDir();
|
|
extern wxDirName GetProgramDataDir();
|
|
extern wxDirName GetDocuments();
|
|
extern wxDirName GetDocuments( DocsModeType mode );
|
|
}
|
|
|
|
extern DocsModeType DocsFolderMode; //
|
|
extern bool UseDefaultSettingsFolder; // when TRUE, pcsx2 derives the settings folder from the DocsFolderMode
|
|
extern bool UseDefaultPluginsFolder;
|
|
|
|
extern wxDirName CustomDocumentsFolder; // allows the specification of a custom home folder for PCSX2 documents files.
|
|
extern wxDirName SettingsFolder; // dictates where the settings folder comes from, *if* UseDefaultSettingsFolder is FALSE.
|
|
|
|
extern wxDirName InstallFolder;
|
|
extern wxDirName PluginsFolder;
|
|
|
|
extern wxDirName GetSettingsFolder();
|
|
extern wxString GetVmSettingsFilename();
|
|
extern wxString GetUiSettingsFilename();
|
|
extern wxString GetUiKeysFilename();
|
|
|
|
extern wxDirName GetLogFolder();
|
|
extern wxDirName GetCheatsFolder();
|
|
extern wxDirName GetCheatsWsFolder();
|
|
|
|
enum InstallationModeType
|
|
{
|
|
// Use the user defined folder selections. These can be anywhere on a user's hard drive,
|
|
// though by default the binaries (plugins) are located in Install_Dir (registered
|
|
// by the installer), and the user files (screenshots, inis) are in the user's documents
|
|
// folder. All folders are changable within the GUI.
|
|
InstallMode_Registered,
|
|
|
|
// In this mode, both Install_Dir and UserDocuments folders default the directory containing
|
|
// PCSX2.exe, or the current working directory (if the PCSX2 directory could not be determined).
|
|
// Folders cannot be changed from within the gui, however the fixed defaults can be manually
|
|
// specified in the portable.ini by power users/devs.
|
|
//
|
|
// This mode is typically enabled by the presence of a 'portable.ini' in the folder.
|
|
InstallMode_Portable,
|
|
};
|
|
bool IsPortable();
|
|
|
|
extern InstallationModeType InstallationMode;
|
|
|
|
enum AspectRatioType
|
|
{
|
|
AspectRatio_Stretch,
|
|
AspectRatio_4_3,
|
|
AspectRatio_16_9,
|
|
AspectRatio_MaxCount
|
|
};
|
|
|
|
enum FMVAspectRatioSwitchType
|
|
{
|
|
FMV_AspectRatio_Switch_Off,
|
|
FMV_AspectRatio_Switch_4_3,
|
|
FMV_AspectRatio_Switch_16_9,
|
|
FMV_AspectRatio_Switch_MaxCount
|
|
};
|
|
|
|
enum MemoryCardType
|
|
{
|
|
MemoryCard_None,
|
|
MemoryCard_File,
|
|
MemoryCard_Folder,
|
|
MemoryCard_MaxCount
|
|
};
|
|
|
|
// =====================================================================================================
|
|
// Pcsx2 Application Configuration.
|
|
// =====================================================================================================
|
|
|
|
class AppConfig
|
|
{
|
|
public:
|
|
// ------------------------------------------------------------------------
|
|
struct ConsoleLogOptions
|
|
{
|
|
bool Visible;
|
|
// if true, DisplayPos is ignored and the console is automatically docked to the main window.
|
|
bool AutoDock;
|
|
// Display position used if AutoDock is false (ignored otherwise)
|
|
wxPoint DisplayPosition;
|
|
wxSize DisplaySize;
|
|
|
|
// Size of the font in points.
|
|
int FontSize;
|
|
|
|
// Color theme by name!
|
|
wxString Theme;
|
|
|
|
ConsoleLogOptions();
|
|
void LoadSave( IniInterface& conf, const wxChar* title );
|
|
};
|
|
|
|
// ------------------------------------------------------------------------
|
|
struct FolderOptions
|
|
{
|
|
BITFIELD32()
|
|
bool
|
|
UseDefaultBios:1,
|
|
UseDefaultSnapshots:1,
|
|
UseDefaultSavestates:1,
|
|
UseDefaultMemoryCards:1,
|
|
UseDefaultLogs:1,
|
|
UseDefaultLangs:1,
|
|
UseDefaultCheats:1,
|
|
UseDefaultCheatsWS:1;
|
|
BITFIELD_END
|
|
|
|
wxDirName
|
|
Bios,
|
|
Snapshots,
|
|
Savestates,
|
|
MemoryCards,
|
|
Langs,
|
|
Logs,
|
|
Cheats,
|
|
CheatsWS;
|
|
|
|
wxDirName RunIso; // last used location for Iso loading.
|
|
wxDirName RunELF; // last used location for ELF loading.
|
|
wxFileName RunDisc; // last used location for Disc loading.
|
|
|
|
FolderOptions();
|
|
void LoadSave( IniInterface& conf );
|
|
void ApplyDefaults();
|
|
|
|
void Set( FoldersEnum_t folderidx, const wxString& src, bool useDefault );
|
|
|
|
const wxDirName& operator[]( FoldersEnum_t folderidx ) const;
|
|
wxDirName& operator[]( FoldersEnum_t folderidx );
|
|
bool IsDefault( FoldersEnum_t folderidx ) const;
|
|
};
|
|
|
|
// ------------------------------------------------------------------------
|
|
struct FilenameOptions
|
|
{
|
|
wxFileName Bios;
|
|
wxFileName Plugins[PluginId_Count];
|
|
|
|
void LoadSave( IniInterface& conf );
|
|
|
|
const wxFileName& operator[]( PluginsEnum_t pluginidx ) const;
|
|
};
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Options struct for each memory card.
|
|
//
|
|
struct McdOptions
|
|
{
|
|
wxFileName Filename; // user-configured location of this memory card
|
|
bool Enabled; // memory card enabled (if false, memcard will not show up in-game)
|
|
MemoryCardType Type; // the memory card implementation that should be used
|
|
};
|
|
|
|
// ------------------------------------------------------------------------
|
|
// The GS window receives much love from the land of Options and Settings.
|
|
//
|
|
struct GSWindowOptions
|
|
{
|
|
// Closes the GS/Video port on escape (good for fullscreen activity)
|
|
bool CloseOnEsc;
|
|
|
|
bool DefaultToFullscreen;
|
|
bool AlwaysHideMouse;
|
|
bool DisableResizeBorders;
|
|
bool DisableScreenSaver;
|
|
|
|
AspectRatioType AspectRatio;
|
|
FMVAspectRatioSwitchType FMVAspectRatioSwitch;
|
|
Fixed100 Zoom;
|
|
Fixed100 StretchY;
|
|
Fixed100 OffsetX;
|
|
Fixed100 OffsetY;
|
|
|
|
|
|
wxSize WindowSize;
|
|
wxPoint WindowPos;
|
|
bool IsMaximized;
|
|
bool IsFullscreen;
|
|
bool EnableVsyncWindowFlag;
|
|
|
|
bool IsToggleFullscreenOnDoubleClick;
|
|
|
|
GSWindowOptions();
|
|
|
|
void LoadSave( IniInterface& conf );
|
|
void SanityCheck();
|
|
};
|
|
|
|
struct FramerateOptions
|
|
{
|
|
bool SkipOnLimit;
|
|
bool SkipOnTurbo;
|
|
|
|
Fixed100 NominalScalar;
|
|
Fixed100 TurboScalar;
|
|
Fixed100 SlomoScalar;
|
|
|
|
FramerateOptions();
|
|
|
|
void LoadSave( IniInterface& conf );
|
|
void SanityCheck();
|
|
};
|
|
|
|
#ifndef DISABLE_RECORDING
|
|
struct InputRecordingOptions
|
|
{
|
|
wxPoint VirtualPadPosition;
|
|
|
|
InputRecordingOptions();
|
|
void loadSave( IniInterface& conf );
|
|
};
|
|
#endif
|
|
|
|
struct UiTemplateOptions {
|
|
UiTemplateOptions();
|
|
void LoadSave(IniInterface& conf);
|
|
|
|
wxString LimiterUnlimited;
|
|
wxString LimiterTurbo;
|
|
wxString LimiterSlowmo;
|
|
wxString LimiterNormal;
|
|
wxString OutputFrame;
|
|
wxString OutputField;
|
|
wxString OutputProgressive;
|
|
wxString OutputInterlaced;
|
|
wxString Paused;
|
|
wxString TitleTemplate;
|
|
#ifndef DISABLE_RECORDING
|
|
wxString RecordingTemplate;
|
|
#endif
|
|
};
|
|
|
|
public:
|
|
wxPoint MainGuiPosition;
|
|
|
|
// Because remembering the last used tab on the settings panel is cool (tab is remembered
|
|
// by it's UTF/ASCII name).
|
|
wxString SysSettingsTabName;
|
|
wxString McdSettingsTabName;
|
|
wxString ComponentsTabName;
|
|
wxString AppSettingsTabName;
|
|
wxString GameDatabaseTabName;
|
|
|
|
// Currently selected language ID -- wxWidgets version-specific identifier. This is one side of
|
|
// a two-part configuration that also includes LanguageCode.
|
|
wxLanguage LanguageId;
|
|
|
|
// Current language in use (correlates to the universal language codes, such as "en_US", "de_DE", etc).
|
|
// This code is not always unique, which is why we use the language ID also.
|
|
wxString LanguageCode;
|
|
|
|
int RecentIsoCount; // number of files displayed in the Recent Isos list.
|
|
|
|
// Specifies the size of icons used in Listbooks; specifically the PCSX2 Properties dialog box.
|
|
// Realistic values range from 96x96 to 24x24.
|
|
int Listbook_ImageSize;
|
|
|
|
// Specifies the size of each toolbar icon, in pixels (any value >= 2 is valid, but realistically
|
|
// values should be between 64 and 16 for usability reasons)
|
|
int Toolbar_ImageSize;
|
|
|
|
// Enables display of toolbar text labels.
|
|
bool Toolbar_ShowLabels;
|
|
|
|
// uses automatic ntfs compression when creating new memory cards (Win32 only)
|
|
#ifdef __WXMSW__
|
|
bool McdCompressNTFS;
|
|
#endif
|
|
|
|
// Master toggle for enabling or disabling all speedhacks in one fail-free swoop.
|
|
// (the toggle is applied when a new EmuConfig is sent through AppCoreThread::ApplySettings)
|
|
bool EnableSpeedHacks;
|
|
bool EnableGameFixes;
|
|
bool EnableFastBoot;
|
|
|
|
// Presets try to prevent users from overwhelming when they want to change settings (usually to make a game run faster).
|
|
// The presets allow to modify the balance between emulation accuracy and emulation speed using a pseudo-linear control.
|
|
// It's pseudo since there's no way to arrange groups of all of pcsx2's settings such that each next group makes it slighty faster and slightly less compatiible for all games.
|
|
//However, By carefully selecting these preset config groups, it's hopefully possible to achieve this goal for a reasonable percentage (hopefully above 50%) of the games.
|
|
//when presets are enabled, the user has practically no control over the emulation settings, and can only choose the preset to use.
|
|
|
|
// The next 2 vars enable/disable presets alltogether, and select/reflect current preset, respectively.
|
|
bool EnablePresets;
|
|
int PresetIndex;
|
|
|
|
bool AskOnBoot;
|
|
|
|
wxString CurrentIso;
|
|
wxString CurrentBlockdump;
|
|
wxString CurrentELF;
|
|
wxString CurrentIRX;
|
|
CDVD_SourceType CdvdSource;
|
|
wxString CurrentGameArgs;
|
|
|
|
// Memorycard options - first 2 are default slots, last 6 are multitap 1 and 2
|
|
// slots (3 each)
|
|
McdOptions Mcd[8];
|
|
wxString GzipIsoIndexTemplate; // for quick-access index with gzipped ISO
|
|
|
|
ConsoleLogOptions ProgLogBox;
|
|
FolderOptions Folders;
|
|
FilenameOptions BaseFilenames;
|
|
GSWindowOptions GSWindow;
|
|
FramerateOptions Framerate;
|
|
#ifndef DISABLE_RECORDING
|
|
InputRecordingOptions inputRecording;
|
|
#endif
|
|
UiTemplateOptions Templates;
|
|
|
|
// PCSX2-core emulation options, which are passed to the emu core prior to initiating
|
|
// an emulation session. Note these are the options saved into the GUI ini file and
|
|
// which are shown as options in the gui preferences, but *not* necessarily the options
|
|
// used by emulation. The gui allows temporary per-game and commandline level overrides.
|
|
Pcsx2Config EmuOptions;
|
|
|
|
public:
|
|
AppConfig();
|
|
|
|
wxString FullpathToBios() const;
|
|
wxString FullpathToMcd( uint slot ) const;
|
|
wxString FullpathTo( PluginsEnum_t pluginId ) const;
|
|
|
|
bool FullpathMatchTest( PluginsEnum_t pluginId, const wxString& cmpto ) const;
|
|
|
|
void LoadSave( IniInterface& ini );
|
|
void LoadSaveRootItems( IniInterface& ini );
|
|
void LoadSaveMemcards( IniInterface& ini );
|
|
|
|
static int GetMaxPresetIndex();
|
|
static bool isOkGetPresetTextAndColor(int n, wxString& label, wxColor& c);
|
|
|
|
bool IsOkApplyPreset(int n, bool ignoreMTVU);
|
|
|
|
|
|
//The next 2 flags are used with ApplyConfigToGui which the presets system use:
|
|
|
|
//Indicates that the scope is only for preset-related items.
|
|
static const int APPLY_FLAG_FROM_PRESET = 0x01;
|
|
|
|
//Indicates that the change should manually propagate to sub items because it's called directly and not as an event.
|
|
//Currently used by some panels which contain sub-panels which are affected by presets.
|
|
static const int APPLY_FLAG_MANUALLY_PROPAGATE = 0x02;
|
|
|
|
};
|
|
|
|
extern void AppLoadSettings();
|
|
extern void AppSaveSettings();
|
|
extern void AppApplySettings( const AppConfig* oldconf=NULL );
|
|
|
|
extern void App_LoadSaveInstallSettings( IniInterface& ini );
|
|
extern void App_SaveInstallSettings( wxConfigBase* ini );
|
|
extern void App_LoadInstallSettings( wxConfigBase* ini );
|
|
|
|
extern void ConLog_LoadSaveSettings( IniInterface& ini );
|
|
extern void SysTraceLog_LoadSaveSettings( IniInterface& ini );
|
|
|
|
|
|
extern wxFileConfig* OpenFileConfig( const wxString& filename );
|
|
extern void RelocateLogfile();
|
|
extern void AppConfig_OnChangedSettingsFolder( bool overwrite = false );
|
|
extern wxConfigBase* GetAppConfig();
|
|
|
|
extern std::unique_ptr<AppConfig> g_Conf;
|