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

#pragma once
#ifndef GWEN_CONTROLS_PROPERTY_BASEPROPERTY_H
#define GWEN_CONTROLS_PROPERTY_BASEPROPERTY_H

#include "Gwen/Controls/Base.h"
#include "Gwen/Gwen.h"
#include "Gwen/Skin.h"
#include "Gwen/Utility.h"

namespace Gwen
{
namespace Controls
{
namespace Property
{
class GWEN_EXPORT Base : public Gwen::Controls::Base
{
public:
	GWEN_CONTROL_INLINE(Base, Gwen::Controls::Base) {}

	virtual String GetPropertyValueAnsi()
	{
		return Gwen::Utility::UnicodeToString(GetPropertyValue());
	}

	virtual void SetPropertyValue(const String& v, bool bFireChangeEvents = false)
	{
		SetPropertyValue(Gwen::Utility::StringToUnicode(v), bFireChangeEvents);
	}

	virtual UnicodeString GetPropertyValue() = 0;

	virtual void SetPropertyValue(const UnicodeString& v, bool bFireChangeEvents = false) = 0;

	virtual bool IsEditing() = 0;

	virtual void DoChanged()
	{
		onChange.Call(this);
	}

	virtual void OnPropertyValueChanged(Gwen::Controls::Base* /*control*/)
	{
		DoChanged();
	}

	Event::Caller onChange;
};
}  // namespace Property
}  // namespace Controls
}  // namespace Gwen
#endif
