#ifndef TF_ASYNCPANEL
#define TF_ASYNCPANEL

#include "vgui_controls/EditablePanel.h"

using namespace vgui;

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
class CBaseASyncPanel : public EditablePanel
{
	DECLARE_CLASS_SIMPLE( CBaseASyncPanel, EditablePanel );
public:
	CBaseASyncPanel( Panel *pParent, const char *pszPanelName );
	virtual ~CBaseASyncPanel() {}

	bool IsInitialized() const;
	void CheckForData();
	virtual void OnTick() OVERRIDE;
	virtual void ApplySchemeSettings( IScheme *pScheme ) OVERRIDE;
	virtual void PerformLayout() OVERRIDE;
	virtual void LoadControlSettings(const char *dialogResourceName, const char *pathID = NULL, KeyValues *pPreloadedKeyValues = NULL, KeyValues *pConditions = NULL) OVERRIDE;
protected:
	virtual void OnChildSettingsApplied( KeyValues *pInResourceData, Panel *pChild ) OVERRIDE;

private:
	void PresentDataIfReady();
	virtual bool CheckForData_Internal() = 0;

	bool m_bDataInitialized;
	bool m_bSettingsApplied;
	float m_flLastRequestTime;
	float m_flLastUpdatedTime;
	CUtlVector< PHandle > m_vecLoadingPanels;
	CUtlVector< PHandle > m_vecPanelsToShow;
	CPanelAnimationVar( float, m_flRefreshDelay, "refresh_delay", "-1.f" );
};

#endif //TF_ASYNCPANEL