//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #include "cbase.h" #include #include #include "resource.h" #include "WaveProperties.h" #include "SoundEmitterSystem/isoundemittersystembase.h" #include "soundentry.h" #include "cmdlib.h" #include "workspacemanager.h" #include "wavebrowser.h" #include "wavefile.h" #include "multiplerequest.h" static CWaveParams g_Params; static bool WaveLessFunc( const char *const& name1, const char *const& name2 ) { if ( stricmp( name1, name2 ) < 0 ) return true; return false; } static void WaveProperties_OnOK( HWND hwndDlg ) { // Gather info and make changes CWaveFile *item = g_Params.items[ 0 ]; char sentencetext[ 512 ]; GetDlgItemText( hwndDlg, IDC_SENTENCETEXT, sentencetext, sizeof( sentencetext ) ); bool voiceduck = SendMessage( GetDlgItem( hwndDlg, IDC_VOICEDUCK ), BM_GETCHECK, 0, 0 ) == BST_CHECKED ? true : false; MultipleRequestChangeContext(); // Update ducking on wav files item->SetVoiceDuck( voiceduck ); item->SetSentenceText( sentencetext ); // Repopulate things GetWorkspaceManager()->RefreshBrowsers(); } char *Q_stristr_slash( char const *pStr, char const *pSearch ); //----------------------------------------------------------------------------- // Purpose: // Input : hwndDlg - //----------------------------------------------------------------------------- static void WaveProperties_ExportSentence() { int c = g_Params.items.Count(); if ( c <= 0 ) return; MultipleRequestChangeContext(); int i; for ( i = 0; i < c; i++ ) { CWaveFile *item = g_Params.items[ i ]; Assert( item ); char relative[ 512 ]; item->GetPhonemeExportFile( relative, sizeof( relative ) ); if ( filesystem->FileExists( relative ) ) { int retval = MultipleRequest( va( "Overwrite '%s'?", relative ) ); if ( retval != 0 ) continue; filesystem->RemoveFile( relative ); } item->ExportValveDataChunk( relative ); } } //----------------------------------------------------------------------------- // Purpose: // Input : hwndDlg - //----------------------------------------------------------------------------- static void WaveProperties_ImportSentence() { int c = g_Params.items.Count(); if ( c <= 0 ) return; int i; for ( i = 0; i < c; i++ ) { CWaveFile *item = g_Params.items[ i ]; Assert( item ); char relative[ 512 ]; item->GetPhonemeExportFile( relative, sizeof( relative ) ); if ( filesystem->FileExists( relative ) ) { item->ImportValveDataChunk( relative ); } } } //----------------------------------------------------------------------------- // Purpose: // Input : hwndDlg - // Output : static //----------------------------------------------------------------------------- static void WaveProperties_InitSentenceData( HWND hwndDlg ) { CWaveFile *item = g_Params.items[ 0 ]; SetDlgItemText( hwndDlg, IDC_WAVENAME, item->GetName() ); SetDlgItemText( hwndDlg, IDC_SENTENCETEXT, item->GetSentenceText() ); SendMessage( GetDlgItem( hwndDlg, IDC_VOICEDUCK ), BM_SETCHECK, ( WPARAM ) item->GetVoiceDuck() ? BST_CHECKED : BST_UNCHECKED, ( LPARAM )0 ); } //----------------------------------------------------------------------------- // Purpose: // Input : hwndDlg - // uMsg - // wParam - // lParam - // Output : static BOOL CALLBACK //----------------------------------------------------------------------------- static BOOL CALLBACK WavePropertiesDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch(uMsg) { case WM_INITDIALOG: { g_Params.PositionSelf( hwndDlg ); WaveProperties_InitSentenceData( hwndDlg ); SetWindowText( hwndDlg, g_Params.m_szDialogTitle ); SetFocus( GetDlgItem( hwndDlg, IDC_WAVENAME ) ); } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { WaveProperties_OnOK( hwndDlg ); EndDialog( hwndDlg, 1 ); } break; case IDCANCEL: EndDialog( hwndDlg, 0 ); break; case IDC_EXPORTSENTENCE: WaveProperties_ExportSentence(); break; case IDC_IMPORTSENTENCE: WaveProperties_ImportSentence(); WaveProperties_InitSentenceData( hwndDlg ); break; } return FALSE; } return FALSE; } //----------------------------------------------------------------------------- // Purpose: // Input : *view - // *actor - // Output : int //----------------------------------------------------------------------------- int WaveProperties( CWaveParams *params ) { g_Params = *params; int retval = DialogBox( (HINSTANCE)GetModuleHandle( 0 ), MAKEINTRESOURCE( IDD_WAVEPROPERTIES ), (HWND)GetWorkspaceManager()->getHandle(), (DLGPROC)WavePropertiesDialogProc ); *params = g_Params; return retval; }