mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
685 lines
19 KiB
C++
685 lines
19 KiB
C++
|
#include "main.h"
|
||
|
#include <shlobj.h>
|
||
|
#include <commctrl.h>
|
||
|
#include <windows.h>
|
||
|
#include "../winamp/wa_ipc.h"
|
||
|
#include "config.h"
|
||
|
#include "api__in_mp3.h"
|
||
|
#include "resource.h"
|
||
|
|
||
|
char g_http_tmp[MAX_PATH] = {0};
|
||
|
|
||
|
int config_write_mode = WRITE_UTF16;
|
||
|
int config_read_mode = READ_LOCAL;
|
||
|
|
||
|
int config_parse_apev2 = 1;
|
||
|
int config_parse_lyrics3 = 1;
|
||
|
int config_parse_id3v1 = 1;
|
||
|
int config_parse_id3v2 = 1;
|
||
|
|
||
|
int config_write_apev2 = 1;
|
||
|
int config_write_id3v1 = 1;
|
||
|
int config_write_id3v2 = 1;
|
||
|
|
||
|
int config_create_id3v1 = 1;
|
||
|
int config_create_id3v2 = 1;
|
||
|
int config_create_apev2 = 0;
|
||
|
|
||
|
int config_apev2_header = RETAIN_HEADER;
|
||
|
int config_lp = 0;
|
||
|
|
||
|
BOOL CALLBACK browseEnumProc(HWND hwnd, LPARAM lParam)
|
||
|
{
|
||
|
wchar_t cl[32] = {0};
|
||
|
GetClassNameW(hwnd, cl, ARRAYSIZE(cl));
|
||
|
if (!lstrcmpiW(cl, WC_TREEVIEW))
|
||
|
{
|
||
|
PostMessage(hwnd, TVM_ENSUREVISIBLE, 0, (LPARAM)TreeView_GetSelection(hwnd));
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
static int CALLBACK BrowseCallbackProc( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case BFFM_INITIALIZED:
|
||
|
{
|
||
|
SetWindowText(hwnd, WASABI_API_LNGSTRINGW(IDS_SELECT_DIRECTORY_TO_SAVE_TO));
|
||
|
if (g_http_tmp[0]) SendMessage(hwnd, BFFM_SETSELECTIONA, 1, (LPARAM)g_http_tmp);
|
||
|
|
||
|
// this is not nice but it fixes the selection not working correctly on all OSes
|
||
|
EnumChildWindows(hwnd, browseEnumProc, 0);
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static char app_name[] = "Nullsoft MPEG Decoder";
|
||
|
|
||
|
char *get_inifile() { return INI_FILE; }
|
||
|
|
||
|
int _r_i(char *name, int def)
|
||
|
{
|
||
|
if (!_strnicmp(name, "config_", 7)) name += 7;
|
||
|
return GetPrivateProfileIntA(app_name, name, def, INI_FILE);
|
||
|
}
|
||
|
|
||
|
#define RI(x) (( x ) = _r_i(#x,( x )))
|
||
|
void _w_i(char *name, int d)
|
||
|
{
|
||
|
char str[120] = {0};
|
||
|
wsprintfA(str, "%d", d);
|
||
|
if (!_strnicmp(name, "config_", 7)) name += 7;
|
||
|
WritePrivateProfileStringA(app_name, name, str, INI_FILE);
|
||
|
}
|
||
|
#define WI(x) _w_i(#x,( x ))
|
||
|
|
||
|
void _r_s(char *name, char *data, int mlen)
|
||
|
{
|
||
|
char buf[2048] = {0};
|
||
|
lstrcpynA(buf, data, 2048);
|
||
|
if (!_strnicmp(name, "config_", 7)) name += 7;
|
||
|
GetPrivateProfileStringA(app_name, name, buf, data, mlen, INI_FILE);
|
||
|
}
|
||
|
#define RS(x) (_r_s(#x,x,sizeof(x)))
|
||
|
|
||
|
void _w_s(char *name, char *data)
|
||
|
{
|
||
|
if (!_strnicmp(name, "config_", 7)) name += 7;
|
||
|
WritePrivateProfileStringA(app_name, name, data, INI_FILE);
|
||
|
}
|
||
|
#define WS(x) (_w_s(#x,x))
|
||
|
|
||
|
static void config_init()
|
||
|
{
|
||
|
char *p;
|
||
|
if (mod.hMainWindow &&
|
||
|
(p = (char *)SendMessage(mod.hMainWindow, WM_WA_IPC, 0, IPC_GETINIFILE))
|
||
|
&& p != (char *)1)
|
||
|
{
|
||
|
strncpy(INI_FILE, p, MAX_PATH);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GetModuleFileNameA(NULL, INI_FILE, sizeof(INI_FILE));
|
||
|
p = INI_FILE + strlen(INI_FILE);
|
||
|
while (p >= INI_FILE && *p != '.') p--;
|
||
|
strcpy(++p, "ini");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#ifdef AAC_SUPPORT
|
||
|
#define DEF_EXT_LIST "MP3;MP2;MP1;AAC;VLB"
|
||
|
#else
|
||
|
#define DEF_EXT_LIST "MP3;MP2;MP1"
|
||
|
#endif
|
||
|
|
||
|
#define __STR2WSTR(str) L##str
|
||
|
#define WIDEN(str) __STR2WSTR(str)
|
||
|
#define DEF_EXT_LISTW WIDEN(DEF_EXT_LIST)
|
||
|
|
||
|
#ifdef AAC_SUPPORT
|
||
|
char config_extlist_aac[129] = DEF_EXT_LIST;
|
||
|
#else
|
||
|
char config_extlist[129] = DEF_EXT_LIST;
|
||
|
#endif
|
||
|
|
||
|
char config_rating_email[255] = {0};
|
||
|
|
||
|
void config_read()
|
||
|
{
|
||
|
config_init();
|
||
|
RI(allow_scartwork);
|
||
|
RI(allow_sctitles);
|
||
|
RI(sctitle_format);
|
||
|
RI(config_http_buffersize);
|
||
|
RI(config_http_prebuffer);
|
||
|
RI(config_http_prebuffer_underrun);
|
||
|
RI(config_downmix);
|
||
|
RI(config_downsample);
|
||
|
RI(config_max_bufsize_k);
|
||
|
RI(config_eqmode);
|
||
|
RI(config_gapless);
|
||
|
|
||
|
if(FAILED(SHGetFolderPathA(NULL, CSIDL_MYMUSIC, NULL, SHGFP_TYPE_CURRENT, config_http_save_dir)))
|
||
|
{
|
||
|
if(FAILED(SHGetFolderPathA(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, config_http_save_dir)))
|
||
|
{
|
||
|
lstrcpynA(config_http_save_dir, "C:\\", MAX_PATH);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
RS(config_http_save_dir);
|
||
|
RI(config_miscopts);
|
||
|
RI(config_fastvis);
|
||
|
|
||
|
#ifdef AAC_SUPPORT
|
||
|
RS(config_extlist_aac);
|
||
|
#else
|
||
|
RS(config_extlist);
|
||
|
#endif
|
||
|
|
||
|
RI(config_write_mode);
|
||
|
RI(config_read_mode);
|
||
|
|
||
|
RI(config_parse_apev2);
|
||
|
RI(config_parse_lyrics3);
|
||
|
RI(config_parse_id3v1);
|
||
|
RI(config_parse_id3v2);
|
||
|
|
||
|
RI(config_write_apev2);
|
||
|
RI(config_write_id3v1);
|
||
|
RI(config_write_id3v2);
|
||
|
|
||
|
RI(config_create_apev2);
|
||
|
RI(config_create_id3v1);
|
||
|
RI(config_create_id3v2);
|
||
|
|
||
|
RI(config_apev2_header);
|
||
|
|
||
|
RI(config_lp);
|
||
|
|
||
|
RS(config_rating_email);
|
||
|
}
|
||
|
|
||
|
void config_write()
|
||
|
{
|
||
|
WI(allow_scartwork);
|
||
|
WI(config_fastvis);
|
||
|
WI(config_miscopts);
|
||
|
WI(allow_sctitles);
|
||
|
WI(sctitle_format);
|
||
|
WI(config_http_buffersize);
|
||
|
WI(config_http_buffersize);
|
||
|
WI(config_http_prebuffer);
|
||
|
WI(config_http_prebuffer_underrun);
|
||
|
WI(config_downmix);
|
||
|
WI(config_downsample);
|
||
|
WI(config_max_bufsize_k);
|
||
|
WI(config_eqmode);
|
||
|
WS(config_http_save_dir);
|
||
|
#ifdef AAC_SUPPORT
|
||
|
WS(config_extlist_aac);
|
||
|
#else
|
||
|
WS(config_extlist);
|
||
|
#endif
|
||
|
|
||
|
WI(config_write_mode);
|
||
|
WI(config_read_mode);
|
||
|
|
||
|
WI(config_parse_apev2);
|
||
|
WI(config_parse_lyrics3);
|
||
|
WI(config_parse_id3v1);
|
||
|
WI(config_parse_id3v2);
|
||
|
|
||
|
WI(config_write_apev2);
|
||
|
WI(config_write_id3v1);
|
||
|
WI(config_write_id3v2);
|
||
|
|
||
|
WI(config_create_apev2);
|
||
|
WI(config_create_id3v1);
|
||
|
WI(config_create_id3v2);
|
||
|
|
||
|
WI(config_apev2_header);
|
||
|
|
||
|
WI(config_lp);
|
||
|
|
||
|
WS(config_rating_email);
|
||
|
}
|
||
|
|
||
|
static INT_PTR CALLBACK prefsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
static INT_PTR CALLBACK id3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
static INT_PTR CALLBACK advancedTaggingProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
static INT_PTR CALLBACK httpProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
static INT_PTR CALLBACK outputProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
#define ISSEP(x) ((x) == ' ' || (x) == ';' || (x) == ',' || (x) == ':' || (x) == '.')
|
||
|
char *getfileextensions()
|
||
|
{
|
||
|
static char list[512];
|
||
|
char *op = list;
|
||
|
// char *g_fileassos="MP3;MP2;MP1\0MPEG Audio Files (*.MP3;*.MP2;*.MP1)\0";
|
||
|
|
||
|
char *p = config_extlist;
|
||
|
int s = 0;
|
||
|
while (p && *p)
|
||
|
{
|
||
|
while (ISSEP(*p)) p++;
|
||
|
if (!p || !*p) break;
|
||
|
if (s) *op++ = ';';
|
||
|
s = 1;
|
||
|
while (p && *p && !ISSEP(*p)) *op++ = *p++;
|
||
|
}
|
||
|
*op++ = 0;
|
||
|
strcpy(op, WASABI_API_LNGSTRING(IDS_MPEG_AUDIO_FILES));
|
||
|
while (op && *op) op++;
|
||
|
p = config_extlist;
|
||
|
s = 0;
|
||
|
while (p && *p)
|
||
|
{
|
||
|
while (ISSEP(*p)) p++;
|
||
|
if (!p || !*p) break;
|
||
|
if (s) *op++ = ';';
|
||
|
s = 1;
|
||
|
*op++ = '*';
|
||
|
*op++ = '.';
|
||
|
while (p && *p && !ISSEP(*p)) *op++ = *p++;
|
||
|
}
|
||
|
*op++ = ')';
|
||
|
*op++ = 0;
|
||
|
*op++ = 0;
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
void config(HWND hwndParent)
|
||
|
{
|
||
|
wchar_t title[128] = {0};
|
||
|
int x;
|
||
|
PROPSHEETHEADER pshead;
|
||
|
PROPSHEETPAGE pspage[5];
|
||
|
ZeroMemory(&pshead, sizeof(PROPSHEETHEADER));
|
||
|
pshead.dwSize = sizeof(PROPSHEETHEADER);
|
||
|
pshead.hwndParent = hwndParent;
|
||
|
pshead.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP;
|
||
|
pshead.hInstance = WASABI_API_LNG_HINST;
|
||
|
pshead.pszCaption = WASABI_API_LNGSTRINGW_BUF(IDS_MPEG_AUDIO_DECODER_SETTINGS,title,128);//"MPEG Audio Decoder Settings";
|
||
|
pshead.nPages = sizeof(pspage) / sizeof(pspage[0]);
|
||
|
pshead.nStartPage = config_lp;
|
||
|
pshead.ppsp = pspage;
|
||
|
|
||
|
ZeroMemory(pspage, sizeof(pspage));
|
||
|
for ( x = 0; x < sizeof(pspage) / sizeof(pspage[0]); x ++)
|
||
|
pspage[x].dwSize = sizeof(PROPSHEETPAGE);
|
||
|
for ( x = 0; x < sizeof(pspage) / sizeof(pspage[0]); x ++)
|
||
|
pspage[x].hInstance = WASABI_API_LNG_HINST;
|
||
|
pspage[0].pszTemplate = MAKEINTRESOURCE(IDD_PREFS);
|
||
|
pspage[1].pszTemplate = MAKEINTRESOURCE(IDD_TAGOPTS);
|
||
|
pspage[2].pszTemplate = MAKEINTRESOURCE(IDD_ADVANCED_TAGGING);
|
||
|
pspage[3].pszTemplate = MAKEINTRESOURCE(IDD_OUTPUT);
|
||
|
pspage[4].pszTemplate = MAKEINTRESOURCE(IDD_HTTP);
|
||
|
pspage[0].pfnDlgProc = prefsProc;
|
||
|
pspage[1].pfnDlgProc = id3Proc;
|
||
|
pspage[2].pfnDlgProc = advancedTaggingProc;
|
||
|
pspage[3].pfnDlgProc = outputProc;
|
||
|
pspage[4].pfnDlgProc = httpProc;
|
||
|
PropertySheet((PROPSHEETHEADER*)&pshead);
|
||
|
config_write();
|
||
|
extern char *g_fileassos;
|
||
|
mod.FileExtensions = getfileextensions();
|
||
|
}
|
||
|
|
||
|
static INT_PTR CALLBACK id3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
if (config_parse_id3v1) CheckDlgButton(hwndDlg, IDC_READ_ID3V1, BST_CHECKED);
|
||
|
if (config_parse_id3v2) CheckDlgButton(hwndDlg, IDC_READ_ID3V2, BST_CHECKED);
|
||
|
|
||
|
if (config_write_id3v1) CheckDlgButton(hwndDlg, IDC_WRITE_ID3V1, BST_CHECKED);
|
||
|
if (config_write_id3v2) CheckDlgButton(hwndDlg, IDC_WRITE_ID3V2, BST_CHECKED);
|
||
|
|
||
|
if (config_create_id3v1) CheckDlgButton(hwndDlg, IDC_CREATE_ID3V1, BST_CHECKED);
|
||
|
if (config_create_id3v2) CheckDlgButton(hwndDlg, IDC_CREATE_ID3V2, BST_CHECKED);
|
||
|
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_LATIN_1));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_SYSTEM_LANGUAGE));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO1,CB_SETCURSEL,(config_read_mode == READ_LOCAL),0);
|
||
|
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO2,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_UNICODE_UTF_16));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO2,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_LATIN_1));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO2,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_SYSTEM_LANGUAGE));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_COMBO2,CB_SETCURSEL,config_write_mode,0);
|
||
|
|
||
|
SetDlgItemTextA(hwndDlg,IDC_RATING_EMAIL,(config_rating_email[0] ? config_rating_email : "rating@winamp.com\0"));
|
||
|
|
||
|
return FALSE;
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||
|
if (pnmh->code == PSN_SETACTIVE)
|
||
|
{
|
||
|
config_lp = 1;
|
||
|
}
|
||
|
if (pnmh->code == PSN_APPLY)
|
||
|
{
|
||
|
config_parse_id3v1 = IsDlgButtonChecked(hwndDlg, IDC_READ_ID3V1);
|
||
|
config_parse_id3v2 = IsDlgButtonChecked(hwndDlg, IDC_READ_ID3V2);
|
||
|
|
||
|
config_write_id3v1 = IsDlgButtonChecked(hwndDlg, IDC_WRITE_ID3V1);
|
||
|
config_write_id3v2 = IsDlgButtonChecked(hwndDlg, IDC_WRITE_ID3V2);
|
||
|
|
||
|
config_create_id3v1 = IsDlgButtonChecked(hwndDlg, IDC_CREATE_ID3V1);
|
||
|
config_create_id3v2 = IsDlgButtonChecked(hwndDlg, IDC_CREATE_ID3V2);
|
||
|
|
||
|
GetDlgItemTextA(hwndDlg,IDC_RATING_EMAIL,config_rating_email,sizeof(config_rating_email));
|
||
|
if (!stricmp(config_rating_email, "rating@winamp.com\0")) config_rating_email[0] = 0;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_COMBO1:
|
||
|
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||
|
{
|
||
|
int cur = (int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0);
|
||
|
if(!cur) config_read_mode = READ_LATIN;
|
||
|
else if(cur == 1) config_read_mode = READ_LOCAL;
|
||
|
}
|
||
|
break;
|
||
|
case IDC_COMBO2:
|
||
|
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||
|
{
|
||
|
int cur = (int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0);
|
||
|
if(!cur) config_write_mode = WRITE_UTF16;
|
||
|
else if(cur == 1) config_write_mode = WRITE_LATIN;
|
||
|
else if(cur == 2) config_write_mode = WRITE_LOCAL;
|
||
|
}
|
||
|
break;
|
||
|
case IDC_RATING_EMAIL_RESET:
|
||
|
if(HIWORD(wParam) == BN_CLICKED)
|
||
|
{
|
||
|
config_rating_email[0] = 0;
|
||
|
SetDlgItemTextA(hwndDlg,IDC_RATING_EMAIL,(config_rating_email[0] ? config_rating_email : "rating@winamp.com\0"));
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
static INT_PTR CALLBACK advancedTaggingProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
|
||
|
if (config_parse_apev2) CheckDlgButton(hwndDlg, IDC_READ_APEV2, BST_CHECKED);
|
||
|
if (config_write_apev2) CheckDlgButton(hwndDlg, IDC_WRITE_APEV2, BST_CHECKED);
|
||
|
if (config_create_apev2) CheckDlgButton(hwndDlg, IDC_CREATE_APEV2, BST_CHECKED);
|
||
|
|
||
|
if (config_parse_lyrics3) CheckDlgButton(hwndDlg, IDC_READ_LYRICS3, BST_CHECKED);
|
||
|
|
||
|
SendDlgItemMessage(hwndDlg,IDC_APEV2_HEADER_OPTIONS,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_APEV2_RETAIN_HEADER));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_APEV2_HEADER_OPTIONS,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_APEV2_ADD_HEADER));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_APEV2_HEADER_OPTIONS,CB_ADDSTRING,0,(LPARAM)WASABI_API_LNGSTRINGW(IDS_APEV2_REMOVE_HEADER));
|
||
|
SendDlgItemMessage(hwndDlg,IDC_APEV2_HEADER_OPTIONS,CB_SETCURSEL,config_apev2_header, 0);
|
||
|
|
||
|
return FALSE;
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||
|
if (pnmh->code == PSN_SETACTIVE)
|
||
|
{
|
||
|
config_lp = 2;
|
||
|
}
|
||
|
if (pnmh->code == PSN_APPLY)
|
||
|
{
|
||
|
config_parse_apev2 = IsDlgButtonChecked(hwndDlg, IDC_READ_APEV2);
|
||
|
config_write_apev2 = IsDlgButtonChecked(hwndDlg, IDC_WRITE_APEV2);
|
||
|
config_create_apev2 = IsDlgButtonChecked(hwndDlg, IDC_CREATE_APEV2);
|
||
|
|
||
|
config_parse_lyrics3 = IsDlgButtonChecked(hwndDlg, IDC_READ_LYRICS3);
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_APEV2_HEADER_OPTIONS:
|
||
|
if(HIWORD(wParam) == CBN_SELCHANGE)
|
||
|
{
|
||
|
int cur = (int)SendMessage((HWND)lParam,CB_GETCURSEL,0,0);
|
||
|
if(!cur) config_apev2_header = RETAIN_HEADER;
|
||
|
else if(cur == 1) config_apev2_header = ADD_HEADER;
|
||
|
else if(cur == 2) config_apev2_header = REMOVE_HEADER;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
static INT_PTR CALLBACK prefsProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
SetDlgItemTextA(hwndDlg, IDC_EDIT1, config_extlist);
|
||
|
SendDlgItemMessage(hwndDlg, IDC_EDIT1, EM_LIMITTEXT, 128, 0);
|
||
|
{
|
||
|
wchar_t str[10] = L"";
|
||
|
wsprintf(str, L"%d", config_max_bufsize_k);
|
||
|
SetDlgItemText(hwndDlg, IDC_BUFMAX, str);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_BUFMAX), EM_LIMITTEXT, 5, 0);
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_BUTTON1:
|
||
|
SetDlgItemText(hwndDlg, IDC_EDIT1, DEF_EXT_LISTW);
|
||
|
break;
|
||
|
}
|
||
|
return FALSE;
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||
|
if (pnmh->code == PSN_SETACTIVE)
|
||
|
{
|
||
|
config_lp = 0;
|
||
|
}
|
||
|
if (pnmh->code == PSN_APPLY)
|
||
|
{
|
||
|
config_max_bufsize_k = GetDlgItemInt(hwndDlg, IDC_BUFMAX, NULL, 0);
|
||
|
GetDlgItemTextA(hwndDlg, IDC_EDIT1, config_extlist, 128);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
static INT_PTR CALLBACK outputProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
if (config_eqmode&1) CheckDlgButton(hwndDlg, IDC_RADIO2, 1);
|
||
|
else CheckDlgButton(hwndDlg, IDC_RADIO1, 1);
|
||
|
|
||
|
if (!(config_eqmode&4)) CheckDlgButton(hwndDlg, IDC_FASTL3EQ, 1);
|
||
|
if (config_eqmode&8) CheckDlgButton(hwndDlg, IDC_FASTL12EQ, 1);
|
||
|
if (config_miscopts&1) CheckDlgButton(hwndDlg, IDC_CHECK1, BST_CHECKED);
|
||
|
if (config_miscopts&2) CheckDlgButton(hwndDlg, IDC_CHECK2, BST_CHECKED);
|
||
|
if (config_downmix == 2) CheckDlgButton(hwndDlg, IDC_REVSTEREO, BST_CHECKED);
|
||
|
if (config_downsample == 1)
|
||
|
CheckDlgButton(hwndDlg, IDC_HALFRATE, BST_CHECKED);
|
||
|
else if (config_downsample == 2)
|
||
|
CheckDlgButton(hwndDlg, IDC_QRATE, BST_CHECKED);
|
||
|
else
|
||
|
CheckDlgButton(hwndDlg, IDC_FULLRATE, BST_CHECKED);
|
||
|
return FALSE;
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||
|
if (pnmh->code == PSN_SETACTIVE)
|
||
|
{
|
||
|
config_lp = 3;
|
||
|
}
|
||
|
|
||
|
if (pnmh->code == PSN_APPLY)
|
||
|
{
|
||
|
config_miscopts &= ~3;
|
||
|
config_miscopts |= IsDlgButtonChecked(hwndDlg, IDC_CHECK1) ? 1 : 0;
|
||
|
config_miscopts |= IsDlgButtonChecked(hwndDlg, IDC_CHECK2) ? 2 : 0;
|
||
|
|
||
|
config_eqmode = IsDlgButtonChecked(hwndDlg, IDC_RADIO1) ? 0 : 1;
|
||
|
config_eqmode |= IsDlgButtonChecked(hwndDlg, IDC_FASTL3EQ) ? 0 : 4;
|
||
|
config_eqmode |= IsDlgButtonChecked(hwndDlg, IDC_FASTL12EQ) ? 8 : 0;
|
||
|
|
||
|
config_downmix = IsDlgButtonChecked(hwndDlg, IDC_REVSTEREO) ? 2 : 0;
|
||
|
|
||
|
config_downsample = IsDlgButtonChecked(hwndDlg, IDC_HALFRATE) ? 1 : 0;
|
||
|
config_downsample = IsDlgButtonChecked(hwndDlg, IDC_QRATE) ? 2 : config_downsample;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
void SetHTTPSaveButtonText(HWND hwndDlg, char* path)
|
||
|
{
|
||
|
HWND control = GetDlgItem(hwndDlg, IDC_BUTTON2);
|
||
|
HDC hdc = GetDC(control);
|
||
|
RECT r = {0};
|
||
|
char temp[MAX_PATH] = {0};
|
||
|
|
||
|
lstrcpynA(temp, path, MAX_PATH);
|
||
|
SelectObject(hdc, (HFONT)SendMessage(control, WM_GETFONT, 0, 0));
|
||
|
GetClientRect(control, &r);
|
||
|
r.left += 5;
|
||
|
r.right -= 5;
|
||
|
DrawTextA(hdc, temp, -1, &r, DT_PATH_ELLIPSIS|DT_WORD_ELLIPSIS|DT_MODIFYSTRING);
|
||
|
SetWindowTextA(control, temp);
|
||
|
ReleaseDC(control, hdc);
|
||
|
}
|
||
|
|
||
|
static INT_PTR CALLBACK httpProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
switch (uMsg)
|
||
|
{
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_CHECK2:
|
||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), IsDlgButtonChecked(hwndDlg, IDC_CHECK2));
|
||
|
break;
|
||
|
case IDC_BUTTON2:
|
||
|
{
|
||
|
BROWSEINFO bi = {0};
|
||
|
wchar_t name[MAX_PATH] = {0};
|
||
|
bi.hwndOwner = hwndDlg;
|
||
|
bi.pszDisplayName = name;
|
||
|
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
|
||
|
bi.lpfn = BrowseCallbackProc;
|
||
|
LPITEMIDLIST idlist = SHBrowseForFolder(&bi);
|
||
|
if (idlist)
|
||
|
{
|
||
|
SHGetPathFromIDListA(idlist, g_http_tmp);
|
||
|
IMalloc *m = 0;
|
||
|
SHGetMalloc(&m);
|
||
|
m->Free(idlist);
|
||
|
SetHTTPSaveButtonText(hwndDlg, g_http_tmp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
return 0;
|
||
|
case WM_INITDIALOG:
|
||
|
SetDlgItemInt(hwndDlg, IDC_BUFFERS_NUMBUFS, config_http_buffersize, 0);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER), TBM_SETRANGEMAX, 0, 50);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER), TBM_SETRANGEMIN, 0, 0);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER), TBM_SETPOS, 1, config_http_prebuffer / 2);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER2), TBM_SETRANGEMAX, 0, 50);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER2), TBM_SETRANGEMIN, 0, 0);
|
||
|
SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER2), TBM_SETPOS, 1, config_http_prebuffer_underrun / 2);
|
||
|
CheckDlgButton(hwndDlg, IDC_CHECK1, allow_sctitles);
|
||
|
CheckDlgButton(hwndDlg, IDC_SC_ARTWORK, allow_scartwork);
|
||
|
CheckDlgButton(hwndDlg, IDC_CHECK3, sctitle_format);
|
||
|
|
||
|
if (config_miscopts&16)
|
||
|
{
|
||
|
CheckDlgButton(hwndDlg, IDC_CHECK2, BST_CHECKED);
|
||
|
}
|
||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), (config_miscopts&16));
|
||
|
SetHTTPSaveButtonText(hwndDlg, config_http_save_dir);
|
||
|
lstrcpynA(g_http_tmp, config_http_save_dir, MAX_PATH);
|
||
|
|
||
|
return FALSE;
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||
|
if (pnmh->code == PSN_SETACTIVE)
|
||
|
{
|
||
|
config_lp = 4;
|
||
|
}
|
||
|
|
||
|
if (pnmh->code == PSN_APPLY)
|
||
|
{
|
||
|
sctitle_format = !!IsDlgButtonChecked(hwndDlg, IDC_CHECK3);
|
||
|
allow_sctitles = !!IsDlgButtonChecked(hwndDlg, IDC_CHECK1);
|
||
|
allow_scartwork = !!IsDlgButtonChecked(hwndDlg, IDC_SC_ARTWORK);
|
||
|
{
|
||
|
int s;
|
||
|
int t;
|
||
|
t = GetDlgItemInt(hwndDlg, IDC_BUFFERS_NUMBUFS, &s, 0);
|
||
|
if (s) config_http_buffersize = t;
|
||
|
if (config_http_buffersize < 16) config_http_buffersize = 16;
|
||
|
}
|
||
|
config_http_prebuffer = (int)SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER), TBM_GETPOS, 0, 0) * 2;
|
||
|
config_http_prebuffer_underrun = (int)SendMessage(GetDlgItem(hwndDlg, IDC_PREBUFSLIDER2), TBM_GETPOS, 0, 0) * 2;
|
||
|
lstrcpynA(config_http_save_dir, g_http_tmp, MAX_PATH);
|
||
|
if (IsDlgButtonChecked(hwndDlg, IDC_CHECK2))
|
||
|
{
|
||
|
config_miscopts |= 16;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
config_miscopts &= ~16;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
const int controls[] =
|
||
|
{
|
||
|
IDC_PREBUFSLIDER,
|
||
|
IDC_PREBUFSLIDER2,
|
||
|
};
|
||
|
if (FALSE != WASABI_API_APP->DirectMouseWheel_ProcessDialogMessage(hwndDlg, uMsg, wParam, lParam, controls, ARRAYSIZE(controls)))
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
int DoAboutMessageBox(HWND parent, wchar_t* title, wchar_t* message)
|
||
|
{
|
||
|
MSGBOXPARAMSW msgbx = {sizeof(MSGBOXPARAMSW),0};
|
||
|
msgbx.lpszText = message;
|
||
|
msgbx.lpszCaption = title;
|
||
|
msgbx.lpszIcon = MAKEINTRESOURCE(102);
|
||
|
msgbx.hInstance = GetModuleHandle(0);
|
||
|
msgbx.dwStyle = MB_USERICON;
|
||
|
msgbx.hwndOwner = parent;
|
||
|
return MessageBoxIndirectW(&msgbx);
|
||
|
}
|
||
|
|
||
|
void about(HWND hwndParent)
|
||
|
{
|
||
|
wchar_t message[1024] = {0}, text[1024] = {0};
|
||
|
WASABI_API_LNGSTRINGW_BUF(IDS_NULLSOFT_MPEG_AUDIO_DECODER_OLD,text,1024);
|
||
|
wsprintfW(message, WASABI_API_LNGSTRINGW(IDS_ABOUT_TEXT),
|
||
|
mod.description, __DATE__);
|
||
|
DoAboutMessageBox(hwndParent,text,message);
|
||
|
}
|