// SelectDrvLetter.cpp : implementation file
//

#include "stdafx.h"
#include "ext2mgr.h"
#include "SelectDrvLetter.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSelectDrvLetter dialog


CSelectDrvLetter::CSelectDrvLetter(CWnd* pParent /*=NULL*/)
	: CDialog(CSelectDrvLetter::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSelectDrvLetter)
	m_DrvLetter = _T("");
	//}}AFX_DATA_INIT

	m_bMountMgr = TRUE;
	m_bRegistry = FALSE;
	m_bDosDev = FALSE;
}


void CSelectDrvLetter::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSelectDrvLetter)
	DDX_CBString(pDX, IDC_DRVLETTERS_LIST, m_DrvLetter);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSelectDrvLetter, CDialog)
	//{{AFX_MSG_MAP(CSelectDrvLetter)
	ON_BN_CLICKED(IDC_DOSDEV_MP, OnDosdevMount)
	ON_BN_CLICKED(IDC_PERMANENT_MP, OnMMgrMount)
	ON_BN_CLICKED(IDC_REGISTRY_MP, OnRegistryMount)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSelectDrvLetter message handlers

void CSelectDrvLetter::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(TRUE);

    if (m_DrvLetter.IsEmpty()) {
        AfxMessageBox("You must select a drive letter.", MB_OK|MB_ICONWARNING);
        return;
    }

	CComboBox   *cbDrvLetter = (CComboBox *)GetDlgItem(IDC_DRVLETTERS_LIST);
    if (cbDrvLetter) {
        int rc = cbDrvLetter->FindStringExact(-1, m_DrvLetter);
        if (rc == CB_ERR) {
            AfxMessageBox("Invalid driver letter: "+m_DrvLetter, MB_OK|MB_ICONWARNING);
            return;
        }
    }
	CDialog::OnOK();
}

void CSelectDrvLetter::OnCancel() 
{
	// TODO: Add extra cleanup here
	m_DrvLetter.Empty();
	CDialog::OnCancel();
}

BOOL CSelectDrvLetter::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here

	CComboBox   *cbDrvLetter = (CComboBox *)GetDlgItem(IDC_DRVLETTERS_LIST);
    if (cbDrvLetter) {
        int i;
        CHAR drvPath[]="A:\0";
        cbDrvLetter->ResetContent();
        for (i=2; i < 26; i++) {
            if (!drvLetters[i].bUsed) {
                drvPath[0] = drvLetters[i].Letter;
                cbDrvLetter->AddString(drvPath);
            }
        }
/*
        for (i=0; i < 10; i++) {
            if (!drvDigits[i].bUsed) {
                drvPath[0] = drvDigits[i].Letter;
                cbDrvLetter->AddString(drvPath);
            }
        }
*/
        cbDrvLetter->SetCurSel(0);
    }
    UpdateData(FALSE);

    SET_CHECK(IDC_DOSDEV_MP,    m_bDosDev);
    SET_WIN(IDC_PERMANENT_MP, FALSE);
    SET_CHECK(IDC_PERMANENT_MP, 0);
    SET_CHECK(IDC_REGISTRY_MP,  m_bRegistry);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSelectDrvLetter::OnDosdevMount() 
{
    if (!m_bDosDev) {
	    m_bDosDev = !m_bDosDev;
        if (m_bDosDev) {
            m_bMountMgr = FALSE;
            m_bRegistry = FALSE;
        }
    }

    SET_CHECK(IDC_DOSDEV_MP,    m_bDosDev);
    SET_CHECK(IDC_PERMANENT_MP, m_bMountMgr);
    SET_CHECK(IDC_REGISTRY_MP,  m_bRegistry);

    OnOK();
}

void CSelectDrvLetter::OnMMgrMount() 
{
    if (!m_bMountMgr) {
	    m_bMountMgr = !m_bMountMgr;
        if (m_bMountMgr) {
            m_bDosDev = FALSE;
            m_bRegistry = FALSE;
        }
    }

    SET_CHECK(IDC_DOSDEV_MP,    m_bDosDev);
    SET_CHECK(IDC_PERMANENT_MP, m_bMountMgr);
    SET_CHECK(IDC_REGISTRY_MP,  m_bRegistry);

    OnOK();
}

void CSelectDrvLetter::OnRegistryMount() 
{
    if (!m_bRegistry) {
	    m_bRegistry = !m_bRegistry;
        if (m_bRegistry) {
            m_bDosDev = FALSE;
            m_bMountMgr = FALSE;
        }
    }

    SET_CHECK(IDC_DOSDEV_MP,    m_bDosDev);
    SET_CHECK(IDC_PERMANENT_MP, m_bMountMgr);
    SET_CHECK(IDC_REGISTRY_MP,  m_bRegistry);

    OnOK();
}
