260 lines
6.1 KiB
Ucode
260 lines
6.1 KiB
Ucode
// ====================================================================
|
|
// Class: UT2K4UI.GUISlider
|
|
//
|
|
// Written by Joe Wilcox
|
|
// (c) 2002, Epic Games, Inc. All Rights Reserved
|
|
// Sliders will not be drawn if both MinValue & MaxValue are both 0
|
|
// ====================================================================
|
|
|
|
class GUISlider extends GUIComponent
|
|
Native;
|
|
|
|
cpptext
|
|
{
|
|
void Draw(UCanvas* Canvas);
|
|
}
|
|
|
|
var() float MinValue, MaxValue;
|
|
var() float Value;
|
|
var() float MarkerWidth;
|
|
var() bool bIntSlider;
|
|
var() bool bShowMarker;
|
|
var() bool bShowCaption;
|
|
var() bool bDrawPercentSign;
|
|
var() bool bReadOnly;
|
|
var() bool bShowValueTooltip; // Show the current value as a tooltip while dragging
|
|
var() material FillImage;
|
|
|
|
var() string CaptionStyleName, BarStyleName;
|
|
var GUIStyles CaptionStyle;
|
|
var GUIStyles BarStyle;
|
|
|
|
|
|
// Return true to prevent caption from being drawn
|
|
delegate bool OnPreDrawCaption( out float X, out float Y, out float XL, out float YL, out ETextAlign Justification );
|
|
|
|
delegate string OnDrawCaption()
|
|
{
|
|
if (bIntSlider)
|
|
return "("$int(Value)$ Eval(bDrawPercentSign, " %", "") $ ")";
|
|
|
|
return "("$Value$Eval(bDrawPercentSign, " %", "") $ ")";
|
|
}
|
|
|
|
function InitComponent(GUIController MyController, GUIComponent MyOwner)
|
|
{
|
|
Super.Initcomponent(MyController, MyOwner);
|
|
|
|
CaptionStyle = Controller.GetStyle(CaptionStyleName,FontScale);
|
|
BarStyle = Controller.GetStyle(BarStyleName,FontScale);
|
|
|
|
}
|
|
|
|
function bool InternalCapturedMouseMove(float deltaX, float deltaY)
|
|
{
|
|
local float Perc;
|
|
|
|
if ( bReadOnly )
|
|
return true;
|
|
|
|
if ( (Controller.MouseX >= Bounds[0]) && (Controller.MouseX<=Bounds[2]) )
|
|
{
|
|
Perc = FClamp( ((Controller.MouseX - (ActualLeft() + (MarkerWidth/2))) / (ActualWidth()-MarkerWidth)), 0.0, 1.0 );
|
|
Value = ((MaxValue - MinValue) * Perc) + MinValue;
|
|
if (bIntSlider)
|
|
Value = round(Value);
|
|
}
|
|
else if (Controller.MouseX < Bounds[0])
|
|
Value = MinValue;
|
|
else if (Controller.MouseX > Bounds[2])
|
|
Value = MaxValue;
|
|
|
|
Value = FClamp(Value,MinValue,MaxValue);
|
|
|
|
if ( bShowValueTooltip )
|
|
ToolTip.SetTip( GetValueString() );
|
|
|
|
return true;
|
|
}
|
|
|
|
function bool InternalOnKeyEvent(out byte Key, out byte State, float delta)
|
|
{
|
|
if ( bReadOnly )
|
|
return false;
|
|
|
|
if ( (Key==0x25) && (State==1) ) // Left
|
|
{
|
|
if (bIntSlider)
|
|
Adjust(-1);
|
|
else
|
|
Adjust(-0.01);
|
|
return true;
|
|
}
|
|
|
|
if ( (Key==0x27) && (State==1) ) // Right
|
|
{
|
|
if (bIntSlider)
|
|
Adjust(1);
|
|
else
|
|
Adjust(0.01);
|
|
return true;
|
|
}
|
|
|
|
|
|
return false;
|
|
}
|
|
|
|
function float SetValue(float NewValue)
|
|
{
|
|
Value = FClamp(NewValue, MinValue, MaxValue);
|
|
|
|
if (bIntSlider)
|
|
Value = Round(Value);
|
|
|
|
return Value;
|
|
}
|
|
|
|
function Adjust(float amount)
|
|
{
|
|
local float Perc;
|
|
Perc = (Value-MinValue) / (MaxValue-MinValue);
|
|
Perc += amount;
|
|
Perc = FClamp(Perc,0.0,1.0);
|
|
Value = FClamp( ((MaxValue - MinValue) * Perc) + MinValue, MinValue, MaxValue );
|
|
OnChange(self);
|
|
}
|
|
|
|
function bool InternalOnClick(GUIComponent Sender)
|
|
{
|
|
if ( bShowValueToolTip )
|
|
RevertTooltipToNormal();
|
|
|
|
OnChange(self);
|
|
return true;
|
|
}
|
|
|
|
function InternalOnMousePressed(GUIComponent Sender,bool RepeatClick)
|
|
{
|
|
if ( bShowValueTooltip )
|
|
ModifyTooltipForDragging();
|
|
|
|
InternalCapturedMouseMove(0,0);
|
|
}
|
|
|
|
function InternalOnMouseRelease(GUIComponent Sender)
|
|
{
|
|
InternalCapturedMouseMove(0,0);
|
|
}
|
|
|
|
function SetReadOnly(bool b)
|
|
{
|
|
bReadOnly = b;
|
|
}
|
|
|
|
event float GetMarkerPosition()
|
|
{
|
|
local float Perc;
|
|
|
|
Perc = (Value - MinValue) / (MaxValue - MinValue);
|
|
return ActualLeft() + ((ActualWidth() - MarkerWidth) * Perc);
|
|
}
|
|
|
|
function CenterMouse()
|
|
{
|
|
if ( PlayerOwner() != None )
|
|
PlayerOwner().ConsoleCommand( "SETMOUSE" @ GetMarkerPosition() @ (ActualTop() + ActualHeight() / 2) );
|
|
}
|
|
|
|
function string GetValueString()
|
|
{
|
|
local string ValueStr;
|
|
|
|
if ( bIntSlider )
|
|
ValueStr = string( int(Value) );
|
|
else ValueStr = string(Value);
|
|
if ( bDrawPercentSign )
|
|
ValueStr @= "%";
|
|
|
|
return ValueStr;
|
|
}
|
|
|
|
function ModifyTooltipForDragging()
|
|
{
|
|
ToolTip.bTrackMouse = True;
|
|
ToolTip.bTrackInput = False;
|
|
ToolTip.bMultiLine = False;
|
|
ToolTip.HideToolTip = HideToolTip;
|
|
ToolTip.LeaveArea = ToolTipLeaveArea;
|
|
SetTooltipText( GetValueString() );
|
|
ShowToolTip();
|
|
}
|
|
|
|
function RevertTooltipToNormal()
|
|
{
|
|
ToolTip.bTrackMouse = ToolTip.default.bTrackMouse;
|
|
ToolTip.bTrackInput = ToolTip.default.bTrackInput;
|
|
ToolTip.bMultiLine = ToolTip.default.bMultiLine;
|
|
ToolTip.HideToolTip = None;
|
|
ToolTip.LeaveArea = None;
|
|
ToolTip.LeaveArea();
|
|
SetTooltipText( Hint );
|
|
}
|
|
|
|
function ShowToolTip()
|
|
{
|
|
Controller.MouseOver = ToolTip.InternalEnterArea();
|
|
ToolTip.SetVisibility(True);
|
|
}
|
|
|
|
function HideToolTip()
|
|
{
|
|
if ( MenuState != MSAT_Pressed )
|
|
{
|
|
log("HideToolTip MenuState:"$GetEnum(enum'EMenuState', MenuState));
|
|
ToolTip.SetVisibility(False);
|
|
}
|
|
}
|
|
|
|
function bool ToolTipLeaveArea()
|
|
{
|
|
return False;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
OnCapturedMouseMove=InternalCapturedMouseMove
|
|
OnKeyEvent=InternalOnKeyEvent
|
|
OnClick=InternalOnClick
|
|
OnMousePressed=InternalOnMousePressed
|
|
OnMouseRelease=InternalOnMouseRelease
|
|
|
|
Begin object Class=GUIToolTip Name=GUISliderToolTip
|
|
End Object
|
|
ToolTip=GUISliderToolTip
|
|
|
|
StyleName="SliderKnob"
|
|
bAcceptsInput=true
|
|
bCaptureMouse=True
|
|
bNeverFocus=false
|
|
bTabStop=true
|
|
WinHeight=0.03
|
|
bRequireReleaseClick=true
|
|
CaptionStyleName="SliderCaption"
|
|
bIntSlider=false;
|
|
OnClickSound=CS_Click
|
|
BarStyleName="SliderBar"
|
|
MinValue=0
|
|
MaxValue=100
|
|
bShowMarker=true
|
|
bShowCaption=false
|
|
MarkerWidth=0
|
|
// if _RO_
|
|
FillImage=Texture'InterfaceArt_tex.Menu.SliderFillBlurry'
|
|
// else
|
|
// FillImage=material'2K4Menus.NewControls.SliderFillBlurry'
|
|
// end if _RO_
|
|
bRequiresStyle=True
|
|
bDrawPercentSign=false
|
|
bShowValueTooltip=true
|
|
}
|