/*
	GWEN
	Copyright (c) 2010 Facepunch Studios
	See license in Gwen.h
*/

#pragma once
#ifndef GWEN_CONTROLS_COMBOBOX_H
#define GWEN_CONTROLS_COMBOBOX_H

#include "Gwen/Controls/Base.h"
#include "Gwen/Controls/Button.h"
#include "Gwen/Gwen.h"
#include "Gwen/Skin.h"
#include "Gwen/Controls/TextBox.h"
#include "Gwen/Controls/Menu.h"

namespace Gwen
{
namespace Controls
{
class GWEN_EXPORT ComboBoxButton : public Button
{
	GWEN_CONTROL_INLINE(ComboBoxButton, Button) {}

	virtual void Render(Skin::Base* skin)
	{
		skin->DrawComboBoxButton(this, m_bDepressed);
	}
};

class GWEN_EXPORT ComboBox : public Button
{
public:
	GWEN_CONTROL(ComboBox, Button);

	virtual void Render(Skin::Base* skin);

	virtual Gwen::Controls::Label* GetSelectedItem();

	virtual void OnPress();
	void OpenButtonPressed(Controls::Base* /*pControl*/);

	virtual void OnItemSelected(Controls::Base* pControl);
	virtual void OpenList();
	virtual void CloseList();

	virtual Controls::Base* GetControlAt(int x, int y)
	{
		if (x < 0 || y < 0 || x >= Width() || y >= Height())
			return NULL;

		return this;
	}
	virtual bool IsMenuComponent()
	{
		return true;
	}

	virtual void ClearItems();

	virtual MenuItem* AddItem(const UnicodeString& strLabel, const String& strName = "", Gwen::Event::Handler* pHandler = NULL, Gwen::Event::Handler::Function fn = NULL);
	virtual bool OnKeyUp(bool bDown);
	virtual bool OnKeyDown(bool bDown);

	virtual void RenderFocus(Gwen::Skin::Base* skin);
	virtual void OnLostKeyboardFocus();
	virtual void OnKeyboardFocus();

	virtual bool IsMenuOpen();

	Gwen::Event::Caller onSelection;

protected:
	Menu* m_Menu;
	MenuItem* m_SelectedItem;

	Controls::Base* m_Button;
};

}  // namespace Controls
}  // namespace Gwen
#endif
