ZoneBuilder/Source/Plugins/BuilderModes/Interface/DrawShapeOptionsPanel.cs

150 lines
5.6 KiB
C#

using System;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Controls;
//JBR Draw Shape options panel
namespace CodeImp.DoomBuilder.BuilderModes
{
internal partial class DrawShapeOptionsPanel : UserControl
{
public event EventHandler OnValueChanged;
private bool blockEvents;
public bool PreviewReference { get { return previewreference.Checked; } set { blockEvents = true; previewreference.Checked = value; blockEvents = false; } }
public bool Ellipse { get { return ellipse.Checked; } set { blockEvents = true; ellipse.Checked = value; blockEvents = false; } }
public int FirstPointType { get { return firstpointtype.SelectedIndex; } set { blockEvents = true; firstpointtype.SelectedIndex = value; blockEvents = false; } }
public int CreateAs { get { return createas.SelectedIndex; } set { blockEvents = true; createas.SelectedIndex = value; blockEvents = false; } }
public bool FrontOutside { get { return frontoutside.Checked; } set { blockEvents = true; frontoutside.Checked = value; blockEvents = false; } }
public int Sides { get { return sides.GetResult(3); } set { blockEvents = true; SetValue(sides, value, 3, 1000); blockEvents = false; } }
public int Spikiness { get { return spikiness.GetResult(0); } set { blockEvents = true; SetValue(spikiness, value, 0, 32767); blockEvents = false; } }
public int SpikingMode { get { return spikingmode.SelectedIndex; } set { blockEvents = true; spikingmode.SelectedIndex = value; blockEvents = false; } }
public float StartAngle { get { return startangle.GetResultFloat(0f); } set { blockEvents = true; SetValue(startangle, value, 0f, 360f); blockEvents = false; } }
public float SweepAngle { get { return sweepangle.GetResultFloat(0f); } set { blockEvents = true; SetValue(sweepangle, value, 1f, 360f); blockEvents = false; } }
public bool LimitAngleQuad { get { return limitanglequad.Checked; } set { blockEvents = true; limitanglequad.Checked = value; blockEvents = false; } }
public DrawShapeOptionsPanel()
{
InitializeComponent();
spikingmode.SelectedIndex = 0;
firstpointtype.SelectedIndex = 0;
sides.Text = "3";
spikiness.Text = "0";
startangle.Text = "0";
sweepangle.Text = "360";
}
private void SetValue(ButtonsNumericTextbox component, int value, int min, int max)
{
if (value < min) value = min;
if (value > max) value = max;
component.Text = value.ToString();
}
private void SetValue(ButtonsNumericTextbox component, float value, float min, float max)
{
if (value < min) value = min;
if (value > max) value = max;
component.Text = value.ToString();
}
private void ValueChanged(object sender, EventArgs e)
{
if (!blockEvents && OnValueChanged != null) OnValueChanged(this, e);
}
private void sides_WhenTextChanged(object sender, EventArgs e)
{
int numsides = sides.GetResult(3);
if (numsides < 3)
sides.Text = "3";
if (numsides > 1024)
sides.Text = "1024";
ValueChanged(this, e);
}
private void spikiness_WhenTextChanged(object sender, EventArgs e)
{
int spikeperc = sides.GetResult(0);
if (spikeperc > 32767)
spikiness.Text = "32767";
ValueChanged(this, e);
}
private void startangle_WhenTextChanged(object sender, EventArgs e)
{
float angle = startangle.GetResultFloat(0f);
if (angle > 360f)
{
angle = 360f;
startangle.Text = "360";
}
startanglewheel.Angle = angle;
ValueChanged(this, e);
}
private void sweepangle_WhenTextChanged(object sender, EventArgs e)
{
float angle = sweepangle.GetResultFloat(0f);
if (angle < 1f)
{
angle = 1f;
sweepangle.Text = "1";
}
if (angle > 360f)
{
angle = 360f;
sweepangle.Text = "360";
}
sweepanglewheel.Angle = angle;
ValueChanged(this, e);
}
private void startanglewheel_AngleChanged(object sender, EventArgs e)
{
startangle.Text = startanglewheel.Angle.ToString();
ValueChanged(this, e);
}
private void sweepanglewheel_AngleChanged(object sender, EventArgs e)
{
float v = sweepanglewheel.Angle;
if (v < 0f) v = 0.1f;
if (v > 360f) v = 360f;
if (v == 0f) v = 360f;
sweepangle.Text = v.ToString();
ValueChanged(this, e);
}
private void sides3_Click(object sender, EventArgs e)
{
sides.Text = "3";
ValueChanged(this, e);
}
private void sides8_Click(object sender, EventArgs e)
{
sides.Text = "8";
ValueChanged(this, e);
}
private void sides24_Click(object sender, EventArgs e)
{
sides.Text = "24";
ValueChanged(this, e);
}
private void spike0_Click(object sender, EventArgs e)
{
spikiness.Text = "0";
ValueChanged(this, e);
}
private void spike50_Click(object sender, EventArgs e)
{
spikiness.Text = "50";
ValueChanged(this, e);
}
}
}