//==============================================================================
//  Base class for all settings pages
//
//  Created by Ron Prestenback
//  © 2003, Epic Games, Inc.  All Rights Reserved
//==============================================================================
class Settings_Tabs extends UT2K4TabPanel;

//var automated GUIImage iBackground;

var GUIFooter           t_Footer;
var UT2K4SettingsPage   Setting;
var bool                bAlwaysApply;
var bool                bNeedApply;
var globalconfig bool   bExpert;

var string              PerformanceWarningMenu;
var localized string    PerformanceWarningText;
var float               WarningCounter, WarningLength;

function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
    if ( UT2K4SettingsPage(MyOwner.MenuOwner) != None )
    {
        Setting = UT2K4SettingsPage(MyOwner.MenuOwner);
        bAlwaysApply = bAlwaysApply && Setting.bApplyImmediately;
        t_Footer = Setting.t_Footer;
    }

    Super.InitComponent(MyController, MyOwner);
}

// To catch any weirdness
event Opened(GUIComponent Sender)
{
    if ( (Setting == None || t_Footer == None) && UT2K4SettingsPage(Sender) != None )
    {
        Setting = UT2K4SettingsPage(Sender);
        bAlwaysApply = bAlwaysApply && Setting.bApplyImmediately;
        t_Footer = Setting.t_Footer;
    }

    Super.Opened(Sender);
}

function ShowPanel(bool bShow)
{
    Super.ShowPanel(bShow);

    if (bShow)
    {
    	if ( Setting.b_Apply != None )
    	{
	        if ( bAlwaysApply )
	        {
	        	DisableComponent(Setting.b_Apply);
	        	Setting.b_Apply.Hide();
	        	Setting.GetSizingButton();
	        }

	        else
	        {
	        	Setting.b_Apply.Show();
	        	Setting.GetSizingButton();

	            if (bNeedApply)
	                EnableComponent(Setting.b_Apply);
	            else DisableComponent(Setting.b_Apply);
	        }
	    }

        Setting.t_Header.SetCaption(Setting.PageCaption @ "|" @ PanelCaption);
    }

    else if (!bAlwaysApply)
    {
        if (Setting.b_Apply.MenuState != MSAT_Disabled)
            bNeedApply = True;
        else bNeedApply = False;
    }
}

function AcceptClicked()
{
    if (!bAlwaysApply)
        DisableComponent(Setting.b_Apply);

    SaveSettings();
}

event Closed(GUIComponent Sender, bool bCancelled)
{
	Super.Closed(Sender, bCancelled);
	if ( bAlwaysApply )
	{
		AcceptClicked();
		return;
	}

	if (!bCancelled)
		SaveSettings();
}

function SaveSettings();
function ResetClicked();

function string GetNativeClassName(string VarName)
{
	local int i;
	local string Str;

	Str = PlayerOwner().ConsoleCommand("get ini:"$VarName@"Class");
	i = InStr(Str, "'");
	if (i != -1)
	{
		Str = Mid(Str, InStr(Str, "'") + 1);
		Str = Left(Str, Len(Str) - 1);
	}

	return Str;
}

function ShowPerformanceWarning( optional float Seconds )
{
	if ( Controller == None || default.bExpert )
		return;

	if ( !Controller.OpenMenu(PerformanceWarningMenu, string(Seconds)) )
	{
	    if ( Seconds <= 0.0 )
		   	Seconds	= 3.5;

		WarningLength = Seconds;
		WarningCounter = 0.0;

		SetTimer( 0.1, True );

		OnRendered = DrawPerfWarn;
	}
}

event Timer()
{
	WarningCounter += 0.1;
}

function DrawPerfWarn( Canvas C )
{
	C.Style = 5;	// Alpha
	C.SetDrawColor( 250, 250, 250, 255 * FMax( ((WarningLength - WarningCounter)/WarningLength), 0.0 ) );
	C.Font = Controller.GetMenuFont("UT2SmallHeaderFont").GetFont(C.SizeX);
	C.DrawTextJustified( PerformanceWarningText, 1, ActualLeft(), ActualTop(), ActualLeft() + ActualWidth(), (ActualTop() + ActualHeight()) * 0.8 );
	if ( WarningCounter >= WarningLength )
	{
		WarningLength  = 0.0;
		WarningCounter = 0.0;
		OnRendered = None;
		KillTimer();
	}
}

function InternalOnChange(GUIComponent Sender)
{
	if ( !bAlwaysApply && Setting.b_Apply != None )
		EnableComponent(Setting.b_Apply);
}

defaultproperties
{
    bAlwaysApply=True
    FadeInTime=0.15
    PerformanceWarningMenu="GUI2K4.UT2K4PerformWarn"
	PerformanceWarningText="The change you are making may adversely affect your performance."
}
