#include "AdeptHeaders.hpp"

#include "GUIStatBar.hpp"
#include "Tool.hpp"


//#############################################################################
//###########################    GUIStatBar   #################################
//#############################################################################

GUIStatBar::ClassData*
	GUIStatBar::DefaultData = NULL;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GUIStatBar::InitializeClass()
{
	Verify(!DefaultData);
	DefaultData =
		new ClassData(
			GUIStatBarClassID,
			"Adept::GUIStatBar",
			GUIObject::DefaultData,
			0,
			NULL
		);
	Register_Object(DefaultData);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GUIStatBar::TerminateClass()
{
	Unregister_Object(DefaultData);
	delete DefaultData;
	DefaultData = NULL;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GUIStatBar::GUIStatBar(
	ClassData *class_data,
	MemoryStream *stream
):
	GUIObject(class_data, stream)
{
	Check_Pointer(this);
	Check_Object(stream);

	baseValue = -1.0f;
	currentValue = -1.0f;
	dataPointer = NULL;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GUIStatBar::GUIStatBar(
	ClassData *class_data,
	Page *instance_page
):
	GUIObject(class_data, instance_page)
{
	Check_Pointer(this);
	Check_Object(instance_page);

	const char *bar_type;
	instance_page->GetEntry("StatBarType", &bar_type, true);

	if(!strcmp(bar_type, "VerticalDown"))
	{
		statBarType = VerticalDownType;
	}
	else if(!strcmp(bar_type, "VerticalUp"))
	{
		statBarType = VerticalUpType;
	}
	else if(!strcmp(bar_type, "HorizontalLeft"))
	{
		statBarType = HorizontalLeftType;
	}
	else if(!strcmp(bar_type, "HorizontalRight"))
	{
		statBarType = HorizontalRightType;
	}
	else
	{
		statBarType = -1;
	}

	baseValue = -1.0f;
	currentValue = -1.0f;
	dataPointer = NULL;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GUIStatBar::Save(MemoryStream *stream)
{
	Check_Object(this);
	Check_Object(stream);

	GUIObject::Save(stream);

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GUIStatBar::~GUIStatBar()
{
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GUIStatBar::LinkStatBar(Scalar base_value, Scalar *value)
{
	Check_Object(this);
	Check_Pointer(value);

	Verify(base_value >= 0);
	baseValue = base_value;
	currentValue = *value;
	dataPointer = value;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GUIStatBar::Draw()
{
	Check_Object(this);

	if(!currentValue)
		return;
	if(statBarType == -1)
		return;

	switch(statBarType)
	{
	case VerticalUpType:
		{
			
			break;
		}
	case VerticalDownType:
		{
			break;
		}
	case HorizontalRightType:
		{
			break;
		}
	case HorizontalLeftType:
		{
			break;
		}
	};

	GUIObject::Draw();
}
	
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GUIStatBar::TestInstance()
{
	Verify(IsDerivedFrom(DefaultData));
}






