// 16KPageContainer.cpp: файл реализации
//

#include "stdafx.h"
#include "Defines.h"
#include "16KPageContainer.h"


// C16KPageContainer

IMPLEMENT_DYNAMIC(C16KPageContainer, CWnd)

C16KPageContainer::C16KPageContainer(int nNumPages)
{
	if (nNumPages > C16KP_NUM_PAGES)
	{
		nNumPages = C16KP_NUM_PAGES;
	}

	if (nNumPages < 0)
	{
		nNumPages = 0;
	}

	m_nNumPages = nNumPages;

	for (int i = 0; i < C16KP_NUM_PAGES; ++i)
	{
		m_pPage[i] = NULL;
		m_pBuffer[i] = NULL;
		m_nBufSize[i] = 0;
		m_nPageNum[i] = i;
		m_strScrName[i] = _T("");
	}
}

C16KPageContainer::~C16KPageContainer()
{
}

BEGIN_MESSAGE_MAP(C16KPageContainer, CWnd)
	ON_WM_CREATE()
	ON_WM_DESTROY()
END_MESSAGE_MAP()


// обработчики сообщений C16KPageContainer


int C16KPageContainer::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
	{
		return -1;
	}

	int cxBorder = GetSystemMetrics(SM_CXDLGFRAME);
	int cyBorder = GetSystemMetrics(SM_CYDLGFRAME);
	int cxScroll = GetSystemMetrics(SM_CXVSCROLL);
	int cyScroll = GetSystemMetrics(SM_CYHSCROLL);
	int cyCaption = GetSystemMetrics(SM_CYSMCAPTION);
	//что это за магические числа - непонятно. но хотелось бы, чтобы было универсальное решение, без этих чисел.
	CRect rect(0, -cyCaption - cyBorder, SCREEN_WIDTH + VW16K_BUTTONPAD_WIDTH + cxScroll + cxBorder * 2, 200);

	for (int i = 0; i < m_nNumPages; ++i)
	{
		m_pPage[i] = new C16KPageView(m_pBuffer[i], m_nBufSize[i],
		                              m_nPageNum[i], m_strScrName[i]);

		if (m_pPage[i])
		{
			if (!m_pPage[i]->Create(NULL, _T("BK16KPageView_") + m_strScrName[i],
			                        WS_VISIBLE | WS_CHILD, rect, this, 0))
			{
				TRACE(_T("Не удалось создать вид ") + (m_strScrName[i]) + _T("\n"));
				return -1; // не удалось создать
			}

			CRect r;
			m_pPage[i]->GetWindowRect(&r);
			rect.top += r.Height();
		}
	}

	MoveWindow(0, 0, rect.Width(), rect.top + 80, FALSE);
	return 0;
}

void C16KPageContainer::SetBuffer_Param(int nPageNum, BYTE *buffer, size_t size, int num, CString &strName)
{
	if (nPageNum < C16KP_NUM_PAGES)
	{
		m_pBuffer[nPageNum] = buffer;
		m_nBufSize[nPageNum] = size;
		m_nPageNum[nPageNum] = num;
		m_strScrName[nPageNum] = strName;
	}
}

void C16KPageContainer::Draw16KPages()
{
	m_pPage[C16KP_FIRST_PAGE]->Draw16KView();

	if (m_nNumPages > C16KP_SECOND_PAGE)
	{
		m_pPage[C16KP_SECOND_PAGE]->Draw16KView();
	}
}

void C16KPageContainer::OnDestroy()
{
	for (int i = 0; i < m_nNumPages; ++i)
	{
		C16KPageView *pv = m_pPage[i];
		pv->DestroyWindow();
		SAFE_DELETE(pv);
		m_pPage[i] = pv;
	}

	CWnd::OnDestroy();
}
