// TransposePage.cpp : Implementation of CTransposePage
#include "stdafx.h"
#include "ToolProps.h"
#include "TransposePage.h"


/////////////////////////////////////////////////////////////////////////////
// CTransposePage

CTransposePage::CTransposePage() 
{
	m_dwTitleID = IDS_TITLETransposePage;
	m_dwHelpFileID = IDS_HELPFILETransposePage;
	m_dwDocStringID = IDS_DOCSTRINGTransposePage;
    m_pTranspose = NULL;
}

CTransposePage::~CTransposePage()

{
    if (m_pTranspose)
    {
        m_pTranspose->Release();
    }
}

STDMETHODIMP CTransposePage::SetObjects(ULONG cObjects,IUnknown **ppUnk)

{
	if (cObjects < 1 || cObjects > 1)
	    return E_UNEXPECTED;
	return ppUnk[0]->QueryInterface(IID_IDirectMusicTransposeTool,(void **) &m_pTranspose);
}


STDMETHODIMP CTransposePage::Apply(void)

{
    m_pTranspose->SetTranspose((long) m_ctTranspose.GetValue());
    m_pTranspose->SetType(m_ctType.GetValue());
	m_bDirty = FALSE;
	return S_OK;
}

LRESULT CTransposePage::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

{
	if (m_pTranspose)
    {
        static char *pTypes[2] = { "Linear","In Scale"};
        m_ctTranspose.Init(GetDlgItem(IDC_TRANSPOSE),GetDlgItem(IDC_TRANSPOSE_DISPLAY),-24,24,true);
        m_ctType.Init(GetDlgItem(IDC_TYPE),IDC_TYPE,pTypes,2);

        DWORD dwType;
        m_pTranspose->GetType(&dwType);
        m_ctType.SetValue(dwType);
        long lTranspose;
        m_pTranspose->GetTranspose(&lTranspose);
        m_ctTranspose.SetValue((float)lTranspose);
    }
	return 1;
}

LRESULT CTransposePage::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

{
	LRESULT lr = m_ctTranspose.MessageHandler(uMsg, wParam,lParam, bHandled);
	if (!bHandled)
        lr = m_ctType.MessageHandler(uMsg, wParam, lParam, bHandled);
    if (bHandled)
        SetDirty(true);
	return lr;
}


LRESULT CTransposePage::OnSlider(UINT uMsg, WPARAM wParam,LPARAM lParam, BOOL& bHandled)

{
	LRESULT lr = m_ctTranspose.MessageHandler(uMsg, wParam,lParam, bHandled);
    if (bHandled)
        SetDirty(true);
	return lr;
}