rott/kf_sources/XInterface/Classes/GUIVertList.uc
2026-07-14 20:27:09 +07:00

157 lines
2.6 KiB
Ucode

class GUIVertList extends GUIListBase
Native;
cpptext
{
void PreDraw(UCanvas* Canvas);
void Draw(UCanvas* Canvas);
}
delegate float GetItemHeight(Canvas C);
function CenterMouse()
{
local PlayerController PC;
local float X, Y;
if ( IsValid() )
{
PC = PlayerOwner();
if ( PC != None )
{
SetTopItem(Index);
X = ActualLeft() + ActualWidth() / 2;
Y = (Index - Top) * ItemHeight;
PC.ConsoleCommand("SETMOUSE" @ X @ Y);
}
return;
}
Super.CenterMouse();
}
event int CalculateIndex( optional bool bRequireValidIndex )
{
local int i, NewIndex;
// Figure out which Item we're clicking on
i = Top + ((Controller.MouseY - ClientBounds[1]) / ItemHeight);
if ( i >= ItemCount && bRequireValidIndex )
i = -1;
NewIndex = Min( i, ItemCount - 1 );
return NewIndex;
}
function bool InternalOnClick(GUIComponent Sender)
{
local int NewIndex;
if ( !IsInClientBounds() || ItemsPerPage==0 )
return false;
// Get the Row..
NewIndex = CalculateIndex();
SetIndex(NewIndex);
return true;
}
function bool InternalOnKeyType(out byte Key, optional string Unicode)
{
// Add code to jump to next line with Char
return false;
}
function WheelUp()
{
if (MyScrollBar!=None)
GUIVertScrollBar(MyScrollBar).WheelUp();
else
{
if (!Controller.CtrlPressed)
Up();
else
PgUp();
}
}
function WheelDown()
{
if (MyScrollBar!=None)
GUIVertScrollBar(MyScrollBar).WheelDown();
else
{
if (!Controller.CtrlPressed)
Down();
else
PgDn();
}
}
function bool Up()
{
if ( (ItemCount<2) || (Index==0) ) return true;
SetIndex(Max(0,Index-1));
if ( MyScrollBar != None )
MyScrollBar.AlignThumb();
return true;
}
function bool Down()
{
if ( (ItemCount<2) || (Index==ItemCount-1) ) return true;
SetIndex( Min(Index+1, ItemCount - 1) );
if ( MyScrollBar != None )
MyScrollBar.AlignThumb();
return true;
}
function Home()
{
if (ItemCount<2) return;
SetIndex(0);
if ( MyScrollBar != None )
MyScrollBar.AlignThumb();
}
function End()
{
if (ItemCount<2) return;
SetIndex(ItemCount-1);
if ( MyScrollBar != None )
MyScrollBar.AlignThumb();
}
function PgUp()
{
if (ItemCount<2) return;
SetIndex( Max(0, Index - ItemsPerPage) );
if ( MyScrollBar != None )
MyScrollBar.AlignThumb();
}
function PgDn()
{
if (ItemCount<2) return;
SetIndex( Min(Index + ItemsPerPage, ItemCount - 1) );
if ( MyScrollBar != None )
MyScrollBar.AlignThumb();
}
defaultproperties
{
OnClick=InternalOnClick
bRequiresStyle=True
}