| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | #include "main.h"#include "config.h"#include "resource.h"char config_extensions[1024] = {0};bool config_upsample8bit=false;static int ExtensionInList(HWND hwndDlg, int id, const char *string){	return (int)SendMessageA(GetDlgItem(hwndDlg, id), LB_FINDSTRINGEXACT, 0, (LPARAM)string);}void FillExtensionList( HWND hwndDlg ){	int numTypes;	sf_command( 0, SFC_GET_FORMAT_MAJOR_COUNT, &numTypes, sizeof( numTypes ) );	SF_FORMAT_INFO info;	for ( int i = 0; i < numTypes; i++ )	{		info.format = i;		sf_command( 0, SFC_GET_FORMAT_MAJOR, &info, sizeof( info ) );		if ( !_strcmpi( info.extension, "mpc" ) )			continue;		if ( ExtensionInList( hwndDlg, IDC_EXTENSION_LIST, info.extension ) == LB_ERR )		{			LRESULT index = SendMessageA( GetDlgItem( hwndDlg, IDC_EXTENSION_LIST ), LB_ADDSTRING, 0, (LPARAM)info.extension );			if ( ExtensionExists( info.extension, config_extensions ) )				SendMessage( GetDlgItem( hwndDlg, IDC_EXTENSION_LIST ), LB_SETSEL, TRUE, index );		}	}}void FillExtensionsEditControl( HWND hwndDlg ){	char extensions[ 256 ] = "";	char temp[ 20 ] = { 0 };		char *s = config_extensions;	while ( s && *s )	{		lstrcpynA( temp, s, 20 );				char *scan = temp;		while ( scan && *scan && *scan != ';' )			scan = CharNextA( scan );		*scan = 0;		if ( ExtensionInList( hwndDlg, IDC_EXTENSION_LIST, temp ) == LB_ERR )		{			if ( *extensions )				lstrcatA( extensions, ";" );			lstrcatA( extensions, temp );		}		s += lstrlenA( temp );		if ( *s == ';' )			s = CharNextA( s );	}	SetDlgItemTextA( hwndDlg, IDC_ADDITIONAL_EXTENSIONS, extensions );}void Preferences_Init( HWND hwndDlg ){	SendMessageA( GetDlgItem( hwndDlg, IDC_OUTPUTBITS ), CB_ADDSTRING, 0, (LPARAM)"16 bit" ); // TODO: string table	SendMessageA( GetDlgItem( hwndDlg, IDC_OUTPUTBITS ), CB_ADDSTRING, 0, (LPARAM)"32 bit" ); // TODO: string table	FillExtensionList( hwndDlg );	FillExtensionsEditControl( hwndDlg );}void Preferences_OnOK( HWND hwndDlg ){	config_extensions[ 0 ] = 0;	LRESULT num = SendMessage( GetDlgItem( hwndDlg, IDC_EXTENSION_LIST ), LB_GETCOUNT, 0, 0 );	for ( int i = 0; i < num; i++ )	{		if ( SendMessage( GetDlgItem( hwndDlg, IDC_EXTENSION_LIST ), LB_GETSEL, i, 0 ) > 0 )		{			char thisExtension[ 256 ] = { 0 };			if ( config_extensions[ 0 ] )				lstrcatA( config_extensions, ";" );			SendMessageA( GetDlgItem( hwndDlg, IDC_EXTENSION_LIST ), LB_GETTEXT, i, (LPARAM)thisExtension );			lstrcatA( config_extensions, thisExtension );		}	}	char additional[ 1024 ] = { 0 };	GetDlgItemTextA( hwndDlg, IDC_ADDITIONAL_EXTENSIONS, additional, 1024 );	if ( additional[ 0 ] )	{		if ( config_extensions[ 0 ] )			lstrcatA( config_extensions, ";" );		lstrcatA( config_extensions, additional );	}	SetFileExtensions( config_extensions );}BOOL CALLBACK PreferencesDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ){	switch ( uMsg )	{		case WM_INITDIALOG:			Preferences_Init( hwndDlg );			break;		case WM_COMMAND:			switch ( LOWORD( wParam ) )			{				case IDOK:					Preferences_OnOK( hwndDlg );					EndDialog( hwndDlg, 0 );					break;				case IDCANCEL:					EndDialog( hwndDlg, 0 );					break;			}	}	return 0;}
 |