summaryrefslogtreecommitdiff
path: root/hammer/SoundBrowser.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/SoundBrowser.cpp
downloadarchived-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.cpp378
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();
+}