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 } 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 }