mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 06:36:54 +00:00
616 lines
16 KiB
C++
616 lines
16 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include <mxtk/mx.h>
|
||
|
#include <stdio.h>
|
||
|
#include "resource.h"
|
||
|
#include "SoundProperties.h"
|
||
|
#include "SoundEmitterSystem/isoundemittersystembase.h"
|
||
|
#include "soundentry.h"
|
||
|
#include "cmdlib.h"
|
||
|
#include "workspacemanager.h"
|
||
|
#include "wavebrowser.h"
|
||
|
#include "wavefile.h"
|
||
|
#include "waveproperties.h"
|
||
|
|
||
|
static CSoundParams g_Params;
|
||
|
|
||
|
static void PopulateChannelList( HWND wnd, CSoundParametersInternal *p )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_CHANNEL );
|
||
|
if ( !control )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_RESETCONTENT, 0, 0 );
|
||
|
if ( p )
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)p->ChannelToString() );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)"CHAN_VOICE" );
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_VOICE" );
|
||
|
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_AUTO" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_WEAPON" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_ITEM" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_BODY" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_STREAM" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"CHAN_STATIC" );
|
||
|
}
|
||
|
|
||
|
static void PopulateVolumeList( HWND wnd, CSoundParametersInternal *p )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_VOLUME );
|
||
|
if ( !control )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_RESETCONTENT, 0, 0 );
|
||
|
|
||
|
if ( p )
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)p->VolumeToString() );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)"VOL_NORM" );
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"VOL_NORM" );
|
||
|
}
|
||
|
|
||
|
static void PopulateSoundlevelList( HWND wnd, CSoundParametersInternal *p )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_SOUNDLEVEL );
|
||
|
if ( !control )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_RESETCONTENT, 0, 0 );
|
||
|
|
||
|
if ( p )
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)p->SoundLevelToString() );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)"SNDLVL_NORM" );
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_NORM" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_NONE" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_IDLE" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_TALKING" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_STATIC" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_GUNFIRE" );
|
||
|
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_25dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_30dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_35dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_40dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_45dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_50dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_55dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_60dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_65dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_70dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_75dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_80dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_85dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_90dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_95dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_100dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_105dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_120dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_130dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_140dB" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"SNDLVL_150dB" );
|
||
|
}
|
||
|
|
||
|
static void PopulatePitchList( HWND wnd, CSoundParametersInternal *p )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_PITCH );
|
||
|
if ( !control )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_RESETCONTENT, 0, 0 );
|
||
|
|
||
|
if ( p )
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)p->PitchToString() );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)"PITCH_NORM" );
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"PITCH_NORM" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"PITCH_LOW" );
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)"PITCH_HIGH" );
|
||
|
}
|
||
|
|
||
|
|
||
|
static void PopulateScriptList( HWND wnd, char const *curscript )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_SOUNDSCRIPT );
|
||
|
if ( !control )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SendMessage( control, CB_RESETCONTENT, 0, 0 );
|
||
|
|
||
|
if ( curscript )
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)curscript );
|
||
|
}
|
||
|
|
||
|
int c = g_pSoundEmitterSystem->GetNumSoundScripts();
|
||
|
for ( int i = 0; i < c; i++ )
|
||
|
{
|
||
|
// add text to combo box
|
||
|
SendMessage( control, CB_ADDSTRING, 0, (LPARAM)g_pSoundEmitterSystem->GetSoundScriptName( i ) );
|
||
|
|
||
|
if ( !curscript && i == 0 )
|
||
|
{
|
||
|
SendMessage( control, WM_SETTEXT , 0, (LPARAM)g_pSoundEmitterSystem->GetSoundScriptName( i ) );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static bool WaveLessFunc( const char *const& name1, const char *const& name2 )
|
||
|
{
|
||
|
if ( stricmp( name1, name2 ) < 0 )
|
||
|
return true;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : wnd -
|
||
|
// Output : static void
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static void PopulateWaveList( HWND wnd, CSoundParametersInternal *p )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_WAVELIST );
|
||
|
if ( !control )
|
||
|
return;
|
||
|
|
||
|
// Remove all
|
||
|
SendMessage( control, LB_RESETCONTENT, 0, 0 );
|
||
|
|
||
|
if ( !p )
|
||
|
return;
|
||
|
|
||
|
CUtlRBTree< char const *, int > m_SortedNames( 0, 0, WaveLessFunc );
|
||
|
|
||
|
int c = p->NumSoundNames();
|
||
|
for ( int i = 0; i < c; i++ )
|
||
|
{
|
||
|
char const *name = strdup( g_pSoundEmitterSystem->GetWaveName( p->GetSoundNames()[ i ].symbol ) );
|
||
|
|
||
|
m_SortedNames.Insert( name );
|
||
|
}
|
||
|
|
||
|
int j = m_SortedNames.FirstInorder();
|
||
|
while ( j != m_SortedNames.InvalidIndex() )
|
||
|
{
|
||
|
char const *name = m_SortedNames[ j ];
|
||
|
if ( name && name[ 0 ] )
|
||
|
{
|
||
|
SendMessage( control, LB_ADDSTRING, 0, (LPARAM)name );
|
||
|
}
|
||
|
|
||
|
delete name;
|
||
|
|
||
|
j = m_SortedNames.NextInorder( j );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void PopulateWaveList_Available( HWND wnd )
|
||
|
{
|
||
|
HWND control = GetDlgItem( wnd, IDC_WAVELIST_AVAILABLE );
|
||
|
if ( !control )
|
||
|
return;
|
||
|
|
||
|
CWaveBrowser *wb = GetWorkspaceManager()->GetWaveBrowser();
|
||
|
if ( !wb )
|
||
|
{
|
||
|
Assert( 0 );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
CUtlRBTree< char const *, int > m_SortedNames( 0, 0, WaveLessFunc );
|
||
|
|
||
|
int c = wb->GetSoundCount();;
|
||
|
for ( int i = 0; i < c; i++ )
|
||
|
{
|
||
|
CWaveFile *entry = wb->GetSound( i );
|
||
|
if ( !entry )
|
||
|
continue;
|
||
|
|
||
|
char const *name = entry->GetName();
|
||
|
m_SortedNames.Insert( name );
|
||
|
}
|
||
|
|
||
|
// Remove all
|
||
|
SendMessage( control, LB_RESETCONTENT, 0, 0 );
|
||
|
|
||
|
int j = m_SortedNames.FirstInorder();
|
||
|
while ( j != m_SortedNames.InvalidIndex() )
|
||
|
{
|
||
|
char const *name = m_SortedNames[ j ];
|
||
|
if ( name && name[ 0 ] )
|
||
|
{
|
||
|
SendMessage( control, LB_ADDSTRING, 0, (LPARAM)name );
|
||
|
}
|
||
|
|
||
|
j = m_SortedNames.NextInorder( j );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void SoundProperties_GetSelectedWaveList( HWND hwndDlg, HWND control, CUtlVector< int >& list )
|
||
|
{
|
||
|
if ( !control )
|
||
|
return;
|
||
|
|
||
|
int count = SendMessage( control, LB_GETSELCOUNT, 0, 0 );
|
||
|
if ( count == LB_ERR )
|
||
|
return;
|
||
|
|
||
|
int *s = new int[ count ];
|
||
|
|
||
|
SendMessage( control, LB_GETSELITEMS, count, (LPARAM)s );
|
||
|
|
||
|
for ( int i = 0 ;i < count; i++ )
|
||
|
{
|
||
|
list.AddToTail( s[ i ] );
|
||
|
}
|
||
|
|
||
|
delete[] s;
|
||
|
}
|
||
|
|
||
|
static const char *SoundProperties_GetSelectedWave( HWND hwndDlg, HWND control, int *item = NULL )
|
||
|
{
|
||
|
if ( item )
|
||
|
*item = -1;
|
||
|
|
||
|
if ( !control )
|
||
|
return NULL;
|
||
|
|
||
|
int selectedionindex = SendMessage( control, LB_GETCURSEL, 0, 0 );
|
||
|
if ( selectedionindex == LB_ERR )
|
||
|
return NULL;
|
||
|
|
||
|
static char itemtext[ 256 ];
|
||
|
SendMessage( control, LB_GETTEXT, selectedionindex, (LPARAM)itemtext );
|
||
|
|
||
|
if ( item )
|
||
|
{
|
||
|
*item = selectedionindex;
|
||
|
}
|
||
|
|
||
|
return itemtext;
|
||
|
}
|
||
|
|
||
|
static void SoundProperties_OnOK( HWND hwndDlg )
|
||
|
{
|
||
|
CSoundParametersInternal outparams;
|
||
|
|
||
|
// Gather info and make changes
|
||
|
CSoundEntry *item = g_Params.items[ 0 ];
|
||
|
|
||
|
int soundindex = -1;
|
||
|
char const *script = NULL;
|
||
|
|
||
|
char outsoundname[ 256 ];
|
||
|
char outscriptfile[ 256 ];
|
||
|
|
||
|
GetDlgItemText( hwndDlg, IDC_SOUNDNAME, outsoundname, sizeof( outsoundname ) );
|
||
|
GetDlgItemText( hwndDlg, IDC_SOUNDSCRIPT, outscriptfile, sizeof( outscriptfile ) );
|
||
|
|
||
|
if ( !g_Params.addsound )
|
||
|
{
|
||
|
soundindex = g_pSoundEmitterSystem->GetSoundIndex( item->GetName() );
|
||
|
script = g_pSoundEmitterSystem->GetSourceFileForSound( soundindex );
|
||
|
}
|
||
|
|
||
|
char sz[ 128 ];
|
||
|
GetDlgItemText( hwndDlg, IDC_CHANNEL, sz, sizeof( sz ) );
|
||
|
outparams.ChannelFromString( sz );
|
||
|
|
||
|
GetDlgItemText( hwndDlg, IDC_VOLUME, sz, sizeof( sz ) );
|
||
|
outparams.VolumeFromString( sz );
|
||
|
|
||
|
GetDlgItemText( hwndDlg, IDC_SOUNDLEVEL, sz, sizeof( sz ) );
|
||
|
outparams.SoundLevelFromString( sz );
|
||
|
|
||
|
GetDlgItemText( hwndDlg, IDC_PITCH, sz, sizeof( sz ) );
|
||
|
outparams.PitchFromString( sz );
|
||
|
|
||
|
bool owneronly = SendMessage( GetDlgItem( hwndDlg, IDC_OWNERONLY ), BM_GETCHECK, 0, 0 ) == BST_CHECKED ? true : false;
|
||
|
|
||
|
outparams.SetOnlyPlayToOwner( owneronly );
|
||
|
|
||
|
// Retrieve wave list
|
||
|
int c = SendMessage( GetDlgItem( hwndDlg, IDC_WAVELIST ), LB_GETCOUNT, 0, 0 );
|
||
|
|
||
|
for ( int i = 0; i < c; i++ )
|
||
|
{
|
||
|
char wavename[ 256 ];
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_WAVELIST ), LB_GETTEXT, i, (LPARAM)wavename );
|
||
|
|
||
|
CUtlSymbol sym = g_pSoundEmitterSystem->AddWaveName( wavename );
|
||
|
SoundFile sf;
|
||
|
sf.symbol = sym;
|
||
|
sf.gender = GENDER_NONE;
|
||
|
outparams.AddSoundName( sf );
|
||
|
}
|
||
|
|
||
|
if ( g_Params.addsound )
|
||
|
{
|
||
|
g_pSoundEmitterSystem->AddSound( outsoundname, outscriptfile, outparams );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Update sound stuff
|
||
|
g_pSoundEmitterSystem->MoveSound( item->GetName(), outscriptfile );
|
||
|
item->SetScriptFile( outscriptfile );
|
||
|
g_pSoundEmitterSystem->UpdateSoundParameters( item->GetName(), outparams );
|
||
|
// Rename if necessary
|
||
|
g_pSoundEmitterSystem->RenameSound( item->GetName(), outsoundname );
|
||
|
}
|
||
|
|
||
|
// Apply changes
|
||
|
item->SetName( outsoundname );
|
||
|
|
||
|
// Repopulate things
|
||
|
GetWorkspaceManager()->RefreshBrowsers();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : hwndDlg -
|
||
|
// uMsg -
|
||
|
// wParam -
|
||
|
// lParam -
|
||
|
// Output : static BOOL CALLBACK
|
||
|
//-----------------------------------------------------------------------------
|
||
|
static BOOL CALLBACK SoundPropertiesDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||
|
{
|
||
|
switch(uMsg)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
{
|
||
|
g_Params.PositionSelf( hwndDlg );
|
||
|
|
||
|
CSoundEntry *item = NULL;
|
||
|
|
||
|
CSoundParametersInternal *p = NULL;
|
||
|
char const *script = NULL;
|
||
|
|
||
|
if ( g_Params.addsound )
|
||
|
{
|
||
|
Assert( g_Params.items.Count() == 0 );
|
||
|
|
||
|
CSoundEntry *entry = new CSoundEntry( NULL, "Unnamed" );
|
||
|
g_Params.items.AddToTail( entry );
|
||
|
|
||
|
item = item = g_Params.items[ 0 ];
|
||
|
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_OWNERONLY ), BM_SETCHECK,
|
||
|
( WPARAM )BST_UNCHECKED,
|
||
|
( LPARAM )0 );
|
||
|
|
||
|
SetDlgItemText( hwndDlg, IDC_STATIC_SENTENCETEXT, "" );
|
||
|
SetDlgItemTextW( hwndDlg, IDC_STATIC_CLOSECAPTION, L"" );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
item = g_Params.items[ 0 ];
|
||
|
|
||
|
int soundindex = g_pSoundEmitterSystem->GetSoundIndex( item->GetName() );
|
||
|
|
||
|
script = g_pSoundEmitterSystem->GetSourceFileForSound( soundindex );
|
||
|
|
||
|
p = g_pSoundEmitterSystem->InternalGetParametersForSound( soundindex );
|
||
|
Assert( p );
|
||
|
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_OWNERONLY ), BM_SETCHECK,
|
||
|
( WPARAM ) p->OnlyPlayToOwner() ? BST_CHECKED : BST_UNCHECKED,
|
||
|
( LPARAM )0 );
|
||
|
|
||
|
SetDlgItemText( hwndDlg, IDC_STATIC_SENTENCETEXT, item->GetSentenceText( 0 ) );
|
||
|
wchar_t cctext[ 1024 ];
|
||
|
item->GetCCText( cctext, sizeof( cctext ) / sizeof( wchar_t ) );
|
||
|
|
||
|
SetDlgItemTextW( hwndDlg, IDC_STATIC_CLOSECAPTION, cctext );
|
||
|
}
|
||
|
|
||
|
PopulateChannelList( hwndDlg, p );
|
||
|
PopulateVolumeList( hwndDlg, p );
|
||
|
PopulateSoundlevelList( hwndDlg, p );
|
||
|
PopulatePitchList( hwndDlg, p );
|
||
|
|
||
|
PopulateWaveList( hwndDlg, p );
|
||
|
|
||
|
SetDlgItemText( hwndDlg, IDC_SOUNDNAME, item->GetName() );
|
||
|
|
||
|
PopulateScriptList( hwndDlg, script );
|
||
|
|
||
|
PopulateWaveList_Available( hwndDlg );
|
||
|
|
||
|
SetWindowText( hwndDlg, g_Params.m_szDialogTitle );
|
||
|
|
||
|
SetFocus( GetDlgItem( hwndDlg, IDC_SOUNDNAME ) );
|
||
|
}
|
||
|
return FALSE;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDOK:
|
||
|
{
|
||
|
SoundProperties_OnOK( hwndDlg );
|
||
|
|
||
|
EndDialog( hwndDlg, 1 );
|
||
|
}
|
||
|
break;
|
||
|
case IDCANCEL:
|
||
|
EndDialog( hwndDlg, 0 );
|
||
|
break;
|
||
|
case IDC_WAVELIST:
|
||
|
{
|
||
|
if ( HIWORD(wParam) == LBN_SELCHANGE )
|
||
|
{
|
||
|
// Find selected item in wave list...
|
||
|
char const *wave = SoundProperties_GetSelectedWave( hwndDlg, GetDlgItem( hwndDlg, IDC_WAVELIST ) );
|
||
|
if ( wave )
|
||
|
{
|
||
|
// Look it up
|
||
|
CWaveBrowser *wb = GetWorkspaceManager()->GetWaveBrowser();
|
||
|
if ( wb )
|
||
|
{
|
||
|
CWaveFile *wavefile = wb->FindEntry( wave, true );
|
||
|
if ( wavefile )
|
||
|
{
|
||
|
SetDlgItemText( hwndDlg, IDC_STATIC_SENTENCETEXT, wavefile->GetSentenceText() );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case IDC_WAVEPROPERTIES:
|
||
|
{
|
||
|
// Find selected item in wave list...
|
||
|
char const *wave = SoundProperties_GetSelectedWave( hwndDlg, GetDlgItem( hwndDlg, IDC_WAVELIST ) );
|
||
|
if ( wave )
|
||
|
{
|
||
|
// Look it up
|
||
|
CWaveBrowser *wb = GetWorkspaceManager()->GetWaveBrowser();
|
||
|
if ( wb )
|
||
|
{
|
||
|
CWaveFile *wavefile = wb->FindEntry( wave, true );
|
||
|
if ( wavefile )
|
||
|
{
|
||
|
CWaveParams wp;
|
||
|
memset( &wp, 0, sizeof( wp ) );
|
||
|
|
||
|
Q_snprintf( wp.m_szDialogTitle, sizeof( wp.m_szDialogTitle ), "Wave Properties" );
|
||
|
|
||
|
wp.items.AddToTail( wavefile );
|
||
|
|
||
|
WaveProperties( &wp );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case IDC_REMOVEWAVE:
|
||
|
{
|
||
|
CUtlVector<int> selected;
|
||
|
SoundProperties_GetSelectedWaveList( hwndDlg, GetDlgItem( hwndDlg, IDC_WAVELIST ), selected );
|
||
|
int count = selected.Count();
|
||
|
if ( count >= 1 )
|
||
|
{
|
||
|
int i;
|
||
|
for ( i = 0; i < count; i++ )
|
||
|
{
|
||
|
char wavename[ 256 ];
|
||
|
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_WAVELIST), LB_GETTEXT, selected[ i ], (LPARAM)wavename );
|
||
|
|
||
|
// Add it to global parameters, too
|
||
|
CWaveBrowser *wb = GetWorkspaceManager()->GetWaveBrowser();
|
||
|
if ( wb )
|
||
|
{
|
||
|
CWaveFile *wavefile = wb->FindEntry( wavename, true );
|
||
|
if ( wavefile )
|
||
|
{
|
||
|
CSoundEntry *item = g_Params.items[ 0 ];
|
||
|
item->RemoveWave( wavefile );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for ( i = count - 1; i >= 0; i-- )
|
||
|
{
|
||
|
// Remove them from list
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_WAVELIST), LB_DELETESTRING, selected[ i ], 0 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case IDC_ADDWAVE:
|
||
|
{
|
||
|
CUtlVector<int> selected;
|
||
|
SoundProperties_GetSelectedWaveList( hwndDlg, GetDlgItem( hwndDlg, IDC_WAVELIST_AVAILABLE ), selected );
|
||
|
int count = selected.Count();
|
||
|
if ( count >= 1 )
|
||
|
{
|
||
|
int i;
|
||
|
for ( i = 0; i < count; i++ )
|
||
|
{
|
||
|
char wavename[ 256 ];
|
||
|
|
||
|
// Get selection wave name
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_WAVELIST_AVAILABLE), LB_GETTEXT, selected[ i ], (LPARAM)wavename );
|
||
|
|
||
|
// Add it to global parameters, too
|
||
|
CWaveBrowser *wb = GetWorkspaceManager()->GetWaveBrowser();
|
||
|
if ( wb )
|
||
|
{
|
||
|
CWaveFile *wavefile = wb->FindEntry( wavename, true );
|
||
|
if ( wavefile )
|
||
|
{
|
||
|
CSoundEntry *item = g_Params.items[ 0 ];
|
||
|
if ( item->FindWave( wavefile ) == -1 )
|
||
|
{
|
||
|
item->AddWave( wavefile );
|
||
|
// Add it to list
|
||
|
SendMessage( GetDlgItem( hwndDlg, IDC_WAVELIST ), LB_ADDSTRING, 0, (LPARAM)wavename );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *view -
|
||
|
// *actor -
|
||
|
// Output : int
|
||
|
//-----------------------------------------------------------------------------
|
||
|
int SoundProperties( CSoundParams *params )
|
||
|
{
|
||
|
g_Params = *params;
|
||
|
|
||
|
int retval = DialogBox( (HINSTANCE)GetModuleHandle( 0 ),
|
||
|
MAKEINTRESOURCE( IDD_SOUNDPROPERTIES ),
|
||
|
(HWND)GetWorkspaceManager()->getHandle(),
|
||
|
(DLGPROC)SoundPropertiesDialogProc );
|
||
|
|
||
|
*params = g_Params;
|
||
|
|
||
|
return retval;
|
||
|
}
|