some stuff with argument types

This commit is contained in:
codeimp 2008-05-29 16:44:20 +00:00
parent 8aa99cfb88
commit fef9b74ca2
17 changed files with 804 additions and 105 deletions

View file

@ -23,8 +23,9 @@ all supported data types:
- Only types indicates with * are usable for standard hexen args
- When no type is specified, the default type is 0 (integer)
- Enum types (11, 12 and 16) cannot be used in custom UDMF fields
For types 11, 12 and 16 there must be an "enum" field that
For enum types 11, 12 and 16 there must be an "enum" field that
either specifies the values or refers to an existing enum set:
enum
@ -37,7 +38,7 @@ either specifies the values or refers to an existing enum set:
enum = "yesno";
Type 16 uses case-sensitive strings for value and can only be
Type 16 uses case-sensitive strings for values and can only be
used as an option, not as bit flags:
enum

View file

@ -45,6 +45,7 @@
</Target>
-->
<ItemGroup>
<Compile Include="Config\ArgumentInfo.cs" />
<Compile Include="Config\EnumItem.cs" />
<Compile Include="Config\EnumList.cs" />
<Compile Include="Config\SectorEffectInfo.cs" />
@ -117,6 +118,12 @@
<Compile Include="Data\DataLocationList.cs" />
<Compile Include="Data\DataManager.cs" />
<Compile Include="Data\WADReader.cs" />
<Compile Include="Types\EnumOptionHandler.cs" />
<Compile Include="Types\IntegerHandler.cs" />
<Compile Include="Types\NullHandler.cs" />
<Compile Include="Types\TypeHandler.cs" />
<Compile Include="Types\TypeHandlerAttribute.cs" />
<Compile Include="Types\TypesManager.cs" />
<Compile Include="Windows\AboutForm.cs">
<SubType>Form</SubType>
</Compile>

View file

@ -0,0 +1,109 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
#endregion
namespace CodeImp.DoomBuilder.Config
{
public class ArgumentInfo
{
#region ================== Constants
#endregion
#region ================== Variables
private string title;
private bool used;
private int type;
private EnumList enumlist;
#endregion
#region ================== Properties
public string Title { get { return title; } }
public bool Used { get { return false; } }
public int Type { get { return type; } }
public EnumList Enum { get { return enumlist; } }
#endregion
#region ================== Constructor / Disposer
// Constructor for argument info from configuration
internal ArgumentInfo(Configuration cfg, string argspath, int argindex, IDictionary<string, EnumList> enums)
{
// Read
string istr = argindex.ToString(CultureInfo.InvariantCulture);
this.used = cfg.SettingExists(argspath + ".arg" + istr);
this.title = cfg.ReadSetting(argspath + ".arg" + istr + ".title", "Argument " + (argindex + 1));
this.type = cfg.ReadSetting(argspath + ".arg" + istr + ".type", 0);
// Determine enum type
EnumList enumlist = null;
IDictionary argdic = cfg.ReadSetting(argspath + ".arg" + istr, new Hashtable());
if(argdic.Contains("enum"))
{
// Enum fully specified?
if(argdic["enum"] is IDictionary)
{
// Create anonymous enum
this.enumlist = new EnumList(argdic["enum"] as IDictionary);
}
else
{
// Check if referenced enum exists
if((argdic["enum"].ToString().Length > 0) && enums.ContainsKey(argdic["enum"].ToString()))
{
// Get the enum list
this.enumlist = enums[argdic["enum"].ToString()] as EnumList;
}
else
{
General.WriteLogLine("WARNING: '" + argspath + ".arg" + istr + "' references unknown enumeration '" + argdic["enum"] + "'!");
}
}
}
}
#endregion
#region ================== Methods
// This gets the description for an argument value
public string GetValueDescription(int value)
{
// TODO: Use the registered type editor to get the description!
return value.ToString();
}
#endregion
}
}

View file

@ -31,7 +31,7 @@ using System.Windows.Forms;
namespace CodeImp.DoomBuilder.Config
{
public class EnumItem : INumberedTitle
public class EnumItem
{
#region ================== Constants
@ -39,14 +39,14 @@ namespace CodeImp.DoomBuilder.Config
#region ================== Variables
private int index;
private string value;
private string title;
#endregion
#region ================== Properties
public int Index { get { return index; } }
public string Value { get { return value; } }
public string Title { get { return title; } }
#endregion
@ -54,10 +54,10 @@ namespace CodeImp.DoomBuilder.Config
#region ================== Constructor
// Constructor
public EnumItem(int index, string title)
public EnumItem(string value, string title)
{
// Initialize
this.index = index;
this.value = value;
this.title = title;
}
@ -71,6 +71,16 @@ namespace CodeImp.DoomBuilder.Config
return title;
}
// This returns the value as int
public int GetIntValue()
{
int result;
if(int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out result))
return result;
else
return 0;
}
#endregion
}
}

View file

@ -39,43 +39,40 @@ namespace CodeImp.DoomBuilder.Config
#region ================== Variables
private string name;
#endregion
#region ================== Properties
public string Name { get { return name; } }
#endregion
#region ================== Constructor
// Constructor to load from dictionary
internal EnumList(IDictionary dic)
{
int index;
// Read the dictionary
foreach(DictionaryEntry de in dic)
{
// Add item
EnumItem item = new EnumItem(de.Key.ToString(), de.Value.ToString());
base.Add(item);
}
}
// Constructor to load from configuration
internal EnumList(string name, Configuration cfg)
{
int index;
// Initialize
this.name = name;
// Read the list from configuration
IDictionary dic = cfg.ReadSetting("enums." + name, new Hashtable());
foreach(DictionaryEntry de in dic)
{
// Try paring the bit value
if(int.TryParse(de.Key.ToString(),
NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite,
CultureInfo.InvariantCulture, out index))
{
// Add item
EnumItem item = new EnumItem(index, de.Value.ToString());
base.Add(item);
}
else
{
General.WriteLogLine("WARNING: Enum structure '" + name + "' contains invalid keys!");
}
// Add item
EnumItem item = new EnumItem(de.Key.ToString(), de.Value.ToString());
base.Add(item);
}
}
@ -83,14 +80,14 @@ namespace CodeImp.DoomBuilder.Config
#region ================== Methods
// This gets an item by enum index
// This gets an item by value
// Returns null when item could not be found
public EnumItem GetByEnumIndex(int enumindex)
public EnumItem GetByEnumIndex(string value)
{
// Find the item
foreach(EnumItem i in this)
{
if(i.Index == enumindex) return i;
if(i.Value == value) return i;
}
// Nothing found

View file

@ -46,10 +46,7 @@ namespace CodeImp.DoomBuilder.Config
private string category;
private string name;
private string title;
private string[] argtitle;
private TagType[] argtagtype;
private bool[] argused;
private string[] argenum;
private ArgumentInfo[] args;
#endregion
@ -60,10 +57,7 @@ namespace CodeImp.DoomBuilder.Config
public string Category { get { return category; } }
public string Name { get { return name; } }
public string Title { get { return title; } }
public string[] ArgTitle { get { return argtitle; } }
public TagType[] ArgTagType { get { return argtagtype; } }
public bool[] ArgUsed { get { return argused; } }
public string[] ArgEnum { get { return argenum; } }
public ArgumentInfo[] Args { get { return args; } }
#endregion
@ -77,34 +71,17 @@ namespace CodeImp.DoomBuilder.Config
// Initialize
this.index = index;
this.category = categoryname;
this.argtitle = new string[Linedef.NUM_ARGS];
this.argtagtype = new TagType[Linedef.NUM_ARGS];
this.argused = new bool[Linedef.NUM_ARGS];
this.argenum = new string[Linedef.NUM_ARGS];
this.args = new ArgumentInfo[Linedef.NUM_ARGS];
// Read settings
this.name = cfg.ReadSetting(actionsetting + ".title", "Unnamed");
this.prefix = cfg.ReadSetting(actionsetting + ".prefix", "");
this.title = this.prefix + " " + this.name;
this.title = this.title.Trim();
// Read the args and marks
// Read the args
for(int i = 0; i < Linedef.NUM_ARGS; i++)
{
// Read
string istr = i.ToString(CultureInfo.InvariantCulture);
this.argused[i] = cfg.SettingExists(actionsetting + ".arg" + istr);
this.argtitle[i] = cfg.ReadSetting(actionsetting + ".arg" + istr + ".title", "Argument " + (i + 1));
this.argtagtype[i] = (TagType)cfg.ReadSetting(actionsetting + ".arg" + istr + ".tag", (int)TagType.None);
this.argenum[i] = cfg.ReadSetting(actionsetting + ".arg" + istr + ".enum", "");
// Verify enums
if((this.argenum[i].Length > 0) && !enums.ContainsKey(this.argenum[i]))
{
General.WriteLogLine("WARNING: Linedef type enumeration '" + this.argenum[i] + "' does not exist! (found on linedef type " + index + ")");
this.argenum[i] = "";
}
}
this.args[i] = new ArgumentInfo(cfg, actionsetting, i, enums);
// We have no destructor
GC.SuppressFinalize(this);

View file

@ -70,31 +70,21 @@ namespace CodeImp.DoomBuilder.Controls
}
// This fills the box with the given enum
public void SetupEnums(string enumslistname)
public void SetupEnums(EnumList enumslist)
{
EnumList list;
// Keep old value
int value = this.GetResult(0);
// Find the enums list
if(General.Map.Config.Enums.ContainsKey(enumslistname))
{
// Enums found
list = General.Map.Config.Enums[enumslistname];
if(enumslist != null)
this.DropDownStyle = ComboBoxStyle.DropDown;
}
else
{
// No enums
list = null;
this.DropDownStyle = ComboBoxStyle.Simple;
}
// Fill list
this.enums = list;
this.enums = enumslist;
this.Items.Clear();
if(list != null) this.Items.AddRange(list.ToArray());
if(enumslist != null) this.Items.AddRange(enumslist.ToArray());
// Re-apply value
this.Text = value.ToString();
@ -115,7 +105,7 @@ namespace CodeImp.DoomBuilder.Controls
// Enum selected?
if(this.SelectedItem != null)
{
return (this.SelectedItem as EnumItem).Index;
return (this.SelectedItem as EnumItem).GetIntValue();
}
else
{
@ -174,7 +164,7 @@ namespace CodeImp.DoomBuilder.Controls
{
// Try selecting this enum
EnumItem item = null;
if(enums != null) item = enums.GetByEnumIndex(num);
if(enums != null) item = enums.GetByEnumIndex(num.ToString());
if(item != null)
{
// Select enum

View file

@ -36,6 +36,7 @@ using CodeImp.DoomBuilder.Config;
using SlimDX.Direct3D9;
using System.Drawing;
using CodeImp.DoomBuilder.Plugins;
using CodeImp.DoomBuilder.Types;
#endregion
@ -109,6 +110,7 @@ namespace CodeImp.DoomBuilder
private static ActionManager actions;
private static PluginManager plugins;
private static ColorCollection colors;
private static TypesManager types;
private static Clock clock;
// Configurations
@ -145,6 +147,7 @@ namespace CodeImp.DoomBuilder
public static Clock Clock { get { return clock; } }
public static bool DebugBuild { get { return debugbuild; } }
internal static Triangulator EarClipper { get { return earclipper; } }
internal static TypesManager Types { get { return types; } }
#endregion
@ -524,6 +527,10 @@ namespace CodeImp.DoomBuilder
General.WriteLogLine("Creating application clock...");
clock = new Clock();
// Create types manager
General.WriteLogLine("Creating types manager...");
types = new TypesManager();
// Run application from the main window
General.WriteLogLine("Startup done");
mainwindow.DisplayReady();
@ -597,6 +604,7 @@ namespace CodeImp.DoomBuilder
if(actions != null) actions.Dispose();
if(clock != null) clock.Dispose();
if(plugins != null) plugins.Dispose();
if(types != null) types.Dispose();
try { Direct3D.Terminate(); } catch(Exception) { }
// Application ends here and now

View file

@ -0,0 +1,143 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
using CodeImp.DoomBuilder.Config;
#endregion
namespace CodeImp.DoomBuilder.Types
{
[TypeHandler(11)]
internal class EnumOptionHandler : TypeHandler
{
#region ================== Constants
#endregion
#region ================== Variables
private EnumList list;
private EnumItem value;
#endregion
#region ================== Properties
public virtual bool IsBrowseable { get { return true; } }
public virtual bool IsEnumerable { get { return true; } }
#endregion
#region ================== Constructor
// When set up for an argument
public override void SetupArgument(ArgumentInfo arginfo)
{
base.SetupArgument(arginfo);
// Keep enum list reference
list = arginfo.Enum;
}
#endregion
#region ================== Methods
public override void SetValue(object value)
{
this.value = null;
// First try to match the value against the enum values
foreach(EnumItem item in list)
{
// Matching value?
if(item.Value == value.ToString())
{
// Set this value
this.value = item;
}
}
// No match found yet?
if(this.value == null)
{
// Try to match against the titles
foreach(EnumItem item in list)
{
// Matching value?
if(item.Title.ToLowerInvariant() == value.ToString().ToLowerInvariant())
{
// Set this value
this.value = item;
}
}
}
// Still no match found?
if(this.value == null)
{
// Make a dummy value
this.value = new EnumItem(value.ToString(), value.ToString());
}
}
public override int GetIntValue()
{
if(this.value != null)
{
// Parse the value to integer
int result;
if(int.TryParse(this.value.Value, NumberStyles.Integer,
CultureInfo.InvariantCulture, out result))
{
return result;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
public override string GetStringValue()
{
if(this.value != null) return this.value.Title; else return "NULL";
}
// This returns an enum list
public override EnumList GetEnumList()
{
return list;
}
#endregion
}
}

View file

@ -0,0 +1,90 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
#endregion
namespace CodeImp.DoomBuilder.Types
{
[TypeHandler(0)]
internal class IntegerHandler : TypeHandler
{
#region ================== Constants
#endregion
#region ================== Variables
private int value;
#endregion
#region ================== Properties
public override bool IsCustomType { get { return true; } }
#endregion
#region ================== Methods
public override void SetValue(object value)
{
int result;
// Already an int or float?
if((value is int) || (value is float))
{
// Return the same
this.value = (int)value;
}
else
{
// Try parsing as string
if(int.TryParse(value.ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture, out result))
{
this.value = result;
}
else
{
this.value = 0;
}
}
}
public override int GetIntValue()
{
return this.value;
}
public override string GetStringValue()
{
return this.value.ToString();
}
#endregion
}
}

View file

@ -0,0 +1,63 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
#endregion
namespace CodeImp.DoomBuilder.Types
{
internal class NullHandler : TypeHandler
{
#region ================== Constants
#endregion
#region ================== Variables
private object value;
#endregion
#region ================== Properties
#endregion
#region ================== Methods
public override void SetValue(object value)
{
this.value = value;
}
public override string GetStringValue()
{
return this.value.ToString();
}
#endregion
}
}

117
Source/Types/TypeHandler.cs Normal file
View file

@ -0,0 +1,117 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Config;
#endregion
namespace CodeImp.DoomBuilder.Types
{
internal abstract class TypeHandler
{
#region ================== Constants
#endregion
#region ================== Variables
protected int index;
protected ArgumentInfo arginfo;
#endregion
#region ================== Properties
public int Index { get { return index; } }
public virtual bool IsBrowseable { get { return false; } }
public virtual bool IsEnumerable { get { return false; } }
public virtual bool IsCustomType { get { return false; } }
#endregion
#region ================== Constructor
// Constructor
public TypeHandler()
{
// Get my attributes
object[] attrs = this.GetType().GetCustomAttributes(typeof(TypeHandlerAttribute), false);
TypeHandlerAttribute attr = (attrs[0] as TypeHandlerAttribute);
// Initialize
this.index = attr.Index;
}
// This sets up the handler for arguments
public virtual void SetupArgument(ArgumentInfo arginfo)
{
// Setup
this.arginfo = arginfo;
}
#endregion
#region ================== Methods
// This must set the value
// How the value is actually validated and stored is up to the implementation
public abstract void SetValue(object value);
// This must return the value as integer (for arguments)
public virtual int GetIntValue()
{
throw new NotSupportedException("Override this method to support it as integer for arguments");
}
// This must return the value as a string for displaying
public abstract string GetStringValue();
// This is called when the user presses the browse button
public virtual object Browse(IWin32Window parent)
{
return null;
}
// This must returns an enum list when IsEnumerable is true
// When the user chooses an enum from this list, it will be
// set using SetValue with the EnumItem as value.
public virtual EnumList GetEnumList()
{
return null;
}
// String representation
public override string ToString()
{
return this.GetStringValue();
}
#endregion
}
}

View file

@ -0,0 +1,66 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
#endregion
namespace CodeImp.DoomBuilder.Types
{
internal class TypeHandlerAttribute : Attribute
{
#region ================== Constants
#endregion
#region ================== Variables
private int index;
#endregion
#region ================== Properties
public int Index { get { return index; } }
#endregion
#region ================== Constructor / Destructor
// Constructor
public TypeHandlerAttribute(int index)
{
// Initialize
this.index = index;
}
#endregion
#region ================== Methods
#endregion
}
}

View file

@ -0,0 +1,120 @@
#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;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Data;
using System.IO;
using System.Diagnostics;
using CodeImp.DoomBuilder.Config;
#endregion
namespace CodeImp.DoomBuilder.Types
{
internal class TypesManager : IDisposable
{
#region ================== Constants
#endregion
#region ================== Variables
// List of handler types
private Dictionary<int, Type> handlertypes;
// Disposing
private bool isdisposed = false;
#endregion
#region ================== Properties
public bool IsDisposed { get { return isdisposed; } }
#endregion
#region ================== Constructor / Disposer
// Constructor
public TypesManager()
{
// Initialize
handlertypes = new Dictionary<int, Type>();
// Go for all types in this assembly
Type[] types = General.ThisAssembly.GetTypes();
foreach(Type tp in types)
{
// Check if this type is a class
if(tp.IsClass && !tp.IsAbstract && !tp.IsArray)
{
// Check if class has an TypeHandler attribute
if(Attribute.IsDefined(tp, typeof(TypeHandlerAttribute), false))
{
// Add the type to the list
object[] attribs = tp.GetCustomAttributes(typeof(TypeHandlerAttribute), false);
TypeHandlerAttribute attr = (attribs[0] as TypeHandlerAttribute);
handlertypes.Add(attr.Index, tp);
}
}
}
// We have no destructor
GC.SuppressFinalize(this);
}
// Disposer
public void Dispose()
{
// Not already disposed?
if(!isdisposed)
{
// Clean up
handlertypes.Clear();
// Done
isdisposed = true;
}
}
#endregion
#region ================== Methods
// This returns the type handler for the given argument
public TypeHandler GetArgumentHandler(ArgumentInfo arginfo)
{
Type t = typeof(NullHandler);
// Do we have a handler type for this?
if(handlertypes.ContainsKey(arginfo.Type)) t = handlertypes[arginfo.Type];
// Create instance
TypeHandler th = (TypeHandler)General.ThisAssembly.CreateInstance(t.FullName);
th.SetupArgument(arginfo);
return th;
}
#endregion
}
}

View file

@ -378,6 +378,7 @@ namespace CodeImp.DoomBuilder.Windows
//
// arg4
//
this.arg4.DropDownWidth = 200;
this.arg4.FormattingEnabled = true;
this.arg4.ImeMode = System.Windows.Forms.ImeMode.Off;
this.arg4.Location = new System.Drawing.Point(400, 81);

View file

@ -352,26 +352,26 @@ namespace CodeImp.DoomBuilder.Windows
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
// Change the argument descriptions
arg0label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[0] + ":";
arg1label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[1] + ":";
arg2label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[2] + ":";
arg3label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[3] + ":";
arg4label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[4] + ":";
arg0label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[0];
arg1label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[1];
arg2label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[2];
arg3label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[3];
arg4label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[4];
arg0label.Text = General.Map.Config.LinedefActions[showaction].Args[0].Title + ":";
arg1label.Text = General.Map.Config.LinedefActions[showaction].Args[1].Title + ":";
arg2label.Text = General.Map.Config.LinedefActions[showaction].Args[2].Title + ":";
arg3label.Text = General.Map.Config.LinedefActions[showaction].Args[3].Title + ":";
arg4label.Text = General.Map.Config.LinedefActions[showaction].Args[4].Title + ":";
arg0label.Enabled = General.Map.Config.LinedefActions[showaction].Args[0].Used;
arg1label.Enabled = General.Map.Config.LinedefActions[showaction].Args[1].Used;
arg2label.Enabled = General.Map.Config.LinedefActions[showaction].Args[2].Used;
arg3label.Enabled = General.Map.Config.LinedefActions[showaction].Args[3].Used;
arg4label.Enabled = General.Map.Config.LinedefActions[showaction].Args[4].Used;
if(arg0label.Enabled) arg0.ForeColor = SystemColors.WindowText; else arg0.ForeColor = SystemColors.GrayText;
if(arg1label.Enabled) arg1.ForeColor = SystemColors.WindowText; else arg1.ForeColor = SystemColors.GrayText;
if(arg2label.Enabled) arg2.ForeColor = SystemColors.WindowText; else arg2.ForeColor = SystemColors.GrayText;
if(arg3label.Enabled) arg3.ForeColor = SystemColors.WindowText; else arg3.ForeColor = SystemColors.GrayText;
if(arg4label.Enabled) arg4.ForeColor = SystemColors.WindowText; else arg4.ForeColor = SystemColors.GrayText;
arg0.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[0]);
arg1.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[1]);
arg2.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[2]);
arg3.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[3]);
arg4.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[4]);
arg0.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[0].Enum);
arg1.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[1].Enum);
arg2.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[2].Enum);
arg3.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[3].Enum);
arg4.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[4].Enum);
}
// Browse Action clicked

View file

@ -199,26 +199,26 @@ namespace CodeImp.DoomBuilder.Windows
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
// Change the argument descriptions
arg0label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[0] + ":";
arg1label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[1] + ":";
arg2label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[2] + ":";
arg3label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[3] + ":";
arg4label.Text = General.Map.Config.LinedefActions[showaction].ArgTitle[4] + ":";
arg0label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[0];
arg1label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[1];
arg2label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[2];
arg3label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[3];
arg4label.Enabled = General.Map.Config.LinedefActions[showaction].ArgUsed[4];
arg0label.Text = General.Map.Config.LinedefActions[showaction].Args[0].Title + ":";
arg1label.Text = General.Map.Config.LinedefActions[showaction].Args[1].Title + ":";
arg2label.Text = General.Map.Config.LinedefActions[showaction].Args[2].Title + ":";
arg3label.Text = General.Map.Config.LinedefActions[showaction].Args[3].Title + ":";
arg4label.Text = General.Map.Config.LinedefActions[showaction].Args[4].Title + ":";
arg0label.Enabled = General.Map.Config.LinedefActions[showaction].Args[0].Used;
arg1label.Enabled = General.Map.Config.LinedefActions[showaction].Args[1].Used;
arg2label.Enabled = General.Map.Config.LinedefActions[showaction].Args[2].Used;
arg3label.Enabled = General.Map.Config.LinedefActions[showaction].Args[3].Used;
arg4label.Enabled = General.Map.Config.LinedefActions[showaction].Args[4].Used;
if(arg0label.Enabled) arg0.ForeColor = SystemColors.WindowText; else arg0.ForeColor = SystemColors.GrayText;
if(arg1label.Enabled) arg1.ForeColor = SystemColors.WindowText; else arg1.ForeColor = SystemColors.GrayText;
if(arg2label.Enabled) arg2.ForeColor = SystemColors.WindowText; else arg2.ForeColor = SystemColors.GrayText;
if(arg3label.Enabled) arg3.ForeColor = SystemColors.WindowText; else arg3.ForeColor = SystemColors.GrayText;
if(arg4label.Enabled) arg4.ForeColor = SystemColors.WindowText; else arg4.ForeColor = SystemColors.GrayText;
arg0.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[0]);
arg1.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[1]);
arg2.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[2]);
arg3.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[3]);
arg4.SetupEnums(General.Map.Config.LinedefActions[showaction].ArgEnum[4]);
arg0.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[0].Enum);
arg1.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[1].Enum);
arg2.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[2].Enum);
arg3.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[3].Enum);
arg4.SetupEnums(General.Map.Config.LinedefActions[showaction].Args[4].Enum);
}
// Browse Action clicked