123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- * 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
|