#pragma once
#include "mof/Component2D.hpp"
#include "mof/ColorComponent.hpp"
#include "mof/Drawable.hpp"
#include <memory>

namespace mof
{
namespace widget
{

	class WidgetView  
    :
        public Component2D ,
        public ColorComponent ,
        public Drawable 
    {
	public:
		typedef std::shared_ptr<WidgetView> ptr;
		virtual ~WidgetView(){};

		// TODO レイアウトのアニメとイベント時のアニメ、それぞれどこでどのように設定するか
		// TODO エフェクトを外から設定できるようにする
		// TODO 特殊なコンポーネントも外から設定できるように
		// TODO スプライトはどこが持つか
        virtual FrameNumber show( bool imidiately = false ) = 0; 
        virtual FrameNumber hide( bool imidiately = false ) = 0;
        virtual FrameNumber focus( bool imidiately = false ) = 0; 
        virtual FrameNumber blur( bool imidiately = false ) = 0;
        virtual FrameNumber click( bool imidiately = false ) = 0;

		/**
		 * このオブジェクトが推奨する初期サイズ
		 */
		virtual mof::Vector2D getPreferredSize() const = 0;

		virtual void update() = 0;
		virtual void draw() const = 0;
		virtual void setVisible(bool visible) = 0;
	};

}
}
