#include "UnitTest.h"
#include "Gwen/Controls/ListBox.h"

using namespace Gwen;

class ListBox : public GUnit
{
public:
	GWEN_CONTROL_INLINE(ListBox, GUnit)
	{
		{
			Gwen::Controls::ListBox* ctrl = new Gwen::Controls::ListBox(this);
			ctrl->SetBounds(10, 10, 100, 200);

			ctrl->AddItem(L"First");
			ctrl->AddItem(L"Blue");
			ctrl->AddItem(L"Yellow");
			ctrl->AddItem(L"Orange");
			ctrl->AddItem(L"Brown");
			ctrl->AddItem(L"Green");
			ctrl->AddItem(L"Dog");
			ctrl->AddItem(L"Cat");
			ctrl->AddItem(L"Shoes");
			ctrl->AddItem(L"Chair");
			ctrl->AddItem(L"Last");

			ctrl->onRowSelected.Add(this, &ThisClass::RowSelected);
		}

		{
			Gwen::Controls::ListBox* ctrl = new Gwen::Controls::ListBox(this);
			ctrl->SetBounds(120, 10, 200, 200);
			ctrl->SetColumnCount(3);
			ctrl->SetAllowMultiSelect(true);
			ctrl->onRowSelected.Add(this, &ThisClass::RowSelected);

			{
				Gwen::Controls::Layout::TableRow* pRow = ctrl->AddItem(L"Baked Beans");
				pRow->SetCellText(1, L"Heinz");
				pRow->SetCellText(2, L"£3.50");
			}

			{
				Gwen::Controls::Layout::TableRow* pRow = ctrl->AddItem(L"Bananas");
				pRow->SetCellText(1, L"Trees");
				pRow->SetCellText(2, L"£1.27");
			}

			{
				Gwen::Controls::Layout::TableRow* pRow = ctrl->AddItem(L"Chicken");
				pRow->SetCellText(1, L"\u5355\u5143\u6D4B\u8BD5");
				pRow->SetCellText(2, L"£8.95");
			}
		}
	}

	void RowSelected(Gwen::Controls::Base* pControl)
	{
		Gwen::Controls::ListBox* ctrl = (Gwen::Controls::ListBox*)pControl;

		UnitPrint(Utility::Format(L"Listbox Item Selected: %s", ctrl->GetSelectedRow()->GetText(0).c_str()));
	}

	Gwen::Font m_Font;
};

DEFINE_UNIT_TEST(ListBox, L"ListBox");