//------------------------------------------------------------------------------
// File: Dialogs.h
//
// Desc: This file contains the header information for the various dialog
//       wrapper classes we use.
//
// Copyright (c) 1999-2001 Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------




//------------------------------------------------------------------------------
// Name: class CAboutDlg
// Desc: This class is a wrapper for the About Dialog
//------------------------------------------------------------------------------

class CAboutDlg  
{
public:
	static BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CAboutDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CAboutDlg();

private:
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CSPLangDlg
// Desc: This class is a wrapper for the Subpicture Language Selection Dialog
//------------------------------------------------------------------------------

class CSPLangDlg  
{
public:
	static BOOL CALLBACK SPDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CSPLangDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CSPLangDlg();

private:
	bool GetSPLang(ULONG ulStream, TCHAR * buffer, int iBufLen);
	int MakeSPStreamList(HWND hDlg, int iListID);

    ULONG m_ulSPStream; // the current SP stream
	BOOL m_bSPOn; // the state of the SP stream (on/off) - we use BOOL instead of bool because
                  // this is what GetCurrentSubpicture returns to us
	ULONG m_ulNumLang; // the number of streams available
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CAudioLangDlg
// Desc: This class is a wrapper for the Audio Language Selection Dialog
//------------------------------------------------------------------------------

class CAudioLangDlg  
{
public:
	static BOOL CALLBACK AudioDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CAudioLangDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CAudioLangDlg();

private:
	bool GetAudioLang(ULONG ulStream, TCHAR * buffer, int iBufLen);
	int MakeAudioStreamList(HWND hDlg, int iListID);

    ULONG m_ulAudioStream; // the current Audio stream
	ULONG m_ulNumLang; // the number of streams available
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CAngleDlg
// Desc: This class is a wrapper for the Angle Selection Dialog
//------------------------------------------------------------------------------

class CAngleDlg  
{
public:
	static BOOL CALLBACK AngleDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CAngleDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CAngleDlg();

private:
	int MakeAngleList(HWND hDlg, int iListID);

    ULONG m_ulAngle; // the current Angle
	ULONG m_ulNumAngle; // the number of angles available
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CChapterDlg
// Desc: This class is a wrapper for the Chapter Selection Dialog
//------------------------------------------------------------------------------

class CChapterDlg  
{
public:
    ULONG GetChapter() { return m_ulChapter; }
	static BOOL CALLBACK ChapterDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CChapterDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CChapterDlg();

private:
	ULONG m_ulChapter; // the chosen Chapter
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CTitleDlg
// Desc: This class is a wrapper for the Title Selection Dialog
//------------------------------------------------------------------------------

class CTitleDlg  
{
public:
    ULONG GetChapter() { return m_ulChapter; }
    ULONG GetTitle() { return m_ulTitle; }
	static BOOL CALLBACK TitleDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CTitleDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CTitleDlg();

private:
	ULONG m_ulChapter; // the chosen Chapter
    ULONG m_ulTitle; // the chosen Title
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CTimeDlg
// Desc: This class is a wrapper for the Time Selection Dialog
//------------------------------------------------------------------------------

class CTimeDlg  
{
public:
    DVD_HMSF_TIMECODE GetTime() { return m_Time; }
    void SetTime(DVD_HMSF_TIMECODE time) { m_Time = time; }
	static BOOL CALLBACK TimeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CTimeDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CTimeDlg();

private:
	DVD_HMSF_TIMECODE m_Time; // the chosen time
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};




//------------------------------------------------------------------------------
// Name: class CKaraokeDlg
// Desc: This class is a wrapper for the Karaoke Mixing Dialog
//------------------------------------------------------------------------------

class CKaraokeDlg  
{
public:
	static BOOL CALLBACK KaraokeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
	bool DoModal();
	CKaraokeDlg(HINSTANCE hInstance, HWND hWnd);
	virtual ~CKaraokeDlg();

private:
	const TCHAR * m_pszChannel2;
	const TCHAR * m_pszChannel3;
	const TCHAR * m_pszChannel4;
	HINSTANCE m_hInstance;
	HWND m_hWnd;
};





