UWindow
Class UWindowHSliderControl

source: e:\games\UnrealTournament\UWindow\Classes\UWindowHSliderControl.uc
Core.Object
   |
   +--UWindow.UWindowBase
      |
      +--UWindow.UWindowWindow
         |
         +--UWindow.UWindowDialogControl
            |
            +--UWindow.UWindowHSliderControl
Direct Known Subclasses:None

class UWindowHSliderControl
extends UWindow.UWindowDialogControl


Variables
 float TrackStart
 float TrackWidth
 bool bNoSlidingNotify
 bool bSliding


Function Summary
 void BeforePaint(Canvas C, float X, float Y)
 float CheckValue(float Test)
 void Created()
 float GetValue()
 void KeyDown(int Key, float X, float Y)
 void LMouseDown(float X, float Y)
 void LMouseUp(float X, float Y)
 void MouseMove(float X, float Y)
 void Paint(Canvas C, float X, float Y)
 void SetRange(float Min, float Max, int NewStep)
 void SetValue(float NewValue, optional bool)



Source Code


00001	class UWindowHSliderControl extends UWindowDialogControl;
00002	
00003	
00004	var	float	MinValue;
00005	var	float	MaxValue;
00006	var	float	Value;
00007	var	int		Step;		// 0 = continuous
00008	
00009	var	float	SliderWidth;
00010	var	float	SliderDrawX, SliderDrawY;
00011	var float	TrackStart;
00012	var float	TrackWidth;
00013	var bool	bSliding;
00014	var bool	bNoSlidingNotify;
00015	
00016	
00017	function Created()
00018	{
00019		Super.Created();
00020		SliderWidth = WinWidth / 2;
00021		TrackWidth = 4;
00022	}
00023	
00024	function SetRange(float Min, float Max, int NewStep)
00025	{
00026		MinValue = Min;
00027		MaxValue = Max;
00028		Step = NewStep;
00029		Value = CheckValue(Value);
00030	}
00031	
00032	function float GetValue()
00033	{
00034		return Value;
00035	}
00036	
00037	function SetValue(float NewValue, optional bool bNoNotify)
00038	{
00039		local float OldValue;
00040	
00041		OldValue = Value;
00042	
00043		Value = CheckValue(NewValue);
00044	
00045		if(Value != OldValue && !bNoNotify)
00046		{
00047			// Notify
00048			Notify(DE_Change);
00049		}	
00050	}
00051	
00052	
00053	function float CheckValue(float Test)
00054	{
00055		local float TempF;
00056		local float NewValue;
00057		
00058		NewValue = Test;
00059		
00060		if(Step != 0)
00061		{
00062			TempF = NewValue / Step;
00063			NewValue = Int(TempF + 0.5) * Step;
00064		}
00065	
00066		if(NewValue < MinValue) NewValue = MinValue;
00067		if(NewValue > MaxValue) NewValue = MaxValue;
00068	
00069		return NewValue;
00070	}
00071	
00072	
00073	
00074	
00075	
00076	function BeforePaint(Canvas C, float X, float Y)
00077	{
00078		local float W, H;
00079		
00080		Super.BeforePaint(C, X, Y);
00081		
00082		TextSize(C, Text, W, H);
00083		WinHeight = H+1;
00084		
00085		switch(Align)
00086		{
00087		case TA_Left:
00088			SliderDrawX = WinWidth - SliderWidth;
00089			TextX = 0;
00090			break;
00091		case TA_Right:
00092			SliderDrawX = 0;	
00093			TextX = WinWidth - W;
00094			break;
00095		case TA_Center:
00096			SliderDrawX = (WinWidth - SliderWidth) / 2;
00097			TextX = (WinWidth - W) / 2;
00098			break;
00099		}
00100	
00101		SliderDrawY = (WinHeight - 2) / 2;
00102		TextY = (WinHeight - H) / 2;
00103	
00104		TrackStart = SliderDrawX + (SliderWidth - TrackWidth) * ((Value - MinValue)/(MaxValue - MinValue));
00105	}
00106	
00107	
00108	function Paint(Canvas C, float X, float Y)
00109	{
00110		local Texture T;
00111		local Region R;
00112	
00113		T = GetLookAndFeelTexture();
00114	
00115	
00116		if(Text != "")
00117		{
00118			C.DrawColor = TextColor;
00119			ClipText(C, TextX, TextY, Text);
00120			C.DrawColor.R = 255;
00121			C.DrawColor.G = 255;
00122			C.DrawColor.B = 255;
00123		}
00124		
00125		R = LookAndFeel.HLine;
00126		DrawStretchedTextureSegment( C, SliderDrawX, SliderDrawY, SliderWidth, R.H, R.X, R.Y, R.W, R.H, T);
00127	
00128		DrawUpBevel(C, TrackStart, SliderDrawY-4, TrackWidth, 10, T);
00129	}
00130	
00131	function LMouseUp(float X, float Y)
00132	{
00133		Super.LMouseUp(X, Y);
00134	
00135		if(bNoSlidingNotify)
00136			Notify(DE_Change);
00137	}
00138	
00139	function LMouseDown(float X, float Y)
00140	{
00141		Super.LMouseDown(X, Y);
00142		if((X >= TrackStart) && (X <= TrackStart + TrackWidth)) {
00143			bSliding = True;
00144			Root.CaptureMouse();
00145		}
00146	
00147		if(X < TrackStart && X > SliderDrawX)
00148		{
00149			if(Step != 0)
00150				SetValue(Value - Step);
00151			else
00152				SetValue(Value - 1);
00153		}
00154		
00155		if(X > TrackStart + TrackWidth && X < SliderDrawX + SliderWidth)
00156		{
00157			if(Step != 0)
00158				SetValue(Value + Step);
00159			else
00160				SetValue(Value + 1);
00161		}
00162		
00163	}
00164	
00165	function MouseMove(float X, float Y)
00166	{
00167		Super.MouseMove(X, Y);
00168		if(bSliding && bMouseDown)
00169		{
00170			SetValue((((X - SliderDrawX) / (SliderWidth - TrackWidth)) * (MaxValue - MinValue)) + MinValue, bNoSlidingNotify);
00171		}
00172		else
00173			bSliding = False;
00174	}
00175	
00176	
00177	function KeyDown(int Key, float X, float Y)
00178	{
00179		local PlayerPawn P;
00180	
00181		P = GetPlayerOwner();
00182	
00183		switch (Key)
00184		{
00185		case P.EInputKey.IK_Left:
00186			if(Step != 0)
00187				SetValue(Value - Step);
00188			else
00189				SetValue(Value - 1);
00190	
00191			break;
00192		case P.EInputKey.IK_Right:
00193			if(Step != 0)
00194				SetValue(Value + Step);
00195			else
00196				SetValue(Value + 1);
00197	
00198			break;
00199		case P.EInputKey.IK_Home:
00200			SetValue(MinValue);
00201			break;
00202		case P.EInputKey.IK_End:
00203			SetValue(MaxValue);
00204			break;
00205		default:
00206			Super.KeyDown(Key, X, Y);
00207			break;
00208		}
00209	}
00210	
00211	defaultproperties
00212	{
00213	}

End Source Code