131 lines
3.9 KiB
C++
131 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, ®key ) == 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, ®key, 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
|