UltimateZoneBuilder/Source/Plugins/BuilderModes/Interface/EditSelectionPanel.cs

292 lines
7 KiB
C#
Raw Normal View History

#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Geometry;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
public partial class EditSelectionPanel : UserControl
{
#region ================== Constants
#endregion
#region ================== Variables
// Editing mode
private EditSelectionMode mode;
// Input
private bool userinput;
private bool preventchanges; //mxd
// Values
private Vector2D orgpos;
private Vector2D orgsize;
private Vector2D abspos;
private Vector2D relpos;
private Vector2D abssize;
private Vector2D relsize;
private double absrotate;
#endregion
#region ================== Constructor
// Constructor
public EditSelectionPanel(EditSelectionMode mode)
{
InitializeComponent();
this.mode = mode;
//mxd
preventchanges = true;
if(General.Map.UDMF)
{
preciseposition.Checked = mode.UsePrecisePosition;
preciseposition.Enabled = true;
}
else
{
preciseposition.Checked = false;
preciseposition.Enabled = false;
}
preventchanges = false;
//mxd. Otherwise the focus will go to one of TextBoxes
// and stay there forever preventing tab collapsing when in collapsed mode
label1.Focus();
}
#endregion
#region ================== Methods
// This sets the original size
public void ShowOriginalValues(Vector2D pos, Vector2D size)
{
// Set values
this.orgpos = pos;
this.orgsize = size;
// Set controls
orgposx.Text = pos.x.ToString();
orgposy.Text = pos.y.ToString();
orgsizex.Text = size.x.ToString();
orgsizey.Text = size.y.ToString();
}
// This sets the dynamic values
public void ShowCurrentValues(Vector2D pos, Vector2D relpos, Vector2D size, Vector2D relsize, double rotation)
{
// Set values
this.abspos = pos;
this.relpos = relpos;
this.abssize = size;
this.relsize = relsize;
this.absrotate = Angle2D.RadToDeg(rotation);
// Set controls
absposx.Text = pos.x.ToString("0.#");
absposy.Text = pos.y.ToString("0.#");
relposx.Text = relpos.x.ToString("0.#");
relposy.Text = relpos.y.ToString("0.#");
abssizex.Text = size.x.ToString("0.#");
abssizey.Text = size.y.ToString("0.#");
relsizex.Text = relsize.x.ToString("0.#");
relsizey.Text = relsize.y.ToString("0.#");
absrot.Text = this.absrotate.ToString("0.#");
userinput = false;
}
//mxd
internal void SetTextureTransformSettings(bool enable)
{
// Disable groups?
if(!enable)
{
pinfloortextures.Enabled = false;
pinceilingtextures.Enabled = false;
return;
}
// Update checkboxes
preventchanges = true;
pinfloortextures.Checked = mode.PinFloorTextures;
pinceilingtextures.Checked = mode.PinCeilingTextures;
preventchanges = false;
}
//mxd
internal void SetHeightAdjustMode(EditSelectionMode.HeightAdjustMode adjustmode, bool enable)
{
preventchanges = true;
heightmode.SelectedIndex = (int)adjustmode;
heightmode.Enabled = enable;
preventchanges = false;
}
#endregion
#region ================== Events
// User input given
private void WhenTextChanged(object sender, EventArgs e)
{
userinput = true;
}
private void absposx_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetAbsPosX(absposx.GetResultFloat(this.abspos.x));
}
private void absposy_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetAbsPosY(absposy.GetResultFloat(this.abspos.y));
}
private void relposx_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetRelPosX(relposx.GetResultFloat(this.relpos.x));
}
private void relposy_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetRelPosY(relposy.GetResultFloat(this.relpos.y));
}
private void abssizex_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetAbsSizeX(abssizex.GetResultFloat(this.abssize.x));
}
private void abssizey_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetAbsSizeY(abssizey.GetResultFloat(this.abssize.y));
}
private void relsizex_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetRelSizeX(relsizex.GetResultFloat(this.relsize.x));
}
private void relsizey_Validated(object sender, EventArgs e)
{
if(userinput)
mode.SetRelSizeY(relsizey.GetResultFloat(this.relsize.y));
}
private void absrot_Validated(object sender, EventArgs e)
{
if(userinput)
{
double rad = Angle2D.DegToRad(absrot.GetResultFloat(this.absrotate));
mode.SetAbsRotation(rad);
}
}
private void fliph_Click(object sender, EventArgs e)
{
General.Actions.InvokeAction("buildermodes_flipselectionh");
General.Interface.FocusDisplay();
}
private void flipv_Click(object sender, EventArgs e)
{
General.Actions.InvokeAction("buildermodes_flipselectionv");
General.Interface.FocusDisplay();
}
private void orgposx_Click(object sender, EventArgs e)
{
mode.SetAbsPosX(orgpos.x);
General.Interface.FocusDisplay();
}
private void orgposy_Click(object sender, EventArgs e)
{
mode.SetAbsPosY(orgpos.y);
General.Interface.FocusDisplay();
}
private void orgsizex_Click(object sender, EventArgs e)
{
mode.SetAbsSizeX(orgsize.x);
General.Interface.FocusDisplay();
}
private void orgsizey_Click(object sender, EventArgs e)
{
mode.SetAbsSizeY(orgsize.y);
General.Interface.FocusDisplay();
}
//mxd
private void preciseposition_CheckedChanged(object sender, EventArgs e)
{
if(preventchanges) return;
mode.UsePrecisePosition = preciseposition.Checked;
General.Interface.FocusDisplay();
}
//mxd
private void heightmode_SelectedIndexChanged(object sender, EventArgs e)
{
if(preventchanges || heightmode.SelectedIndex == -1) return;
mode.SectorHeightAdjustMode = (EditSelectionMode.HeightAdjustMode)heightmode.SelectedIndex;
}
#endregion
private void cbPinFloorTextures_CheckedChanged(object sender, EventArgs e)
{
if (preventchanges) return;
preventchanges = true;
mode.PinFloorTextures = pinfloortextures.Checked;
preventchanges = false;
}
private void pinceilingtextures_CheckedChanged(object sender, EventArgs e)
{
if (preventchanges) return;
preventchanges = true;
mode.PinCeilingTextures = pinceilingtextures.Checked;
preventchanges = false;
}
}
}