// ==================================================================== // Class: UT2K4UI. UT2NumericEdit // // A Combination of an EditBox and 2 spinners // // Written by Joe Wilcox // (c) 2002, Epic Games, Inc. All Rights Reserved // ==================================================================== class GUINumericEdit extends GUIMultiComponent Native; cpptext { void PreDraw(UCanvas* Canvas); } var Automated GUIEditBox MyEditBox; var Automated GUISpinnerButton MySpinner; var() string Value; var() bool bLeftJustified; var() int MinValue; var() int MaxValue; var() int Step; var() bool bReadOnly; function InitComponent(GUIController MyController, GUIComponent MyOwner) { if ( MinValue < 0 ) MyEditBox.bIncludeSign = True; Super.InitComponent(MyController, MyOwner); MyEditBox.OnChange = EditOnChange; MyEditBox.SetText(Value); MyEditBox.OnKeyEvent = EditKeyEvent; MyEditBox.OnDeActivate = CheckValue; CalcMaxLen(); MyEditBox.INIOption = INIOption; MyEditBox.INIDefault = INIDefault; MySpinner.bNeverFocus = True; MySpinner.FocusInstead = MyEditBox; MySpinner.OnPlusClick = SpinnerPlusClick; MySpinner.OnMinusClick = SpinnerMinusClick; SetReadOnly(bReadOnly); SetHint(Hint); } function CalcMaxLen() { local int digitcount,x; digitcount=1; x=10; while (x <= MaxValue) { digitcount++; x*=10; } MyEditBox.MaxWidth = DigitCount; } function SetValue(int V) { if (vMaxValue) v=MaxValue; MyEditBox.SetText( string(Clamp(V, MinValue, MaxValue)) ); } function bool SpinnerPlusClick(GUIComponent Sender) { SetValue(int(Value) + Step); return true; } function bool SpinnerMinusClick(GUIComponent Sender) { SetValue(int(Value) - Step); return true; } function bool EditKeyEvent(out byte Key, out byte State, float delta) { if ( (key==0xEC) && (State==3) ) { SpinnerPlusClick(none); return true; } if ( (key==0xED) && (State==3) ) { SpinnerMinusClick(none); return true; } return MyEditBox.InternalOnKeyEvent(Key,State,Delta); } function EditOnChange(GUIComponent Sender) { Value = string(Clamp(int(MyEditBox.TextStr), MinValue, MaxValue)); OnChange(Self); } function SetHint(string NewHint) { local int i; Super.SetHint(NewHint); for (i=0;i