2010-10-22 09:35:00 +02:00
|
|
|
#ifdef _MSC_VER
|
|
|
|
#define _CRT_SECURE_NO_DEPRECATE
|
|
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <io.h>
|
|
|
|
|
|
|
|
#include <foobar2000.h>
|
|
|
|
#include <shared.h>
|
|
|
|
#include "foo_prefs.h"
|
|
|
|
extern "C" {
|
|
|
|
#include "../src/vgmstream.h"
|
|
|
|
#include "../src/util.h"
|
|
|
|
}
|
|
|
|
#include "foo_vgmstream.h"
|
|
|
|
|
|
|
|
|
|
|
|
static const GUID guid_cfg_LoopForever = { 0xa19e36eb, 0x72a0, 0x4077, { 0x91, 0x43, 0x38, 0xb4, 0x5, 0xfc, 0x91, 0xc5 } };
|
|
|
|
static const GUID guid_cfg_IgnoreLoop = { 0xddda7ab6, 0x7bb6, 0x4abe, { 0xb9, 0x66, 0x2d, 0xb7, 0x8f, 0xe4, 0xcc, 0xab } };
|
|
|
|
static const GUID guid_cfg_LoopCount = { 0xfc8dfd72, 0xfae8, 0x44cc, { 0xbe, 0x99, 0x1c, 0x7b, 0x27, 0x7a, 0xb6, 0xb9 } };
|
|
|
|
static const GUID guid_cfg_FadeLength = { 0x61da7ef1, 0x56a5, 0x4368, { 0xae, 0x6, 0xec, 0x6f, 0xd7, 0xe6, 0x15, 0x5d } };
|
|
|
|
static const GUID guid_cfg_FadeDelay = { 0x73907787, 0xaf49, 0x4659, { 0x96, 0x8e, 0x9f, 0x70, 0xa1, 0x62, 0x49, 0xc4 } };
|
2017-08-19 12:35:38 +02:00
|
|
|
static const GUID guid_cfg_DisableSubsongs = { 0xa8cdd664, 0xb32b, 0x4a36, { 0x83, 0x07, 0xa0, 0x4c, 0xcd, 0x52, 0xa3, 0x7c } };
|
2018-04-29 23:31:52 +02:00
|
|
|
static const GUID guid_cfg_DownmixChannels = { 0x5a0e65dd, 0xeb37, 0x4c67, { 0x9a, 0xb1, 0x3f, 0xb0, 0xc9, 0x7e, 0xb0, 0xe0 } };
|
2010-10-22 09:35:00 +02:00
|
|
|
|
|
|
|
static cfg_bool cfg_LoopForever(guid_cfg_LoopForever, DEFAULT_LOOP_FOREVER);
|
|
|
|
static cfg_bool cfg_IgnoreLoop(guid_cfg_IgnoreLoop, DEFAULT_IGNORE_LOOP);
|
|
|
|
static cfg_string cfg_LoopCount(guid_cfg_LoopCount, DEFAULT_LOOP_COUNT);
|
|
|
|
static cfg_string cfg_FadeLength(guid_cfg_FadeLength, DEFAULT_FADE_SECONDS);
|
|
|
|
static cfg_string cfg_FadeDelay(guid_cfg_FadeDelay, DEFAULT_FADE_DELAY_SECONDS);
|
2017-08-19 12:35:38 +02:00
|
|
|
static cfg_bool cfg_DisableSubsongs(guid_cfg_DisableSubsongs, DEFAULT_DISABLE_SUBSONGS);
|
2018-04-29 23:31:52 +02:00
|
|
|
static cfg_string cfg_DownmixChannels(guid_cfg_DownmixChannels, DEFAULT_DOWNMIX_CHANNELS);
|
2010-10-22 09:35:00 +02:00
|
|
|
|
|
|
|
// Needs to be here in rder to access the static config
|
|
|
|
void input_vgmstream::load_settings()
|
|
|
|
{
|
|
|
|
// no verification needed here, as it is done below
|
|
|
|
sscanf(cfg_FadeLength.get_ptr(),"%lf",&fade_seconds);
|
|
|
|
sscanf(cfg_LoopCount.get_ptr(),"%lf",&loop_count);
|
|
|
|
sscanf(cfg_FadeDelay.get_ptr(),"%lf",&fade_delay_seconds);
|
|
|
|
loop_forever = cfg_LoopForever;
|
|
|
|
ignore_loop = cfg_IgnoreLoop;
|
2017-08-19 12:35:38 +02:00
|
|
|
disable_subsongs = cfg_DisableSubsongs;
|
2018-04-29 23:31:52 +02:00
|
|
|
sscanf(cfg_DownmixChannels.get_ptr(),"%d",&downmix_channels);
|
2010-10-22 09:35:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
const char * vgmstream_prefs::get_name()
|
|
|
|
{
|
2017-12-31 04:15:34 +01:00
|
|
|
return input_vgmstream::g_get_name();
|
2010-10-22 09:35:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
GUID vgmstream_prefs::get_guid()
|
|
|
|
{
|
2017-12-31 04:15:34 +01:00
|
|
|
return input_vgmstream::g_get_preferences_guid();
|
2010-10-22 09:35:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
GUID vgmstream_prefs::get_parent_guid()
|
|
|
|
{
|
|
|
|
return guid_input;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BOOL vgmstreamPreferences::OnInitDialog(CWindow, LPARAM)
|
|
|
|
{
|
|
|
|
CheckDlgButton(IDC_LOOP_FOREVER, cfg_LoopForever?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
CheckDlgButton(IDC_IGNORE_LOOP, cfg_IgnoreLoop?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
CheckDlgButton(IDC_LOOP_NORMALLY, (!cfg_IgnoreLoop && !cfg_LoopForever)?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_LOOP_COUNT, cfg_LoopCount);
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_FADE_SECONDS, cfg_FadeLength);
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS, cfg_FadeDelay);
|
|
|
|
|
2017-08-19 12:35:38 +02:00
|
|
|
CheckDlgButton(IDC_DISABLE_SUBSONGS, cfg_DisableSubsongs?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
|
2018-04-29 23:31:52 +02:00
|
|
|
uSetDlgItemText(m_hWnd, IDC_DOWNMIX_CHANNELS, cfg_DownmixChannels);
|
|
|
|
|
2010-10-22 09:35:00 +02:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
t_uint32 vgmstreamPreferences::get_state()
|
|
|
|
{
|
|
|
|
t_uint32 state = preferences_state::resettable;
|
|
|
|
if (HasChanged()) state |= preferences_state::changed;
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void vgmstreamPreferences::reset()
|
|
|
|
{
|
|
|
|
CheckDlgButton(IDC_LOOP_FOREVER, DEFAULT_LOOP_FOREVER?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
CheckDlgButton(IDC_IGNORE_LOOP, DEFAULT_IGNORE_LOOP?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
CheckDlgButton(IDC_LOOP_NORMALLY, (!DEFAULT_IGNORE_LOOP && !DEFAULT_LOOP_FOREVER)?BST_CHECKED:BST_UNCHECKED);
|
|
|
|
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_LOOP_COUNT, DEFAULT_LOOP_COUNT);
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_FADE_SECONDS, DEFAULT_FADE_SECONDS);
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS, DEFAULT_FADE_DELAY_SECONDS);
|
2017-08-19 12:35:38 +02:00
|
|
|
|
|
|
|
CheckDlgButton(IDC_DISABLE_SUBSONGS, DEFAULT_DISABLE_SUBSONGS?BST_CHECKED:BST_UNCHECKED);
|
2018-04-29 23:31:52 +02:00
|
|
|
|
|
|
|
uSetDlgItemText(m_hWnd, IDC_DOWNMIX_CHANNELS, DEFAULT_DOWNMIX_CHANNELS);
|
2010-10-22 09:35:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void vgmstreamPreferences::apply()
|
|
|
|
{
|
|
|
|
cfg_LoopForever = IsDlgButtonChecked(IDC_LOOP_FOREVER)?true:false;
|
|
|
|
cfg_IgnoreLoop = IsDlgButtonChecked(IDC_IGNORE_LOOP)?true:false;
|
2017-08-19 12:35:38 +02:00
|
|
|
cfg_DisableSubsongs = IsDlgButtonChecked(IDC_DISABLE_SUBSONGS)?true:false;
|
2010-10-22 09:35:00 +02:00
|
|
|
|
|
|
|
double temp_fade_seconds;
|
|
|
|
double temp_fade_delay_seconds;
|
|
|
|
double temp_loop_count;
|
|
|
|
int consumed;
|
2018-04-29 23:31:52 +02:00
|
|
|
int temp_downmix_channels;
|
2010-10-22 09:35:00 +02:00
|
|
|
|
|
|
|
pfc::string buf;
|
|
|
|
buf = uGetDlgItemText(m_hWnd, IDC_FADE_SECONDS);
|
|
|
|
if (sscanf(buf.get_ptr(),"%lf%n",&temp_fade_seconds,&consumed)<1
|
|
|
|
|| consumed!=strlen(buf.get_ptr()) ||
|
|
|
|
temp_fade_seconds<0) {
|
|
|
|
uMessageBox(m_hWnd,
|
|
|
|
"Invalid value for Fade Length\n"
|
|
|
|
"Must be a number greater than or equal to zero",
|
|
|
|
"Error",MB_OK|MB_ICONERROR);
|
|
|
|
return;
|
|
|
|
} else cfg_FadeLength = buf.get_ptr();
|
|
|
|
|
|
|
|
buf = uGetDlgItemText(m_hWnd, IDC_LOOP_COUNT);
|
|
|
|
if (sscanf(buf.get_ptr(),"%lf%n",&temp_loop_count,&consumed)<1
|
|
|
|
|| consumed!=strlen(buf.get_ptr()) ||
|
|
|
|
temp_loop_count<0) {
|
|
|
|
uMessageBox(m_hWnd,
|
|
|
|
"Invalid value for Loop Count\n"
|
|
|
|
"Must be a number greater than or equal to zero",
|
|
|
|
"Error",MB_OK|MB_ICONERROR);
|
|
|
|
return;
|
|
|
|
} else cfg_LoopCount = buf.get_ptr();
|
|
|
|
|
|
|
|
buf = uGetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS);
|
|
|
|
if (sscanf(buf.get_ptr(),"%lf%n",&temp_fade_delay_seconds,&consumed)<1
|
|
|
|
|| consumed!=strlen(buf.get_ptr()) ||
|
|
|
|
temp_fade_delay_seconds<0) {
|
|
|
|
uMessageBox(m_hWnd,
|
|
|
|
"Invalid value for Fade Delay\n"
|
|
|
|
"Must be a number",
|
|
|
|
"Error",MB_OK|MB_ICONERROR);
|
|
|
|
return;
|
|
|
|
} else cfg_FadeDelay = buf.get_ptr();
|
2018-04-29 23:31:52 +02:00
|
|
|
|
|
|
|
buf = uGetDlgItemText(m_hWnd, IDC_DOWNMIX_CHANNELS);
|
|
|
|
if (sscanf(buf.get_ptr(),"%d%n",&temp_downmix_channels,&consumed)<1
|
|
|
|
|| consumed!=strlen(buf.get_ptr()) ||
|
|
|
|
temp_downmix_channels<0) {
|
|
|
|
uMessageBox(m_hWnd,
|
|
|
|
"Invalid value for Downmix Channels\n"
|
|
|
|
"Must be a number greater than or equal to zero",
|
|
|
|
"Error",MB_OK|MB_ICONERROR);
|
|
|
|
return;
|
|
|
|
} else cfg_DownmixChannels = buf.get_ptr();
|
|
|
|
|
2010-10-22 09:35:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool vgmstreamPreferences::HasChanged()
|
|
|
|
{
|
|
|
|
if(IsDlgButtonChecked(IDC_LOOP_FOREVER))
|
|
|
|
if(cfg_LoopForever != true) return true;
|
|
|
|
|
|
|
|
if(IsDlgButtonChecked(IDC_IGNORE_LOOP))
|
|
|
|
if(cfg_IgnoreLoop != true) return true;
|
|
|
|
|
|
|
|
if(IsDlgButtonChecked(IDC_LOOP_NORMALLY))
|
|
|
|
if(cfg_IgnoreLoop != false || cfg_LoopForever != false) return true;
|
|
|
|
|
2017-08-19 12:35:38 +02:00
|
|
|
bool current_cfg_DisableSubsongs = IsDlgButtonChecked(IDC_DISABLE_SUBSONGS)?true:false;
|
|
|
|
if(cfg_DisableSubsongs != current_cfg_DisableSubsongs) return true;
|
|
|
|
|
2010-10-22 09:35:00 +02:00
|
|
|
pfc::string FadeLength(cfg_FadeLength);
|
|
|
|
pfc::string FadeDelay(cfg_FadeDelay);
|
|
|
|
pfc::string LoopCount(cfg_LoopCount);
|
|
|
|
|
|
|
|
if(FadeLength != uGetDlgItemText(m_hWnd, IDC_FADE_SECONDS)) return true;
|
|
|
|
if(FadeDelay != uGetDlgItemText(m_hWnd, IDC_FADE_DELAY_SECONDS)) return true;
|
|
|
|
if(LoopCount != uGetDlgItemText(m_hWnd, IDC_LOOP_COUNT)) return true;
|
|
|
|
|
2018-04-29 23:31:52 +02:00
|
|
|
pfc::string DownmixChannels(cfg_DownmixChannels);
|
|
|
|
if(DownmixChannels != uGetDlgItemText(m_hWnd, IDC_DOWNMIX_CHANNELS)) return true;
|
|
|
|
|
2010-10-22 09:35:00 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void vgmstreamPreferences::OnEditChange(UINT, int, CWindow)
|
|
|
|
{
|
|
|
|
m_callback->on_state_changed();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static preferences_page_factory_t<vgmstream_prefs> g_vgmstream_preferences_page_factory;
|