123 lines
2.7 KiB
Ucode
123 lines
2.7 KiB
Ucode
Class KFGUI_ScrollBarBase extends KFGUI_Clickable
|
|
abstract;
|
|
|
|
var() int MinRange,MaxRange,ScrollStride,PageStep;
|
|
var() float ButtonScale; // Button width (scaled by default font height).
|
|
var int CurrentScroll;
|
|
|
|
// In-runtime values.
|
|
var transient float CalcButtonScale;
|
|
var transient int SliderScale,ButtonOffset,GrabbedOffset;
|
|
var transient bool bGrabbedScroller;
|
|
|
|
var bool bVertical, bHideScrollbar;
|
|
|
|
final function UpdateScrollSize( int Current, int MxRange, int Stride, int StepStride, optional int MnRange )
|
|
{
|
|
MaxRange = MxRange;
|
|
MinRange = MnRange;
|
|
ScrollStride = Stride;
|
|
PageStep = StepStride;
|
|
SetValue(Current);
|
|
}
|
|
final function AddValue( int V )
|
|
{
|
|
SetValue(CurrentScroll+V);
|
|
}
|
|
final function SetValue( int V )
|
|
{
|
|
CurrentScroll = Clamp((V / ScrollStride) * ScrollStride,MinRange,MaxRange);
|
|
OnScrollChange(Self,CurrentScroll);
|
|
}
|
|
final function int GetValue()
|
|
{
|
|
return CurrentScroll;
|
|
}
|
|
Delegate OnScrollChange( KFGUI_ScrollBarBase Sender, int Value );
|
|
|
|
// Get UI width.
|
|
function float GetWidth()
|
|
{
|
|
CalcButtonScale = ButtonScale*Owner.CurrentStyle.DefaultHeight;
|
|
return CalcButtonScale / (bVertical ? InputPos[2] : InputPos[3]);
|
|
}
|
|
function PreDraw()
|
|
{
|
|
// Auto scale to match width to screen size.
|
|
if( bVertical )
|
|
XSize = GetWidth();
|
|
else YSize = GetWidth();
|
|
Super.PreDraw();
|
|
}
|
|
function DrawMenu()
|
|
{
|
|
if( !bHideScrollbar )
|
|
{
|
|
Owner.CurrentStyle.RenderScrollBar(Self);
|
|
}
|
|
}
|
|
function MouseClick( bool bRight )
|
|
{
|
|
if( bRight || bDisabled )
|
|
return;
|
|
bPressedDown = true;
|
|
PlayMenuSound(MN_ClickButton);
|
|
|
|
if( bVertical )
|
|
{
|
|
if( Owner.MousePosition.Y>=(CompPos[1]+ButtonOffset) && Owner.MousePosition.Y<=(CompPos[1]+ButtonOffset+SliderScale) ) // Grabbed scrollbar!
|
|
{
|
|
GrabbedOffset = Owner.MousePosition.Y - (CompPos[1]+ButtonOffset);
|
|
bGrabbedScroller = true;
|
|
GetInputFocus();
|
|
}
|
|
else if( Owner.MousePosition.Y<(CompPos[1]+ButtonOffset) ) // Page up.
|
|
AddValue(-PageStep);
|
|
else AddValue(PageStep);
|
|
}
|
|
else
|
|
{
|
|
if( Owner.MousePosition.X>=(CompPos[0]+ButtonOffset) && Owner.MousePosition.X<=(CompPos[0]+ButtonOffset+SliderScale) ) // Grabbed scrollbar!
|
|
{
|
|
GrabbedOffset = Owner.MousePosition.X - (CompPos[0]+ButtonOffset);
|
|
bGrabbedScroller = true;
|
|
GetInputFocus();
|
|
}
|
|
else if( Owner.MousePosition.X<(CompPos[0]+ButtonOffset) ) // Page left.
|
|
AddValue(-PageStep);
|
|
else AddValue(PageStep);
|
|
}
|
|
}
|
|
function MouseRelease( bool bRight )
|
|
{
|
|
if( !bRight )
|
|
DropInputFocus();
|
|
}
|
|
|
|
function LostInputFocus()
|
|
{
|
|
bGrabbedScroller = false;
|
|
bPressedDown = false;
|
|
}
|
|
|
|
function ScrollMouseWheel( bool bUp )
|
|
{
|
|
if( bDisabled )
|
|
return;
|
|
if( bUp )
|
|
AddValue(-ScrollStride);
|
|
else AddValue(ScrollStride);
|
|
}
|
|
|
|
function SetVisibility(bool Visible)
|
|
{
|
|
bHideScrollbar = Visible;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
MaxRange=100
|
|
ScrollStride=1
|
|
PageStep=10
|
|
ButtonScale=1
|
|
} |