359 lines
9.8 KiB
C++
359 lines
9.8 KiB
C++
// VoicesPage.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "supervis.h"
|
|
#include "VoicesPage.h"
|
|
|
|
//ACP Virtual Voice
|
|
#include "sndvirt.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVoicesPage property page
|
|
|
|
IMPLEMENT_DYNCREATE(CVoicesPage, CPropertyPage)
|
|
|
|
CVoicesPage::CVoicesPage() : CPropertyPage(CVoicesPage::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CVoicesPage)
|
|
m_iMaxVoices = 0;
|
|
m_iUsedVoices = 0;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CVoicesPage::~CVoicesPage()
|
|
{
|
|
}
|
|
|
|
void CVoicesPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CVoicesPage)
|
|
DDX_Control(pDX, IDC_VOICES_COMBO, m_VoicesCombo);
|
|
DDX_Control(pDX, IDC_VOICES_LIST, m_VoicesListCtrl);
|
|
DDX_Text(pDX, IDC_MAX_VOICES, m_iMaxVoices);
|
|
DDX_Text(pDX, IDC_USED_VOICES, m_iUsedVoices);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CVoicesPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CVoicesPage)
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVoicesPage message handlers
|
|
|
|
BOOL CVoicesPage::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
CSupervisApp* pSuperVisApp = (CSupervisApp*)AfxGetApp();
|
|
|
|
//Initialise the ClistCtrl containing virtual voices descriptions
|
|
LV_COLUMN* lvc;
|
|
|
|
lvc = (LV_COLUMN*)malloc(sizeof(LV_COLUMN));
|
|
|
|
lvc->mask = LVCF_FMT |LVCF_SUBITEM
|
|
| LVCF_TEXT | LVCF_WIDTH; // members contain valid information
|
|
lvc->fmt = LVCFMT_LEFT; // Alignment of the column
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColVoiceId; // width of the column, in pixels
|
|
lvc->pszText = "Voices Id"; // column heading
|
|
lvc->iSubItem = 0; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(0, lvc);
|
|
|
|
|
|
lvc->pszText = "Paused?"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColPaused; // width of the column, in pixels
|
|
lvc->iSubItem = 1; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(1, lvc);
|
|
|
|
|
|
lvc->pszText = "Res Ptr"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColResPtr; // width of the column, in pixels
|
|
lvc->iSubItem = 2; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(2, lvc);
|
|
|
|
|
|
lvc->pszText = "Res Id"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColResId; // width of the column, in pixels
|
|
lvc->iSubItem = 3; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(3, lvc);
|
|
|
|
|
|
lvc->pszText = "Loop"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColLoop; // width of the column, in pixels
|
|
lvc->iSubItem = 4; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(4, lvc);
|
|
|
|
|
|
lvc->pszText = "Norm"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColNorm; // width of the column, in pixels
|
|
lvc->iSubItem = 5; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(5, lvc);
|
|
|
|
|
|
lvc->pszText = "Instance"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColInstance; // width of the column, in pixels
|
|
lvc->iSubItem = 6; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(6, lvc);
|
|
|
|
|
|
lvc->pszText = "Audible Voice"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColAudibleV; // width of the column, in pixels
|
|
lvc->iSubItem = 7; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(7, lvc);
|
|
|
|
lvc->pszText = "Hard Voice"; // column heading
|
|
lvc->cx = pSuperVisApp->m_RegKeyVoicePage.iColHardV; // width of the column, in pixels
|
|
lvc->iSubItem = 8; // index of subitem associated with column
|
|
m_VoicesListCtrl.InsertColumn(8, lvc);
|
|
|
|
free( lvc );
|
|
|
|
//init module ComboBox so GetCurSel() wont return a CB_ERR
|
|
m_VoicesCombo.SetCurSel(0);
|
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CVoicesPage::RefreshVoiceList()
|
|
{
|
|
|
|
int i;
|
|
|
|
CSupervisApp* pSuperVisApp = (CSupervisApp*)AfxGetApp();
|
|
|
|
|
|
//Get the module currently selected...
|
|
int iSelectedModule = m_VoicesCombo.GetCurSel();
|
|
|
|
//Clear the list
|
|
m_VoicesListCtrl.DeleteAllItems();
|
|
|
|
//Clear the comboBox
|
|
m_VoicesCombo.ResetContent();
|
|
|
|
|
|
//If there is nothing in the array we leave
|
|
int iNbModule = pSuperVisApp->m_apVirtualVoiceModule.GetSize();
|
|
if (iNbModule == 0)
|
|
return;
|
|
|
|
|
|
VirtualVoiceModule *pModule;
|
|
|
|
//Add module desciption in the ComboBox
|
|
for (i = 0; i < iNbModule; i++ )
|
|
{
|
|
pModule = (VirtualVoiceModule *)pSuperVisApp->m_apVirtualVoiceModule.GetAt(i);
|
|
m_VoicesCombo.AddString(pModule->cDescription);
|
|
}
|
|
|
|
|
|
//Set to the module currently
|
|
//No item is selected
|
|
if (iSelectedModule == CB_ERR)
|
|
iSelectedModule = 0;
|
|
|
|
//Set the combobox to the selected module
|
|
m_VoicesCombo.SetCurSel(iSelectedModule);
|
|
|
|
pModule = (VirtualVoiceModule *)pSuperVisApp->m_apVirtualVoiceModule.GetAt(iSelectedModule);
|
|
|
|
|
|
//Clean the virtual voices array
|
|
int iArraySize = pModule->apVirtualVoicesArray.GetSize();
|
|
VirtualVoice *pVoice;
|
|
for (i = 0; i < iArraySize; i ++ )
|
|
{
|
|
//Retrieve the current Voice
|
|
pVoice = (VirtualVoice *)(pModule->apVirtualVoicesArray.GetAt(i));
|
|
|
|
//Is the voice still active
|
|
if(!pVoice->bStillActive){
|
|
|
|
//Erase
|
|
pModule->apVirtualVoicesArray.RemoveAt(i);
|
|
delete pVoice;
|
|
i --;
|
|
iArraySize--;
|
|
}
|
|
}
|
|
|
|
//Cycle through the Current Virtual voices module.
|
|
iArraySize = pModule->apVirtualVoicesArray.GetSize();
|
|
for (i = 0; i < iArraySize; i ++ )
|
|
{
|
|
//We have to pass the index to the current module
|
|
AddVoiceToList(i, iSelectedModule);
|
|
|
|
}
|
|
|
|
|
|
//We display here the number of voices
|
|
SND_tdhVirtualModule pVirtualModule = (SND_tdhVirtualModule)pModule->lIdModule;
|
|
// m_iUsedVoices = SNDLST2_M_DynamicGetNumberOfElements(&pVirtualModule->virtual_voices.pList);
|
|
m_iUsedVoices = pModule->apVirtualVoicesArray.GetSize();
|
|
m_iMaxVoices = pVirtualModule->g_lNbSxdAudible;
|
|
|
|
UpdateData(FALSE);
|
|
|
|
|
|
|
|
}
|
|
|
|
void CVoicesPage::AddVoiceToList(long lVoiceIndex, long lModuleIndex)
|
|
{
|
|
|
|
CSupervisApp* pSuperVisApp = (CSupervisApp*)AfxGetApp();
|
|
|
|
//Retrieve the current module
|
|
VirtualVoiceModule *pModule;
|
|
pModule = (VirtualVoiceModule *)pSuperVisApp->m_apVirtualVoiceModule.GetAt(lModuleIndex);
|
|
|
|
|
|
//Retrieve the current Voice
|
|
VirtualVoice *pVoice;
|
|
pVoice = (VirtualVoice *)(pModule->apVirtualVoicesArray.GetAt(lVoiceIndex));
|
|
|
|
|
|
|
|
//Retrieve data from the control
|
|
PostMessage(WM_USER_UPDATE_DATA_TRUE, 0, 0);
|
|
|
|
char buffer[128];
|
|
|
|
|
|
|
|
//Display item, Voice Id
|
|
sprintf(buffer,"0x%08x", pVoice->lId);
|
|
m_VoicesListCtrl.InsertItem( 0, buffer );
|
|
|
|
|
|
//Set the item data with the Micro Array index, to be used later for drag&drop, pop-memnu, etc.
|
|
m_VoicesListCtrl.SetItemData( 0, (DWORD)lVoiceIndex );
|
|
|
|
//Paused?
|
|
if(pVoice->bPaused)
|
|
sprintf(buffer, "Yes");
|
|
else
|
|
sprintf(buffer, "No");
|
|
m_VoicesListCtrl.SetItem(0, 1, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
|
|
//Resource pointer
|
|
sprintf(buffer,"0x%08x", pVoice->lResRef);
|
|
m_VoicesListCtrl.SetItem(0, 2, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
//Resource ID
|
|
sprintf(buffer,"0x%08x", pVoice->lResId);
|
|
m_VoicesListCtrl.SetItem(0, 3, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
//loop?
|
|
if(pVoice->bLoop)
|
|
sprintf(buffer, "Yes");
|
|
else
|
|
sprintf(buffer, "No");
|
|
m_VoicesListCtrl.SetItem(0, 4, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
//Norm
|
|
sprintf(buffer, "%6.3f", pVoice->dNorme);
|
|
m_VoicesListCtrl.SetItem(0, 5, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
//Instance
|
|
sprintf(buffer, "%d", pVoice->lInstance);
|
|
m_VoicesListCtrl.SetItem(0, 6, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
|
|
if (pVoice->lAudible)
|
|
{
|
|
//Audible voice
|
|
sprintf(buffer, "0x%08x", pVoice->lAudible);
|
|
m_VoicesListCtrl.SetItem(0, 7, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
|
|
//Hard voice
|
|
sprintf(buffer, "0x%08x", pVoice->lVoice);
|
|
m_VoicesListCtrl.SetItem(0, 8, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
//Audible voice
|
|
sprintf(buffer, "");
|
|
m_VoicesListCtrl.SetItem(0, 7, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
|
|
//Hard voice
|
|
sprintf(buffer, "");
|
|
m_VoicesListCtrl.SetItem(0, 8, LVIF_TEXT, buffer, 0, 0, 0, NULL );
|
|
|
|
}
|
|
|
|
//Refresh data from the control
|
|
// PostMessage(WM_USER_UPDATE_DATA_FALSE, 0, 0);
|
|
|
|
}
|
|
|
|
BOOL CVoicesPage::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
if(pMsg->message == WM_USER_UPDATE_DATA_TRUE)
|
|
{
|
|
//We send the updatedata(TRUE) here
|
|
//We cannot pass the CWnd across thread and this cause problem while using updatedata
|
|
UpdateData(TRUE);
|
|
}
|
|
|
|
if(pMsg->message == WM_USER_UPDATE_DATA_FALSE)
|
|
{
|
|
//We send the updatedata(TRUE) here
|
|
//We cannot pass the CWnd across thread and this cause problem while using updatedata
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
return CPropertyPage::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
void CVoicesPage::OnDestroy()
|
|
{
|
|
CPropertyPage::OnDestroy();
|
|
|
|
|
|
CSupervisApp* pSuperVisApp = (CSupervisApp*)AfxGetApp();
|
|
|
|
int ColWidth = m_VoicesListCtrl.GetColumnWidth(0);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColVoiceId = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(1);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColPaused = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(2);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColResPtr = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(3);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColResId = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(4);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColLoop= ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(5);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColNorm = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(6);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColInstance = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(7);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColAudibleV = ColWidth;
|
|
ColWidth = m_VoicesListCtrl.GetColumnWidth(8);
|
|
pSuperVisApp->m_RegKeyVoicePage.iColHardV = ColWidth;
|
|
}
|