void CACTController::UpdateToolbarText()
{
	CString strText;

	switch (m_eStripType)
	{
		case MIX_STRIP_TRACK:		strText = "Trks";	break;
		case MIX_STRIP_AUX:			strText = "Auxs";	break;
		case MIX_STRIP_BUS:			strText = "Bus";	break;
		case MIX_STRIP_MAIN:		strText = "VMns";	break;
		case MIX_STRIP_MASTER:		strText = "Mstr";	break;
		default:					strText = "Err";	break;
	}

	CString strBuf;
	strBuf.Format(" %u-%u", GetStripNum() + 1, GetStripNum() + NUM_SLIDERS);
	strText += strBuf;

	strBuf.Format(", Sel %u", GetSelectedTrack() + 1);
	strText += strBuf;

	strBuf.Format(", ACT %s", m_bUseDynamicMappings ? m_strOn : m_strOff);
	strText += strBuf;

	strBuf.Format(" %d%d%d", m_iRotaryBank + 1, m_iSliderBank + 1, m_iButtonBank + 1);
	strText += strBuf;

	if (m_strToolbarText != strText)
	{
		m_strToolbarText = strText;

		if (m_pProject)
			m_pProject->OnNewStatus(0);
	}
}
HRESULT CControlSurfaceProbe::GetStripRange( DWORD dwIndex, DWORD* pdwLowStrip, DWORD* pdwHighStrip, SONAR_MIXER_STRIP* pmixerStrip )
{
	if ( dwIndex != 0 )
		return E_INVALIDARG;
	if ( !pdwLowStrip || !pdwHighStrip || !pmixerStrip )
		return E_POINTER;

	*pdwLowStrip = *pdwHighStrip = GetStripNum();
	*pmixerStrip = GetMixerStrip();

	return S_OK;
}
HRESULT CControlSurfaceProbe::SetStripRange( DWORD dwLowStrip, SONAR_MIXER_STRIP mixerStrip )
{
	SONAR_MIXER_STRIP mixerStripCur = GetMixerStrip();
	DWORD dwCurrentStrip = GetStripNum();

	if ( mixerStrip == mixerStripCur && dwLowStrip == dwCurrentStrip )
		return S_FALSE;	// no change

	SetStripNum( dwLowStrip );
	SetMixerStrip( mixerStrip );

	// notify the host
	m_pSonarParamMapping->OnContextSwitch( m_dwSurfaceID );

	return S_OK;
}
void CACTController::UpdateBindings()
{
	TRACE("CACTController::UpdateBindings()\n");

	int m, n, id;

	BuildDynControlsList();

	id = 0;
	for (m = 0; m < NUM_BANKS; m++)
	{
		if (GetRotariesACTMode(m))
		{
			for (n = 0; n < NUM_KNOBS; n++)
				BindToACT(&m_SwKnob[m][n], MASK_KNOB(id++));
		}
		else
		{
			if (m_eRotariesMode == MCS_ASSIGNMENT_MUTLI_CHANNEL)
			{
				DWORD dwNumStrips = GetStripCount(m_eStripType);

				for (n = 0; n < NUM_KNOBS; n++)
				{
					DWORD dwStripNum = GetStripNum() + n;

					if (dwStripNum < dwNumStrips)
						BindParamToBinding(&m_SwKnob[m][n], m_eStripType, dwStripNum, m_dwKnobsBinding[m_iRotaryBank]);
					else
						m_SwKnob[m][n].ClearBinding();
				}
			}
			else
			{
				for (n = 0; n < NUM_KNOBS; n++)
					BindNthParam(&m_SwKnob[m][n], m_eStripType, GetSelectedTrack(), n);
			}
		}
	}

	id = 0;
	for (m = 0; m < NUM_BANKS; m++)
	{
		if (GetSlidersACTMode(m))
		{
			for (n = 0; n < NUM_SLIDERS; n++)
				BindToACT(&m_SwSlider[m][n], MASK_SLIDER(id++));
		}
		else
		{
			DWORD dwNumStrips = GetStripCount(m_eStripType);

			for (n = 0; n < NUM_SLIDERS; n++)
			{
				DWORD dwStripNum = GetStripNum() + n;

				if (dwStripNum < dwNumStrips)
					BindParamToBinding(&m_SwSlider[m][n], m_eStripType, dwStripNum, m_dwSlidersBinding[m_iSliderBank]);
				else
					m_SwSlider[m][n].ClearBinding();
			}
		}
	}

	id = 0;
	for (m = 0; m < NUM_BANKS; m++)
	{
		for (n = 0; n < NUM_VIRTUAL_BUTTONS; n++)
		{
			if (GetButtonACTMode(m, (VirtualButton)n))
				BindToACT(&m_SwButton[m][n], MASK_BUTTON(id++));
			else
				m_SwButton[m][n].ClearBinding();
		}
	}

	m_dwUpdateCount++;

	OnContextSwitch();
}