//==============================================================================
//	Created on: 10/18/2003
//	This specialized menu-option only displays the editbox when this component is focused
//
//	Written by Ron Prestenback
//	© 2003, Epic Games, Inc.  All Rights Reserved
//==============================================================================
class AnimatedEditBox extends moEditBox;

// Controls how quickly the component slides open & closed
var() float  Increment;

// Should the caption be the same as the value?
var() bool   bUseValueForCaption;

var() noexport editconst protected bool bUpdated;

function bool InternalOnPreDraw( Canvas C )
{
	CaptionWidth += Increment;

	// Set caret position so that all text will be visible
	MyEditBox.CaretPos = 0;

	// If we've arrived, unhook predraw
	if ( CaptionWidth <= 0.0 || CaptionWidth >= 1.0 )
		OnPreDraw = None;

	return true;
}

function SetText( string Str )
{
	Super.SetText(Str);

	if ( bUseValueForCaption )
		SetCaption(MyEditBox.GetText());
}

function InternalOnActivate()
{
	ShowEditBox();
}

function InternalOnDeactivate()
{
	ShowLabel();
	if ( bUpdated )
		InternalOnChange(Self);

	bUpdated = False;
}

function ShowEditBox()
{
	if ( CaptionWidth > 0.0 )
	{
		// Increment must be negative
		if ( Increment > 0.0 )
			Increment *= -1.0;

		OnPreDraw = InternalOnPreDraw;
	}
}

function ShowLabel()
{
	if ( CaptionWidth < 1.0 )
	{
		// Increment must be a positive number
		if ( Increment < 0.0 )
			Increment *= -1.0;

		OnPreDraw = InternalOnPreDraw;
	}
}

function InternalOnChange(GUIComponent Sender)
{
    if (Controller.bCurMenuInitialized)
    {
    	if ( Sender != Self )
    		bUpdated = True;

    	// If InternalOnChange() was called manually, or we're receiving a call to OnChange() as a result of a call to SetText()
    	if ( Sender == Self || MenuState != MSAT_Focused )
    	{
			if ( !bIgnoreChange )
			{
				if ( bUseValueForCaption )
					SetCaption(MyEditBox.GetText());

				OnChange(Self);
			}
		}
	}

	bIgnoreChange = False;
}

/*
function InternalOnMousePressed(GUIComponent Sender, bool IsRepeat)
{
	// Set bCaptureMouse so that we receive the MouseRelease instead of MyComponent
	bCaptureMouse = True;
}

function InternalOnMouseRelease(GUIComponent Sender)
{
	bCaptureMouse = False;
}
*/

DefaultProperties
{
	Increment=0.1
	bAutoSizeCaption=False
	CaptionWidth=1.0
	ComponentWidth=-1

//	OnMousePressed=InternalOnMousePressed
//	OnMouseRelease=InternalOnMouseRelease
	OnActivate=InternalOnActivate
	OnDeactivate=InternalOnDeactivate
}
