Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/Source/GUI/GUINumberInput.cs
2017-07-05 18:35:09 +03:00

115 lines
3.3 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
namespace Barotrauma
{
class GUINumberInput : GUIComponent
{
public delegate void OnValueChangedHandler(GUINumberInput numberInput, int number);
public OnValueChangedHandler OnValueChanged;
private GUITextBox textBox;
private GUIButton plusButton, minusButton;
public int? MinValue, MaxValue;
private int value;
public int Value
{
get { return value; }
set
{
if (value == this.value) return;
this.value = value;
if (MinValue != null)
{
this.value = Math.Max(this.value, (int)MinValue);
minusButton.Enabled = this.value > MinValue;
}
if (MaxValue != null)
{
this.value = Math.Min(this.value, (int)MaxValue);
plusButton.Enabled = this.value < MaxValue;
}
textBox.Text = this.value.ToString();
if (OnValueChanged != null) OnValueChanged(this, this.value);
}
}
public GUINumberInput(Rectangle rect, string style, int? minValue = null, int? maxValue = null, GUIComponent parent = null)
: this(rect, style, Alignment.TopLeft, minValue, maxValue, parent)
{
}
public GUINumberInput(Rectangle rect, string style, Alignment alignment, int? minValue = null, int? maxValue = null, GUIComponent parent = null)
: base(style)
{
this.rect = rect;
this.alignment = alignment;
if (parent != null)
parent.AddChild(this);
textBox = new GUITextBox(Rectangle.Empty, style, this);
textBox.OnTextChanged += TextChanged;
plusButton = new GUIButton(new Rectangle(0, 0, 15, rect.Height / 2), "+", null, Alignment.TopRight, Alignment.Center, style, this);
plusButton.OnClicked += ChangeValue;
minusButton = new GUIButton(new Rectangle(0, 0, 15, rect.Height / 2), "-", null, Alignment.BottomRight, Alignment.Center, style, this);
minusButton.OnClicked += ChangeValue;
MinValue = minValue;
MaxValue = maxValue;
value = int.MaxValue;
Value = minValue != null ? (int)minValue : 0;
}
private bool ChangeValue(GUIButton button, object userData)
{
if (button == plusButton)
{
Value++;
}
else
{
Value--;
}
return false;
}
private bool TextChanged(GUITextBox textBox, string text)
{
int newValue = Value;
if (text == "" || text == "-")
{
Value = 0;
textBox.Text = text;
}
else if (int.TryParse(text, out newValue))
{
Value = newValue;
}
else
{
textBox.Text = Value.ToString();
}
return true;
}
public override void Draw(SpriteBatch spriteBatch)
{
if (!Visible) return;
DrawChildren(spriteBatch);
}
}
}