diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/SoundBrowser.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/SoundBrowser.cpp')
| -rw-r--r-- | hammer/SoundBrowser.cpp | 378 |
1 files changed, 378 insertions, 0 deletions
diff --git a/hammer/SoundBrowser.cpp b/hammer/SoundBrowser.cpp new file mode 100644 index 0000000..baf97be --- /dev/null +++ b/hammer/SoundBrowser.cpp @@ -0,0 +1,378 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "stdafx.h" +#include "hammer.h" +#include "SoundBrowser.h" +#include "mmsystem.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include <tier0/memdbgon.h> + +static LPCTSTR s_pszSection = "SoundBrowser"; +CStringArray CSoundBrowser::m_FilterHistory; +int CSoundBrowser::m_nFilterHistory; + +///////////////////////////////////////////////////////////////////////////// +// CSoundBrowser dialog + + +CSoundBrowser::CSoundBrowser( const char *pCurrentSoundName, CWnd* pParent /*=NULL*/ ) + : CDialog(CSoundBrowser::IDD, pParent) +{ + //{{AFX_DATA_INIT(CSoundBrowser) + m_Autoplay = FALSE; + m_SoundFile = _T(""); + m_SoundSource = _T(""); + //}}AFX_DATA_INIT + + m_SoundNameSelected = pCurrentSoundName; + m_SoundType = AfxGetApp()->GetProfileInt(s_pszSection, "Sound Type", 0); + m_Autoplay = AfxGetApp()->GetProfileInt(s_pszSection, "Sound Autoplay", 0); + Q_strncpy(m_szFilter, (LPCSTR)(AfxGetApp()->GetProfileString(s_pszSection, "Sound Filter", "")), 256 ); + m_nSelectedSoundIndex = -1; + +// m_bSoundPlayed = false; +} + +void CSoundBrowser::SaveValues() +{ + AfxGetApp()->WriteProfileInt(s_pszSection, "Sound Type", m_SoundType); + AfxGetApp()->WriteProfileInt(s_pszSection, "Sound Autoplay", m_Autoplay); + AfxGetApp()->WriteProfileString(s_pszSection, "Sound Filter", m_szFilter); +} + +void CSoundBrowser::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CSoundBrowser) + DDX_Control(pDX, IDC_SOUND_LIST, m_SoundList); + DDX_Text(pDX, IDC_SOUNDNAME_SELECTED, m_SoundNameSelected); + DDX_CBIndex(pDX, IDC_SOUND_TYPE, m_SoundType); + DDX_Check(pDX, IDC_AUTOPLAY, m_Autoplay); + DDX_Text(pDX, IDC_SOUND_FILE, m_SoundFile); + DDX_Text(pDX, IDC_SOUND_SOURCE_FILE, m_SoundSource); + //}}AFX_DATA_MAP +} + + +BEGIN_MESSAGE_MAP(CSoundBrowser, CDialog) + //{{AFX_MSG_MAP(CSoundBrowser) + ON_WM_CLOSE() + ON_CBN_EDITCHANGE(IDC_SOUND_FILTER, OnChangeFilter) + ON_CBN_SELENDOK(IDC_SOUND_FILTER, OnUpdateFilterNOW) + ON_CBN_SELCHANGE(IDC_SOUND_TYPE, OnSelchangeSoundType) + ON_LBN_SELCHANGE(IDC_SOUND_LIST, OnSelchangeSoundList) + ON_LBN_DBLCLK(IDC_SOUND_LIST, OnDblclkSoundList) + ON_BN_CLICKED(IDC_PREVIEW, OnPreview) + ON_BN_CLICKED(IDC_AUTOPLAY, OnAutoplay) + ON_BN_CLICKED(IDC_STOPSOUND, OnBnClickedStopsound) + ON_BN_CLICKED(IDC_REFRESH_SOUNDS, OnRefreshSounds) + ON_WM_TIMER() + ON_BN_CLICKED(IDC_OPEN_SOURCE, OnOpenSource) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CSoundBrowser message handlers + +BOOL CSoundBrowser::OnInitDialog() +{ + CDialog::OnInitDialog(); + + m_cFilter.SubclassDlgItem(IDC_SOUND_FILTER, this); + for ( int i = 0; i < m_nFilterHistory; ++i ) + { + m_cFilter.AddString( m_FilterHistory[i] ); + } + + m_cFilter.SetWindowText(m_szFilter); + + CString temp = m_szFilter; + OnFilterChanged( temp ); + + // Select an entry in the list that has the same name as the one passed in + int nIndex = m_SoundList.FindString( -1, m_SoundNameSelected ); + if ( nIndex != LB_ERR) + { + m_SoundList.SetCurSel( nIndex ); + m_nSelectedSoundIndex = nIndex; + int nSoundIndex = m_SoundList.GetItemData(nIndex); + m_SoundFile = g_Sounds.SoundFile( GetSoundType(), nSoundIndex ); + m_SoundSource = g_Sounds.SoundSourceFile( GetSoundType(), nSoundIndex ); + UpdateData( FALSE ); + } + + SetTimer(1, 500, NULL); + + return TRUE; +} + +void CSoundBrowser::OnClose(void) +{ + Shutdown(); + CDialog::OnClose(); +} + + +//----------------------------------------------------------------------------- +// Shutdown +//----------------------------------------------------------------------------- +void CSoundBrowser::Shutdown() +{ + SaveValues(); + PlaySound( NULL, NULL, SND_FILENAME | SND_NODEFAULT); + + // save current filter string + int i; + for (i = 0; i < m_nFilterHistory; i++) + { + if (!m_FilterHistory[i].CompareNoCase(m_szFilter)) + break; + } + + if(i != m_nFilterHistory) // delete first + { + m_FilterHistory.RemoveAt(i); + --m_nFilterHistory; + } + + if ( m_szFilter[0] ) + { + m_FilterHistory.InsertAt(0, m_szFilter); + ++m_nFilterHistory; + } +} + + +//----------------------------------------------------------------------------- +// Clears, fills sound list +//----------------------------------------------------------------------------- +void CSoundBrowser::ClearSoundList() +{ + m_SoundList.ResetContent(); +} + +//----------------------------------------------------------------------------- +// Sound filter +//----------------------------------------------------------------------------- +bool CSoundBrowser::ShowSoundInList( const char *pSoundName ) +{ + for (int i = 0; i < m_nFilters; i++) + { + if ( Q_stristr(pSoundName, m_Filters[i]) == NULL ) + return false; + } + + return true; +} + +void CSoundBrowser::PopulateSoundList() +{ + m_SoundList.SetRedraw( FALSE ); + + ClearSoundList(); + + SoundType_t type = GetSoundType(); + for ( int i = g_Sounds.SoundCount( type ); --i >= 0; ) + { + const char *pSoundName = g_Sounds.SoundName( type, i ); + if ( ShowSoundInList( pSoundName ) ) + { + CString str; + str.Format( _T(pSoundName) ); + int nIndex = m_SoundList.AddString( str ); + m_SoundList.SetItemDataPtr( nIndex, (PVOID)i ); + } + } + + m_SoundList.SetRedraw( TRUE ); +} + + +//----------------------------------------------------------------------------- +// Sound type +//----------------------------------------------------------------------------- +SoundType_t CSoundBrowser::GetSoundType() const +{ + if ( m_SoundType == 0 ) + return SOUND_TYPE_GAMESOUND; + else if ( m_SoundType == 1 ) + return SOUND_TYPE_RAW; + else + return SOUND_TYPE_SCENE; +} + + + +//----------------------------------------------------------------------------- +// Sound name +//----------------------------------------------------------------------------- +void CSoundBrowser::CopySoundNameToSelected() +{ + UpdateData( TRUE ); + + int nIndex = m_SoundList.GetCurSel(); + if ( nIndex != LB_ERR ) + { + int nSoundIndex = m_SoundList.GetItemData(nIndex); + m_SoundNameSelected = g_Sounds.SoundName( GetSoundType(), nSoundIndex ); + m_SoundFile = g_Sounds.SoundFile( GetSoundType(), nSoundIndex ); + m_SoundSource = g_Sounds.SoundSourceFile( GetSoundType(), nSoundIndex ); + m_nSelectedSoundIndex = nSoundIndex; + UpdateData( FALSE ); + } +} + + +//----------------------------------------------------------------------------- +// Update the filter: +//----------------------------------------------------------------------------- +void CSoundBrowser::OnFilterChanged( const char *pFilter ) +{ + Q_strncpy( m_szFilter, pFilter, 256 ); + m_nFilters = 0; + char *p = strtok(m_szFilter, " ,;"); + while (p != NULL) + { + m_Filters[m_nFilters++] = p; + p = strtok(NULL, " ,;"); + } + PopulateSoundList(); +} + + +//----------------------------------------------------------------------------- +// Purpose: Timer used to control updates when the filter terms change. +// Input : nIDEvent - +//----------------------------------------------------------------------------- +void CSoundBrowser::OnTimer(UINT nIDEvent) +{ + if (!m_bFilterChanged) + return; + + if ((time(NULL) - m_uLastFilterChange) > 0) + { + KillTimer(nIDEvent); + m_bFilterChanged = FALSE; + + CString str; + m_cFilter.GetWindowText(str); + OnFilterChanged( str ); + + SetTimer(nIDEvent, 500, NULL); + } + + CDialog::OnTimer(nIDEvent); +} + +//----------------------------------------------------------------------------- +// Purpose: Called when either the filter combo or the keywords combo text changes. +//----------------------------------------------------------------------------- +void CSoundBrowser::OnChangeFilter() +{ + // Start a timer to repaint the texture window using the new filters. + m_uLastFilterChange = time(NULL); + m_bFilterChanged = true; +} + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CSoundBrowser::OnUpdateFilterNOW() +{ + m_uLastFilterChange = time(NULL); + m_bFilterChanged = FALSE; + + CString str; + int iSel = m_cFilter.GetCurSel(); + m_cFilter.GetLBText(iSel, str); + OnFilterChanged( str ); +} + + +//----------------------------------------------------------------------------- +// Sound type changed +//----------------------------------------------------------------------------- +void CSoundBrowser::OnSelchangeSoundType() +{ + UpdateData( TRUE ); + PopulateSoundList(); +} + + +//----------------------------------------------------------------------------- +// Selected sound +//----------------------------------------------------------------------------- +const char *CSoundBrowser::GetSelectedSound() +{ + return m_SoundNameSelected; +} + + +void CSoundBrowser::OnSelchangeSoundList() +{ + CopySoundNameToSelected(); + if ( m_Autoplay ) + { + OnPreview(); + } +} + +void CSoundBrowser::OnDblclkSoundList() +{ + CopySoundNameToSelected(); + OnOK(); +} + +void CSoundBrowser::OnPreview() +{ + if ( m_nSelectedSoundIndex >= 0 ) + { + g_Sounds.Play( GetSoundType(), m_nSelectedSoundIndex ); + } +} + +void CSoundBrowser::OnAutoplay() +{ + UpdateData( TRUE ); +} + +void CSoundBrowser::OnRefreshSounds() +{ + // Set the title to "refreshing sounds..." + CString oldTitle, newTitle; + newTitle.LoadString( IDS_REFRESHING_SOUNDS ); + GetWindowText( oldTitle ); + SetWindowText( newTitle ); + + g_Sounds.Initialize(); + PopulateSoundList(); + + // Restore the title. + SetWindowText( oldTitle ); +} + +int CSoundBrowser::DoModal() +{ + int nRet = CDialog::DoModal(); + Shutdown(); + return nRet; +} + +void CSoundBrowser::OnOpenSource() +{ + if ( m_nSelectedSoundIndex >= 0 ) + { + g_Sounds.OpenSource( GetSoundType(), m_nSelectedSoundIndex ); + } +} + +void CSoundBrowser::OnBnClickedStopsound() +{ + g_Sounds.StopSound(); +} |