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

#pragma once
#ifndef GWEN_CONTROLS_PROPERTIES_H
#define GWEN_CONTROLS_PROPERTIES_H

#include "Gwen/Controls/Base.h"
#include "Gwen/Controls/Label.h"
#include "Gwen/Controls/Property/BaseProperty.h"
#include "Gwen/Controls/Property/Text.h"
#include "Gwen/Controls/SplitterBar.h"
#include "Gwen/Gwen.h"
#include "Gwen/Skin.h"

namespace Gwen
{
namespace Controls
{
class PropertyRow;

class GWEN_EXPORT Properties : public Base
{
public:
	GWEN_CONTROL(Properties, Base);

	virtual void PostLayout(Gwen::Skin::Base* skin);

	PropertyRow* Add(const UnicodeString& text, const UnicodeString& value = L"");
	PropertyRow* Add(const String& text, const String& value = "");
	PropertyRow* Add(const UnicodeString& text, Property::Base* pProp);
	PropertyRow* Add(const String& text, Property::Base* pProp);

	virtual int GetSplitWidth();

	virtual void Clear();

protected:
	virtual void OnSplitterMoved(Controls::Base* control);

	Controls::SplitterBar* m_SplitterBar;
};

class GWEN_EXPORT PropertyRow : public Base
{
public:
	GWEN_CONTROL(PropertyRow, Base);

	virtual Label* GetLabel() { return m_Label; }
	virtual void SetProperty(Property::Base* prop);
	virtual Property::Base* GetProperty() { return m_Property; }

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

	Event::Caller onChange;

protected:
	void OnPropertyValueChanged(Gwen::Controls::Base* control);

	Label* m_Label;
	Property::Base* m_Property;
};
}  // namespace Controls
}  // namespace Gwen
#endif
