#include "FileZilla.h"
#include "view.h"
#include "viewheader.h"

BEGIN_EVENT_TABLE(CView, wxWindow)
EVT_SIZE(CView::OnSize)
END_EVENT_TABLE()

CView::CView(wxWindow* pParent)
	: wxWindow(pParent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER)
{
	m_pWnd = 0;
	m_pHeader = 0;

	m_pStatusBar = 0;
}

void CView::SetStatusBar(wxStatusBar* pStatusBar)
{
	m_pStatusBar = pStatusBar;
}

void CView::OnSize(wxSizeEvent& event)
{
	wxSize size = GetClientSize();
	wxRect rect(size);
	if (m_pHeader)
	{
		wxRect headerRect = rect;
		headerRect.SetHeight(m_pHeader->GetSize().GetHeight());
		m_pHeader->SetSize(headerRect);
		rect.SetHeight(rect.GetHeight() - headerRect.GetHeight());
		rect.SetY(headerRect.GetHeight());
	}
	if (m_pStatusBar && m_pStatusBar->IsShown())
	{
		const int status_height = m_pStatusBar->GetSize().GetHeight();
		rect.height -= status_height;

		wxRect status_rect = rect;
		status_rect.y += rect.height;
		status_rect.height = status_height;
		m_pStatusBar->SetSize(status_rect);
#ifdef __WXMSW__
		m_pStatusBar->Update();
#endif
	}
	if (!m_pWnd)
		return;
    
	m_pWnd->SetSize(rect);
}

void CView::SetHeader(CViewHeader* pWnd)
{
	m_pHeader = pWnd;
	if (m_pHeader && m_pHeader->GetParent() != this)
		CViewHeader::Reparent(&m_pHeader, this);
}

CViewHeader* CView::DetachHeader()
{
	CViewHeader* pHeader = m_pHeader;
	m_pHeader = 0;
	return pHeader;
}