#pragma once
#ifndef GWEN_CONTROLS_CROSSSPLITTER_H
#define GWEN_CONTROLS_CROSSSPLITTER_H

#include "Gwen/Gwen.h"
#include "Gwen/Controls/Base.h"
#include "Gwen/Controls/SplitterBar.h"

namespace Gwen
{
namespace Controls
{
class GWEN_EXPORT CrossSplitter : public Controls::Base
{
public:
	GWEN_CONTROL(CrossSplitter, Controls::Base);

	void Layout(Skin::Base* skin);

	virtual float CalculateValueVertical();
	virtual float CalculateValueHorizontal();
	virtual void CalculateValueCenter();
	virtual void UpdateHSplitter();
	virtual void UpdateVSplitter();
	virtual void UpdateCSplitter();
	virtual void OnVerticalMoved(Controls::Base* control);
	virtual void OnHorizontalMoved(Controls::Base* control);
	virtual void OnCenterMoved(Controls::Base* control);

	virtual void SetPanel(int i, Controls::Base* pPanel);
	virtual Controls::Base* GetPanel(int i);

	virtual bool IsZoomed() { return m_iZoomedSection != -1; }
	virtual void Zoom(int section);
	virtual void UnZoom();
	virtual void ZoomChanged();
	virtual void CenterPanels()
	{
		m_fHVal = 0.5f;
		m_fVVal = 0.5f;
		Invalidate();
	}

	virtual void SetSplittersVisible(bool b)
	{
		m_VSplitter->SetShouldDrawBackground(b);
		m_HSplitter->SetShouldDrawBackground(b);
		m_CSplitter->SetShouldDrawBackground(b);
	}
	virtual void SetSplitterSize(int size) { m_fBarSize = size; }

private:
	SplitterBar* m_VSplitter;
	SplitterBar* m_HSplitter;
	SplitterBar* m_CSplitter;

	Controls::Base* m_Sections[4];

	float m_fHVal;
	float m_fVVal;
	int m_fBarSize;

	int m_iZoomedSection;

	Gwen::Event::Caller onZoomed;
	Gwen::Event::Caller onUnZoomed;
	Gwen::Event::Caller onZoomChange;
};
}  // namespace Controls
}  // namespace Gwen
#endif
