//======== (C) Copyright 2002 Charles G. Cleveland All rights reserved. =========
//
// The copyright to the contents herein is the property of Charles G. Cleveland.
// The contents may be used and/or copied only with the written permission of
// Charles G. Cleveland, or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// Purpose: 
//
// $Workfile: AvHTechImpulsePanel.cpp $
// $Date: 2002/08/16 02:28:55 $
//
//-------------------------------------------------------------------------------
// $Log: AvHTechImpulsePanel.cpp,v $
// Revision 1.3  2002/08/16 02:28:55  Flayra
// - Added document headers
//
//===============================================================================
#include "mod/AvHTechImpulsePanel.h"
#include "cl_dll/hud.h"
#include "cl_dll/cl_util.h"
#include "ui/UITags.h"

AvHTechImpulsePanel::AvHTechImpulsePanel() : Label(), mTextImage("")
{
	this->mMessageID = MESSAGE_NULL;
	this->mVisualNumber = -1;
	this->mDrawNumberRange = -1;
}

AvHTechImpulsePanel::AvHTechImpulsePanel(int inXPos, int inYPos, int inWidth, int inHeight) : Label(" ", inXPos, inYPos, inWidth, inHeight), mTextImage("")
{
}

AvHMessageID AvHTechImpulsePanel::GetMessageID() const
{
	return this->mMessageID;
}

void AvHTechImpulsePanel::SetDrawNumberRange(int inRange)
{
	this->mDrawNumberRange = inRange;
}

void AvHTechImpulsePanel::SetMessageID(AvHMessageID inImpulse)
{
	this->mMessageID = inImpulse;
}

void AvHTechImpulsePanel::SetVisualNumber(int inNumber)
{
	this->mVisualNumber = inNumber;
}


void AvHTechImpulsePanel::paint()
{
	//Label::paint();

	if((this->mDrawNumberRange >= 0) && (this->mVisualNumber >= this->mDrawNumberRange))
	{
		int thePosX, thePosY;
		this->getPos(thePosX, thePosY);
		
		int theWidth, theHeight;
		this->getSize(theWidth, theHeight);
		
		int theFlags = (this->mVisualNumber < 10) ? 0 : DHN_2DIGITS;

		char theNumberString[5];
		sprintf(theNumberString, "%d", this->mVisualNumber);
		int theLength = (int)strlen(theNumberString);
		
		int theTextWidth, theTextHeight;
		this->GetTextExtents(theTextWidth, theTextHeight);

		this->drawSetTextColor(255, 255, 255, 0);

		this->drawPrintText(theWidth - theTextWidth, theHeight - theTextHeight, theNumberString, theLength);
	}
}

bool AvHTechImpulsePanel::GetTextExtents(int& outWidth, int& outHeight)
{
	bool theSuccess = false;

	if((this->mDrawNumberRange >= 0) && (this->mVisualNumber >= this->mDrawNumberRange))
	{
		int theFlags = (this->mVisualNumber < 10) ? 0 : DHN_2DIGITS;
		
		char theNumberString[5];
		sprintf(theNumberString, "%d", this->mVisualNumber);
		
		this->mTextImage.setText(theNumberString);
		this->mTextImage.getTextSize(outWidth, outHeight);
		
		theSuccess = true;
	}

	return theSuccess;
}

void AvHTechImpulsePanel::setFont(Scheme::SchemeFont schemeFont)
{
	Label::setFont(schemeFont);
	this->mTextImage.setFont(schemeFont);
}

void AvHTechImpulsePanel::setFont(Font* font)
{
	Label::setFont(font);
	this->mTextImage.setFont(font);
}

void AvHTechImpulsePanel::paintBackground()
{
	int theTextWidth, theTextHeight;
	if(this->GetTextExtents(theTextWidth, theTextHeight))
	{
		int theXPos, theYPos;
		this->getPos(theXPos, theYPos);
		
		int theWidth, theHeight;
		this->getSize(theWidth, theHeight);

		ASSERT(theWidth >= theTextWidth);
		ASSERT(theHeight >= theTextHeight);

		FillRGBA(0 + (theWidth - theTextWidth), 0 - (theHeight - theTextHeight), theTextWidth, theTextHeight, 0, 0, 0, 128);
		//FillRGBA(0, 0, theWidth, theHeight, 128, 128, 128, 128);
	}

//	Panel::paintBackground();
//
//	int r, g, b, a;
//	this->getBgColor(r, g, b, a);
//
//	int theXPos, theYPos;
//	this->getPos(theXPos, theYPos);
//
//	int theWidth, theHeight;
//	this->getSize(theWidth, theHeight);
//
//	//FillRGBA(0, 0, theWidth, theHeight, r, g, b, a);
//
//	float theOptimalIncrement = (float)255/theHeight;
//	int theStepSize = max(theOptimalIncrement, 1);
//	a = 0;
//	for(int i = 0; i < theHeight; i++)
//	{
//		// Fill lines across, getting darker
//		FillRGBA(0, i, theWidth, 1, r, g, b, a);
//		a = min(a+theStepSize, 255);
//	}
}


//////////////////////////////////////
// AvHUITechImpulsePanel -> UIPanel //
//////////////////////////////////////
void AvHUITechImpulsePanel::AllocateComponent(const TRDescription& inDesc)
{
    // Position (normalized screen coords)
    float theXPos = UIDefaultXPos;
    float theYPos = UIDefaultYPos;
    inDesc.GetTagValue(UITagXPos, theXPos);
    inDesc.GetTagValue(UITagYPos, theYPos);
	
    // Width and height (normalized screen coords)
    float theWidth = UIDefaultWidth;
    float theHeight = UIDefaultHeight;
    inDesc.GetTagValue(UITagWidth, theWidth);
    inDesc.GetTagValue(UITagHeight, theHeight);
	
	this->mComponent = new AvHTechImpulsePanel(theXPos*ScreenWidth(), theYPos*ScreenHeight(), theWidth*ScreenWidth(), theHeight*ScreenHeight());
}

Panel* AvHUITechImpulsePanel::GetComponentPointer(void)
{
	return this->mComponent;
}

bool AvHUITechImpulsePanel::SetClassProperties(const TRDescription& inDesc, Panel* inPanel, CSchemeManager* inSchemeManager)
{
    AvHTechImpulsePanel* theComponent = (AvHTechImpulsePanel*)inPanel;
	
    bool theSuccess = UILabel::SetClassProperties(inDesc, inPanel, inSchemeManager);
    
    if(theSuccess)
    {
		int theImpulse = 0;
		if(inDesc.GetTagValue("impulse", theImpulse))
		{
			theComponent->SetMessageID(AvHMessageID(theImpulse));
		}

		int theDrawNumber = 0;
		if(inDesc.GetTagValue("drawnumber", theDrawNumber))
		{
			theComponent->SetDrawNumberRange(theDrawNumber);
		}

		theSuccess = true;
	}
	
	return theSuccess;
}