/* ==========================================================================
* 파    일 : MsgBox.h
* 목    적 : 
* 작 성 자 : 김가람
* 작 성 일 : 2007-04-02
* 주의사항 :
*===========================================================================*/
#pragma once
#include "UIWindow.h"
#include "UIMsgboxEvent.h"
#include "UINodeData.h"

class cBaseStage;
class cButton;
class cLabel;
class cEditBox;

class cMsgBox : public cUIWindow
{
	friend class cUIManager;
public:
	virtual ~cMsgBox();

	bool InitWindow();

	/// 에디트의 텍스트를 얻는다
	LPCTSTR GetEditText() const;
	unsigned int GetLength() const;

	/// 에디트박스의 최대 길이를 제한
	void SetMaxLength( int length );

	eBoxSkin_Type GetSkinType() { return mSkinType; }

protected:
	/// Msg박스의 생성은 UIMANAGER로 한정한다.
	cMsgBox( eUINodeType type = eUINODE_MESSAGEBOX );

	/// 메시지 박스 생성 	
	bool Create( cBaseStage* msgHandler, eMSGBox_Event eventtype, eBoxSkin_Type skintype, eMSGBox_Type boxtype, void* extraData = 0, 
				 unsigned long totaltime = 0, bool printTime = false, bool success = false );

	/// 원하는 형태로 메시지박스 설정및 보여주기
	void SetText( LPCTSTR text, LPCTSTR caption );
	void SetMessage( LPCTSTR text );
		
protected:
	virtual bool OnCreate( cUINodeProperty* pproperty );
	virtual bool IsValid() const;
	virtual bool HandleEvent( const cUIEvent& event );
	virtual void OnProcess( unsigned long deltaTime, unsigned long accumTime );
	virtual void OnRender( cUIFontItemKeeper* pKeeper );   
	virtual void OnKeyDown( eKeyCode code );
	virtual void OnShow();
	virtual bool SetSkin( const cUINodeSkin* pskin );
	virtual void UpdateRect();
	virtual void UpdateSkin();
	virtual void UpdateText();
	
protected:
	/// 자식 컨트롤 스킨 
	cString mOkButtonSkin;
	cString mYesButtonSkin;
	cString mNoButtonSkin;
	cString mEditSkin;

	/// 자식 컨트롤 
	cButton*	mpYesButton;
	cButton*	mpNoButton;

	/// 에디트박스
	cEditBox*	mpEdit;

	/// 텍스트 출력 라벨
	cLabel*		mpLabel;

	/// 스킨 타입 
	eBoxSkin_Type mSkinType;

	/// 메시지박스 타입
	eMSGBox_Type mModalType;

	/// 텍스트 출력위치 
	int mTextPosX, mTextPosY;
	int mCaptionPosX, mCaptionPosY;

	/// 캡션 텍스트
	cStringT mCaptionText;
	LPCTSTR mText;
	void*		mExtraData;

	/// 시간 제한 넣기
	unsigned long	mStartTime;
	unsigned long	mTotalTime;
	bool			mTimePrint;			/// 시간정보를 출력할 것인지 여부

	bool			mResultEvent;		/// 성공 or 실패 메세지
};


//////////////////////////////////////////////////////////////////////////
class cMessageBoxSkin : public cUINodeSkin
{
public:
	cMessageBoxSkin( eUINodeType type = eUINODE_MESSAGEBOX );
	virtual ~cMessageBoxSkin();

	/// 로딩
	virtual bool Load( cParser& parser );

public:
	/// 이동가능 여부
	bool mMoveable;

	/// 캡션영역 
	cUIRect mCaptionRect;

	/// 버튼 박스 스킨 네임
	cString mOkButtonSkin;
	cString mYesButtonSkin;
	cString mNoButtonSkin;
	cString mEditSkin;
};
