Core.Object | +--UWindow.UWindowBase | +--UWindow.UWindowWindow | +--UWindow.UWindowVScrollBar
UWindowSBDownButton
DownButton
float
DragY
MaxPos
MaxVisible
MinPos
NextClickTime
Pos
ScrollAmount
ThumbStart,
ThumbHeight
UWindowSBUpButton
UpButton
bool
bDisabled
bDragging
void
BeforePaint(Canvas C, float X, float Y)
CheckRange()
Created()
LMouseDown(float X, float Y)
MouseMove(float X, float Y)
Paint(Canvas C, float X, float Y)
Scroll(float Delta)
SetRange(float NewMinPos, float NewMaxPos, float NewMaxVisible, optional float)
Show(float P)
Tick(float Delta)
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 }