#ifndef ICLIENTPANEL_H
#define ICLIENTPANEL_H

#ifdef _WIN32
#pragma once
#endif

#include "VGUI.h"

#ifdef GetClassName
#undef GetClassName
#endif

class KeyValues;

namespace vgui
{

	class Panel;
	class SurfaceBase;

	enum EInterfaceID
	{
		ICLIENTPANEL_STANDARD_INTERFACE = 0,
	};

	class IClientPanel
	{
	public:
		virtual VPANEL GetVPanel() = 0;

		virtual void Think() = 0;
		virtual void PerformApplySchemeSettings() = 0;
		virtual void PaintTraverse(bool forceRepaint, bool allowForce) = 0;
		virtual void Repaint() = 0;
		virtual VPANEL IsWithinTraverse(int x, int y, bool traversePopups) = 0;
		virtual void GetInset(int& top, int& left, int& right, int& bottom) = 0;
		virtual void GetClipRect(int& x0, int& y0, int& x1, int& y1) = 0;
		virtual void OnChildAdded(VPANEL child) = 0;
		virtual void OnSizeChanged(int newWide, int newTall) = 0;

		virtual void InternalFocusChanged(bool lost) = 0;
		virtual bool RequestInfo(KeyValues* outputData) = 0;
		virtual void RequestFocus(int direction) = 0;
		virtual bool RequestFocusPrev(VPANEL existingPanel) = 0;
		virtual bool RequestFocusNext(VPANEL existingPanel) = 0;
		virtual void OnMessage(const KeyValues* params, VPANEL ifromPanel) = 0;
		virtual VPANEL GetCurrentKeyFocus() = 0;
		virtual int GetTabPosition() = 0;

		virtual const char* GetName() = 0;
		virtual const char* GetClassName() = 0;

		virtual HScheme GetScheme() = 0;
		virtual bool IsProportional() = 0;
		virtual bool IsAutoDeleteSet() = 0;
		virtual void DeletePanel() = 0;

		virtual void* QueryInterface(EInterfaceID id) = 0;

		virtual Panel* GetPanel() = 0;

		virtual const char* GetModuleName() = 0;

		virtual void OnTick() = 0;
	};

}   


#endif  