l2-unlegits/l2detect/RadarSetupDlg_SoundAlerts.cpp
2012-02-01 05:25:08 +00:00

181 lines
7.0 KiB
C++

#include "stdafx.h"
#include "Resource.h"
#include "Logger.h"
#include "GameClient.h"
extern HINSTANCE g_radardll_hinst;
extern class GameClient *g_game_client; // in main.cpp
INT_PTR CALLBACK SoundAlerts_DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
HWND RadarSetupDlg_SoundAlerts_Create( HWND hWndParent )
{
return CreateDialogParam( g_radardll_hinst, MAKEINTRESOURCE(IDD_SR_SOUNDALERTS),
hWndParent, SoundAlerts_DlgProc, 0 );
}
// =========================================================
void SoundAlerts_Init( HWND hDlg );
void SoundAlerts_OnDestroy( HWND hDlg );
void SoundAlerts_OnApply( HWND hDlg );
void SoundAlerts_OnFind( HWND hDlg, int N );
void SoundAlerts_PlayFile( HWND hDlg, int N );
INT_PTR CALLBACK SoundAlerts_DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
lParam;
switch( uMsg )
{
case WM_INITDIALOG: SoundAlerts_Init( hDlg ); break;
case WM_DESTROY: { SoundAlerts_OnDestroy( hDlg ); return FALSE; } break;
case WM_COMMAND:
{
switch( LOWORD(wParam) )
{
case IDC_APPLY: SoundAlerts_OnApply( hDlg ); break;
case IDC_B_FIND1: SoundAlerts_OnFind( hDlg, 1 ); break;
case IDC_B_FIND2: SoundAlerts_OnFind( hDlg, 2 ); break;
case IDC_B_FIND3: SoundAlerts_OnFind( hDlg, 3 ); break;
case IDC_B_PLAY1: SoundAlerts_PlayFile( hDlg, 1 ); break;
case IDC_B_PLAY2: SoundAlerts_PlayFile( hDlg, 2 ); break;
case IDC_B_PLAY3: SoundAlerts_PlayFile( hDlg, 3 ); break;
}
} break;
default: return FALSE; break;
}
return TRUE;
}
void SoundAlerts_Init( HWND hDlg )
{
// force UserAI to reload config file
g_game_client->ai.loadSoundAlertsCfgFromFile();
//
HWND hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPECW );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Info") );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Warning") );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Critical") );
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPETARGET );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Info") );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Warning") );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Critical") );
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPEINVISGM );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Info") );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Warning") );
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Critical") );
// set initial CB checks
if( g_game_client->ai.soundAlert_alertOnClanWar > 0 )
{
CheckDlgButton( hDlg, IDC_C_SOUNDENEMYENTER, g_game_client->ai.soundAlert_alertOnClanWar );
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPECW );
ComboBox_SetCurSel( hwndCB, g_game_client->ai.soundAlert_alertOnClanWar - 1 );
}
if( g_game_client->ai.soundAlert_alertOnTargeted > 0 )
{
CheckDlgButton( hDlg, IDC_C_SOUNDWHENTARGETED, g_game_client->ai.soundAlert_alertOnTargeted );
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPETARGET );
ComboBox_SetCurSel( hwndCB, g_game_client->ai.soundAlert_alertOnTargeted - 1 );
}
if( g_game_client->ai.soundAlert_alertOnInvisGM > 0 )
{
CheckDlgButton( hDlg, IDC_C_SOUNDONINVISGM, g_game_client->ai.soundAlert_alertOnTargeted );
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPEINVISGM );
ComboBox_SetCurSel( hwndCB, g_game_client->ai.soundAlert_alertOnInvisGM - 1 );
}
// no clan/party alert, screen message
CheckDlgButton( hDlg, IDC_C_NOPARTYTARGETALERT, g_game_client->ai.soundAlert_noPartyTargetAlert );
CheckDlgButton( hDlg, IDC_C_NOCLANTARGETALERT, g_game_client->ai.soundAlert_noClanTargetAlert );
CheckDlgButton( hDlg, IDC_C_TARGETALERTONSCREEN, g_game_client->ai.soundAlert_screenMessage );
// set file names
SetDlgItemTextA( hDlg, IDC_E_VERYCRITICALFILE, g_game_client->ai.soundAlert_fileNameCritical );
SetDlgItemTextA( hDlg, IDC_E_WARNINGFILE, g_game_client->ai.soundAlert_fileNameWarning );
SetDlgItemTextA( hDlg, IDC_E_INFOFILE, g_game_client->ai.soundAlert_fileNameInfo );
}
void SoundAlerts_OnDestroy( HWND hDlg )
{
hDlg;
//log_error( LOG_OK, "SoundAlerts_OnDestroy\n" );
}
void SoundAlerts_OnApply( HWND hDlg )
{
//log_error( LOG_OK, "SoundAlerts_OnApply\n" );
// apply dialog config to UserAI class
HWND hwndcb = NULL;
if( IsDlgButtonChecked( hDlg, IDC_C_SOUNDENEMYENTER ) )
{
hwndcb = GetDlgItem( hDlg, IDC_CB_SOUNDTYPECW );
g_game_client->ai.soundAlert_alertOnClanWar = 1 + ComboBox_GetCurSel( hwndcb );
}
else g_game_client->ai.soundAlert_alertOnClanWar = 0;
//
if( IsDlgButtonChecked( hDlg, IDC_C_SOUNDWHENTARGETED ) )
{
hwndcb = GetDlgItem( hDlg, IDC_CB_SOUNDTYPETARGET );
g_game_client->ai.soundAlert_alertOnTargeted = 1 + ComboBox_GetCurSel( hwndcb );
}
else g_game_client->ai.soundAlert_alertOnTargeted = 0;
//
if( IsDlgButtonChecked( hDlg, IDC_C_SOUNDONINVISGM ) )
{
hwndcb = GetDlgItem( hDlg, IDC_CB_SOUNDTYPEINVISGM );
g_game_client->ai.soundAlert_alertOnInvisGM = 1 + ComboBox_GetCurSel( hwndcb );
}
else g_game_client->ai.soundAlert_alertOnInvisGM = 0;
// no clan/party alert, screen message
g_game_client->ai.soundAlert_noPartyTargetAlert = IsDlgButtonChecked( hDlg, IDC_C_NOPARTYTARGETALERT );
g_game_client->ai.soundAlert_noClanTargetAlert = IsDlgButtonChecked( hDlg, IDC_C_NOCLANTARGETALERT );
g_game_client->ai.soundAlert_screenMessage = IsDlgButtonChecked( hDlg, IDC_C_TARGETALERTONSCREEN );
// file names
GetDlgItemTextA( hDlg, IDC_E_VERYCRITICALFILE, g_game_client->ai.soundAlert_fileNameCritical, 255 );
GetDlgItemTextA( hDlg, IDC_E_WARNINGFILE, g_game_client->ai.soundAlert_fileNameWarning, 255 );
GetDlgItemTextA( hDlg, IDC_E_INFOFILE, g_game_client->ai.soundAlert_fileNameInfo, 255 );
// save to file
g_game_client->ai.saveSoundAlertsCfgToFile();
}
void SoundAlerts_OnFind( HWND hDlg, int N )
{
TCHAR fileName[256] = {0};
OPENFILENAME ofn;
memset( &ofn, 0, sizeof(ofn) );
ofn.lStructSize = sizeof(ofn);
ofn.Flags = OFN_EXPLORER | OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR;
ofn.hInstance = g_radardll_hinst;
ofn.hwndOwner = hDlg;
ofn.lpstrFile = fileName;
ofn.lpstrTitle = TEXT("Choose sound file:");
ofn.nMaxFile = 255;
if( GetOpenFileName( &ofn ) )
{
//MessageBox( hDlg, fileName, TEXT("User choosed"), 0 );
switch( N )
{
case 1: SetDlgItemText( hDlg, IDC_E_VERYCRITICALFILE, fileName ); break;
case 2: SetDlgItemText( hDlg, IDC_E_WARNINGFILE, fileName ); break;
case 3: SetDlgItemText( hDlg, IDC_E_INFOFILE, fileName ); break;
}
}
}
void SoundAlerts_PlayFile( HWND hDlg, int N )
{
TCHAR text[256] = {0};
if( N<1 || N>3 ) return;
switch( N )
{
case 1: GetDlgItemText( hDlg, IDC_E_VERYCRITICALFILE, text, 255 ); break;
case 2: GetDlgItemText( hDlg, IDC_E_WARNINGFILE, text, 255 ); break;
case 3: GetDlgItemText( hDlg, IDC_E_INFOFILE, text, 255 ); break;
}
if( !PlaySound( text, NULL, SND_FILENAME | SND_ASYNC ) )
{
ErrorLogger_LogLastError( "PlaySoundW", GetLastError() );
MessageBox( hDlg, TEXT("PlaySound() failed"), text, MB_ICONSTOP );
}
}