// A component to have multiple "pages" of different components.
Class KFGUI_SwitchComponent extends KFGUI_MultiComponent;

var protected int CurrentComponent;

function PreDraw()
{
	local byte j;

	ComputeCoords();
	if (CurrentComponent<0 || CurrentComponent>=Components.Length)
		return;
	Components[CurrentComponent].Canvas = Canvas;
	for (j=0; j<4; ++j)
		Components[CurrentComponent].InputPos[j] = CompPos[j];
	Components[CurrentComponent].PreDraw();
}

function bool CaptureMouse()
{
	if ((CurrentComponent>=0 || CurrentComponent<Components.Length) && Components[CurrentComponent].CaptureMouse())
	{
		MouseArea = Components[CurrentComponent];
		return true;
	}
	MouseArea = None;
	return Super(KFGUI_Base).CaptureMouse(); // check with frame itself.
}

final function int GetSelectedPage()
{
	return CurrentComponent;
}

final function name GetSelectedPageID()
{
	if (CurrentComponent<Components.Length)
		return Components[CurrentComponent].ID;
	return '';
}

final function bool SelectPageID(name PageID)
{
	local int i;

	if (Components[CurrentComponent].ID==PageID)
		return false;

	for (i=0; i<Components.Length; ++i)
		if (Components[i].ID==PageID)
		{
			Components[CurrentComponent].CloseMenu();
			CurrentComponent = i;
			Components[CurrentComponent].ShowMenu();
			return true;
		}
	return false;
}

final function bool SelectPageIndex(int Num)
{
	if (CurrentComponent==Num)
		return false;

	if (Num>=0 && Num<Components.Length)
	{
		Components[CurrentComponent].CloseMenu();
		CurrentComponent = Num;
		Components[CurrentComponent].ShowMenu();
		return true;
	}
	return false;
}

function ShowMenu()
{
	if (CurrentComponent<Components.Length)
		Components[CurrentComponent].ShowMenu();
}

function CloseMenu()
{
	if (CurrentComponent<Components.Length)
		Components[CurrentComponent].CloseMenu();
}