📄 mixerset.cpp
字号:
// MixerSet.cpp: implementation of the CMixerSet class.
//
//////////////////////////////////////////////////////////////////////
#include "MixerSet.h"
#include "MixerKeyTable.h"
#include <sstream>
#include "MiXoException.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMixerSet::CMixerSet(bool bInternal) : m_lstTracks(),m_strName(""),m_ite(),
m_bInternal(bInternal)
{
}
CMixerSet::~CMixerSet()
{
}
void CMixerSet::InvalidateIterators()
{
m_ite=m_lstTracks.end();
}
void CMixerSet::Save(CMachineDataOutput * const pcOut)
{
pcOut->Write(m_strName.c_str());
pcOut->Write(int(m_lstTracks.size()));
for(int i=0;i<m_lstTracks.size();i++) {
m_lstTracks[i].Save(pcOut);
}
}
void CMixerSet::Init(CMachineDataInput * const pcIn,unsigned uDataVersion)
{
char c='0';
stringstream stmName;
while(c != 0x0) {
pcIn->Read(c);
stmName << c;
}
m_strName=stmName.str();
if(!m_lstTracks.empty())
m_lstTracks.clear();
int iNum;
pcIn->Read(iNum);
for(int i=0;i<iNum;i++) {
CMixerTrack cTrack;
cTrack.Init(pcIn,uDataVersion);
m_lstTracks.push_back(cTrack);
}
InvalidateIterators();
}
void CMixerSet::AddTrack(const char *szName,int iKeySetId,bool bStereo)
{
TLstTracks::iterator ite=GetTrackByName(szName);
if(ite != m_lstTracks.end())
{
if(ite->GetKeySetId() == -1)
ite->SetKeySetId(iKeySetId);
return;
}
/*
ite=GetTrackByKeySet(szKeyName);
if(ite != m_lstTracks.end())
return;
*/
CMixerTrack cTrack;
cTrack.SetName(szName);
cTrack.SetKeySetId(iKeySetId);
cTrack.SetStereo(bStereo);
m_lstTracks.push_back(cTrack);
InvalidateIterators();
}
void CMixerSet::DeleteTrack(const char *szName)
{
TLstTracks::iterator ite=GetTrackByName(szName);
if(ite != m_lstTracks.end()) {
m_lstTracks.erase(ite);
InvalidateIterators(); //adding this because I think it's necessary
}
}
void CMixerSet::RenameTrack(const char *szOld,const char *szNew)
{
TLstTracks::iterator nuite=GetTrackByName(szNew);
if(nuite != m_lstTracks.end()) {
throw CMiXoException(CMiXoException::me_DuplicateTrackName);
}
TLstTracks::iterator ite=GetTrackByName(szOld);
if(ite != m_lstTracks.end())
ite->SetName(szNew);
}
void CMixerSet::SetTrackInputChannels(const char*sz,bool b)
{
TLstTracks::iterator ite=GetTrackByName(sz);
if(ite != m_lstTracks.end())
ite->SetStereo(b);
}
CMixerSet::TLstTracks::iterator CMixerSet::GetTrackByName(const char *sz) const
{
if(m_lstTracks.empty())
return m_lstTracks.end();
for(TLstTracks::iterator ite=m_lstTracks.begin();ite<m_lstTracks.end();ite++)
{
const char *str=ite->GetName().c_str();
if(strcmp(str,sz) == 0) {
break;
//return ite;
}
}
return ite;
// return m_lstTracks.end();
}
CMixerSet::TLstTracks::iterator CMixerSet::GetTrackByKeySet(int i) const
{
for(TLstTracks::iterator ite=m_lstTracks.begin();ite<m_lstTracks.end();ite++)
{
if(ite->GetKeySetId() == i) {
return ite;
}
}
return m_lstTracks.end();
}
int CMixerSet::FindUnusedKeyDef(const CMixerKeyTable *pcKeyTable) const
{
for(int i=0;i<pcKeyTable->GetSize();i++) {
// const char *szKey=pcKeyTable->GetNameOf(i).c_str();
// int iKeyId=
TLstTracks::iterator ite=GetTrackByKeySet(i);
if(ite == m_lstTracks.end()) {
return i;
}
}
return -1;
}
CMixerTrack *CMixerSet::FindNextTrackByKeySet(int i)
{
while(m_ite != m_lstTracks.end())
{
if(m_ite->GetKeySetId() == i)
return &(*m_ite++);
m_ite++;
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -