//==============================================================================
//	Combined component containing a button and a label.
//  If MenuClass is assigned, the OnClick delegate will be called when the button is clicked
//  and OnChange will be called once the page is closed
//
//  If MenuClass does not have a value, OnChange will be called when the button is clicked
//
//	Written by Ron Prestenback
//	© 2003, Epic Games, Inc.  All Rights Reserved
//==============================================================================
class moButton extends GUIMenuOption;

var(Option) string Value;
var(Option) localized string ButtonCaption, MenuTitle;
var(Option) string MenuClass;		// Class for the menu to open when user clicks the button
var(Option) string ButtonStyleName;
var(Option) noexport editconst GUIButton MyButton;

function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
	Super.InitComponent(MyController, MyOwner);

	MyButton = GUIButton(MyComponent);
	MyButton.OnClick = InternalOnClick;
	MyButton.Caption = ButtonCaption;
}

function SetComponentValue(coerce string NewValue, optional bool bNoChange)
{
	if ( bNoChange )
		bIgnoreChange = bNoChange;

	SetValue(NewValue);
	bIgnoreChange = False;
}

function string GetComponentValue()
{
	return Value;
}

function SetValue(string NewValue)
{
	if (Value == NewValue)
	{
		bIgnoreChange = False;
		return;
	}

	Value = NewValue;
	InternalOnChange(Self);
}

function ResetComponent()
{
	Value = "";
}

function bool InternalOnClick(GUIComponent Sender)
{
	if ( Sender == MyButton )
	{
		if ( MenuClass != "" )
		{
			if ( !OnClick(Self) )
				Controller.OpenMenu(MenuClass, MenuTitle, Value);

			Controller.ActivePage.OnClose = PageClosed;
			return true;
		}

		InternalOnChange(Self);
		return true;
	}

	return false;
}

function PageClosed( optional bool bCancelled )
{
	Value = Controller.ActivePage.GetDataString();
	InternalOnChange(Self);
}

function InternalOnCreateComponent(GUIComponent NewComp, GUIComponent Sender)
{
	Super.InternalOnCreateComponent(NewComp, Sender);
	NewComp.StyleName = ButtonStyleName;
}

DefaultProperties
{
	ComponentClassName="XInterface.GUIButton"
	ButtonStyleName="SquareButton"
	ButtonCaption="Edit"
	ComponentJustification=TXTA_Right
	LabelJustification=TXTA_Left
	ComponentWidth=-1
	CaptionWidth=0.8
	StandardHeight=0.04
}
