#include "pch.h"

#include "OutputView.h"

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

/////////////////////////////////////////////////////////////////////////////
// COutputBar

IMPLEMENT_DYNAMIC(COutputView, CDockablePane)

COutputView::COutputView()
    = default;

COutputView::~COutputView()
    = default;


BEGIN_MESSAGE_MAP(COutputView, CDockablePane)
	ON_WM_CREATE()
	ON_WM_SIZE()
END_MESSAGE_MAP()

int COutputView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDockablePane::OnCreate(lpCreateStruct) == -1)
	{
		return -1;
	}

	CRect rectDummy;
	rectDummy.SetRectEmpty();
	// Создание окна консоли:
	const DWORD dwStyle = ES_NOHIDESEL | WS_CHILD | WS_VISIBLE;

	if (!m_wndConsole.Create(dwStyle, rectDummy, this, 1))
	{
		TRACE0("Не удалось создать окно консоли вывода\n");
		return -1;      // не удалось создать
	}

	UpdateFonts();
	return 0;
}

void COutputView::OnSize(UINT nType, int cx, int cy)
{
	CDockablePane::OnSize(nType, cx, cy);
	// Элемент управления вкладки должен покрывать всю клиентскую область:
	m_wndConsole.SetWindowPos(nullptr, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}

void COutputView::AdjustHorzScroll(CListBox &wndListBox)
{
	CClientDC dc(this);
	CFont *pOldFont = dc.SelectObject(&afxGlobalData.fontRegular);
	int cxExtentMax = 0;

	for (int i = 0; i < wndListBox.GetCount(); ++i)
	{
		CString strItem;
		wndListBox.GetText(i, strItem);
		cxExtentMax = max(cxExtentMax, (int)dc.GetTextExtent(strItem).cx);
	}

	wndListBox.SetHorizontalExtent(cxExtentMax);
	dc.SelectObject(pOldFont);
}

void COutputView::UpdateFonts()
{
	m_wndConsole.SetFont(&afxGlobalData.fontRegular);
}


void COutputView::SendChar(TCHAR ch)
{
	m_wndConsole.PutChar(ch);
}

