Class KFGUI_MultiComponent extends KFGUI_Base;

var() export editinline array<KFGUI_Base> Components;

function InitMenu()
{
	local int i;
	
	for (i=0; i<Components.Length; ++i)
	{
		Components[i].Owner = Owner;
		Components[i].ParentComponent = Self;
		Components[i].InitMenu();
	}
}

function ShowMenu()
{
	local int i;
	
	for (i=0; i<Components.Length; ++i)
		Components[i].ShowMenu();
}

function PreDraw()
{
	local int i;
	local byte j;

	ComputeCoords();
	Canvas.SetDrawColor(255,255,255);
	Canvas.SetOrigin(CompPos[0],CompPos[1]);
	Canvas.SetClip(CompPos[0]+CompPos[2],CompPos[1]+CompPos[3]);
	DrawMenu();
	for (i=0; i<Components.Length; ++i)
	{
		Components[i].Canvas = Canvas;
		for (j=0; j<4; ++j)
			Components[i].InputPos[j] = CompPos[j];
		Components[i].PreDraw();
	}
}

function MenuTick(float DeltaTime)
{
	local int i;

	Super.MenuTick(DeltaTime);
	for (i=0; i<Components.Length; ++i)
		Components[i].MenuTick(DeltaTime);
}

function AddComponent(KFGUI_Base C)
{
	Components[Components.Length] = C;
	C.Owner = Owner;
	C.ParentComponent = Self;
	C.InitMenu();
}

function CloseMenu()
{
	local int i;
	
	for (i=0; i<Components.Length; ++i)
		Components[i].CloseMenu();
}

function bool CaptureMouse()
{
	local int i;
	
	for (i=0; i<Components.Length; ++i)
		if (Components[i].CaptureMouse())
		{
			MouseArea = Components[i];
			return true;
		}
	MouseArea = None;
	return Super.CaptureMouse(); // check with frame itself.
}

function KFGUI_Base FindComponentID(name InID)
{
	local int i;
	local KFGUI_Base Result;

	if (ID==InID)
		Result = Self;
	else
	{
		for (i=0; i<Components.Length && Result==None; ++i)
			Result = Components[i].FindComponentID(InID);
	}
	return Result;
}

function FindAllComponentID(name InID, out array<KFGUI_Base> Res)
{
	local int i;

	if (ID==InID)
		Res[Res.Length] = Self;
	for (i=0; i<Components.Length; ++i)
		Components[i].FindAllComponentID(InID,Res);
}

function RemoveComponent(KFGUI_Base B)
{
	local int i;
	
	for (i=0; i<Components.Length; ++i)
		if (Components[i]==B)
		{
			Components.Remove(i,1);
			B.CloseMenu();
			return;
		}
	for (i=0; i<Components.Length; ++i)
		Components[i].RemoveComponent(B);
}

function NotifyLevelChange()
{
	local int i;
	
	for (i=0; i<Components.Length; ++i)
		Components[i].NotifyLevelChange();
}