UWindow
Class UWindowHSliderControl

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

End Source Code