UWindow
Class UWindowVScrollBar

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

class UWindowVScrollBar
extends UWindow.UWindowWindow

//============================================================================= // UWindowVScrollBar - A vertical scrollbar //=============================================================================
Variables
 UWindowSBDownButton DownButton
 float DragY
           offset to WinTop
 float MaxPos
 float MaxVisible
 float MinPos
 float NextClickTime
           offset to WinTop
 float Pos
           offset to WinTop
 float ScrollAmount
           offset to WinTop
 ThumbStart, ThumbHeight
           offset to WinTop
 UWindowSBUpButton UpButton
 bool bDisabled
 bool bDragging
           offset to WinTop


Function Summary
 void BeforePaint(Canvas C, float X, float Y)
 void CheckRange()
 void Created()
 void LMouseDown(float X, float Y)
 void MouseMove(float X, float Y)
 void Paint(Canvas C, float X, float Y)
 bool Scroll(float Delta)
 void SetRange(float NewMinPos, float NewMaxPos, float NewMaxVisible, optional float)
 void Show(float P)
 void Tick(float Delta)



Source Code


00001	//=============================================================================
00002	// UWindowVScrollBar - A vertical scrollbar
00003	//=============================================================================
00004	class UWindowVScrollBar extends UWindowWindow;
00005	
00006	var UWindowSBUpButton		UpButton;
00007	var UWindowSBDownButton		DownButton;
00008	var bool					bDisabled;
00009	var float					MinPos;
00010	var float					MaxPos;
00011	var float					MaxVisible;
00012	var float					Pos;				// offset to WinTop
00013	var float					ThumbStart, ThumbHeight;
00014	var float					NextClickTime;
00015	var float					DragY;
00016	var bool					bDragging;
00017	var float					ScrollAmount;
00018	
00019	function Show(float P)
00020	{
00021		if(P < 0) return;
00022		if(P > MaxPos + MaxVisible) return;
00023	
00024		while(P < Pos) 
00025			if(!Scroll(-1))
00026				break;
00027		while(P - Pos > MaxVisible - 1)
00028			if(!Scroll(1))
00029				break;
00030	}
00031	
00032	function bool Scroll(float Delta)
00033	{
00034		local float OldPos;
00035	
00036		OldPos = Pos;
00037		Pos = Pos + Delta;
00038		CheckRange();
00039		return Pos == OldPos + Delta;
00040	}
00041	
00042	function SetRange(float NewMinPos, float NewMaxPos, float NewMaxVisible, optional float NewScrollAmount)
00043	{
00044		if(NewScrollAmount == 0)
00045			NewScrollAmount = 1;
00046	
00047		ScrollAmount = NewScrollAmount;
00048		MaxPos = NewMaxPos - NewMaxVisible;
00049		MaxVisible = NewMaxVisible;
00050	
00051		CheckRange();
00052	}
00053	
00054	function CheckRange()
00055	{
00056		if(Pos < MinPos)
00057		{
00058			Pos = MinPos;
00059		}
00060		else
00061		{
00062			if(Pos > MaxPos) Pos = MaxPos;
00063		}
00064	
00065		bDisabled = (MaxPos <= MinPos);
00066		DownButton.bDisabled = bDisabled;
00067		UpButton.bDisabled = bDisabled;
00068	
00069		if(bDisabled)
00070		{
00071			Pos = 0;
00072		}
00073		else
00074		{
00075			ThumbStart = ((Pos - MinPos) * (WinHeight - (2*LookAndFeel.Size_ScrollbarButtonHeight))) / (MaxPos + MaxVisible - MinPos);
00076			ThumbHeight = (MaxVisible * (WinHeight - (2*LookAndFeel.Size_ScrollbarButtonHeight))) / (MaxPos + MaxVisible - MinPos);
00077	
00078			if(ThumbHeight < LookAndFeel.Size_MinScrollbarHeight) 
00079				ThumbHeight = LookAndFeel.Size_MinScrollbarHeight;
00080			
00081			if(ThumbHeight + ThumbStart > WinHeight - (2*LookAndFeel.Size_ScrollbarButtonHeight))
00082			{
00083				ThumbStart = WinHeight - (2*LookAndFeel.Size_ScrollbarButtonHeight) - ThumbHeight;
00084			}
00085			ThumbStart = ThumbStart + LookAndFeel.Size_ScrollbarButtonHeight;
00086		}
00087	}
00088	
00089	function Created()
00090	{
00091		Super.Created();
00092		UpButton = UWindowSBUpButton(CreateWindow(class'UWindowSBUpButton', 0, 0, 12, 10));
00093		DownButton = UWindowSBDownButton(CreateWindow(class'UWindowSBDownButton', 0, WinHeight-10, 12, 10));
00094	}
00095	
00096	function BeforePaint(Canvas C, float X, float Y)
00097	{
00098		UpButton.WinTop = 0;
00099		UpButton.WinLeft = 0;
00100		UpButton.WinWidth = LookAndFeel.Size_ScrollbarWidth;
00101		UpButton.WinHeight = LookAndFeel.Size_ScrollbarButtonHeight;
00102	
00103		DownButton.WinTop = WinHeight - LookAndFeel.Size_ScrollbarButtonHeight;
00104		DownButton.WinLeft = 0;
00105		DownButton.WinWidth = LookAndFeel.Size_ScrollbarWidth;
00106		DownButton.WinHeight = LookAndFeel.Size_ScrollbarButtonHeight;
00107	
00108		CheckRange();
00109	}
00110	
00111	function Paint(Canvas C, float X, float Y) 
00112	{
00113		LookAndFeel.SB_VDraw(Self, C);
00114	}
00115	
00116	function LMouseDown(float X, float Y)
00117	{
00118		Super.LMouseDown(X, Y);
00119	
00120		if(bDisabled) return;
00121	
00122		if(Y < ThumbStart)
00123		{
00124			Scroll(-(MaxVisible-1));
00125			NextClickTime = GetLevel().TimeSeconds + 0.5;
00126			return;
00127		}
00128		if(Y > ThumbStart + ThumbHeight)
00129		{
00130			Scroll(MaxVisible-1);
00131			NextClickTime = GetLevel().TimeSeconds + 0.5;
00132			return;
00133		}
00134	
00135		if((Y >= ThumbStart) && (Y <= ThumbStart + ThumbHeight))
00136		{
00137			DragY = Y - ThumbStart;
00138			bDragging = True;
00139			Root.CaptureMouse();
00140			return;
00141		}
00142	}
00143	
00144	function Tick(float Delta)
00145	{
00146		local bool bUp, bDown;
00147		local float X, Y;
00148	
00149		if(bDragging) return;
00150	
00151		bUp = False;
00152		bDown = False;
00153	
00154		if(bMouseDown)
00155		{
00156			GetMouseXY(X, Y);
00157			bUp = (Y < ThumbStart);
00158			bDown = (Y > ThumbStart + ThumbHeight);
00159		}
00160		
00161		if(bMouseDown && (NextClickTime > 0) && (NextClickTime < GetLevel().TimeSeconds)  && bUp)
00162		{
00163			Scroll(-(MaxVisible-1));
00164			NextClickTime = GetLevel().TimeSeconds + 0.1;
00165		}
00166	
00167		if(bMouseDown && (NextClickTime > 0) && (NextClickTime < GetLevel().TimeSeconds)  && bDown)
00168		{
00169			Scroll(MaxVisible-1);
00170			NextClickTime = GetLevel().TimeSeconds + 0.1;
00171		}
00172	
00173		if(!bMouseDown || (!bUp && !bDown))
00174		{
00175			NextClickTime = 0;
00176		}
00177	}
00178	
00179	function MouseMove(float X, float Y)
00180	{
00181		if(bDragging && bMouseDown && !bDisabled)
00182		{
00183			while(Y < (ThumbStart+DragY) && Pos > MinPos)
00184			{
00185				Scroll(-1);
00186			}
00187	
00188			while(Y > (ThumbStart+DragY) && Pos < MaxPos)
00189			{
00190				Scroll(1);
00191			}	
00192		}
00193		else
00194			bDragging = False;
00195	}
00196	
00197	defaultproperties
00198	{
00199	}

End Source Code