129 lines
3.1 KiB
C++
129 lines
3.1 KiB
C++
|
#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;
|
||
|
}
|