project64/Source/Project64-core/Settings.h

121 lines
5.1 KiB
C
Raw Normal View History

#pragma once
2016-01-13 07:23:22 +00:00
#include <Project64-core/Settings/SettingType/SettingsType-Base.h>
2018-04-02 18:30:50 +00:00
#include <Project64-core/Settings/SettingsID.h>
#include <map>
2015-10-25 10:50:28 +00:00
enum SettingDataType
{
Data_DWORD = 0,
Data_String = 1,
Data_CPUTYPE = 2,
Data_SelfMod = 3,
Data_OnOff = 4,
Data_YesNo = 5,
2015-10-25 10:50:28 +00:00
Data_SaveChip = 6
};
2015-10-25 10:50:28 +00:00
class CSettings
{
public:
2022-10-10 00:22:17 +00:00
typedef void (*SettingChangedFunc)(void *);
2015-10-25 10:50:28 +00:00
CSettings(void);
~CSettings(void);
bool Initialize(const char * BaseDirectory, const char * AppName);
2015-10-25 10:50:28 +00:00
2021-04-02 07:35:01 +00:00
// Return the values
bool LoadBool(SettingID Type);
bool LoadBool(SettingID Type, bool & Value);
bool LoadBoolIndex(SettingID Type, uint32_t index);
bool LoadBoolIndex(SettingID Type, uint32_t index, bool & Value);
uint32_t LoadDword(SettingID Type);
bool LoadDword(SettingID Type, uint32_t & Value);
uint32_t LoadDwordIndex(SettingID Type, uint32_t index);
bool LoadDwordIndex(SettingID Type, uint32_t index, uint32_t & Value);
std::string LoadStringVal(SettingID Type);
bool LoadStringVal(SettingID Type, std::string & Value);
bool LoadStringVal(SettingID Type, char * Buffer, uint32_t BufferSize);
std::string LoadStringIndex(SettingID Type, uint32_t index);
bool LoadStringIndex(SettingID Type, uint32_t index, std::string & Value);
bool LoadStringIndex(SettingID Type, uint32_t index, char * Buffer, uint32_t BufferSize);
2015-10-25 10:50:28 +00:00
2021-04-02 07:35:01 +00:00
// Load the default value for the setting
bool LoadDefaultBool(SettingID Type);
void LoadDefaultBool(SettingID Type, bool & Value);
bool LoadDefaultBoolIndex(SettingID Type, uint32_t index);
void LoadDefaultBoolIndex(SettingID Type, uint32_t index, bool & Value);
uint32_t LoadDefaultDword(SettingID Type);
void LoadDefaultDword(SettingID Type, uint32_t & Value);
uint32_t LoadDefaultDwordIndex(SettingID Type, uint32_t index);
void LoadDefaultDwordIndex(SettingID Type, uint32_t index, uint32_t & Value);
std::string LoadDefaultString(SettingID Type);
void LoadDefaultString(SettingID Type, std::string & Value);
void LoadDefaultString(SettingID Type, char * Buffer, uint32_t BufferSize);
std::string LoadDefaultStringIndex(SettingID Type, uint32_t index);
void LoadDefaultStringIndex(SettingID Type, uint32_t index, std::string & Value);
void LoadDefaultStringIndex(SettingID Type, uint32_t index, char * Buffer, uint32_t BufferSize);
2015-10-25 10:50:28 +00:00
2021-04-02 07:35:01 +00:00
// Update the settings
void SaveBool(SettingID Type, bool Value);
void SaveBoolIndex(SettingID Type, uint32_t index, bool Value);
void SaveDword(SettingID Type, uint32_t Value);
void SaveDwordIndex(SettingID Type, uint32_t index, uint32_t Value);
void SaveString(SettingID Type, const std::string & Value);
void SaveStringIndex(SettingID Type, uint32_t index, const std::string & Value);
void SaveString(SettingID Type, const char * Buffer);
void SaveStringIndex(SettingID Type, uint32_t index, const char * Buffer);
2015-10-25 10:50:28 +00:00
// Delete a setting
void DeleteSetting(SettingID Type);
void DeleteSettingIndex(SettingID Type, uint32_t index);
2015-10-25 10:50:28 +00:00
2021-04-02 07:35:01 +00:00
// Register notification of change
void RegisterChangeCB(SettingID Type, void * Data, SettingChangedFunc Func);
void UnregisterChangeCB(SettingID Type, void * Data, SettingChangedFunc Func);
2015-10-25 10:50:28 +00:00
2021-04-02 07:35:01 +00:00
// Information about setting
SettingType GetSettingType(SettingID Type);
bool IndexBasedSetting(SettingID Type);
void SettingTypeChanged(SettingType Type);
bool IsSettingSet(SettingID Type);
2015-10-25 10:50:28 +00:00
2021-04-02 07:35:01 +00:00
// Static functions for plugins
2022-10-10 00:22:17 +00:00
static uint32_t GetSetting(CSettings * _this, SettingID Type);
static const char * GetSettingSz(CSettings * _this, SettingID Type, char * Buffer, uint32_t BufferSize);
static void SetSetting(CSettings * _this, SettingID ID, uint32_t Value);
static void SetSettingSz(CSettings * _this, SettingID ID, const char * Value);
static void RegisterSetting(CSettings * _this, SettingID ID, SettingID DefaultID, SettingDataType DataType,
2022-10-10 00:22:17 +00:00
SettingType Type, const char * Category, const char * DefaultStr, uint32_t Value);
static uint32_t FindSetting(CSettings * _this, const char * Name);
static void FlushSettings(CSettings * _this);
static void sRegisterChangeCB(CSettings * _this, SettingID Type, void * Data, SettingChangedFunc Func);
static void sUnregisterChangeCB(CSettings * _this, SettingID Type, void * Data, SettingChangedFunc Func);
2021-04-02 07:35:01 +00:00
// Notification
void NotifyCallBacks(SettingID Type);
void AddHandler(SettingID TypeID, CSettingType * Handler);
private:
void AddHowToHandleSetting(const char * BaseDirectory);
void UnknownSetting(SettingID Type);
struct SETTING_CHANGED_CB
{
void * Data;
SettingChangedFunc Func;
SETTING_CHANGED_CB * Next;
};
typedef std::map<SettingID, SETTING_CHANGED_CB *> SETTING_CALLBACK;
typedef std::map<SettingID, CSettingType *> SETTING_MAP;
typedef SETTING_MAP::iterator SETTING_HANDLER;
SETTING_MAP m_SettingInfo;
2015-10-25 10:50:28 +00:00
SETTING_CALLBACK m_Callback;
uint32_t m_NextAutoSettingId;
};
extern CSettings * g_Settings;