#pragma once

#include "IPropertySheetPage.h"
#include "PropertySheetDefs.h"
class CPropertySheetHelper;

class CPageDisk : private IPropertySheetPage
{
public:
	CPageDisk(CPropertySheetHelper& PropertySheetHelper) :
		m_Page(PG_DISK),
		m_PropertySheetHelper(PropertySheetHelper)
	{
		CPageDisk::ms_this = this;
	}
	virtual ~CPageDisk(){}

	static INT_PTR CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam);

protected:
	// IPropertySheetPage
	virtual INT_PTR DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam);
	virtual void DlgOK(HWND hWnd);
	virtual void DlgCANCEL(HWND hWnd){}

private:
	void InitOptions(HWND hWnd);
	void InitComboFloppyDrive(HWND hWnd, UINT slot);
	void InitComboHDD(HWND hWnd, UINT slot);
	void EnableHDD(HWND hWnd, BOOL bEnable);
	void EnableFloppyDrive(HWND hWnd, BOOL bEnable, UINT slot);
	void HandleHDDCombo(HWND hWnd, UINT driveSelected, UINT comboSelected);
	void HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT comboSelected, UINT comboOther, UINT slot);
	void HandleHDDSwap(HWND hWnd);
	UINT RemovalConfirmation(UINT uCommand);

	static CPageDisk* ms_this;
	static const TCHAR m_defaultDiskOptions[];
	static const TCHAR m_defaultHDDOptions[];

	const PAGETYPE m_Page;
	CPropertySheetHelper& m_PropertySheetHelper;
};