162 lines
3.3 KiB
Ucode
162 lines
3.3 KiB
Ucode
|
// List box with components as items.
|
||
|
Class KFGUI_ComponentList extends KFGUI_List;
|
||
|
|
||
|
var int VisRange[2];
|
||
|
var() int NumColumns;
|
||
|
var array<KFGUI_Base> ItemComponents;
|
||
|
|
||
|
// REMEMBER to call InitMenu() on the newly created component after values are init!!!
|
||
|
final function KFGUI_Base AddListComponent( class<KFGUI_Base> CompClass, optional float XS=1.f, optional float YS=1.f )
|
||
|
{
|
||
|
local KFGUI_Base G;
|
||
|
|
||
|
G = new(Self)CompClass;
|
||
|
if( G==None )
|
||
|
return None;
|
||
|
G.XPosition = (1.f - XS) * 0.5f;
|
||
|
G.YPosition = (1.f - YS) * 0.5f;
|
||
|
G.XSize = XS;
|
||
|
G.YSize = YS;
|
||
|
G.Owner = Owner;
|
||
|
G.ParentComponent = Self;
|
||
|
ItemComponents[ItemComponents.Length] = G;
|
||
|
return G;
|
||
|
}
|
||
|
|
||
|
function EmptyList()
|
||
|
{
|
||
|
ItemComponents.Length = 0;
|
||
|
}
|
||
|
|
||
|
function InitMenu()
|
||
|
{
|
||
|
Super.InitMenu();
|
||
|
ListCount = 0;
|
||
|
NumColumns = Max(NumColumns,1);
|
||
|
}
|
||
|
|
||
|
function DrawMenu()
|
||
|
{
|
||
|
Canvas.DrawColor = BackgroundColor;
|
||
|
Canvas.SetPos(0.f,0.f);
|
||
|
Owner.CurrentStyle.DrawWhiteBox(CompPos[2],CompPos[3]);
|
||
|
}
|
||
|
|
||
|
function PreDraw()
|
||
|
{
|
||
|
local int i,XNum,r;
|
||
|
local byte j;
|
||
|
local float XS,YS;
|
||
|
|
||
|
ComputeCoords();
|
||
|
|
||
|
// Update list size
|
||
|
i = ItemComponents.Length / NumColumns;
|
||
|
if( i!=NumColumns )
|
||
|
{
|
||
|
ListCount = i;
|
||
|
UpdateListVis();
|
||
|
}
|
||
|
|
||
|
// First draw scrollbar to allow it to resize itself.
|
||
|
for( j=0; j<4; ++j )
|
||
|
ScrollBar.InputPos[j] = CompPos[j];
|
||
|
if( OldXSize!=InputPos[2] )
|
||
|
{
|
||
|
OldXSize = InputPos[2];
|
||
|
ScrollBar.XPosition = 1.f - ScrollBar.GetWidth();
|
||
|
}
|
||
|
ScrollBar.Canvas = Canvas;
|
||
|
ScrollBar.PreDraw();
|
||
|
|
||
|
// Then downscale our selves to give room for scrollbar.
|
||
|
CompPos[2] -= ScrollBar.CompPos[2];
|
||
|
Canvas.SetOrigin(CompPos[0],CompPos[1]);
|
||
|
Canvas.SetClip(CompPos[0]+CompPos[2],CompPos[1]+CompPos[3]);
|
||
|
DrawMenu();
|
||
|
|
||
|
// Then draw rest of components.
|
||
|
XNum = 0;
|
||
|
r = 0;
|
||
|
XS = CompPos[2] / NumColumns;
|
||
|
YS = CompPos[3] / ListItemsPerPage;
|
||
|
VisRange[0] = (ScrollBar.CurrentScroll*NumColumns);
|
||
|
VisRange[1] = ItemComponents.Length;
|
||
|
for( i=VisRange[0]; i<VisRange[1]; ++i )
|
||
|
{
|
||
|
ItemComponents[i].Canvas = Canvas;
|
||
|
ItemComponents[i].InputPos[0] = CompPos[0]+XS*XNum;
|
||
|
ItemComponents[i].InputPos[1] = CompPos[1]+YS*r;
|
||
|
ItemComponents[i].InputPos[2] = XS;
|
||
|
ItemComponents[i].InputPos[3] = YS;
|
||
|
ItemComponents[i].PreDraw();
|
||
|
|
||
|
if( ++XNum==NumColumns )
|
||
|
{
|
||
|
XNum = 0;
|
||
|
if( ++r==ListItemsPerPage )
|
||
|
{
|
||
|
VisRange[1] = i+1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CompPos[2] += ScrollBar.CompPos[2];
|
||
|
}
|
||
|
|
||
|
function ChangeListSize( int NewSize );
|
||
|
|
||
|
function MouseClick( bool bRight );
|
||
|
function MouseRelease( bool bRight );
|
||
|
function MouseLeave()
|
||
|
{
|
||
|
Super(KFGUI_Base).MouseLeave();
|
||
|
}
|
||
|
function MouseEnter()
|
||
|
{
|
||
|
Super(KFGUI_Base).MouseEnter();
|
||
|
}
|
||
|
|
||
|
function bool CaptureMouse()
|
||
|
{
|
||
|
local int i;
|
||
|
|
||
|
for( i=VisRange[0]; i<VisRange[1] && i<ItemComponents.Length; ++i )
|
||
|
if( ItemComponents[i].CaptureMouse() )
|
||
|
{
|
||
|
MouseArea = ItemComponents[i];
|
||
|
return true;
|
||
|
}
|
||
|
return Super.CaptureMouse();
|
||
|
}
|
||
|
function CloseMenu()
|
||
|
{
|
||
|
local int i;
|
||
|
|
||
|
for( i=0; i<ItemComponents.Length; ++i )
|
||
|
ItemComponents[i].CloseMenu();
|
||
|
Super.CloseMenu();
|
||
|
}
|
||
|
function NotifyLevelChange()
|
||
|
{
|
||
|
local int i;
|
||
|
|
||
|
for( i=0; i<ItemComponents.Length; ++i )
|
||
|
ItemComponents[i].NotifyLevelChange();
|
||
|
Super.NotifyLevelChange();
|
||
|
}
|
||
|
function MenuTick( float DeltaTime )
|
||
|
{
|
||
|
local int i;
|
||
|
|
||
|
Super.MenuTick(DeltaTime);
|
||
|
for( i=0; i<ItemComponents.Length; ++i )
|
||
|
ItemComponents[i].MenuTick(DeltaTime);
|
||
|
}
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
ListCount=0
|
||
|
NumColumns=1
|
||
|
bClickable=true
|
||
|
}
|