#include <commctrl.h>

#include "TabControl.h"

namespace W32Util
{
	// __________________________________________________________________________________________________
	// constructor
	//
	TabControl::TabControl(HINSTANCE _hInstance, HWND _hTabCtrl,DLGPROC _lpDialogFunc) :
		m_hInstance(_hInstance),
		m_hTabCtrl(_hTabCtrl),
		m_numDialogs(0)
	{
		for (int i=0; i<MAX_WIN_DIALOGS; i++)
			m_WinDialogs[i] = NULL;
	}

	// __________________________________________________________________________________________________
	// destructor
	//
	TabControl::~TabControl(void)
	{}

	// __________________________________________________________________________________________________
	// AddItem
	//
	HWND TabControl::AddItem (char* _szText,int _iResource,DLGPROC _lpDialogFunc)
	{
		TCITEM tcItem;

		ZeroMemory (&tcItem,sizeof (tcItem));

		tcItem.mask			= TCIF_TEXT | TCIF_IMAGE;
		tcItem.dwState		= 0;
		tcItem.pszText		= _szText;
		tcItem.cchTextMax	= sizeof (_szText);
		tcItem.iImage		= -1;

		int nResult = TabCtrl_InsertItem (m_hTabCtrl,TabCtrl_GetItemCount (m_hTabCtrl),&tcItem);


		HWND hDialog = CreateDialog(m_hInstance,(LPCSTR)_iResource,m_hTabCtrl,_lpDialogFunc);
		RECT rectInnerWindow = {0,0,0,0};

		GetWindowRect (m_hTabCtrl,&rectInnerWindow);

		TabCtrl_AdjustRect (m_hTabCtrl,FALSE,&rectInnerWindow);

		POINT pntPosition = {rectInnerWindow.left,rectInnerWindow.top};
		ScreenToClient(m_hTabCtrl, &pntPosition);

		SetWindowPos(hDialog, 0,
			pntPosition.x, pntPosition.y,
			rectInnerWindow.right - rectInnerWindow.left,rectInnerWindow.bottom - rectInnerWindow.top,0);
		ShowWindow(hDialog,SW_NORMAL);

		m_WinDialogs[m_numDialogs] = hDialog;
		m_numDialogs++; 

		SelectDialog (0);

		return hDialog;
	}

	// __________________________________________________________________________________________________
	// SelectDialog
	//
	void TabControl::SelectDialog (int _nDialogId)
	{
		for (int i = 0 ; i < m_numDialogs ; i ++)
			if (m_WinDialogs[i] != NULL)
				ShowWindow(m_WinDialogs[i],i == _nDialogId ? SW_NORMAL : SW_HIDE);
	}

	// __________________________________________________________________________________________________
	// MessageHandler
	//
	void TabControl::MessageHandler(UINT message, WPARAM wParam, LPARAM lParam)
	{
		if (message == WM_NOTIFY)
		{
			NMHDR* pNotifyMessage = NULL;
			pNotifyMessage = (LPNMHDR)lParam; 		
			if (pNotifyMessage->hwndFrom == m_hTabCtrl)
			{
				int iPage = TabCtrl_GetCurSel (m_hTabCtrl); 			
				SelectDialog (iPage);
			}
		}   
	}

}