Cog/Frameworks/OpenMPT/OpenMPT/libopenmpt/libopenmpt_plugin_settings.hpp
Christopher Snowhill da1973bcd9 Build libOpenMPT from source once again
Bundle libOpenMPT as a dynamic framework, which should be safe once
again, now that there is only one version to bundle. Also, now it is
using the versions of libvorbisfile and libmpg123 that are bundled with
the player, instead of compiling minimp3 and stbvorbis.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2022-06-30 22:56:52 -07:00

130 lines
3.9 KiB
C++

/*
* libopenmpt_plugin_settings.hpp
* ------------------------------
* Purpose: libopenmpt plugin settings
* Notes : (currently none)
* Authors: OpenMPT Devs
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
*/
#ifndef LIBOPENMPT_PLUGIN_SETTINGS_HPP
#define LIBOPENMPT_PLUGIN_SETTINGS_HPP
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <windows.h>
#include <string>
namespace libopenmpt {
namespace plugin {
typedef void (*changed_func)();
struct libopenmpt_settings {
bool no_default_format = true;
int samplerate = 48000;
int channels = 2;
int mastergain_millibel = 0;
int stereoseparation = 100;
int use_amiga_resampler = 0;
int amiga_filter_type = 0;
int repeatcount = 0;
int interpolationfilterlength = 8;
int ramping = -1;
int vis_allow_scroll = 1;
changed_func changed = nullptr;
};
class settings : public libopenmpt_settings {
private:
std::basic_string<TCHAR> subkey;
protected:
virtual void read_setting( const std::string & /* key */ , const std::basic_string<TCHAR> & key, int & val ) {
HKEY regkey = HKEY();
if ( RegOpenKeyEx( HKEY_CURRENT_USER, ( TEXT("Software\\libopenmpt\\") + subkey ).c_str(), 0, KEY_READ, &regkey ) == ERROR_SUCCESS ) {
DWORD v = val;
DWORD type = REG_DWORD;
DWORD typesize = sizeof(v);
if ( RegQueryValueEx( regkey, key.c_str(), NULL, &type, (BYTE *)&v, &typesize ) == ERROR_SUCCESS )
{
val = v;
}
RegCloseKey( regkey );
regkey = HKEY();
}
}
virtual void write_setting( const std::string & /* key */, const std::basic_string<TCHAR> & key, int val ) {
HKEY regkey = HKEY();
if ( RegCreateKeyEx( HKEY_CURRENT_USER, ( TEXT("Software\\libopenmpt\\") + subkey ).c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &regkey, NULL ) == ERROR_SUCCESS ) {
DWORD v = val;
DWORD type = REG_DWORD;
DWORD typesize = sizeof(v);
if ( RegSetValueEx( regkey, key.c_str(), 0, type, (const BYTE *)&v, typesize ) == ERROR_SUCCESS )
{
// ok
}
RegCloseKey( regkey );
regkey = HKEY();
}
}
public:
settings( const std::basic_string<TCHAR> & subkey, bool no_default_format_ )
: subkey(subkey)
{
no_default_format = no_default_format_;
}
void load()
{
#ifdef UNICODE
#define read_setting(a,b,c) read_setting( b , L ## b , c)
#else
#define read_setting(a,b,c) read_setting( b , b , c)
#endif
read_setting( subkey, "Samplerate_Hz", samplerate );
read_setting( subkey, "Channels", channels );
read_setting( subkey, "MasterGain_milliBel", mastergain_millibel );
read_setting( subkey, "StereoSeparation_Percent", stereoseparation );
read_setting( subkey, "RepeatCount", repeatcount );
read_setting( subkey, "InterpolationFilterLength", interpolationfilterlength );
read_setting( subkey, "UseAmigaResampler", use_amiga_resampler );
read_setting( subkey, "AmigaFilterType", amiga_filter_type );
read_setting( subkey, "VolumeRampingStrength", ramping );
read_setting( subkey, "VisAllowScroll", vis_allow_scroll );
#undef read_setting
}
void save()
{
#ifdef UNICODE
#define write_setting(a,b,c) write_setting( b , L ## b , c)
#else
#define write_setting(a,b,c) write_setting( b , b , c)
#endif
write_setting( subkey, "Samplerate_Hz", samplerate );
write_setting( subkey, "Channels", channels );
write_setting( subkey, "MasterGain_milliBel", mastergain_millibel );
write_setting( subkey, "StereoSeparation_Percent", stereoseparation );
write_setting( subkey, "RepeatCount", repeatcount );
write_setting( subkey, "InterpolationFilterLength", interpolationfilterlength );
write_setting( subkey, "UseAmigaResampler", use_amiga_resampler );
write_setting( subkey, "AmigaFilterType", amiga_filter_type );
write_setting( subkey, "VolumeRampingStrength", ramping );
write_setting( subkey, "VisAllowScroll", vis_allow_scroll );
#undef write_setting
}
virtual ~settings()
{
return;
}
};
} // namespace plugin
} // namespace libopenmpt
#endif // LIBOPENMPT_PLUGIN_SETTINGS_HPP