home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************\
- Copyright (C) James Boer, 2002.
- All rights reserved worldwide.
-
- This software is provided "as is" without express or implied
- warranties. You may freely copy and compile this source into
- applications you distribute provided that the copyright text
- below is included in the resulting source code, for example:
- "Portions Copyright (C) James Boer, 2002"
- \***********************************************************/
-
- #include "stdafx.h"
- #include "AudioTest.h"
- #include "Segment.h"
- #include "SegmentOpen.h"
- #include "Audio.h"
-
- #include "AudioTestDlg.h"
- #include "System.h"
- #include "Sound2D.h"
- #include "Sound3D.h"
-
- using namespace Audio;
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- #define GET_CURRENT_SEGMENT() \
- int iIndex = m_Segments.GetCurSel();\
- if(iIndex == LB_ERR) return;\
- ISegment* pSegment = static_cast<ISegment*>(m_Segments.GetItemDataPtr(iIndex));\
- if(!pSegment) return;
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CMusic property page
-
- IMPLEMENT_DYNCREATE(CSegment, CPropertyPage)
-
- CSegment::CSegment() : CPropertyPage(CSegment::IDD)
- {
- //{{AFX_DATA_INIT(CMusic)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- m_bInit = false;
- }
-
- CSegment::~CSegment()
- {
- }
-
- void CSegment::DoDataExchange(CDataExchange* pDX)
- {
- CPropertyPage::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CSegment)
- DDX_Control(pDX, IDC_STOP_SEGMENT, m_Stop);
- DDX_Control(pDX, IDC_PAUSE_SEGMENT, m_Pause);
- DDX_Control(pDX, IDC_PLAY_SEGMENT, m_Play);
- DDX_Control(pDX, IDC_LIST_SEGMENTS, m_Segments);
- //}}AFX_DATA_MAP
- }
-
-
- BEGIN_MESSAGE_MAP(CSegment, CPropertyPage)
- //{{AFX_MSG_MAP(CSegment)
- ON_WM_DESTROY()
- ON_BN_CLICKED(IDC_SEG_INITIALIZE, OnSegInitialize)
- ON_BN_CLICKED(IDC_SEG_DELETE, OnSegDelete)
- ON_BN_CLICKED(IDC_LOAD_SEGMENT, OnLoadSegment)
- ON_BN_CLICKED(IDC_UNLOAD_SEGMENT, OnUnloadSegment)
- ON_BN_CLICKED(IDC_PLAY_SEGMENT, OnPlaySegment)
- ON_BN_CLICKED(IDC_PAUSE_SEGMENT, OnPauseSegment)
- ON_BN_CLICKED(IDC_STOP_SEGMENT, OnStopSegment)
- ON_WM_HSCROLL()
- ON_LBN_SELCHANGE(IDC_LIST_SEGMENTS, OnSelChangeListSegments)
- ON_LBN_DBLCLK(IDC_LIST_SEGMENTS, OnDblclkListSegments)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- /////////////////////////////////////////////////////////////////////////////
- // CMusic message handlers
-
- BOOL CSegment::OnInitDialog()
- {
- CPropertyPage::OnInitDialog();
-
- // Load the play button icons
- m_hPlayIcon = LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_PLAY));
- m_hPauseIcon = LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_PAUSE));
- m_hStopIcon = LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_STOP));
-
- // Set the master play control buttons
- m_Play.SetIcon(m_hPlayIcon);
- m_Pause.SetIcon(m_hPauseIcon);
- m_Stop.SetIcon(m_hStopIcon);
-
- m_bInit = true;
-
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
-
- void CSegment::ClearList()
- {
- if(m_bInit)
- {
- ISegment* pSegment;
- int iSize = m_Segments.GetCount();
- for(int i = 0; i < iSize; i++)
- {
- pSegment = static_cast<ISegment*>(m_Segments.GetItemDataPtr(0));
- pSegment->Destroy();
- m_Segments.DeleteString(0);
- }
- m_Segments.ResetContent();
- }
- }
-
- void CSegment::OnDestroy()
- {
- CPropertyPage::OnDestroy();
- ClearList();
- }
-
- void CSegment::OnSegInitialize()
- {
- CSegmentOpen dlg(TRUE);
- if(dlg.DoModal() != IDOK)
- return;
-
- char drive[_MAX_DRIVE];
- char dir[_MAX_DIR];
- char fname[_MAX_FNAME];
- char ext[_MAX_EXT];
-
- POSITION pos = dlg.GetStartPosition();
- CString sPathName;
- while(pos)
- {
- sPathName = dlg.GetNextPathName(pos);
- _splitpath(sPathName, drive, dir, fname, ext);
- SegmentInit init;
-
- init.m_bLooping = dlg.m_bLooping;
- init.m_bMusic = !dlg.m_bSoundFX;
- init.m_sFileName = sPathName;
-
- ISegment* pSegment;
- if(!AudioMgr()->CreateSegment(pSegment))
- return;
- if(!pSegment->Init(init))
- {
- AfxMessageBox("Error initializing segment file");
- return;
- }
- int iIndex = m_Segments.AddString(CString(fname) + CString(ext));
- if(iIndex != LB_ERR)
- m_Segments.SetItemDataPtr(iIndex, pSegment);
- }
- }
-
- void CSegment::OnSegDelete()
- {
- GET_CURRENT_SEGMENT();
- pSegment->Destroy();
- int iSize = m_Segments.DeleteString(iIndex);
- if(!iSize)
- return;
- if(iIndex > (iSize - 1))
- iIndex = iSize - 1;
- m_Segments.SetCurSel(iIndex);
- }
-
- void CSegment::OnLoadSegment()
- {
- GET_CURRENT_SEGMENT();
- pSegment->Load();
- m_pTestDlg->m_pSystem->UpdateStats();
- UpdateControls();
- }
-
- void CSegment::OnUnloadSegment()
- {
- GET_CURRENT_SEGMENT();
- pSegment->Unload();
- m_pTestDlg->m_pSystem->UpdateStats();
- UpdateControls();
- }
-
- void CSegment::OnPlaySegment()
- {
- GET_CURRENT_SEGMENT();
- pSegment->Play();
- m_pTestDlg->m_pSystem->UpdateStats();
- UpdateControls();
- }
-
- void CSegment::OnPauseSegment()
- {
- GET_CURRENT_SEGMENT();
- pSegment->Pause();
- m_pTestDlg->m_pSystem->UpdateStats();
- UpdateControls();
- }
-
- void CSegment::OnStopSegment()
- {
- GET_CURRENT_SEGMENT();
- pSegment->Stop();
- m_pTestDlg->m_pSystem->UpdateStats();
- UpdateControls();
- }
-
- void CSegment::UpdateControls()
- {
- GET_CURRENT_SEGMENT();
- }
-
- void CSegment::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
- {
-
- if(pScrollBar->IsKindOf(RUNTIME_CLASS(CSliderCtrl)))
- {
- CSliderCtrl* pSlider = reinterpret_cast<CSliderCtrl*>(pScrollBar);
- if(!pSlider)
- return;
- GET_CURRENT_SEGMENT();
- }
- CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
- }
-
-
- void CSegment::OnSelChangeListSegments()
- {
- UpdateControls();
- }
-
- void CSegment::OnDblclkListSegments()
- {
- OnPlaySegment();
- }
-
-