mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-05-03 17:15:41 -04:00
104 lines
5.8 KiB
C++
104 lines
5.8 KiB
C++
#pragma once
|
|
#include "common/types.h"
|
|
|
|
class BinaryReader;
|
|
class BinaryWriter;
|
|
class String;
|
|
|
|
enum : u32
|
|
{
|
|
MAX_PROPERTY_TABLE_NAME_LENGTH = 128,
|
|
MAX_PROPERTY_NAME_LENGTH = 128
|
|
};
|
|
|
|
enum PROPERTY_TYPE
|
|
{
|
|
PROPERTY_TYPE_BOOL,
|
|
PROPERTY_TYPE_UINT,
|
|
PROPERTY_TYPE_INT,
|
|
PROPERTY_TYPE_FLOAT,
|
|
PROPERTY_TYPE_STRING,
|
|
PROPERTY_TYPE_COUNT,
|
|
};
|
|
|
|
enum PROPERTY_FLAG
|
|
{
|
|
PROPERTY_FLAG_READ_ONLY = (1 << 0), // Property cannot be modified by user. Engine can still modify it, however.
|
|
PROPERTY_FLAG_INVOKE_CHANGE_CALLBACK_ON_CREATE =
|
|
(1 << 1), // Property change callback will be invoked when the object is being created. By default it is not.
|
|
};
|
|
|
|
struct PROPERTY_DECLARATION
|
|
{
|
|
typedef bool (*GET_PROPERTY_CALLBACK)(const void* object, const void* userdata, void* value_ptr);
|
|
typedef bool (*SET_PROPERTY_CALLBACK)(void* object, const void* userdata, const void* value_ptr);
|
|
typedef void (*PROPERTY_CHANGED_CALLBACK)(void* object, const void* userdata);
|
|
|
|
const char* Name;
|
|
PROPERTY_TYPE Type;
|
|
u32 Flags;
|
|
|
|
GET_PROPERTY_CALLBACK GetPropertyCallback;
|
|
const void* pGetPropertyCallbackUserData;
|
|
SET_PROPERTY_CALLBACK SetPropertyCallback;
|
|
const void* pSetPropertyCallbackUserData;
|
|
PROPERTY_CHANGED_CALLBACK PropertyChangedCallback;
|
|
const void* pPropertyChangedCallbackUserData;
|
|
};
|
|
|
|
bool GetPropertyValueAsString(const void* object, const PROPERTY_DECLARATION* property, String& value);
|
|
bool SetPropertyValueFromString(void* object, const PROPERTY_DECLARATION* property, const char* value);
|
|
bool WritePropertyValueToBuffer(const void* object, const PROPERTY_DECLARATION* property, BinaryWriter& writer);
|
|
bool ReadPropertyValueFromBuffer(void* object, const PROPERTY_DECLARATION* property, BinaryReader& reader);
|
|
bool EncodePropertyTypeToBuffer(PROPERTY_TYPE type, const char* value_string, BinaryWriter& writer);
|
|
|
|
namespace DefaultPropertyTableCallbacks {
|
|
// builtin functions
|
|
bool GetBool(const void* object, const void* userdata, bool* value_ptr);
|
|
bool SetBool(void* object, const void* userdata, const bool* value_ptr);
|
|
bool GetUInt(const void* object, const void* userdata, u32* value_ptr);
|
|
bool SetUInt(void* object, const void* userdata, const u32* value_ptr);
|
|
bool GetInt(const void* object, const void* userdata, s32* value_ptr);
|
|
bool SetInt(void* object, const void* userdata, const s32* value_ptr);
|
|
bool GetFloat(const void* object, const void* userdata, float* value_ptr);
|
|
bool SetFloat(void* object, const void* userdata, const float* value_ptr);
|
|
bool GetString(const void* object, const void* userdata, String* value_ptr);
|
|
bool SetString(void* object, const void* userdata, const String* value_ptr);
|
|
|
|
// static bool value
|
|
bool GetConstBool(const void* object, const void* userdata, bool* value_ptr);
|
|
} // namespace DefaultPropertyTableCallbacks
|
|
|
|
#define PROPERTY_TABLE_MEMBER(Name, Type, Flags, GetPropertyCallback, GetPropertyCallbackUserData, \
|
|
SetPropertyCallback, SetPropertyCallbackUserData, PropertyChangedCallback, \
|
|
PropertyChangedCallbackUserData) \
|
|
{Name, \
|
|
Type, \
|
|
Flags, \
|
|
(PROPERTY_DECLARATION::GET_PROPERTY_CALLBACK)(GetPropertyCallback), \
|
|
(const void*)(GetPropertyCallbackUserData), \
|
|
(PROPERTY_DECLARATION::SET_PROPERTY_CALLBACK)(SetPropertyCallback), \
|
|
(const void*)(SetPropertyCallbackUserData), \
|
|
(PROPERTY_DECLARATION::PROPERTY_CHANGED_CALLBACK)(PropertyChangedCallback), \
|
|
(const void*)(PropertyChangedCallbackUserData)},
|
|
|
|
#define PROPERTY_TABLE_MEMBER_BOOL(Name, Flags, Offset, ChangedFunc, ChangedFuncUserData) \
|
|
PROPERTY_TABLE_MEMBER(Name, PROPERTY_TYPE_BOOL, Flags, DefaultPropertyTableCallbacks::GetBool, (Offset), \
|
|
DefaultPropertyTableCallbacks::SetBool, (Offset), ChangedFunc, ChangedFuncUserData)
|
|
|
|
#define PROPERTY_TABLE_MEMBER_UINT(Name, Flags, Offset, ChangedFunc, ChangedFuncUserData) \
|
|
PROPERTY_TABLE_MEMBER(Name, PROPERTY_TYPE_INT, Flags, DefaultPropertyTableCallbacks::GetUInt, (Offset), \
|
|
DefaultPropertyTableCallbacks::SetUInt, (Offset), ChangedFunc, ChangedFuncUserData)
|
|
|
|
#define PROPERTY_TABLE_MEMBER_INT(Name, Flags, Offset, ChangedFunc, ChangedFuncUserData) \
|
|
PROPERTY_TABLE_MEMBER(Name, PROPERTY_TYPE_INT, Flags, DefaultPropertyTableCallbacks::GetInt, (Offset), \
|
|
DefaultPropertyTableCallbacks::SetInt, (Offset), ChangedFunc, ChangedFuncUserData)
|
|
|
|
#define PROPERTY_TABLE_MEMBER_FLOAT(Name, Flags, Offset, ChangedFunc, ChangedFuncUserData) \
|
|
PROPERTY_TABLE_MEMBER(Name, PROPERTY_TYPE_FLOAT, Flags, DefaultPropertyTableCallbacks::GetFloat, (Offset), \
|
|
DefaultPropertyTableCallbacks::SetFloat, (Offset), ChangedFunc, ChangedFuncUserData)
|
|
|
|
#define PROPERTY_TABLE_MEMBER_STRING(Name, Flags, Offset, ChangedFunc, ChangedFuncUserData) \
|
|
PROPERTY_TABLE_MEMBER(Name, PROPERTY_TYPE_STRING, Flags, DefaultPropertyTableCallbacks::GetString, (Offset), \
|
|
DefaultPropertyTableCallbacks::SetString, (Offset), ChangedFunc, ChangedFuncUserData)
|