Core.Object | +--UWindow.UWindowBase | +--UWindow.UWindowWindow | +--UWindow.UWindowDialogControl | +--UWindow.UWindowHSliderControl
float
TrackStart
TrackWidth
bool
bNoSlidingNotify
bSliding
void
BeforePaint(Canvas C, float X, float Y)
CheckValue(float Test)
Created()
GetValue()
KeyDown(int Key, float X, float Y)
LMouseDown(float X, float Y)
LMouseUp(float X, float Y)
MouseMove(float X, float Y)
Paint(Canvas C, float X, float Y)
SetRange(float Min, float Max, int NewStep)
SetValue(float NewValue, optional bool)
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 }