UltimateZoneBuilder/Source/Core/Controls/FieldsEditorRow.cs
MaxED 6b62b4f3d2 Added multiple engine support for any game configuration.
Floor and ceiling textures are now moved more predictably by arrow keys in GZDoom Visual mode.
Walls texture coordinates are always rounded when moved by arrow keys in Visual modes.
Linedef info panel: relative UDMF light values are now shown like this: 16 (128), which means "UDMF light value" ("total surface brightness (UDMF light value + sector brightness)")
Player is now spawned at camera height when testing from current location in Visual modes.
Focus is now properly restored after testing from current location in Visual modes.
Updated Heretic_sectors.cfg and Heretic_things.cfg as described here: http://www.doombuilder.com/forums/viewtopic.php?f=11&t=357
Changed sprites of artifacts in Hexen_things.cfg to proper ones.
Renamed Skulltag configs to Zandronum
2012-11-02 23:11:38 +00:00

281 lines
7.1 KiB
C#

#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.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Diagnostics;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Rendering;
using SlimDX.Direct3D9;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
namespace CodeImp.DoomBuilder.Controls
{
internal class FieldsEditorRow : DataGridViewRow
{
#region ================== Constants
#endregion
#region ================== Variables
// This is true when for a fixed field as defined in the game configuration
// This means that the field cannot be deleted (delete will result in a reset)
// and cannot change type.
private bool isfixed;
// Field information (only for fixed fields)
private UniversalFieldInfo fieldinfo;
// This is true when the field is defined. Cannot be false when this field
// is not fixed, because non-fixed fields are deleted from the list when undefined.
private bool isdefined;
// Type
private TypeHandler fieldtype;
#endregion
#region ================== Properties
public bool IsFixed { get { return isfixed; } }
public bool IsDefined { get { return isdefined; } }
public bool IsEmpty { get { return (this.Cells[2].Value == null) || (this.Cells[2].Value.ToString().Length == 0); } }
public string Name { get { return this.Cells[0].Value.ToString(); } }
public TypeHandler TypeHandler { get { return fieldtype; } }
public UniversalFieldInfo Info { get { return fieldinfo; } }
#endregion
#region ================== Constructor
// Constructor for a fixed, undefined field
public FieldsEditorRow(DataGridView view, UniversalFieldInfo fixedfield)
{
// Undefined
this.DefaultCellStyle.ForeColor = SystemColors.GrayText;
isdefined = false;
// Fixed
this.fieldinfo = fixedfield;
isfixed = true;
// Type
this.fieldtype = General.Types.GetFieldHandler(fixedfield);
// Make all cells
base.CreateCells(view);
// Setup property cell
this.Cells[0].Value = fixedfield.Name;
this.Cells[0].ReadOnly = true;
// Setup type cell
this.Cells[1].Value = fieldtype.GetDisplayType();
this.Cells[1].ReadOnly = true;
// Setup value cell
this.Cells[2].Value = fieldtype.GetStringValue();
// We have no destructor
GC.SuppressFinalize(this);
}
// Constructor for a non-fixed, defined field
public FieldsEditorRow(DataGridView view, string name, int type, object value)
{
// Defined
this.DefaultCellStyle.ForeColor = SystemColors.WindowText;
isdefined = true;
// Non-fixed
isfixed = false;
// Type
this.fieldtype = General.Types.GetFieldHandler(type, value);
// Make all cells
base.CreateCells(view);
// Setup property cell
this.Cells[0].Value = name;
this.Cells[0].ReadOnly = true;
// Setup type cell
this.Cells[1].Value = fieldtype.GetDisplayType();
this.Cells[1].ReadOnly = false;
// Setup value cell
this.Cells[2].Value = fieldtype.GetStringValue();
// We have no destructor
GC.SuppressFinalize(this);
}
#endregion
#region ================== Methods
// Browse for value
public void Browse(IWin32Window parent)
{
if(fieldtype != null)
{
// Browse for value
fieldtype.Browse(parent);
// This is a fixed field?
if(isfixed)
{
// Does this match the default setting?
if(fieldtype.GetValue().Equals(fieldinfo.Default))
{
// Undefine this field!
Undefine();
}
else
{
// Define
Define(fieldtype.GetValue());
}
}
else
{
// Define
Define(fieldtype.GetValue());
}
}
}
// This is called when a cell is edited
public void CellChanged()
{
// This gdmn grid thing returns the chosen value as string instead
// of the object type I added to the combobox...
if(this.Cells[1].Value is string)
{
// Find the TypeHandlerAttribute with this name
TypeHandlerAttribute attrib = General.Types.GetNamedAttribute(this.Cells[1].Value.ToString());
// Different?
if(attrib.Index != fieldtype.Index)
{
// Change field type!
this.ChangeType(attrib.Index);
}
}
// Anything in the box?
if((this.Cells[2].Value != null) && (this.Cells[2].Value.ToString().Length > 0))
{
// Validate value
fieldtype.SetValue(this.Cells[2].Value);
this.Cells[2].Value = fieldtype.GetStringValue();
// This is a fixed field?
if(isfixed)
{
// Does this match the default setting?
if(fieldtype.GetValue().Equals(fieldinfo.Default))
{
// Undefine this field!
Undefine();
}
}
}
}
// This undefines the field
// ONLY VALID FOR FIXED FIELDS
// You should just delete non-fixed fields
public void Undefine()
{
// Must be fixed!
if(!isfixed) throw new InvalidOperationException();
// Now undefined
fieldtype.SetValue(fieldinfo.Default);
this.Cells[2].Value = fieldtype.GetStringValue();
this.DefaultCellStyle.ForeColor = SystemColors.GrayText;
isdefined = false;
}
// This defines the field
public void Define(object value)
{
// Now defined
fieldtype.SetValue(value);
this.Cells[2].Value = fieldtype.GetStringValue();
this.DefaultCellStyle.ForeColor = SystemColors.WindowText;
isdefined = true;
}
// This changes the type
public void ChangeType(int typeindex)
{
// Can't do this for a fixed field!
if(isfixed) throw new InvalidOperationException();
// Different?
if(typeindex != fieldtype.Index)
{
// Change field type!
//TypeHandlerAttribute attrib = General.Types.GetAttribute(typeindex); //mxd
fieldtype = General.Types.GetFieldHandler(typeindex, this.Cells[2].Value);
this.Cells[1].Value = fieldtype.GetDisplayType();
}
}
// This clears the field
public void Clear()
{
this.Cells[2].Value = "";
}
// This returns the result
public object GetResult(object value)
{
// Anything in the box?
if((this.Cells[2].Value != null) && (this.Cells[2].Value.ToString().Length > 0))
{
// Return validated value
fieldtype.SetValue(this.Cells[2].Value);
return fieldtype.GetValue();
}
else
{
// Return old value
return value;
}
}
#endregion
}
}