Changed, Linedef/Thing Edit windows: when using ACS specials and choosing a script with arguments, appropriate action argument names are replaced with script argument names.

Changed, Linedef/Thing Info panel: when displaying a linedef/thing with an ACS special, which uses a script with arguments, appropriate action argument names are replaced with script argument names.
Changed, Sector/Linedef/Thing Edit windows, Comments tab: window is no longer closed when pressing Enter while editing a comment. Newline is inserted instead.
Changed: Script Editor window is now toggled to normal state when pressing "Show Script Editor" button if said window was already open, but minimized.
Fixed: in some cases action arguments were not cleared during setup when displaying multiple map elements with mixed argument values.
Internal: added ArgumentsControl.
This commit is contained in:
MaxED 2015-07-27 09:02:28 +00:00
parent cff3489791
commit 5cd998b1fc
28 changed files with 1280 additions and 1518 deletions

View file

@ -1828,6 +1828,8 @@ script
arg4
{
title = "Key Number";
type = 11;
enum = "keys";
}
}
}

View file

@ -473,15 +473,15 @@ zdoom
enum
{
0 = "0: Hexen default";
11 = "11: 15° / second";
21 = "21: 30° / second";
32 = "32: 45° / second";
64 = "64: 90° / second";
128 = "128: 180° / second";
192 = "192: -90° / second";
223 = "223: -45° / second";
233 = "233: -30° / second";
244 = "244: -15° / second";
11 = "11: 15 deg. per second";
21 = "21: 30 deg. per second";
32 = "32: 45 deg. per second";
64 = "64: 90 deg. per second";
128 = "128: 180 deg. per second";
192 = "192: -90 deg. per second";
223 = "223: -45 deg. per second";
233 = "233: -30 deg. per second";
244 = "244: -15 deg. per second";
}
}
arg4
@ -490,7 +490,7 @@ zdoom
type = 11;
enum
{
0 = "Hexen default";
0 = "0: Hexen default";
}
}
}

View file

@ -17,9 +17,11 @@
<div id="gz_title"><h1>List of deprecated plugins</h1></div>
<div id="contents">
<p><strong>The following plugins, which shipped with either Doom Builder 2 or older versions of GZDoom Builder, are no longer required or supported.</strong><br />They can potentially cause problems in the SVN versions of GZDoom Builder 1.14.<br />It is recommended to delete them from the &quot;Plugins&quot; folder.</p>
<p><strong>The following plugins, which shipped with either Doom Builder 2 or older versions of GZDoom Builder, are no longer required or supported.</strong><br />
They can potentially cause problems in GZDoom Builder 2.3 or newer.<br />
It is recommended to delete them from the &quot;Plugins&quot; folder.</p>
<ul>
<li><strong>GZDoomEditing.dll</strong> - was merged into BuilderModes.dll in GZDB 1.14. Will cause crash during startup in the SVN versions of GZDB 1.14.</li>
<li><strong>GZDoomEditing.dll</strong> - was merged into BuilderModes.dll in GZDB 1.14. Will cause crash during startup in the SVN versions of GZDB 1.14.</li>
<li><strong>Statistics.dll</strong> - merged into the core in the SVN versions of GZDB 1.14. Statistics are now shown in any editing mode when not highlighting any map elements.</li>
<li><strong>UDMFControls.dll</strong> - plugin's functionality was fully replaced by <a href="../w_linedefedit.html">Edit Linedef</a> and <a href="../w_sectoredit.html">Edit Sector</a> windows in the SVN versions of GZDB 1.14.</li>
<li><strong>CopyPasteSectorProps.dll</strong> - merged into BuilderModes.dll in the SVN versions of GZDB 1.14.</li>

View file

@ -690,6 +690,12 @@
<Compile Include="Controls\ActionSpecialHelpButton.Designer.cs">
<DependentUpon>ActionSpecialHelpButton.cs</DependentUpon>
</Compile>
<Compile Include="Controls\ArgumentsControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Controls\ArgumentsControl.Designer.cs">
<DependentUpon>ArgumentsControl.cs</DependentUpon>
</Compile>
<Compile Include="Controls\ButtonsNumericTextboxDesigner.cs" />
<Compile Include="Controls\CollapsibleSplitContainer.cs">
<SubType>Component</SubType>
@ -981,6 +987,9 @@
<EmbeddedResource Include="Controls\ActionSpecialHelpButton.resx">
<DependentUpon>ActionSpecialHelpButton.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\ArgumentsControl.resx">
<DependentUpon>ArgumentsControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\CommentEditor.resx">
<DependentUpon>CommentEditor.cs</DependentUpon>
</EmbeddedResource>

View file

@ -226,8 +226,8 @@ namespace CodeImp.DoomBuilder.Controls
// Setup layout
ArgumentBox_Resize(this, EventArgs.Empty);
// Re-apply value
SetValue(oldvalue);
//mxd. If not mixed values, re-apply the old value
if(!string.IsNullOrEmpty(combobox.Text)) SetValue(oldvalue);
}
// This sets the value

View file

@ -0,0 +1,244 @@
namespace CodeImp.DoomBuilder.Controls
{
partial class ArgumentsControl
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.splitcontainer = new System.Windows.Forms.SplitContainer();
this.cbuseargstr = new System.Windows.Forms.CheckBox();
this.arg0label = new System.Windows.Forms.Label();
this.arg1label = new System.Windows.Forms.Label();
this.arg2label = new System.Windows.Forms.Label();
this.arg3label = new System.Windows.Forms.Label();
this.arg4label = new System.Windows.Forms.Label();
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.scriptnames = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.scriptnumbers = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.arg0 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg2 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg3 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg4 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.splitcontainer.Panel1.SuspendLayout();
this.splitcontainer.Panel2.SuspendLayout();
this.splitcontainer.SuspendLayout();
this.SuspendLayout();
//
// splitcontainer
//
this.splitcontainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitcontainer.Location = new System.Drawing.Point(0, 0);
this.splitcontainer.Name = "splitcontainer";
//
// splitcontainer.Panel1
//
this.splitcontainer.Panel1.Controls.Add(this.cbuseargstr);
this.splitcontainer.Panel1.Controls.Add(this.scriptnames);
this.splitcontainer.Panel1.Controls.Add(this.scriptnumbers);
this.splitcontainer.Panel1.Controls.Add(this.arg0label);
this.splitcontainer.Panel1.Controls.Add(this.arg1label);
this.splitcontainer.Panel1.Controls.Add(this.arg2label);
this.splitcontainer.Panel1.Controls.Add(this.arg0);
this.splitcontainer.Panel1.Controls.Add(this.arg1);
this.splitcontainer.Panel1.Controls.Add(this.arg2);
//
// splitcontainer.Panel2
//
this.splitcontainer.Panel2.Controls.Add(this.arg3label);
this.splitcontainer.Panel2.Controls.Add(this.arg4label);
this.splitcontainer.Panel2.Controls.Add(this.arg3);
this.splitcontainer.Panel2.Controls.Add(this.arg4);
this.splitcontainer.Size = new System.Drawing.Size(700, 140);
this.splitcontainer.SplitterDistance = 350;
this.splitcontainer.SplitterWidth = 1;
this.splitcontainer.TabIndex = 0;
this.splitcontainer.TabStop = false;
//
// cbuseargstr
//
this.cbuseargstr.Location = new System.Drawing.Point(3, -5);
this.cbuseargstr.Name = "cbuseargstr";
this.cbuseargstr.Size = new System.Drawing.Size(63, 40);
this.cbuseargstr.TabIndex = 44;
this.cbuseargstr.Text = "Named script";
this.cbuseargstr.UseVisualStyleBackColor = true;
this.cbuseargstr.CheckedChanged += new System.EventHandler(this.cbuseargstr_CheckedChanged);
//
// arg0label
//
this.arg0label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg0label.Location = new System.Drawing.Point(55, 8);
this.arg0label.Name = "arg0label";
this.arg0label.Size = new System.Drawing.Size(179, 14);
this.arg0label.TabIndex = 33;
this.arg0label.Text = "Argument 1:";
this.arg0label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg0label.UseMnemonic = false;
//
// arg1label
//
this.arg1label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg1label.Location = new System.Drawing.Point(55, 33);
this.arg1label.Name = "arg1label";
this.arg1label.Size = new System.Drawing.Size(179, 14);
this.arg1label.TabIndex = 42;
this.arg1label.Text = "Argument 2:";
this.arg1label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg1label.UseMnemonic = false;
//
// arg2label
//
this.arg2label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg2label.Location = new System.Drawing.Point(55, 58);
this.arg2label.Name = "arg2label";
this.arg2label.Size = new System.Drawing.Size(179, 14);
this.arg2label.TabIndex = 43;
this.arg2label.Text = "Argument 3:";
this.arg2label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg2label.UseMnemonic = false;
//
// arg3label
//
this.arg3label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg3label.Location = new System.Drawing.Point(55, 8);
this.arg3label.Name = "arg3label";
this.arg3label.Size = new System.Drawing.Size(179, 14);
this.arg3label.TabIndex = 44;
this.arg3label.Text = "Argument 4:";
this.arg3label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg3label.UseMnemonic = false;
//
// arg4label
//
this.arg4label.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg4label.Location = new System.Drawing.Point(55, 33);
this.arg4label.Name = "arg4label";
this.arg4label.Size = new System.Drawing.Size(179, 14);
this.arg4label.TabIndex = 46;
this.arg4label.Text = "Argument 5:";
this.arg4label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg4label.UseMnemonic = false;
//
// scriptnames
//
this.scriptnames.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.scriptnames.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptnames.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptnames.BackColor = System.Drawing.Color.Honeydew;
this.scriptnames.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptnames.FormattingEnabled = true;
this.scriptnames.Location = new System.Drawing.Point(237, 104);
this.scriptnames.Name = "scriptnames";
this.scriptnames.Size = new System.Drawing.Size(110, 21);
this.scriptnames.TabIndex = 41;
this.scriptnames.TextChanged += new System.EventHandler(this.scriptnames_TextChanged);
//
// scriptnumbers
//
this.scriptnumbers.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.scriptnumbers.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptnumbers.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptnumbers.BackColor = System.Drawing.Color.LemonChiffon;
this.scriptnumbers.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptnumbers.FormattingEnabled = true;
this.scriptnumbers.Location = new System.Drawing.Point(237, 80);
this.scriptnumbers.Name = "scriptnumbers";
this.scriptnumbers.Size = new System.Drawing.Size(110, 21);
this.scriptnumbers.TabIndex = 40;
this.scriptnumbers.TextChanged += new System.EventHandler(this.scriptnumbers_TextChanged);
//
// arg0
//
this.arg0.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg0.Location = new System.Drawing.Point(237, 3);
this.arg0.Name = "arg0";
this.arg0.Size = new System.Drawing.Size(110, 24);
this.arg0.TabIndex = 2;
//
// arg1
//
this.arg1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg1.Location = new System.Drawing.Point(237, 28);
this.arg1.Name = "arg1";
this.arg1.Size = new System.Drawing.Size(110, 24);
this.arg1.TabIndex = 34;
//
// arg2
//
this.arg2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg2.Location = new System.Drawing.Point(237, 53);
this.arg2.Name = "arg2";
this.arg2.Size = new System.Drawing.Size(110, 24);
this.arg2.TabIndex = 35;
//
// arg3
//
this.arg3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg3.Location = new System.Drawing.Point(236, 3);
this.arg3.Name = "arg3";
this.arg3.Size = new System.Drawing.Size(110, 24);
this.arg3.TabIndex = 43;
//
// arg4
//
this.arg4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.arg4.Location = new System.Drawing.Point(236, 28);
this.arg4.Name = "arg4";
this.arg4.Size = new System.Drawing.Size(110, 24);
this.arg4.TabIndex = 45;
//
// ArgumentsControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.splitcontainer);
this.Name = "ArgumentsControl";
this.Size = new System.Drawing.Size(700, 140);
this.splitcontainer.Panel1.ResumeLayout(false);
this.splitcontainer.Panel2.ResumeLayout(false);
this.splitcontainer.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitcontainer;
private ArgumentBox arg0;
private ArgumentBox arg1;
private System.Windows.Forms.Label arg0label;
private ColoredComboBox scriptnumbers;
private System.Windows.Forms.Label arg2label;
private System.Windows.Forms.Label arg1label;
private ColoredComboBox scriptnames;
private System.Windows.Forms.Label arg3label;
private System.Windows.Forms.Label arg4label;
private ArgumentBox arg3;
private ArgumentBox arg4;
private System.Windows.Forms.CheckBox cbuseargstr;
private System.Windows.Forms.ToolTip tooltip;
private ArgumentBox arg2;
}
}

View file

@ -0,0 +1,455 @@
#region ================== Namespaces
using System;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.GZBuilder.Data;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
namespace CodeImp.DoomBuilder.Controls
{
public partial class ArgumentsControl : UserControl
{
#region ================== Native stuff
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;
#endregion
#region ================== Variables
private string arg0str;
private bool havearg0str;
private int action;
private ArgumentInfo[] arginfo;
#endregion
#region ================== Constructor
public ArgumentsControl()
{
InitializeComponent();
// Only when running (this.DesignMode won't do when not this, but one of parent controls is in design mode)
if(LicenseManager.UsageMode != LicenseUsageMode.Designtime)
{
//mxd. Setup script numbers
scriptnumbers.Location = new Point(arg0.Location.X, arg0.Location.Y + 2);
foreach(ScriptItem si in General.Map.NumberedScripts.Values)
scriptnumbers.Items.Add(new ColoredComboBoxItem(si, si.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptnumbers.DropDownWidth = Tools.GetDropDownWidth(scriptnumbers);
//mxd. Setup script names
if(General.Map.UDMF)
{
scriptnames.Location = scriptnumbers.Location;
foreach(ScriptItem nsi in General.Map.NamedScripts.Values)
scriptnames.Items.Add(new ColoredComboBoxItem(nsi, nsi.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptnames.DropDownWidth = Tools.GetDropDownWidth(scriptnames);
}
else
{
scriptnames.Visible = false;
cbuseargstr.Visible = false;
}
}
}
#endregion
#region ================== Setup
public void SetValue(Linedef l, bool first)
{
SetValue(l.Fields, l.Args, first);
}
public void SetValue(Thing t, bool first)
{
SetValue(t.Fields, t.Args, first);
}
private void SetValue(UniFields fields, int[] args, bool first)
{
if(first)
{
if(General.Map.UDMF)
{
arg0str = fields.GetValue("arg0str", string.Empty);
havearg0str = !string.IsNullOrEmpty(arg0str);
}
// Update arguments
arg0.SetValue(args[0]);
arg1.SetValue(args[1]);
arg2.SetValue(args[2]);
arg3.SetValue(args[3]);
arg4.SetValue(args[4]);
}
else
{
if(General.Map.UDMF)
{
if(arg0str != fields.GetValue("arg0str", string.Empty))
{
havearg0str = true;
arg0str = string.Empty;
}
}
// Update arguments
if(!string.IsNullOrEmpty(arg0.Text) && args[0] != arg0.GetResult(int.MinValue)) arg0.ClearValue();
if(!string.IsNullOrEmpty(arg1.Text) && args[1] != arg1.GetResult(int.MinValue)) arg1.ClearValue();
if(!string.IsNullOrEmpty(arg2.Text) && args[2] != arg2.GetResult(int.MinValue)) arg2.ClearValue();
if(!string.IsNullOrEmpty(arg3.Text) && args[3] != arg3.GetResult(int.MinValue)) arg3.ClearValue();
if(!string.IsNullOrEmpty(arg4.Text) && args[4] != arg4.GetResult(int.MinValue)) arg4.ClearValue();
}
}
#endregion
#region ================== Apply
public void Apply(Linedef l)
{
//mxd. Script name/number handling
if(scriptnumbers.Visible)
{
//apply script number
if(!string.IsNullOrEmpty(scriptnumbers.Text))
{
if(scriptnumbers.SelectedItem != null)
l.Args[0] = ((ScriptItem)((ColoredComboBoxItem)scriptnumbers.SelectedItem).Value).Index;
else if(!int.TryParse(scriptnumbers.Text.Trim(), out l.Args[0]))
l.Args[0] = 0;
if(l.Fields.ContainsKey("arg0str")) l.Fields.Remove("arg0str");
}
}
else if(scriptnames.Visible)
{
// Apply arg0str
if(!string.IsNullOrEmpty(scriptnames.Text))
l.Fields["arg0str"] = new UniValue(UniversalType.String, scriptnames.Text);
}
else
{
l.Args[0] = arg0.GetResult(l.Args[0]);
if(l.Fields.ContainsKey("arg0str")) l.Fields.Remove("arg0str");
}
// Apply the rest of args
l.Args[1] = arg1.GetResult(l.Args[1]);
l.Args[2] = arg2.GetResult(l.Args[2]);
l.Args[3] = arg3.GetResult(l.Args[3]);
l.Args[4] = arg4.GetResult(l.Args[4]);
}
public void Apply(Thing t)
{
//mxd. Script name/number handling
if(scriptnumbers.Visible)
{
//apply script number
if(!string.IsNullOrEmpty(scriptnumbers.Text))
{
if(scriptnumbers.SelectedItem != null)
t.Args[0] = ((ScriptItem)((ColoredComboBoxItem)scriptnumbers.SelectedItem).Value).Index;
else if(!int.TryParse(scriptnumbers.Text.Trim(), out t.Args[0]))
t.Args[0] = 0;
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
}
}
else if(scriptnames.Visible)
{
// Apply arg0str
if(!string.IsNullOrEmpty(scriptnames.Text))
t.Fields["arg0str"] = new UniValue(UniversalType.String, scriptnames.Text);
}
else
{
t.Args[0] = arg0.GetResult(t.Args[0]);
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
}
// Apply the rest of args
t.Args[1] = arg1.GetResult(t.Args[1]);
t.Args[2] = arg2.GetResult(t.Args[2]);
t.Args[3] = arg3.GetResult(t.Args[3]);
t.Args[4] = arg4.GetResult(t.Args[4]);
}
#endregion
#region ================== Update
public void UpdateAction(int action, bool setuponly)
{
UpdateAction(action, setuponly, null);
}
public void UpdateAction(int action, bool setuponly, ThingTypeInfo info)
{
// Update arguments
int showaction = 0;
// Only when action type is known
if(General.Map.Config.LinedefActions.ContainsKey(action)) showaction = action;
if((showaction == 0) && (info != null)) arginfo = info.Args;
else arginfo = General.Map.Config.LinedefActions[showaction].Args;
// Don't update action args when thing type is changed
if(info != null && showaction != 0 && this.action == showaction) return;
// Change the argument descriptions
this.BeginUpdate();
UpdateArgument(arg0, arg0label, arginfo[0]);
UpdateArgument(arg1, arg1label, arginfo[1]);
UpdateArgument(arg2, arg2label, arginfo[2]);
UpdateArgument(arg3, arg3label, arginfo[3]);
UpdateArgument(arg4, arg4label, arginfo[4]);
if(!setuponly)
{
// Apply action's or thing's default arguments
if(showaction != 0 || info != null)
{
arg0.SetDefaultValue();
arg1.SetDefaultValue();
arg2.SetDefaultValue();
arg3.SetDefaultValue();
arg4.SetDefaultValue();
}
else //or set them to 0
{
arg0.SetValue(0);
arg1.SetValue(0);
arg2.SetValue(0);
arg3.SetValue(0);
arg4.SetValue(0);
}
}
// Store current action
this.action = showaction;
this.EndUpdate();
}
public void UpdateScriptControls()
{
// Update script-specific stuff
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action) != -1)
{
// Update script controls visibility
bool shownamedscripts = (General.Map.UDMF && havearg0str);
cbuseargstr.Visible = General.Map.UDMF;
cbuseargstr.Checked = shownamedscripts;
scriptnames.Visible = shownamedscripts;
scriptnumbers.Visible = !shownamedscripts;
// Update named script name
if(shownamedscripts)
{
if(General.Map.NamedScripts.ContainsKey(arg0str))
{
int i = 0;
foreach(ScriptItem item in General.Map.NamedScripts.Values)
{
if(item.Name == arg0str)
{
scriptnames.SelectedIndex = i;
UpdateScriptArguments(item);
break;
}
i++;
}
}
else
{
// Unknown script name
scriptnames.Text = arg0str;
}
}
else
{
// Update numbered script name
int a0 = arg0.GetResult(0);
if(General.Map.NumberedScripts.ContainsKey(a0))
{
int i = 0;
foreach(ScriptItem item in General.Map.NumberedScripts.Values)
{
if(item.Index == a0)
{
scriptnumbers.SelectedIndex = i;
UpdateScriptArguments(item);
break;
}
i++;
}
}
else
{
// Unknown script number...
scriptnumbers.Text = a0.ToString();
}
}
}
else
{
cbuseargstr.Visible = false;
scriptnames.Visible = false;
scriptnumbers.Visible = false;
cbuseargstr.Checked = false;
}
arg0.Visible = (!scriptnames.Visible && !scriptnumbers.Visible);
}
private void UpdateArgument(ArgumentBox arg, Label label, ArgumentInfo info)
{
// Update labels
label.Text = info.Title + ":";
label.Enabled = info.Used;
arg.ForeColor = (label.Enabled ? SystemColors.WindowText : SystemColors.GrayText);
arg.Setup(info);
// Update tooltip
UpdateToolTip(label, info);
}
private void UpdateToolTip(Label label, ArgumentInfo info)
{
if(info.Used && !string.IsNullOrEmpty(info.ToolTip))
{
tooltip.SetToolTip(label, info.ToolTip);
label.Font = new Font(label.Font, FontStyle.Underline);
label.ForeColor = SystemColors.HotTrack;
}
else
{
tooltip.SetToolTip(label, null);
label.Font = new Font(label.Font, FontStyle.Regular);
label.ForeColor = SystemColors.WindowText;
}
}
private void UpdateScriptArguments(ScriptItem item)
{
Label[] labels = { arg0label, arg1label, arg2label, arg3label, arg4label };
ArgumentBox[] args = { arg0, arg1, arg2, arg3, arg4 };
if(item != null)
{
string[] argnames = item.GetArgumentsDescriptions(action);
for(int i = 0; i < labels.Length; i++)
{
if(!string.IsNullOrEmpty(argnames[i]))
{
labels[i].Text = argnames[i] + ":";
labels[i].Enabled = true;
labels[i].Font = new Font(labels[i].Font, FontStyle.Regular);
labels[i].ForeColor = SystemColors.WindowText;
}
else
{
labels[i].Text = arginfo[i].Title;
labels[i].Enabled = arginfo[i].Used;
UpdateToolTip(labels[i], arginfo[i]);
}
args[i].ForeColor = (labels[i].Enabled ? SystemColors.WindowText : SystemColors.GrayText);
}
}
else
{
for (int i = 0; i < labels.Length; i++)
{
labels[i].Text = arginfo[i].Title;
labels[i].Enabled = arginfo[i].Used;
UpdateToolTip(labels[i], arginfo[i]);
args[i].ForeColor = (labels[i].Enabled ? SystemColors.WindowText : SystemColors.GrayText);
}
}
}
#endregion
#region ================== Redraw control
private void BeginUpdate()
{
SendMessage(this.Parent.Handle, WM_SETREDRAW, false, 0);
}
private void EndUpdate()
{
SendMessage(this.Parent.Handle, WM_SETREDRAW, true, 0);
this.Parent.Refresh();
}
#endregion
#region ================== Events
private void cbuseargstr_CheckedChanged(object sender, EventArgs e)
{
if(!cbuseargstr.Visible) return;
scriptnames.Visible = cbuseargstr.Checked;
scriptnumbers.Visible = !cbuseargstr.Checked;
arg0label.Text = (cbuseargstr.Checked ? "Script Name:" : "Script Number:");
}
private void scriptnumbers_TextChanged(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(scriptnumbers.Text)) return;
ScriptItem item = null;
if(scriptnumbers.SelectedIndex != -1)
{
item = ((ScriptItem)((ColoredComboBoxItem)scriptnumbers.SelectedItem).Value);
}
else
{
int scriptindex;
if(int.TryParse(scriptnumbers.Text, out scriptindex) && General.Map.NumberedScripts.ContainsKey(scriptindex))
item = General.Map.NumberedScripts[scriptindex];
}
UpdateScriptArguments(item);
}
private void scriptnames_TextChanged(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(scriptnames.Text)) return;
ScriptItem item = null;
if(scriptnames.SelectedIndex != -1)
{
item = ((ScriptItem)((ColoredComboBoxItem)scriptnames.SelectedItem).Value);
}
else
{
string scriptname = scriptnames.Text.Trim().ToLowerInvariant();
if(General.Map.NamedScripts.ContainsKey(scriptname))
item = General.Map.NamedScripts[scriptname];
}
UpdateScriptArguments(item);
}
#endregion
}
}

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -34,10 +34,7 @@
this.radioButton4 = new System.Windows.Forms.RadioButton();
this.radioButton5 = new System.Windows.Forms.RadioButton();
this.panel1 = new System.Windows.Forms.Panel();
this.tip = new System.Windows.Forms.PictureBox();
this.hintlabel = new System.Windows.Forms.Label();
this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.tip)).BeginInit();
this.SuspendLayout();
//
// textbox
@ -49,23 +46,25 @@
this.textbox.Multiline = true;
this.textbox.Name = "textbox";
this.textbox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.textbox.Size = new System.Drawing.Size(481, 239);
this.textbox.Size = new System.Drawing.Size(481, 268);
this.textbox.TabIndex = 0;
this.textbox.TabStop = false;
this.textbox.TextChanged += new System.EventHandler(this.textbox_TextChanged);
this.textbox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.textbox_PreviewKeyDown);
this.textbox.Leave += new System.EventHandler(this.textbox_Leave);
this.textbox.Enter += new System.EventHandler(this.textbox_Enter);
//
// clear
//
this.clear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.clear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.clear.Image = global::CodeImp.DoomBuilder.Properties.Resources.Clear;
this.clear.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.clear.Location = new System.Drawing.Point(394, 274);
this.clear.Location = new System.Drawing.Point(424, 2);
this.clear.Name = "clear";
this.clear.Size = new System.Drawing.Size(90, 23);
this.clear.Size = new System.Drawing.Size(60, 23);
this.clear.TabIndex = 1;
this.clear.Text = "Clear";
this.clear.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.clear.UseVisualStyleBackColor = true;
this.clear.Click += new System.EventHandler(this.clear_Click);
//
@ -152,35 +151,13 @@
this.panel1.Controls.Add(this.radioButton5);
this.panel1.Location = new System.Drawing.Point(88, 4);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(396, 23);
this.panel1.Size = new System.Drawing.Size(330, 23);
this.panel1.TabIndex = 8;
//
// tip
//
this.tip.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.tip.Image = global::CodeImp.DoomBuilder.Properties.Resources.Lightbulb;
this.tip.Location = new System.Drawing.Point(3, 277);
this.tip.Name = "tip";
this.tip.Size = new System.Drawing.Size(16, 16);
this.tip.TabIndex = 9;
this.tip.TabStop = false;
//
// hintlabel
//
this.hintlabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.hintlabel.AutoSize = true;
this.hintlabel.Location = new System.Drawing.Point(21, 279);
this.hintlabel.Name = "hintlabel";
this.hintlabel.Size = new System.Drawing.Size(170, 13);
this.hintlabel.TabIndex = 10;
this.hintlabel.Text = "Press Ctrl-Enter to add a line break";
//
// CommentEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.hintlabel);
this.Controls.Add(this.tip);
this.Controls.Add(this.clear);
this.Controls.Add(this.panel1);
this.Controls.Add(this.label1);
@ -188,7 +165,6 @@
this.Name = "CommentEditor";
this.Size = new System.Drawing.Size(487, 300);
this.panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.tip)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -205,7 +181,5 @@
private System.Windows.Forms.RadioButton radioButton4;
private System.Windows.Forms.RadioButton radioButton5;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.PictureBox tip;
private System.Windows.Forms.Label hintlabel;
}
}

View file

@ -130,6 +130,12 @@ namespace CodeImp.DoomBuilder.Controls
commenttype = (int)((Control)sender).Tag;
}
// We don't want to close the parent form when user presses Enter while typing the text
private void textbox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if(e.KeyCode == Keys.Enter) e.IsInputKey = true;
}
#endregion
}
}

View file

@ -21,6 +21,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;
using CodeImp.DoomBuilder.GZBuilder.Data;
using CodeImp.DoomBuilder.GZBuilder.Tools;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Config;
@ -152,31 +153,60 @@ namespace CodeImp.DoomBuilder.Controls
action.Enabled = (act.Index != 0);
actionlabel.Enabled = (act.Index != 0);
//mxd
bool hasArg0Str = General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, l.Action) != -1 && l.Fields.ContainsKey("arg0str");
// Arguments
arglbl1.Text = hasArg0Str ? "Script name:" : act.Args[0].Title + ":"; //mxd
arglbl2.Text = act.Args[1].Title + ":";
arglbl3.Text = act.Args[2].Title + ":";
arglbl4.Text = act.Args[3].Title + ":";
arglbl5.Text = act.Args[4].Title + ":";
arglbl1.Enabled = act.Args[0].Used;
arglbl2.Enabled = act.Args[1].Used;
arglbl3.Enabled = act.Args[2].Used;
arglbl4.Enabled = act.Args[3].Used;
arglbl5.Enabled = act.Args[4].Used;
arg1.Enabled = act.Args[0].Used;
arg2.Enabled = act.Args[1].Used;
arg3.Enabled = act.Args[2].Used;
arg4.Enabled = act.Args[3].Used;
arg5.Enabled = act.Args[4].Used;
//mxd. ACS script argument names
bool isacsscript = (Array.IndexOf(GZGeneral.ACS_SPECIALS, l.Action) != -1);
bool isnamedacsscript = (isacsscript && General.Map.UDMF && l.Fields.ContainsKey("arg0str"));
string scriptname = (isnamedacsscript ? l.Fields.GetValue("arg0str", string.Empty) : string.Empty);
ScriptItem scriptitem = null;
//mxd
if (hasArg0Str)
arg1.Text = '"' + l.Fields["arg0str"].Value.ToString() + '"';
else
SetArgumentText(act.Args[0], arg1, l.Args[0]);
// Named script?
if(isnamedacsscript && General.Map.NamedScripts.ContainsKey(scriptname.ToLowerInvariant()))
{
scriptitem = General.Map.NamedScripts[scriptname.ToLowerInvariant()];
}
// Script number?
else if(isacsscript && General.Map.NumberedScripts.ContainsKey(l.Args[0]))
{
scriptitem = General.Map.NumberedScripts[l.Args[0]];
scriptname = scriptitem.Name;
}
// Apply script args?
Label[] arglabels = new[] { arglbl1, arglbl2, arglbl3, arglbl4, arglbl5 };
Label[] args = new[] { arg1, arg2, arg3, arg4, arg5 };
if(scriptitem != null)
{
string[] argnames = scriptitem.GetArgumentsDescriptions(l.Action);
for(int i = 0; i < argnames.Length; i++)
{
if(!string.IsNullOrEmpty(argnames[i]))
{
arglabels[i].Text = argnames[i] + ":";
arglabels[i].Enabled = true;
args[i].Enabled = true;
}
else
{
arglabels[i].Text = act.Args[i].Title + ":";
arglabels[i].Enabled = act.Args[i].Used;
args[i].Enabled = act.Args[i].Used;
}
}
}
else
{
for(int i = 0; i < act.Args.Length; i++)
{
arglabels[i].Text = act.Args[i].Title + ":";
arglabels[i].Enabled = act.Args[i].Used;
args[i].Enabled = act.Args[i].Used;
}
}
//mxd. Set argument value and label
if(!string.IsNullOrEmpty(scriptname)) arg1.Text = scriptname;
else SetArgumentText(act.Args[0], arg1, l.Args[0]);
SetArgumentText(act.Args[1], arg2, l.Args[1]);
SetArgumentText(act.Args[2], arg3, l.Args[2]);
SetArgumentText(act.Args[3], arg4, l.Args[3]);

View file

@ -20,6 +20,7 @@ using System;
using System.Globalization;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.GZBuilder.Data;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Types;
@ -32,8 +33,8 @@ namespace CodeImp.DoomBuilder.Controls
{
internal partial class ThingInfoPanel : UserControl
{
private int hexenformatwidth;
private int doomformatwidth;
private readonly int hexenformatwidth;
private readonly int doomformatwidth;
// Constructor
public ThingInfoPanel()
@ -49,7 +50,6 @@ namespace CodeImp.DoomBuilder.Controls
// This shows the info
public void ShowInfo(Thing t)
{
LinedefActionInfo act = null;
string actioninfo;
string zinfo;
@ -79,15 +79,10 @@ namespace CodeImp.DoomBuilder.Controls
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
// Get thing action information
if(General.Map.Config.LinedefActions.ContainsKey(t.Action))
{
act = General.Map.Config.LinedefActions[t.Action];
actioninfo = act.ToString();
}
else if(t.Action == 0)
actioninfo = t.Action + " - None";
else
actioninfo = t.Action + " - Unknown";
LinedefActionInfo act = General.Map.Config.LinedefActions[t.Action];
if(General.Map.Config.LinedefActions.ContainsKey(t.Action)) actioninfo = act.ToString();
else if(t.Action == 0) actioninfo = t.Action + " - None";
else actioninfo = t.Action + " - Unknown";
// Determine z info to show
t.DetermineSector();
@ -134,39 +129,64 @@ namespace CodeImp.DoomBuilder.Controls
spritename.Text = "";
spritetex.Image = null;
}
// Arguments
ArgumentInfo[] arginfo = (((t.Action == 0 || act == null) && ti.Args[0] != null) ? ti.Args : act.Args); //mxd
ArgumentInfo[] arginfo = ((t.Action == 0 && ti.Args[0] != null) ? ti.Args : act.Args); //mxd
//mxd
bool hasArg0Str = General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, t.Action) != -1 && t.Fields.ContainsKey("arg0str");
//mxd. ACS script argument names
bool isacsscript = (Array.IndexOf(GZGeneral.ACS_SPECIALS, t.Action) != -1);
bool isnamedacsscript = (isacsscript && General.Map.UDMF && t.Fields.ContainsKey("arg0str"));
string scriptname = (isnamedacsscript ? t.Fields.GetValue("arg0str", string.Empty) : string.Empty);
ScriptItem scriptitem = null;
arglbl1.Text = hasArg0Str ? "Script name:" : arginfo[0].Title + ":"; //mxd
arglbl2.Text = arginfo[1].Title + ":";
arglbl3.Text = arginfo[2].Title + ":";
arglbl4.Text = arginfo[3].Title + ":";
arglbl5.Text = arginfo[4].Title + ":";
arglbl1.Enabled = arginfo[0].Used;
arglbl2.Enabled = arginfo[1].Used;
arglbl3.Enabled = arginfo[2].Used;
arglbl4.Enabled = arginfo[3].Used;
arglbl5.Enabled = arginfo[4].Used;
arg1.Enabled = arginfo[0].Used;
arg2.Enabled = arginfo[1].Used;
arg3.Enabled = arginfo[2].Used;
arg4.Enabled = arginfo[3].Used;
arg5.Enabled = arginfo[4].Used;
//mxd
if(hasArg0Str)
// Named script?
if(isnamedacsscript && General.Map.NamedScripts.ContainsKey(scriptname.ToLowerInvariant()))
{
arg1.Text = '"' + t.Fields["arg0str"].Value.ToString() + '"';
}
else
{
SetArgumentText(arginfo[0], arg1, t.Args[0]);
scriptitem = General.Map.NamedScripts[scriptname.ToLowerInvariant()];
}
// Script number?
else if(isacsscript && General.Map.NumberedScripts.ContainsKey(t.Args[0]))
{
scriptitem = General.Map.NumberedScripts[t.Args[0]];
scriptname = scriptitem.Name;
}
// Apply script args?
Label[] arglabels = new[] { arglbl1, arglbl2, arglbl3, arglbl4, arglbl5 };
Label[] args = new[] { arg1, arg2, arg3, arg4, arg5 };
if(scriptitem != null)
{
string[] argnames = scriptitem.GetArgumentsDescriptions(t.Action);
for(int i = 0; i < argnames.Length; i++)
{
if(!string.IsNullOrEmpty(argnames[i]))
{
arglabels[i].Text = argnames[i] + ":";
arglabels[i].Enabled = true;
args[i].Enabled = true;
}
else
{
arglabels[i].Text = arginfo[i].Title + ":";
arglabels[i].Enabled = arginfo[i].Used;
args[i].Enabled = arginfo[i].Used;
}
}
}
else
{
for(int i = 0; i < arginfo.Length; i++)
{
arglabels[i].Text = arginfo[i].Title + ":";
arglabels[i].Enabled = arginfo[i].Used;
args[i].Enabled = arginfo[i].Used;
}
}
//mxd. Set argument value and label
if(!string.IsNullOrEmpty(scriptname)) arg1.Text = scriptname;
else SetArgumentText(arginfo[0], arg1, t.Args[0]);
SetArgumentText(arginfo[1], arg2, t.Args[1]);
SetArgumentText(arginfo[2], arg3, t.Args[2]);
SetArgumentText(arginfo[3], arg4, t.Args[3]);

View file

@ -1,10 +1,12 @@
using System;
using System.Collections.Generic;
namespace CodeImp.DoomBuilder.GZBuilder.Data
{
internal sealed class ScriptItem : Object
{
private readonly string name;
private readonly List<string> argnames;
private readonly int index;
private readonly int cursorposition;
private readonly bool isinclude;
@ -14,18 +16,31 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
internal int CursorPosition { get { return cursorposition; } }
internal bool IsInclude { get { return isinclude; } }
internal ScriptItem(int index, string name, int cursorPosition, bool isinclude)
internal ScriptItem(string name, int cursorposition, bool isinclude)
{
this.name = name;
this.index = index;
this.cursorposition = cursorPosition;
this.argnames = new List<string>();
this.index = int.MinValue;
this.cursorposition = cursorposition;
this.isinclude = isinclude;
}
internal ScriptItem(int index, string name)
internal ScriptItem(int index, string name, List<string> argnames, int cursorposition, bool isinclude)
{
this.name = name;
this.argnames = argnames;
this.index = index;
this.cursorposition = cursorposition;
this.isinclude = isinclude;
}
internal ScriptItem(string name, List<string> argnames, int cursorposition, bool isinclude)
{
this.name = name;
this.argnames = argnames;
this.index = int.MinValue;
this.cursorposition = cursorposition;
this.isinclude = isinclude;
}
internal static int SortByIndex(ScriptItem i1, ScriptItem i2)
@ -58,6 +73,37 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data
return -1;
}
// God awful, but will do...
internal string[] GetArgumentsDescriptions(int action)
{
string[] result = new[] { index == int.MinValue ? "Script Name" : "Script Number", string.Empty, string.Empty, string.Empty, string.Empty };
switch (action)
{
case 80: //ACS_Execute (script, map, s_arg1, s_arg2, s_arg3)
case 226: //ACS_ExecuteAlways (script, map, s_arg1, s_arg2, s_arg3)
argnames.CopyTo(0, result, 2, argnames.Count < 3 ? argnames.Count : 3);
break;
case 83: //ACS_LockedExecute (script, map, s_arg1, s_arg2, lock)
case 85: //ACS_LockedExecuteDoor (script, map, s_arg1, s_arg2, lock)
argnames.CopyTo(0, result, 2, argnames.Count < 2 ? argnames.Count : 2);
break;
case 84: //ACS_ExecuteWithResult (script, s_arg1, s_arg2, s_arg3, s_arg4)
argnames.CopyTo(0, result, 1, argnames.Count < 4 ? argnames.Count : 4);
break;
case 81: //ACS_Suspend (script, map)
case 82: //ACS_Terminate (script, map)
return result;
default:
return new[] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty };
}
return result;
}
public override string ToString()
{
return name;

View file

@ -31,6 +31,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
functions = new List<ScriptItem>();
parsedlumps = new List<string>();
includes = new List<string>();
specialtokens += "(,)";
}
public override bool Parse(Stream stream, string sourcefilename)
@ -76,23 +77,25 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
if (token.IndexOf('"') != -1)
{
startpos += 1;
//check if we have something like '"mycoolscript"(void)' as a token
if(token.LastIndexOf('"') != token.Length - 1)
token = token.Substring(0, token.LastIndexOf('"'));
string scriptname = StripTokenQuotes(token);
token = StripTokenQuotes(token);
ScriptItem i = new ScriptItem(0, token, startpos, isinclude);
namedscripts.Add(i);
// Try to parse argument names
List<KeyValuePair<string, string>> args = ParseArgs();
List<string> argnames = new List<string>();
foreach(KeyValuePair<string, string> group in args) argnames.Add(group.Value);
// Add to collection
namedscripts.Add(new ScriptItem(scriptname, argnames, startpos, isinclude));
}
else //should be numbered script
{
//check if we have something like "999(void)" as a token
if (token.Contains("(")) token = token.Substring(0, token.IndexOf("("));
int n;
if (int.TryParse(token, NumberStyles.Integer, CultureInfo.InvariantCulture, out n))
{
//now find opening brace
// Try to parse argument names
List<KeyValuePair<string, string>> args = ParseArgs();
// Now find the opening brace
do
{
if(!SkipWhitespace(true)) break;
@ -114,8 +117,12 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
}
name = (name.Length > 0 ? name + " [" + n + "]" : "Script " + n);
ScriptItem i = new ScriptItem(n, name, startpos, isinclude);
numberedscripts.Add(i);
List<string> argnames = new List<string>();
foreach(KeyValuePair<string, string> group in args) argnames.Add(group.Value);
// Add to collection
numberedscripts.Add(new ScriptItem(n, name, argnames, startpos, isinclude));
}
}
}
@ -129,30 +136,13 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
SkipWhitespace(true);
funcname += " " + ReadToken(); //read function name
//look for opening brace
if (!funcname.Contains("("))
{
SkipWhitespace(true);
funcname += " " + ReadToken();
}
else
{
funcname = funcname.Replace("(", " (");
}
// Try to parse argument names
List<KeyValuePair<string, string>> args = ParseArgs();
List<string> argnames = new List<string>();
foreach(KeyValuePair<string, string> group in args) argnames.Add(group.Value);
//look for closing brace
if(!funcname.Contains(")"))
{
do
{
if(!SkipWhitespace(true)) break;
token = ReadToken();
funcname += " " + token;
} while(!string.IsNullOrEmpty(token) && !token.Contains(")"));
}
ScriptItem i = new ScriptItem(0, funcname, startpos, isinclude);
functions.Add(i);
// Add to collection
functions.Add(new ScriptItem(funcname, argnames, startpos, isinclude));
}
break;
@ -187,5 +177,40 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
}
return true;
}
private List<KeyValuePair<string, string>> ParseArgs() //type, name
{
List<KeyValuePair<string, string>> argnames = new List<KeyValuePair<string, string>>();
SkipWhitespace(true);
string token = ReadToken();
// Should be ENTER/OPEN etc. script type
if(token != "(")
{
argnames.Add(new KeyValuePair<string, string>(token.ToUpperInvariant(), string.Empty));
return argnames;
}
while(SkipWhitespace(true))
{
string argtype = ReadToken(); // should be type
if(IsSpecialToken(argtype)) break;
if(argtype.ToUpperInvariant() == "VOID")
{
argnames.Add(new KeyValuePair<string, string>("(void)", string.Empty));
break;
}
SkipWhitespace(true);
token = ReadToken(); // should be arg name
argnames.Add(new KeyValuePair<string, string>(argtype, token));
SkipWhitespace(true);
token = ReadToken(); // should be comma or ")"
if(token != ",") break;
}
return argnames;
}
}
}

View file

@ -45,7 +45,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
string name = "";
foreach (string s in definition) name += s + " ";
actors.Add(new ScriptItem(0, name.TrimEnd(), startPos, false));
actors.Add(new ScriptItem(name.TrimEnd(), startPos, false));
}
}
}

View file

@ -43,7 +43,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.GZDoom
if (token == "{")
{
ScriptItem i = new ScriptItem(0, modelName, startPos, false);
ScriptItem i = new ScriptItem(modelName, startPos, false);
models.Add(i);
}
}

View file

@ -83,8 +83,8 @@ namespace CodeImp.DoomBuilder
private VisualCamera visualcamera;
//mxd
private List<ScriptItem> namedScripts;
private List<ScriptItem> numberedScripts;
private Dictionary<string, ScriptItem> namedscripts;
private Dictionary<int, ScriptItem> numberedscripts;
private List<string> scriptincludes;
// Disposing
@ -122,8 +122,8 @@ namespace CodeImp.DoomBuilder
//mxd
public bool UDMF { get { return config.FormatInterface == "UniversalMapSetIO"; } }
internal List<ScriptItem> NamedScripts { get { return namedScripts; } }
internal List<ScriptItem> NumberedScripts { get { return numberedScripts; } }
internal Dictionary<string, ScriptItem> NamedScripts { get { return namedscripts; } }
internal Dictionary<int, ScriptItem> NumberedScripts { get { return numberedscripts; } }
internal List<string> ScriptIncludes { get { return scriptincludes; } }
public ViewMode ViewMode { get { return renderer2d.ViewMode; } }
@ -152,8 +152,8 @@ namespace CodeImp.DoomBuilder
errors = new List<CompilerError>();
//mxd
numberedScripts = new List<ScriptItem>();
namedScripts = new List<ScriptItem>();
numberedscripts = new Dictionary<int, ScriptItem>();
namedscripts = new Dictionary<string, ScriptItem>();
scriptincludes = new List<string>();
}
@ -308,8 +308,8 @@ namespace CodeImp.DoomBuilder
map.Update();
thingsfilter.Update();
namedScripts = new List<ScriptItem>(); //mxd
numberedScripts = new List<ScriptItem>(); //mxd
namedscripts = new Dictionary<string, ScriptItem>(); //mxd
numberedscripts = new Dictionary<int, ScriptItem>(); //mxd
// Bind any methods
General.Actions.BindMethods(this);
@ -1485,6 +1485,8 @@ namespace CodeImp.DoomBuilder
scriptwindow.Show();
}
}
if(scriptwindow.WindowState == FormWindowState.Minimized) scriptwindow.WindowState = FormWindowState.Normal; //mxd
scriptwindow.Activate();
scriptwindow.Focus();
Cursor.Current = Cursors.Default;
@ -1718,8 +1720,8 @@ namespace CodeImp.DoomBuilder
//mxd
internal void UpdateScriptNames()
{
namedScripts = new List<ScriptItem>();
numberedScripts = new List<ScriptItem>();
List<ScriptItem> namedscriptslist = new List<ScriptItem>();
List<ScriptItem> numberedscriptslist = new List<ScriptItem>();
// Load the script lumps
foreach (MapLumpInfo maplumpinfo in config.MapLumps.Values)
@ -1737,16 +1739,31 @@ namespace CodeImp.DoomBuilder
parser.Parse(stream, "SCRIPTS", true, false);
// Add them to arrays
namedScripts.AddRange(parser.NamedScripts);
numberedScripts.AddRange(parser.NumberedScripts);
namedscriptslist.AddRange(parser.NamedScripts);
numberedscriptslist.AddRange(parser.NumberedScripts);
scriptincludes.AddRange(parser.Includes);
}
}
}
// Sort script names
namedScripts.Sort(ScriptItem.SortByName);
numberedScripts.Sort(ScriptItem.SortByIndex);
namedscriptslist.Sort(ScriptItem.SortByName);
numberedscriptslist.Sort(ScriptItem.SortByIndex);
// Add to collections
namedscripts = new Dictionary<string, ScriptItem>(namedscriptslist.Count);
numberedscripts = new Dictionary<int, ScriptItem>(numberedscriptslist.Count);
foreach (ScriptItem item in namedscriptslist)
{
if(!namedscripts.ContainsKey(item.Name.ToLowerInvariant()))
namedscripts.Add(item.Name.ToLowerInvariant(), item);
}
foreach(ScriptItem item in numberedscriptslist)
{
if(!numberedscripts.ContainsKey(item.Index))
numberedscripts.Add(item.Index, item);
}
}
//mxd

View file

@ -44,19 +44,8 @@ namespace CodeImp.DoomBuilder.Windows
this.cancel = new System.Windows.Forms.Button();
this.apply = new System.Windows.Forms.Button();
this.actiongroup = new System.Windows.Forms.GroupBox();
this.argscontrol = new CodeImp.DoomBuilder.Controls.ArgumentsControl();
this.actionhelp = new CodeImp.DoomBuilder.Controls.ActionSpecialHelpButton();
this.argspanel = new System.Windows.Forms.Panel();
this.scriptNumbers = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.arg2 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg0 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg3 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg4 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1label = new System.Windows.Forms.Label();
this.arg3label = new System.Windows.Forms.Label();
this.arg2label = new System.Windows.Forms.Label();
this.arg4label = new System.Windows.Forms.Label();
this.arg0label = new System.Windows.Forms.Label();
this.hexenpanel = new System.Windows.Forms.Panel();
this.activation = new System.Windows.Forms.ComboBox();
this.action = new CodeImp.DoomBuilder.Controls.ActionSelectorControl();
@ -92,7 +81,6 @@ namespace CodeImp.DoomBuilder.Windows
label12 = new System.Windows.Forms.Label();
activationlabel = new System.Windows.Forms.Label();
this.actiongroup.SuspendLayout();
this.argspanel.SuspendLayout();
this.hexenpanel.SuspendLayout();
this.flagsgroup.SuspendLayout();
this.idgroup.SuspendLayout();
@ -236,8 +224,8 @@ namespace CodeImp.DoomBuilder.Windows
//
this.actiongroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.actiongroup.Controls.Add(this.argscontrol);
this.actiongroup.Controls.Add(this.actionhelp);
this.actiongroup.Controls.Add(this.argspanel);
this.actiongroup.Controls.Add(this.hexenpanel);
this.actiongroup.Controls.Add(label2);
this.actiongroup.Controls.Add(this.action);
@ -249,136 +237,28 @@ namespace CodeImp.DoomBuilder.Windows
this.actiongroup.TabStop = false;
this.actiongroup.Text = " Action ";
//
// argscontrol
//
this.argscontrol.Location = new System.Drawing.Point(9, 52);
this.argscontrol.Name = "argscontrol";
this.argscontrol.Size = new System.Drawing.Size(526, 76);
this.argscontrol.TabIndex = 12;
this.argscontrol.Visible = false;
//
// actionhelp
//
this.actionhelp.Location = new System.Drawing.Point(497, 21);
this.actionhelp.Location = new System.Drawing.Point(505, 21);
this.actionhelp.Name = "actionhelp";
this.actionhelp.Size = new System.Drawing.Size(28, 25);
this.actionhelp.TabIndex = 11;
//
// argspanel
//
this.argspanel.Controls.Add(this.scriptNumbers);
this.argspanel.Controls.Add(this.arg2);
this.argspanel.Controls.Add(this.arg1);
this.argspanel.Controls.Add(this.arg0);
this.argspanel.Controls.Add(this.arg3);
this.argspanel.Controls.Add(this.arg4);
this.argspanel.Controls.Add(this.arg1label);
this.argspanel.Controls.Add(this.arg3label);
this.argspanel.Controls.Add(this.arg2label);
this.argspanel.Controls.Add(this.arg4label);
this.argspanel.Controls.Add(this.arg0label);
this.argspanel.Location = new System.Drawing.Point(6, 50);
this.argspanel.Name = "argspanel";
this.argspanel.Size = new System.Drawing.Size(521, 83);
this.argspanel.TabIndex = 2;
this.argspanel.Visible = false;
//
// scriptNumbers
//
this.scriptNumbers.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptNumbers.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptNumbers.BackColor = System.Drawing.Color.LemonChiffon;
this.scriptNumbers.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptNumbers.FormattingEnabled = true;
this.scriptNumbers.Location = new System.Drawing.Point(398, 57);
this.scriptNumbers.Name = "scriptNumbers";
this.scriptNumbers.Size = new System.Drawing.Size(120, 21);
this.scriptNumbers.TabIndex = 39;
//
// arg2
//
this.arg2.Location = new System.Drawing.Point(153, 55);
this.arg2.Name = "arg2";
this.arg2.Size = new System.Drawing.Size(120, 24);
this.arg2.TabIndex = 2;
//
// arg1
//
this.arg1.Location = new System.Drawing.Point(153, 29);
this.arg1.Name = "arg1";
this.arg1.Size = new System.Drawing.Size(120, 24);
this.arg1.TabIndex = 1;
//
// arg0
//
this.arg0.Location = new System.Drawing.Point(153, 3);
this.arg0.Name = "arg0";
this.arg0.Size = new System.Drawing.Size(120, 24);
this.arg0.TabIndex = 0;
//
// arg3
//
this.arg3.Location = new System.Drawing.Point(398, 3);
this.arg3.Name = "arg3";
this.arg3.Size = new System.Drawing.Size(120, 24);
this.arg3.TabIndex = 3;
//
// arg4
//
this.arg4.Location = new System.Drawing.Point(398, 29);
this.arg4.Name = "arg4";
this.arg4.Size = new System.Drawing.Size(120, 24);
this.arg4.TabIndex = 4;
//
// arg1label
//
this.arg1label.Location = new System.Drawing.Point(-32, 34);
this.arg1label.Name = "arg1label";
this.arg1label.Size = new System.Drawing.Size(179, 14);
this.arg1label.TabIndex = 33;
this.arg1label.Text = "Argument 2:";
this.arg1label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg1label.UseMnemonic = false;
//
// arg3label
//
this.arg3label.Location = new System.Drawing.Point(213, 8);
this.arg3label.Name = "arg3label";
this.arg3label.Size = new System.Drawing.Size(179, 14);
this.arg3label.TabIndex = 36;
this.arg3label.Text = "Argument 4:";
this.arg3label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg3label.UseMnemonic = false;
//
// arg2label
//
this.arg2label.Location = new System.Drawing.Point(-32, 60);
this.arg2label.Name = "arg2label";
this.arg2label.Size = new System.Drawing.Size(179, 14);
this.arg2label.TabIndex = 35;
this.arg2label.Text = "Argument 3:";
this.arg2label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg2label.UseMnemonic = false;
//
// arg4label
//
this.arg4label.Location = new System.Drawing.Point(213, 34);
this.arg4label.Name = "arg4label";
this.arg4label.Size = new System.Drawing.Size(179, 14);
this.arg4label.TabIndex = 34;
this.arg4label.Text = "Argument 5:";
this.arg4label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg4label.UseMnemonic = false;
//
// arg0label
//
this.arg0label.Location = new System.Drawing.Point(-32, 8);
this.arg0label.Name = "arg0label";
this.arg0label.Size = new System.Drawing.Size(179, 14);
this.arg0label.TabIndex = 32;
this.arg0label.Text = "Argument 1:";
this.arg0label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg0label.UseMnemonic = false;
//
// hexenpanel
//
this.hexenpanel.Controls.Add(this.activation);
this.hexenpanel.Controls.Add(activationlabel);
this.hexenpanel.Location = new System.Drawing.Point(6, 134);
this.hexenpanel.Name = "hexenpanel";
this.hexenpanel.Size = new System.Drawing.Size(521, 36);
this.hexenpanel.Size = new System.Drawing.Size(529, 36);
this.hexenpanel.TabIndex = 3;
this.hexenpanel.Visible = false;
//
@ -388,7 +268,7 @@ namespace CodeImp.DoomBuilder.Windows
this.activation.FormattingEnabled = true;
this.activation.Location = new System.Drawing.Point(56, 7);
this.activation.Name = "activation";
this.activation.Size = new System.Drawing.Size(463, 21);
this.activation.Size = new System.Drawing.Size(470, 21);
this.activation.TabIndex = 0;
//
// action
@ -400,7 +280,7 @@ namespace CodeImp.DoomBuilder.Windows
this.action.GeneralizedOptions = null;
this.action.Location = new System.Drawing.Point(62, 23);
this.action.Name = "action";
this.action.Size = new System.Drawing.Size(402, 21);
this.action.Size = new System.Drawing.Size(412, 21);
this.action.TabIndex = 0;
this.action.Value = 402;
this.action.ValueChanges += new System.EventHandler(this.action_ValueChanges);
@ -408,7 +288,7 @@ namespace CodeImp.DoomBuilder.Windows
// browseaction
//
this.browseaction.Image = global::CodeImp.DoomBuilder.Properties.Resources.List;
this.browseaction.Location = new System.Drawing.Point(467, 21);
this.browseaction.Location = new System.Drawing.Point(476, 21);
this.browseaction.Name = "browseaction";
this.browseaction.Size = new System.Drawing.Size(28, 25);
this.browseaction.TabIndex = 1;
@ -436,9 +316,9 @@ namespace CodeImp.DoomBuilder.Windows
| System.Windows.Forms.AnchorStyles.Right)));
this.flags.AutoScroll = true;
this.flags.Columns = 3;
this.flags.Location = new System.Drawing.Point(18, 17);
this.flags.Location = new System.Drawing.Point(8, 17);
this.flags.Name = "flags";
this.flags.Size = new System.Drawing.Size(517, 96);
this.flags.Size = new System.Drawing.Size(532, 96);
this.flags.TabIndex = 0;
this.flags.VerticalSpacing = 1;
this.flags.OnValueChanged += new System.EventHandler(this.flags_OnValueChanged);
@ -700,7 +580,6 @@ namespace CodeImp.DoomBuilder.Windows
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.LinedefEditForm_HelpRequested);
this.actiongroup.ResumeLayout(false);
this.actiongroup.PerformLayout();
this.argspanel.ResumeLayout(false);
this.hexenpanel.ResumeLayout(false);
this.hexenpanel.PerformLayout();
this.flagsgroup.ResumeLayout(false);
@ -735,27 +614,16 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.ComboBox activation;
private System.Windows.Forms.Panel hexenpanel;
private System.Windows.Forms.GroupBox idgroup;
private System.Windows.Forms.Panel argspanel;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg2;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg1;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg0;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg3;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg4;
private System.Windows.Forms.Label arg1label;
private System.Windows.Forms.Label arg0label;
private System.Windows.Forms.Label arg3label;
private System.Windows.Forms.Label arg2label;
private System.Windows.Forms.Label arg4label;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontsector;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backsector;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private CodeImp.DoomBuilder.GZBuilder.Controls.PairedIntControl frontTextureOffset;
private CodeImp.DoomBuilder.GZBuilder.Controls.PairedIntControl backTextureOffset;
private CodeImp.DoomBuilder.Controls.ColoredComboBox scriptNumbers;
private System.Windows.Forms.Panel panel;
private CodeImp.DoomBuilder.Controls.ActionSpecialHelpButton actionhelp;
private System.Windows.Forms.ToolTip tooltip;
private System.Windows.Forms.Label labelFrontTextureOffset;
private System.Windows.Forms.Label labelBackTextureOffset;
private CodeImp.DoomBuilder.Controls.ArgumentsControl argscontrol;
}
}

View file

@ -20,11 +20,8 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.GZBuilder.Data; //mxd
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
@ -37,11 +34,6 @@ namespace CodeImp.DoomBuilder.Windows
public event EventHandler OnValuesChanged; //mxd
#endregion
#region ================== Constants
#endregion
#region ================== Variables
@ -124,29 +116,20 @@ namespace CodeImp.DoomBuilder.Windows
backhigh.Initialize();
backmid.Initialize();
backlow.Initialize();
//mxd. Setup script numbers
scriptNumbers.Location = new Point(arg0.Location.X, arg0.Location.Y + 2);
foreach(ScriptItem si in General.Map.NumberedScripts)
scriptNumbers.Items.Add(new ColoredComboBoxItem(si, si.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptNumbers.DropDownWidth = Tools.GetDropDownWidth(scriptNumbers);
// Mixed activations?
if(General.Map.FormatInterface.HasPresetActivations)
hexenpanel.Visible = true;
// Action arguments?
if(General.Map.FormatInterface.HasActionArgs)
argspanel.Visible = true;
if(General.Map.FormatInterface.HasActionArgs) argscontrol.Visible = true;
// Arrange panels
if(!General.Map.FormatInterface.HasMixedActivations &&
!General.Map.FormatInterface.HasActionArgs &&
!General.Map.FormatInterface.HasPresetActivations)
{
actiongroup.Height = argspanel.Top + argspanel.Margin.Top; //mxd
actiongroup.Height = argscontrol.Top + argscontrol.Margin.Top; //mxd
}
// Arrange or hide Identification panel
@ -208,11 +191,8 @@ namespace CodeImp.DoomBuilder.Windows
tagSelector.SetTag(fl.Tag);
}
arg0.SetValue(fl.Args[0]);
arg1.SetValue(fl.Args[1]);
arg2.SetValue(fl.Args[2]);
arg3.SetValue(fl.Args[3]);
arg4.SetValue(fl.Args[4]);
//mxd. Args
argscontrol.SetValue(fl, true);
// Front side and back side checkboxes
frontside.Checked = (fl.Front != null);
@ -274,11 +254,9 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
if(l.Action != action.Value) action.Empty = true;
if(General.Map.FormatInterface.HasLinedefTag && l.Tag != fl.Tag) tagSelector.ClearTag(); //mxd
if(l.Args[0] != arg0.GetResult(-1)) arg0.ClearValue();
if(l.Args[1] != arg1.GetResult(-1)) arg1.ClearValue();
if(l.Args[2] != arg2.GetResult(-1)) arg2.ClearValue();
if(l.Args[3] != arg3.GetResult(-1)) arg3.ClearValue();
if(l.Args[4] != arg4.GetResult(-1)) arg4.ClearValue();
//mxd. Arguments
argscontrol.SetValue(l, false);
// Front side checkbox
if((l.Front != null) != frontside.Checked)
@ -364,7 +342,7 @@ namespace CodeImp.DoomBuilder.Windows
preventchanges = false;
UpdateScriptControls(); //mxd
argscontrol.UpdateScriptControls(); //mxd
actionhelp.UpdateAction(action.GetValue()); //mxd
//mxd. Update some labels
@ -376,32 +354,6 @@ namespace CodeImp.DoomBuilder.Windows
{
labelBackTextureOffset.Enabled = backTextureOffset.NonDefaultValue;
}
//mxd. Set intial script-related values, if required
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1)
{
int a0 = arg0.GetResult(0);
if(a0 > 0)
{
for(int i = 0; i < General.Map.NumberedScripts.Count; i++)
{
if(General.Map.NumberedScripts[i].Index == a0)
{
scriptNumbers.SelectedIndex = i;
break;
}
}
}
if(scriptNumbers.SelectedIndex == -1)
{
scriptNumbers.Text = a0.ToString();
}
}
else
{
scriptNumbers.Text = "0";
}
}
//mxd
@ -414,36 +366,6 @@ namespace CodeImp.DoomBuilder.Windows
General.Map.UndoRedo.CreateUndo("Edit " + (lines.Count > 1 ? lines.Count + " linedefs" : "linedef"));
}
//mxd
private void UpdateScriptControls()
{
scriptNumbers.Visible = (Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1);
arg0.Visible = !scriptNumbers.Visible;
}
//mxd
private void UpdateArgument(ArgumentBox arg, Label label, ArgumentInfo info)
{
label.Text = info.Title + ":";
label.Enabled = info.Used;
arg.ForeColor = (label.Enabled ? SystemColors.WindowText : SystemColors.GrayText);
arg.Setup(info);
// Update tooltip
if(info.Used && !string.IsNullOrEmpty(info.ToolTip))
{
tooltip.SetToolTip(label, info.ToolTip);
label.Font = new Font(label.Font, FontStyle.Underline);
label.ForeColor = SystemColors.HotTrack;
}
else
{
tooltip.SetToolTip(label, null);
label.Font = new Font(label.Font, FontStyle.Regular);
label.ForeColor = SystemColors.WindowText;
}
}
#endregion
#region ================== Events
@ -473,9 +395,6 @@ namespace CodeImp.DoomBuilder.Windows
}
MakeUndo(); //mxd
//mxd
bool hasAcs = !action.Empty && Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1;
// Go for all the lines
int tagoffset = 0; //mxd
@ -487,35 +406,10 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
l.Tag = General.Clamp(tagSelector.GetSmartTag(l.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty)
{
l.Action = action.Value;
if(!action.Empty) l.Action = action.Value;
//mxd. Script name/number handling
if(hasAcs)
{
if(!string.IsNullOrEmpty(scriptNumbers.Text))
{
if(scriptNumbers.SelectedItem != null)
l.Args[0] = ((ScriptItem)((ColoredComboBoxItem)scriptNumbers.SelectedItem).Value).Index;
else if(!int.TryParse(scriptNumbers.Text.Trim(), out l.Args[0]))
l.Args[0] = 0;
}
}
else
{
l.Args[0] = arg0.GetResult(l.Args[0]);
}
}
else
{
l.Args[0] = arg0.GetResult(l.Args[0]);
}
l.Args[1] = arg1.GetResult(l.Args[1]);
l.Args[2] = arg2.GetResult(l.Args[2]);
l.Args[3] = arg3.GetResult(l.Args[3]);
l.Args[4] = arg4.GetResult(l.Args[4]);
//mxd. Apply args
argscontrol.Apply(l);
// Remove front side?
if((l.Front != null) && (frontside.CheckState == CheckState.Unchecked))
@ -616,37 +510,15 @@ namespace CodeImp.DoomBuilder.Windows
// Only when line type is known
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
// Change the argument descriptions
UpdateArgument(arg0, arg0label, General.Map.Config.LinedefActions[showaction].Args[0]); //mxd
UpdateArgument(arg1, arg1label, General.Map.Config.LinedefActions[showaction].Args[1]); //mxd
UpdateArgument(arg2, arg2label, General.Map.Config.LinedefActions[showaction].Args[2]); //mxd
UpdateArgument(arg3, arg3label, General.Map.Config.LinedefActions[showaction].Args[3]); //mxd
UpdateArgument(arg4, arg4label, General.Map.Config.LinedefActions[showaction].Args[4]); //mxd
//mxd. Change the argument descriptions
argscontrol.UpdateAction(showaction, preventchanges);
if(!preventchanges)
{
MakeUndo(); //mxd
// mxd. Apply action's default arguments
if(showaction != 0)
{
arg0.SetDefaultValue();
arg1.SetDefaultValue();
arg2.SetDefaultValue();
arg3.SetDefaultValue();
arg4.SetDefaultValue();
}
else //or set them to 0
{
arg0.SetValue(0);
arg1.SetValue(0);
arg2.SetValue(0);
arg3.SetValue(0);
arg4.SetValue(0);
}
//mxd. Update what must be updated
UpdateScriptControls();
argscontrol.UpdateScriptControls();
actionhelp.UpdateAction(showaction);
}
}

View file

@ -41,20 +41,6 @@ namespace CodeImp.DoomBuilder.Windows
this.apply = new System.Windows.Forms.Button();
this.actiongroup = new System.Windows.Forms.GroupBox();
this.actionhelp = new CodeImp.DoomBuilder.Controls.ActionSpecialHelpButton();
this.argspanel = new System.Windows.Forms.Panel();
this.scriptNumbers = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.scriptNames = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.arg2 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg0 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg3 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg4 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1label = new System.Windows.Forms.Label();
this.arg3label = new System.Windows.Forms.Label();
this.arg2label = new System.Windows.Forms.Label();
this.arg4label = new System.Windows.Forms.Label();
this.cbArgStr = new System.Windows.Forms.CheckBox();
this.arg0label = new System.Windows.Forms.Label();
this.action = new CodeImp.DoomBuilder.Controls.ActionSelectorControl();
this.browseaction = new System.Windows.Forms.Button();
this.udmfactivates = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl();
@ -129,18 +115,18 @@ namespace CodeImp.DoomBuilder.Windows
this.backlow = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.backmid = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.backhigh = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.tabcomment = new System.Windows.Forms.TabPage();
this.commenteditor = new CodeImp.DoomBuilder.Controls.CommentEditor();
this.tabcustom = new System.Windows.Forms.TabPage();
this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
this.imagelist = new System.Windows.Forms.ImageList(this.components);
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.tabcomment = new System.Windows.Forms.TabPage();
this.commenteditor = new CodeImp.DoomBuilder.Controls.CommentEditor();
this.argscontrol = new CodeImp.DoomBuilder.Controls.ArgumentsControl();
label2 = new System.Windows.Forms.Label();
label11 = new System.Windows.Forms.Label();
label12 = new System.Windows.Forms.Label();
label6 = new System.Windows.Forms.Label();
this.actiongroup.SuspendLayout();
this.argspanel.SuspendLayout();
this.flagsgroup.SuspendLayout();
this.tabs.SuspendLayout();
this.tabproperties.SuspendLayout();
@ -160,8 +146,8 @@ namespace CodeImp.DoomBuilder.Windows
this.backflagsgroup.SuspendLayout();
this.backscalegroup.SuspendLayout();
this.groupBox1.SuspendLayout();
this.tabcustom.SuspendLayout();
this.tabcomment.SuspendLayout();
this.tabcustom.SuspendLayout();
this.SuspendLayout();
//
// label2
@ -255,8 +241,8 @@ namespace CodeImp.DoomBuilder.Windows
//
this.actiongroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.actiongroup.Controls.Add(this.argscontrol);
this.actiongroup.Controls.Add(this.actionhelp);
this.actiongroup.Controls.Add(this.argspanel);
this.actiongroup.Controls.Add(label2);
this.actiongroup.Controls.Add(this.action);
this.actiongroup.Controls.Add(this.browseaction);
@ -274,145 +260,6 @@ namespace CodeImp.DoomBuilder.Windows
this.actionhelp.Size = new System.Drawing.Size(28, 25);
this.actionhelp.TabIndex = 10;
//
// argspanel
//
this.argspanel.Controls.Add(this.scriptNumbers);
this.argspanel.Controls.Add(this.scriptNames);
this.argspanel.Controls.Add(this.arg2);
this.argspanel.Controls.Add(this.arg1);
this.argspanel.Controls.Add(this.arg0);
this.argspanel.Controls.Add(this.arg3);
this.argspanel.Controls.Add(this.arg4);
this.argspanel.Controls.Add(this.arg1label);
this.argspanel.Controls.Add(this.arg3label);
this.argspanel.Controls.Add(this.arg2label);
this.argspanel.Controls.Add(this.arg4label);
this.argspanel.Controls.Add(this.cbArgStr);
this.argspanel.Controls.Add(this.arg0label);
this.argspanel.Location = new System.Drawing.Point(6, 54);
this.argspanel.Name = "argspanel";
this.argspanel.Size = new System.Drawing.Size(521, 83);
this.argspanel.TabIndex = 2;
//
// scriptNumbers
//
this.scriptNumbers.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptNumbers.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptNumbers.BackColor = System.Drawing.Color.LemonChiffon;
this.scriptNumbers.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptNumbers.FormattingEnabled = true;
this.scriptNumbers.Location = new System.Drawing.Point(407, 57);
this.scriptNumbers.Name = "scriptNumbers";
this.scriptNumbers.Size = new System.Drawing.Size(120, 21);
this.scriptNumbers.TabIndex = 39;
//
// scriptNames
//
this.scriptNames.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptNames.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptNames.BackColor = System.Drawing.Color.Honeydew;
this.scriptNames.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptNames.FormattingEnabled = true;
this.scriptNames.Location = new System.Drawing.Point(283, 57);
this.scriptNames.Name = "scriptNames";
this.scriptNames.Size = new System.Drawing.Size(120, 21);
this.scriptNames.TabIndex = 38;
//
// arg2
//
this.arg2.Location = new System.Drawing.Point(153, 57);
this.arg2.Name = "arg2";
this.arg2.Size = new System.Drawing.Size(120, 24);
this.arg2.TabIndex = 2;
//
// arg1
//
this.arg1.Location = new System.Drawing.Point(153, 30);
this.arg1.Name = "arg1";
this.arg1.Size = new System.Drawing.Size(120, 24);
this.arg1.TabIndex = 1;
//
// arg0
//
this.arg0.Location = new System.Drawing.Point(153, 3);
this.arg0.Name = "arg0";
this.arg0.Size = new System.Drawing.Size(120, 24);
this.arg0.TabIndex = 0;
//
// arg3
//
this.arg3.Location = new System.Drawing.Point(398, 3);
this.arg3.Name = "arg3";
this.arg3.Size = new System.Drawing.Size(120, 24);
this.arg3.TabIndex = 3;
//
// arg4
//
this.arg4.Location = new System.Drawing.Point(398, 30);
this.arg4.Name = "arg4";
this.arg4.Size = new System.Drawing.Size(120, 24);
this.arg4.TabIndex = 4;
//
// arg1label
//
this.arg1label.Location = new System.Drawing.Point(-32, 35);
this.arg1label.Name = "arg1label";
this.arg1label.Size = new System.Drawing.Size(179, 14);
this.arg1label.TabIndex = 33;
this.arg1label.Text = "Argument 2:";
this.arg1label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg1label.UseMnemonic = false;
//
// arg3label
//
this.arg3label.Location = new System.Drawing.Point(213, 8);
this.arg3label.Name = "arg3label";
this.arg3label.Size = new System.Drawing.Size(179, 14);
this.arg3label.TabIndex = 36;
this.arg3label.Text = "Argument 4:";
this.arg3label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg3label.UseMnemonic = false;
//
// arg2label
//
this.arg2label.Location = new System.Drawing.Point(-32, 62);
this.arg2label.Name = "arg2label";
this.arg2label.Size = new System.Drawing.Size(179, 14);
this.arg2label.TabIndex = 35;
this.arg2label.Text = "Argument 3:";
this.arg2label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg2label.UseMnemonic = false;
//
// arg4label
//
this.arg4label.Location = new System.Drawing.Point(213, 35);
this.arg4label.Name = "arg4label";
this.arg4label.Size = new System.Drawing.Size(179, 14);
this.arg4label.TabIndex = 34;
this.arg4label.Text = "Argument 5:";
this.arg4label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg4label.UseMnemonic = false;
//
// cbArgStr
//
this.cbArgStr.Location = new System.Drawing.Point(8, -4);
this.cbArgStr.Name = "cbArgStr";
this.cbArgStr.Size = new System.Drawing.Size(63, 40);
this.cbArgStr.TabIndex = 37;
this.cbArgStr.Text = "Named script";
this.cbArgStr.UseVisualStyleBackColor = true;
this.cbArgStr.CheckedChanged += new System.EventHandler(this.cbArgStr_CheckedChanged);
//
// arg0label
//
this.arg0label.Location = new System.Drawing.Point(-32, 8);
this.arg0label.Name = "arg0label";
this.arg0label.Size = new System.Drawing.Size(179, 14);
this.arg0label.TabIndex = 32;
this.arg0label.Text = "Argument 1:";
this.arg0label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg0label.UseMnemonic = false;
//
// action
//
this.action.BackColor = System.Drawing.Color.Transparent;
@ -1432,6 +1279,27 @@ namespace CodeImp.DoomBuilder.Windows
this.backhigh.UsePreviews = false;
this.backhigh.OnValueChanged += new System.EventHandler(this.backhigh_OnValueChanged);
//
// tabcomment
//
this.tabcomment.Controls.Add(this.commenteditor);
this.tabcomment.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.tabcomment.Location = new System.Drawing.Point(4, 23);
this.tabcomment.Name = "tabcomment";
this.tabcomment.Size = new System.Drawing.Size(549, 621);
this.tabcomment.TabIndex = 4;
this.tabcomment.Text = "Comment";
this.tabcomment.UseVisualStyleBackColor = true;
//
// commenteditor
//
this.commenteditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.commenteditor.Location = new System.Drawing.Point(3, 3);
this.commenteditor.Name = "commenteditor";
this.commenteditor.Size = new System.Drawing.Size(543, 615);
this.commenteditor.TabIndex = 0;
//
// tabcustom
//
this.tabcustom.Controls.Add(this.fieldslist);
@ -1471,26 +1339,12 @@ namespace CodeImp.DoomBuilder.Windows
this.imagelist.Images.SetKeyName(0, "Check.png");
this.imagelist.Images.SetKeyName(1, "SearchClear.png");
//
// tabcomment
// argscontrol
//
this.tabcomment.Controls.Add(this.commenteditor);
this.tabcomment.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.tabcomment.Location = new System.Drawing.Point(4, 23);
this.tabcomment.Name = "tabcomment";
this.tabcomment.Size = new System.Drawing.Size(549, 621);
this.tabcomment.TabIndex = 4;
this.tabcomment.Text = "Comment";
this.tabcomment.UseVisualStyleBackColor = true;
//
// commenteditor
//
this.commenteditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.commenteditor.Location = new System.Drawing.Point(3, 3);
this.commenteditor.Name = "commenteditor";
this.commenteditor.Size = new System.Drawing.Size(543, 615);
this.commenteditor.TabIndex = 0;
this.argscontrol.Location = new System.Drawing.Point(6, 56);
this.argscontrol.Name = "argscontrol";
this.argscontrol.Size = new System.Drawing.Size(521, 80);
this.argscontrol.TabIndex = 11;
//
// LinedefEditFormUDMF
//
@ -1515,7 +1369,6 @@ namespace CodeImp.DoomBuilder.Windows
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.LinedefEditForm_HelpRequested);
this.actiongroup.ResumeLayout(false);
this.actiongroup.PerformLayout();
this.argspanel.ResumeLayout(false);
this.flagsgroup.ResumeLayout(false);
this.tabs.ResumeLayout(false);
this.tabproperties.ResumeLayout(false);
@ -1540,8 +1393,8 @@ namespace CodeImp.DoomBuilder.Windows
this.backflagsgroup.ResumeLayout(false);
this.backscalegroup.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.tabcustom.ResumeLayout(false);
this.tabcomment.ResumeLayout(false);
this.tabcustom.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -1572,23 +1425,10 @@ namespace CodeImp.DoomBuilder.Windows
private CodeImp.DoomBuilder.Controls.FieldsEditorControl fieldslist;
private System.Windows.Forms.GroupBox idgroup;
private CodeImp.DoomBuilder.Controls.CheckboxArrayControl udmfactivates;
private System.Windows.Forms.Panel argspanel;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg2;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg1;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg0;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg3;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg4;
private System.Windows.Forms.Label arg1label;
private System.Windows.Forms.Label arg0label;
private System.Windows.Forms.Label arg3label;
private System.Windows.Forms.Label arg2label;
private System.Windows.Forms.Label arg4label;
private System.Windows.Forms.Button customfrontbutton;
private System.Windows.Forms.Button custombackbutton;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontsector;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backsector;
private System.Windows.Forms.CheckBox cbArgStr;
private CodeImp.DoomBuilder.Controls.ColoredComboBox scriptNames;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox lightFront;
private System.Windows.Forms.CheckBox cbLightAbsoluteFront;
@ -1615,7 +1455,6 @@ namespace CodeImp.DoomBuilder.Windows
private CodeImp.DoomBuilder.GZBuilder.Controls.PairedIntControl backTextureOffset;
private CodeImp.DoomBuilder.Controls.CheckboxArrayControl flagsFront;
private CodeImp.DoomBuilder.Controls.CheckboxArrayControl flagsBack;
private CodeImp.DoomBuilder.Controls.ColoredComboBox scriptNumbers;
private System.Windows.Forms.GroupBox activationGroup;
private System.Windows.Forms.PictureBox missingactivation;
private System.Windows.Forms.ToolTip tooltip;
@ -1649,5 +1488,6 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.Label labelBackOffsetTop;
private System.Windows.Forms.TabPage tabcomment;
private CodeImp.DoomBuilder.Controls.CommentEditor commenteditor;
private CodeImp.DoomBuilder.Controls.ArgumentsControl argscontrol;
}
}

View file

@ -20,14 +20,11 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.GZBuilder.Data; //mxd
using CodeImp.DoomBuilder.Types;
using CodeImp.DoomBuilder.GZBuilder.Tools;
using CodeImp.DoomBuilder.GZBuilder.Controls;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.GZBuilder.Tools;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
@ -39,11 +36,6 @@ namespace CodeImp.DoomBuilder.Windows
public event EventHandler OnValuesChanged; //mxd
#endregion
#region ================== Constants
#endregion
#region ================== Variables
@ -52,8 +44,6 @@ namespace CodeImp.DoomBuilder.Windows
private List<LinedefProperties> linedefprops; //mxd
private bool preventchanges;
private bool undocreated; //mxd
private string arg0str; //mxd
private bool haveArg0Str; //mxd
private readonly string[] renderstyles; //mxd
private readonly List<int> keynumbers; //mxd
@ -216,18 +206,6 @@ namespace CodeImp.DoomBuilder.Windows
backmid.Initialize();
backlow.Initialize();
//mxd. Setup script numbers
scriptNumbers.Location = new Point(arg0.Location.X, arg0.Location.Y + 2);
foreach (ScriptItem si in General.Map.NumberedScripts)
scriptNumbers.Items.Add(new ColoredComboBoxItem(si, si.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptNumbers.DropDownWidth = Tools.GetDropDownWidth(scriptNumbers);
//mxd. Setup script names
scriptNames.Location = scriptNumbers.Location;
foreach (ScriptItem nsi in General.Map.NamedScripts)
scriptNames.Items.Add(new ColoredComboBoxItem(nsi, nsi.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptNames.DropDownWidth = Tools.GetDropDownWidth(scriptNames);
// Initialize custom fields editor
fieldslist.Setup("linedef");
@ -293,8 +271,6 @@ namespace CodeImp.DoomBuilder.Windows
commenteditor.SetValues(fl.Fields, true); //mxd. Comments
renderStyle.SelectedIndex = Array.IndexOf(renderstyles, fl.Fields.GetValue("renderstyle", "translucent"));
alpha.Text = General.Clamp(fl.Fields.GetValue("alpha", 1.0f), 0f, 1f).ToString();
arg0str = fl.Fields.GetValue("arg0str", string.Empty);
haveArg0Str = !string.IsNullOrEmpty(arg0str);
// Locknumber
int locknumber = fl.Fields.GetValue("locknumber", 0);
@ -310,11 +286,8 @@ namespace CodeImp.DoomBuilder.Windows
tagSelector.SetTag(fl.Tag);
}
arg0.SetValue(fl.Args[0]);
arg1.SetValue(fl.Args[1]);
arg2.SetValue(fl.Args[2]);
arg3.SetValue(fl.Args[3]);
arg4.SetValue(fl.Args[4]);
//mxd. Args
argscontrol.SetValue(fl, true);
// Front side and back side checkboxes
frontside.Checked = (fl.Front != null);
@ -429,13 +402,6 @@ namespace CodeImp.DoomBuilder.Windows
}
}
// arg0str
if(arg0str != l.Fields.GetValue("arg0str", string.Empty))
{
haveArg0Str = true;
arg0str = string.Empty;
}
// Custom fields
fieldslist.SetValues(l.Fields, false);
@ -445,11 +411,9 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
if(l.Action != action.Value) action.Empty = true;
if(General.Map.FormatInterface.HasLinedefTag && l.Tag != fl.Tag) tagSelector.ClearTag(); //mxd
if(l.Args[0] != arg0.GetResult(-1)) arg0.ClearValue();
if(l.Args[1] != arg1.GetResult(-1)) arg1.ClearValue();
if(l.Args[2] != arg2.GetResult(-1)) arg2.ClearValue();
if(l.Args[3] != arg3.GetResult(-1)) arg3.ClearValue();
if(l.Args[4] != arg4.GetResult(-1)) arg4.ClearValue();
//mxd. Arguments
argscontrol.SetValue(l, false);
// Front side checkbox
if((l.Front != null) != frontside.Checked)
@ -590,8 +554,8 @@ namespace CodeImp.DoomBuilder.Windows
preventchanges = false;
UpdateScriptControls(); //mxd
CheckActivationFlagsRequired(); //mxd
argscontrol.UpdateScriptControls(); //mxd
actionhelp.UpdateAction(action.GetValue()); //mxd
commenteditor.FinishSetup(); //mxd
@ -622,40 +586,6 @@ namespace CodeImp.DoomBuilder.Windows
labelBackScaleMid.Enabled = pfcBackScaleMid.NonDefaultValue;
labelBackScaleBottom.Enabled = pfcBackScaleBottom.NonDefaultValue;
}
//mxd. Set intial script-related values, if required
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1)
{
if(haveArg0Str)
{
scriptNames.Text = arg0str;
arg0label.Text = "Script Name:";
}
else
{
int a0 = arg0.GetResult(0);
if(a0 > 0)
{
for(int i = 0; i < General.Map.NumberedScripts.Count; i++)
{
if(General.Map.NumberedScripts[i].Index == a0)
{
scriptNumbers.SelectedIndex = i;
break;
}
}
}
if(scriptNumbers.SelectedIndex == -1)
{
scriptNumbers.Text = a0.ToString();
}
}
}
else
{
scriptNumbers.Text = "0";
}
}
//mxd
@ -678,51 +608,6 @@ namespace CodeImp.DoomBuilder.Windows
}
}
//mxd
private void UpdateScriptControls()
{
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1)
{
bool showNamedScripts = General.Map.UDMF && haveArg0Str;
cbArgStr.Visible = General.Map.UDMF;
cbArgStr.Checked = showNamedScripts;
scriptNames.Visible = showNamedScripts;
scriptNumbers.Visible = !showNamedScripts;
}
else
{
cbArgStr.Visible = false;
scriptNames.Visible = false;
scriptNumbers.Visible = false;
cbArgStr.Checked = false;
}
arg0.Visible = (!scriptNames.Visible && !scriptNumbers.Visible);
}
//mxd
private void UpdateArgument(ArgumentBox arg, Label label, ArgumentInfo info)
{
label.Text = info.Title + ":";
label.Enabled = info.Used;
arg.ForeColor = (label.Enabled ? SystemColors.WindowText : SystemColors.GrayText);
arg.Setup(info);
// Update tooltip
if(info.Used && !string.IsNullOrEmpty(info.ToolTip))
{
tooltip.SetToolTip(label, info.ToolTip);
label.Font = new Font(label.Font, FontStyle.Underline);
label.ForeColor = SystemColors.HotTrack;
}
else
{
tooltip.SetToolTip(label, null);
label.Font = new Font(label.Font, FontStyle.Regular);
label.ForeColor = SystemColors.WindowText;
}
}
//mxd
private void CheckActivationFlagsRequired()
{
@ -782,7 +667,6 @@ namespace CodeImp.DoomBuilder.Windows
MakeUndo();
//mxd
bool hasAcs = !action.Empty && Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1;
int locknumber = 0;
bool setlocknumber = false;
if(!string.IsNullOrEmpty(lockpick.Text))
@ -815,47 +699,10 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
l.Tag = General.Clamp(tagSelector.GetSmartTag(l.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty)
{
l.Action = action.Value;
if(!action.Empty) l.Action = action.Value;
//mxd. Script name/number handling
if(hasAcs)
{
//apply script number
if(!cbArgStr.Checked)
{
if(!string.IsNullOrEmpty(scriptNumbers.Text))
{
if(scriptNumbers.SelectedItem != null)
l.Args[0] = ((ScriptItem)((ColoredComboBoxItem)scriptNumbers.SelectedItem).Value).Index;
else if(!int.TryParse(scriptNumbers.Text.Trim(), out l.Args[0]))
l.Args[0] = 0;
if(l.Fields.ContainsKey("arg0str")) l.Fields.Remove("arg0str");
}
}
else //apply arg0str
{
if(!string.IsNullOrEmpty(scriptNames.Text))
l.Fields["arg0str"] = new UniValue(UniversalType.String, scriptNames.Text);
}
}
else
{
l.Args[0] = arg0.GetResult(l.Args[0]);
if(l.Fields.ContainsKey("arg0str")) l.Fields.Remove("arg0str");
}
}
else
{
l.Args[0] = arg0.GetResult(l.Args[0]);
}
l.Args[1] = arg1.GetResult(l.Args[1]);
l.Args[2] = arg2.GetResult(l.Args[2]);
l.Args[3] = arg3.GetResult(l.Args[3]);
l.Args[4] = arg4.GetResult(l.Args[4]);
//mxd. Apply args
argscontrol.Apply(l);
// Remove front side?
if((l.Front != null) && (frontside.CheckState == CheckState.Unchecked))
@ -971,39 +818,17 @@ namespace CodeImp.DoomBuilder.Windows
// Only when line type is known
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
// Change the argument descriptions
UpdateArgument(arg0, arg0label, General.Map.Config.LinedefActions[showaction].Args[0]); //mxd
UpdateArgument(arg1, arg1label, General.Map.Config.LinedefActions[showaction].Args[1]); //mxd
UpdateArgument(arg2, arg2label, General.Map.Config.LinedefActions[showaction].Args[2]); //mxd
UpdateArgument(arg3, arg3label, General.Map.Config.LinedefActions[showaction].Args[3]); //mxd
UpdateArgument(arg4, arg4label, General.Map.Config.LinedefActions[showaction].Args[4]); //mxd
//mxd. Change the argument descriptions
argscontrol.UpdateAction(showaction, preventchanges);
if(!preventchanges)
{
MakeUndo(); //mxd
// mxd. Apply action's default arguments
if(showaction != 0)
{
arg0.SetDefaultValue();
arg1.SetDefaultValue();
arg2.SetDefaultValue();
arg3.SetDefaultValue();
arg4.SetDefaultValue();
}
else //or set them to 0
{
arg0.SetValue(0);
arg1.SetValue(0);
arg2.SetValue(0);
arg3.SetValue(0);
arg4.SetValue(0);
}
//mxd. Update what must be updated
UpdateScriptControls();
CheckActivationFlagsRequired();
argscontrol.UpdateScriptControls();
actionhelp.UpdateAction(showaction);
}
}
@ -1014,15 +839,6 @@ namespace CodeImp.DoomBuilder.Windows
action.Value = ActionBrowserForm.BrowseAction(this, action.Value);
}
//mxd
private void cbArgStr_CheckedChanged(object sender, EventArgs e)
{
if(!cbArgStr.Visible) return;
scriptNames.Visible = cbArgStr.Checked;
scriptNumbers.Visible = !cbArgStr.Checked;
arg0label.Text = cbArgStr.Checked ? "Script Name:" : "Script Number:";
}
//mxd
private void tabcustom_MouseEnter(object sender, EventArgs e)
{

View file

@ -132,9 +132,6 @@
<metadata name="label6.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="argspanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
@ -152,7 +149,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADM
CAAAAk1TRnQBSQFMAgEBAgEAAbABAAGwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View file

@ -48,20 +48,10 @@ namespace CodeImp.DoomBuilder.Windows
this.missingflags = new System.Windows.Forms.PictureBox();
this.flags = new CodeImp.DoomBuilder.Controls.CheckboxArrayControl();
this.actiongroup = new System.Windows.Forms.GroupBox();
this.arg3 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.scriptNumbers = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.arg4 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.argscontrol = new CodeImp.DoomBuilder.Controls.ArgumentsControl();
this.actionhelp = new CodeImp.DoomBuilder.Controls.ActionSpecialHelpButton();
this.arg3label = new System.Windows.Forms.Label();
this.arg4label = new System.Windows.Forms.Label();
this.arg2 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.action = new CodeImp.DoomBuilder.Controls.ActionSelectorControl();
this.arg0 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.browseaction = new System.Windows.Forms.Button();
this.arg0label = new System.Windows.Forms.Label();
this.arg1label = new System.Windows.Forms.Label();
this.arg2label = new System.Windows.Forms.Label();
this.idgroup = new System.Windows.Forms.GroupBox();
this.tagSelector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector();
this.cancel = new System.Windows.Forms.Button();
@ -314,21 +304,11 @@ namespace CodeImp.DoomBuilder.Windows
//
// actiongroup
//
this.actiongroup.Controls.Add(this.arg3);
this.actiongroup.Controls.Add(this.scriptNumbers);
this.actiongroup.Controls.Add(this.arg4);
this.actiongroup.Controls.Add(this.argscontrol);
this.actiongroup.Controls.Add(this.actionhelp);
this.actiongroup.Controls.Add(this.arg3label);
this.actiongroup.Controls.Add(this.arg4label);
this.actiongroup.Controls.Add(this.arg2);
this.actiongroup.Controls.Add(label7);
this.actiongroup.Controls.Add(this.arg1);
this.actiongroup.Controls.Add(this.action);
this.actiongroup.Controls.Add(this.arg0);
this.actiongroup.Controls.Add(this.browseaction);
this.actiongroup.Controls.Add(this.arg0label);
this.actiongroup.Controls.Add(this.arg1label);
this.actiongroup.Controls.Add(this.arg2label);
this.actiongroup.Location = new System.Drawing.Point(4, 382);
this.actiongroup.Name = "actiongroup";
this.actiongroup.Size = new System.Drawing.Size(546, 145);
@ -336,31 +316,12 @@ namespace CodeImp.DoomBuilder.Windows
this.actiongroup.TabStop = false;
this.actiongroup.Text = " Action ";
//
// arg3
// argscontrol
//
this.arg3.Location = new System.Drawing.Point(420, 57);
this.arg3.Name = "arg3";
this.arg3.Size = new System.Drawing.Size(120, 24);
this.arg3.TabIndex = 3;
//
// scriptNumbers
//
this.scriptNumbers.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptNumbers.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptNumbers.BackColor = System.Drawing.Color.LemonChiffon;
this.scriptNumbers.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptNumbers.FormattingEnabled = true;
this.scriptNumbers.Location = new System.Drawing.Point(420, 109);
this.scriptNumbers.Name = "scriptNumbers";
this.scriptNumbers.Size = new System.Drawing.Size(120, 21);
this.scriptNumbers.TabIndex = 23;
//
// arg4
//
this.arg4.Location = new System.Drawing.Point(420, 83);
this.arg4.Name = "arg4";
this.arg4.Size = new System.Drawing.Size(120, 24);
this.arg4.TabIndex = 4;
this.argscontrol.Location = new System.Drawing.Point(6, 57);
this.argscontrol.Name = "argscontrol";
this.argscontrol.Size = new System.Drawing.Size(534, 80);
this.argscontrol.TabIndex = 15;
//
// actionhelp
//
@ -369,40 +330,6 @@ namespace CodeImp.DoomBuilder.Windows
this.actionhelp.Size = new System.Drawing.Size(28, 25);
this.actionhelp.TabIndex = 14;
//
// arg3label
//
this.arg3label.Location = new System.Drawing.Point(280, 62);
this.arg3label.Name = "arg3label";
this.arg3label.Size = new System.Drawing.Size(134, 14);
this.arg3label.TabIndex = 20;
this.arg3label.Text = "Argument 4:";
this.arg3label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg3label.UseMnemonic = false;
//
// arg4label
//
this.arg4label.Location = new System.Drawing.Point(280, 88);
this.arg4label.Name = "arg4label";
this.arg4label.Size = new System.Drawing.Size(134, 14);
this.arg4label.TabIndex = 16;
this.arg4label.Text = "Argument 5:";
this.arg4label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg4label.UseMnemonic = false;
//
// arg2
//
this.arg2.Location = new System.Drawing.Point(156, 109);
this.arg2.Name = "arg2";
this.arg2.Size = new System.Drawing.Size(120, 24);
this.arg2.TabIndex = 2;
//
// arg1
//
this.arg1.Location = new System.Drawing.Point(156, 83);
this.arg1.Name = "arg1";
this.arg1.Size = new System.Drawing.Size(120, 24);
this.arg1.TabIndex = 1;
//
// action
//
this.action.BackColor = System.Drawing.SystemColors.Control;
@ -417,13 +344,6 @@ namespace CodeImp.DoomBuilder.Windows
this.action.Value = 402;
this.action.ValueChanges += new System.EventHandler(this.action_ValueChanges);
//
// arg0
//
this.arg0.Location = new System.Drawing.Point(156, 57);
this.arg0.Name = "arg0";
this.arg0.Size = new System.Drawing.Size(120, 24);
this.arg0.TabIndex = 0;
//
// browseaction
//
this.browseaction.Image = global::CodeImp.DoomBuilder.Properties.Resources.List;
@ -436,36 +356,6 @@ namespace CodeImp.DoomBuilder.Windows
this.browseaction.UseVisualStyleBackColor = true;
this.browseaction.Click += new System.EventHandler(this.browseaction_Click);
//
// arg0label
//
this.arg0label.Location = new System.Drawing.Point(6, 62);
this.arg0label.Name = "arg0label";
this.arg0label.Size = new System.Drawing.Size(144, 14);
this.arg0label.TabIndex = 12;
this.arg0label.Text = "Argument 1:";
this.arg0label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg0label.UseMnemonic = false;
//
// arg1label
//
this.arg1label.Location = new System.Drawing.Point(6, 88);
this.arg1label.Name = "arg1label";
this.arg1label.Size = new System.Drawing.Size(144, 14);
this.arg1label.TabIndex = 14;
this.arg1label.Text = "Argument 2:";
this.arg1label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg1label.UseMnemonic = false;
//
// arg2label
//
this.arg2label.Location = new System.Drawing.Point(6, 114);
this.arg2label.Name = "arg2label";
this.arg2label.Size = new System.Drawing.Size(144, 14);
this.arg2label.TabIndex = 18;
this.arg2label.Text = "Argument 3:";
this.arg2label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg2label.UseMnemonic = false;
//
// idgroup
//
this.idgroup.Controls.Add(this.tagSelector);
@ -595,18 +485,8 @@ namespace CodeImp.DoomBuilder.Windows
private CodeImp.DoomBuilder.Controls.CheckboxArrayControl flags;
private System.Windows.Forms.GroupBox idgroup;
private System.Windows.Forms.GroupBox actiongroup;
private System.Windows.Forms.Label arg1label;
private System.Windows.Forms.Label arg0label;
private System.Windows.Forms.Label arg3label;
private System.Windows.Forms.Label arg2label;
private System.Windows.Forms.Label arg4label;
private CodeImp.DoomBuilder.Controls.ActionSelectorControl action;
private System.Windows.Forms.Button browseaction;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg2;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg1;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg0;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg3;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg4;
private System.Windows.Forms.Label zlabel;
private CodeImp.DoomBuilder.Controls.ThingBrowserControl thingtype;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox angle;
@ -618,7 +498,6 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.CheckBox cbAbsoluteHeight;
private System.Windows.Forms.CheckBox cbRandomAngle;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private CodeImp.DoomBuilder.Controls.ColoredComboBox scriptNumbers;
private CodeImp.DoomBuilder.GZBuilder.Controls.AngleControl anglecontrol;
private System.Windows.Forms.PictureBox hint;
private System.Windows.Forms.Label hintlabel;
@ -629,5 +508,6 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.Panel panel;
private System.Windows.Forms.GroupBox typegroup;
private System.Windows.Forms.Panel applypanel;
private CodeImp.DoomBuilder.Controls.ArgumentsControl argscontrol;
}
}

View file

@ -20,12 +20,9 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.GZBuilder.Data;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
@ -102,16 +99,6 @@ namespace CodeImp.DoomBuilder.Windows
// Tag/Effects?
actiongroup.Visible = General.Map.FormatInterface.HasThingAction;
idgroup.Visible = General.Map.FormatInterface.HasThingTag;
if(General.Map.FormatInterface.HasThingAction && General.Map.FormatInterface.HasThingTag) //mxd. Setup script numbers
{
scriptNumbers.Location = new Point(arg0.Location.X, arg0.Location.Y + 2);
foreach(ScriptItem si in General.Map.NumberedScripts)
scriptNumbers.Items.Add(new ColoredComboBoxItem(si, si.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptNumbers.DropDownWidth = Tools.GetDropDownWidth(scriptNumbers);
}
// Thing height?
posZ.Visible = General.Map.FormatInterface.HasThingHeight;
@ -202,11 +189,9 @@ namespace CodeImp.DoomBuilder.Windows
tagSelector.Setup(UniversalType.ThingTag);
tagSelector.SetTag(ft.Tag);
}
arg0.SetValue(ft.Args[0]);
arg1.SetValue(ft.Args[1]);
arg2.SetValue(ft.Args[2]);
arg3.SetValue(ft.Args[3]);
arg4.SetValue(ft.Args[4]);
//mxd. Args
argscontrol.SetValue(ft, true);
////////////////////////////////////////////////////////////////////////
// Now go for all lines and change the options when a setting is different
@ -256,11 +241,9 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
if(t.Action != action.Value) action.Empty = true;
if(General.Map.FormatInterface.HasThingTag && t.Tag != ft.Tag) tagSelector.ClearTag(); //mxd
if(t.Args[0] != arg0.GetResult(-1)) arg0.ClearValue();
if(t.Args[1] != arg1.GetResult(-1)) arg1.ClearValue();
if(t.Args[2] != arg2.GetResult(-1)) arg2.ClearValue();
if(t.Args[3] != arg3.GetResult(-1)) arg3.ClearValue();
if(t.Args[4] != arg4.GetResult(-1)) arg4.ClearValue();
//mxd. Arguments
argscontrol.SetValue(t, false);
//mxd. Store initial properties
thingprops.Add(new ThingProperties(t));
@ -274,34 +257,8 @@ namespace CodeImp.DoomBuilder.Windows
flags_OnValueChanged(flags, EventArgs.Empty);
preventmapchange = false;
UpdateScriptControls(); //mxd
argscontrol.UpdateScriptControls(); //mxd
actionhelp.UpdateAction(action.GetValue()); //mxd
//mxd. Set intial script-related values, if required
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1)
{
int a0 = arg0.GetResult(0);
if(a0 > 0)
{
for(int i = 0; i < General.Map.NumberedScripts.Count; i++)
{
if(General.Map.NumberedScripts[i].Index == a0)
{
scriptNumbers.SelectedIndex = i;
break;
}
}
}
if(scriptNumbers.SelectedIndex == -1)
{
scriptNumbers.Text = a0.ToString();
}
}
else
{
scriptNumbers.Text = "0";
}
}
//mxd
@ -313,36 +270,6 @@ namespace CodeImp.DoomBuilder.Windows
//mxd. Make undo
General.Map.UndoRedo.CreateUndo("Edit " + (things.Count > 1 ? things.Count + " things" : "thing"));
}
//mxd
private void UpdateScriptControls()
{
scriptNumbers.Visible = (Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1);
arg0.Visible = !scriptNumbers.Visible;
}
//mxd
private void UpdateArgument(ArgumentBox arg, Label label, ArgumentInfo info)
{
label.Text = info.Title + ":";
label.Enabled = info.Used;
arg.ForeColor = (label.Enabled ? SystemColors.WindowText : SystemColors.GrayText);
arg.Setup(info);
// Update tooltip
if(info.Used && !string.IsNullOrEmpty(info.ToolTip))
{
tooltip.SetToolTip(label, info.ToolTip);
label.Font = new Font(label.Font, FontStyle.Underline);
label.ForeColor = SystemColors.HotTrack;
}
else
{
tooltip.SetToolTip(label, null);
label.Font = new Font(label.Font, FontStyle.Regular);
label.ForeColor = SystemColors.WindowText;
}
}
#endregion
@ -358,44 +285,19 @@ namespace CodeImp.DoomBuilder.Windows
private void action_ValueChanges(object sender, EventArgs e)
{
int showaction = 0;
ArgumentInfo[] arginfo;
// Only when line type is known, otherwise use the thing arguments
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
if((showaction == 0) && (thinginfo != null)) arginfo = thinginfo.Args;
else arginfo = General.Map.Config.LinedefActions[showaction].Args;
// Change the argument descriptions
UpdateArgument(arg0, arg0label, arginfo[0]); //mxd
UpdateArgument(arg1, arg1label, arginfo[1]); //mxd
UpdateArgument(arg2, arg2label, arginfo[2]); //mxd
UpdateArgument(arg3, arg3label, arginfo[3]); //mxd
UpdateArgument(arg4, arg4label, arginfo[4]); //mxd
//mxd. Change the argument descriptions
argscontrol.UpdateAction(showaction, preventchanges, (action.Empty ? null : thinginfo));
if(!preventchanges)
{
MakeUndo();
// mxd. Apply action's or thing's default arguments
if (showaction != 0 || thinginfo != null)
{
arg0.SetDefaultValue();
arg1.SetDefaultValue();
arg2.SetDefaultValue();
arg3.SetDefaultValue();
arg4.SetDefaultValue();
}
else //or set them to 0
{
arg0.SetValue(0);
arg1.SetValue(0);
arg2.SetValue(0);
arg3.SetValue(0);
arg4.SetValue(0);
}
//mxd. Update what must be updated
UpdateScriptControls();
argscontrol.UpdateScriptControls();
actionhelp.UpdateAction(showaction);
}
}
@ -456,8 +358,6 @@ namespace CodeImp.DoomBuilder.Windows
return;
}
bool hasAcs = !action.Empty && Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1; //mxd
// Go for all the things
int tagoffset = 0; //mxd
foreach(Thing t in things)
@ -482,38 +382,10 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
t.Tag = General.Clamp(tagSelector.GetSmartTag(t.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if (!action.Empty)
{
t.Action = action.Value;
if (!action.Empty) t.Action = action.Value;
//mxd. Script number handling
if(hasAcs)
{
if(!string.IsNullOrEmpty(scriptNumbers.Text))
{
if(scriptNumbers.SelectedItem != null)
t.Args[0] = ((ScriptItem)((ColoredComboBoxItem)scriptNumbers.SelectedItem).Value).Index;
else if(!int.TryParse(scriptNumbers.Text.Trim(), out t.Args[0]))
t.Args[0] = 0;
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
}
}
else
{
t.Args[0] = arg0.GetResult(t.Args[0]);
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
}
}
else
{
t.Args[0] = arg0.GetResult(t.Args[0]);
}
t.Args[1] = arg1.GetResult(t.Args[1]);
t.Args[2] = arg2.GetResult(t.Args[2]);
t.Args[3] = arg3.GetResult(t.Args[3]);
t.Args[4] = arg4.GetResult(t.Args[4]);
//mxd. Apply args
argscontrol.Apply(t);
// Update settings
t.UpdateConfiguration();

View file

@ -129,4 +129,7 @@
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -80,25 +80,14 @@
this.renderStyle = new System.Windows.Forms.ComboBox();
this.labelrenderstyle = new System.Windows.Forms.Label();
this.actiongroup = new System.Windows.Forms.GroupBox();
this.argscontrol = new CodeImp.DoomBuilder.Controls.ArgumentsControl();
this.actionhelp = new CodeImp.DoomBuilder.Controls.ActionSpecialHelpButton();
this.hexenpanel = new System.Windows.Forms.Panel();
this.scriptNumbers = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.scriptNames = new CodeImp.DoomBuilder.Controls.ColoredComboBox();
this.cbArgStr = new System.Windows.Forms.CheckBox();
this.arg2 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg0 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg3 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg4 = new CodeImp.DoomBuilder.Controls.ArgumentBox();
this.arg1label = new System.Windows.Forms.Label();
this.arg0label = new System.Windows.Forms.Label();
this.arg3label = new System.Windows.Forms.Label();
this.arg2label = new System.Windows.Forms.Label();
this.arg4label = new System.Windows.Forms.Label();
this.action = new CodeImp.DoomBuilder.Controls.ActionSelectorControl();
this.browseaction = new System.Windows.Forms.Button();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.tagSelector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector();
this.tabcomment = new System.Windows.Forms.TabPage();
this.commenteditor = new CodeImp.DoomBuilder.Controls.CommentEditor();
this.tabcustom = new System.Windows.Forms.TabPage();
this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
this.cancel = new System.Windows.Forms.Button();
@ -106,8 +95,6 @@
this.hint = new System.Windows.Forms.PictureBox();
this.hintlabel = new System.Windows.Forms.Label();
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.tabcomment = new System.Windows.Forms.TabPage();
this.commenteditor = new CodeImp.DoomBuilder.Controls.CommentEditor();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.tabs.SuspendLayout();
@ -122,11 +109,10 @@
this.groupbehaviour.SuspendLayout();
this.grouprendering.SuspendLayout();
this.actiongroup.SuspendLayout();
this.hexenpanel.SuspendLayout();
this.groupBox3.SuspendLayout();
this.tabcomment.SuspendLayout();
this.tabcustom.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.hint)).BeginInit();
this.tabcomment.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
@ -769,8 +755,8 @@
this.actiongroup.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.actiongroup.Controls.Add(this.argscontrol);
this.actiongroup.Controls.Add(this.actionhelp);
this.actiongroup.Controls.Add(this.hexenpanel);
this.actiongroup.Controls.Add(this.label7);
this.actiongroup.Controls.Add(this.action);
this.actiongroup.Controls.Add(this.browseaction);
@ -781,6 +767,13 @@
this.actiongroup.TabStop = false;
this.actiongroup.Text = " Action ";
//
// argscontrol
//
this.argscontrol.Location = new System.Drawing.Point(6, 56);
this.argscontrol.Name = "argscontrol";
this.argscontrol.Size = new System.Drawing.Size(603, 80);
this.argscontrol.TabIndex = 15;
//
// actionhelp
//
this.actionhelp.Location = new System.Drawing.Point(581, 24);
@ -788,148 +781,6 @@
this.actionhelp.Size = new System.Drawing.Size(28, 26);
this.actionhelp.TabIndex = 14;
//
// hexenpanel
//
this.hexenpanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.hexenpanel.Controls.Add(this.scriptNumbers);
this.hexenpanel.Controls.Add(this.scriptNames);
this.hexenpanel.Controls.Add(this.cbArgStr);
this.hexenpanel.Controls.Add(this.arg2);
this.hexenpanel.Controls.Add(this.arg1);
this.hexenpanel.Controls.Add(this.arg0);
this.hexenpanel.Controls.Add(this.arg3);
this.hexenpanel.Controls.Add(this.arg4);
this.hexenpanel.Controls.Add(this.arg1label);
this.hexenpanel.Controls.Add(this.arg0label);
this.hexenpanel.Controls.Add(this.arg3label);
this.hexenpanel.Controls.Add(this.arg2label);
this.hexenpanel.Controls.Add(this.arg4label);
this.hexenpanel.Location = new System.Drawing.Point(6, 53);
this.hexenpanel.Name = "hexenpanel";
this.hexenpanel.Size = new System.Drawing.Size(603, 94);
this.hexenpanel.TabIndex = 13;
//
// scriptNumbers
//
this.scriptNumbers.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptNumbers.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptNumbers.BackColor = System.Drawing.Color.LemonChiffon;
this.scriptNumbers.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptNumbers.FormattingEnabled = true;
this.scriptNumbers.Location = new System.Drawing.Point(435, 63);
this.scriptNumbers.Name = "scriptNumbers";
this.scriptNumbers.Size = new System.Drawing.Size(127, 21);
this.scriptNumbers.TabIndex = 23;
//
// scriptNames
//
this.scriptNames.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.scriptNames.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.scriptNames.BackColor = System.Drawing.Color.Honeydew;
this.scriptNames.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
this.scriptNames.FormattingEnabled = true;
this.scriptNames.Location = new System.Drawing.Point(305, 63);
this.scriptNames.Name = "scriptNames";
this.scriptNames.Size = new System.Drawing.Size(127, 21);
this.scriptNames.TabIndex = 22;
//
// cbArgStr
//
this.cbArgStr.Location = new System.Drawing.Point(14, 1);
this.cbArgStr.Name = "cbArgStr";
this.cbArgStr.Size = new System.Drawing.Size(63, 40);
this.cbArgStr.TabIndex = 21;
this.cbArgStr.Text = "Named script";
this.cbArgStr.UseVisualStyleBackColor = true;
this.cbArgStr.CheckedChanged += new System.EventHandler(this.cbArgStr_CheckedChanged);
//
// arg2
//
this.arg2.Location = new System.Drawing.Point(172, 63);
this.arg2.Name = "arg2";
this.arg2.Size = new System.Drawing.Size(127, 24);
this.arg2.TabIndex = 2;
//
// arg1
//
this.arg1.Location = new System.Drawing.Point(172, 36);
this.arg1.Name = "arg1";
this.arg1.Size = new System.Drawing.Size(127, 24);
this.arg1.TabIndex = 1;
//
// arg0
//
this.arg0.Location = new System.Drawing.Point(172, 9);
this.arg0.Name = "arg0";
this.arg0.Size = new System.Drawing.Size(127, 24);
this.arg0.TabIndex = 0;
//
// arg3
//
this.arg3.Location = new System.Drawing.Point(473, 9);
this.arg3.Name = "arg3";
this.arg3.Size = new System.Drawing.Size(127, 24);
this.arg3.TabIndex = 3;
//
// arg4
//
this.arg4.Location = new System.Drawing.Point(473, 36);
this.arg4.Name = "arg4";
this.arg4.Size = new System.Drawing.Size(127, 24);
this.arg4.TabIndex = 4;
//
// arg1label
//
this.arg1label.Location = new System.Drawing.Point(-13, 41);
this.arg1label.Name = "arg1label";
this.arg1label.Size = new System.Drawing.Size(179, 14);
this.arg1label.TabIndex = 14;
this.arg1label.Text = "Argument 2:";
this.arg1label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg1label.UseMnemonic = false;
//
// arg0label
//
this.arg0label.Location = new System.Drawing.Point(-13, 14);
this.arg0label.Name = "arg0label";
this.arg0label.Size = new System.Drawing.Size(179, 14);
this.arg0label.TabIndex = 12;
this.arg0label.Text = "Argument 1:";
this.arg0label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg0label.UseMnemonic = false;
//
// arg3label
//
this.arg3label.Location = new System.Drawing.Point(288, 14);
this.arg3label.Name = "arg3label";
this.arg3label.Size = new System.Drawing.Size(179, 14);
this.arg3label.TabIndex = 20;
this.arg3label.Text = "Argument 4:";
this.arg3label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg3label.UseMnemonic = false;
//
// arg2label
//
this.arg2label.Location = new System.Drawing.Point(-13, 68);
this.arg2label.Name = "arg2label";
this.arg2label.Size = new System.Drawing.Size(179, 14);
this.arg2label.TabIndex = 18;
this.arg2label.Text = "Argument 3:";
this.arg2label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg2label.UseMnemonic = false;
//
// arg4label
//
this.arg4label.Location = new System.Drawing.Point(288, 41);
this.arg4label.Name = "arg4label";
this.arg4label.Size = new System.Drawing.Size(179, 14);
this.arg4label.TabIndex = 16;
this.arg4label.Text = "Argument 5:";
this.arg4label.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.arg4label.UseMnemonic = false;
//
// action
//
this.action.BackColor = System.Drawing.SystemColors.Control;
@ -973,6 +824,27 @@
this.tagSelector.Size = new System.Drawing.Size(569, 35);
this.tagSelector.TabIndex = 8;
//
// tabcomment
//
this.tabcomment.Controls.Add(this.commenteditor);
this.tabcomment.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tabcomment.Location = new System.Drawing.Point(4, 23);
this.tabcomment.Name = "tabcomment";
this.tabcomment.Size = new System.Drawing.Size(627, 402);
this.tabcomment.TabIndex = 3;
this.tabcomment.Text = "Comment";
this.tabcomment.UseVisualStyleBackColor = true;
//
// commenteditor
//
this.commenteditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.commenteditor.Location = new System.Drawing.Point(3, 3);
this.commenteditor.Name = "commenteditor";
this.commenteditor.Size = new System.Drawing.Size(621, 396);
this.commenteditor.TabIndex = 0;
//
// tabcustom
//
this.tabcustom.Controls.Add(this.fieldslist);
@ -1047,27 +919,6 @@
this.hintlabel.TabIndex = 4;
this.hintlabel.Text = "Select categories or several thing types to randomly assign them to selection";
//
// tabcomment
//
this.tabcomment.Controls.Add(this.commenteditor);
this.tabcomment.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tabcomment.Location = new System.Drawing.Point(4, 23);
this.tabcomment.Name = "tabcomment";
this.tabcomment.Size = new System.Drawing.Size(627, 402);
this.tabcomment.TabIndex = 3;
this.tabcomment.Text = "Comment";
this.tabcomment.UseVisualStyleBackColor = true;
//
// commenteditor
//
this.commenteditor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.commenteditor.Location = new System.Drawing.Point(3, 3);
this.commenteditor.Name = "commenteditor";
this.commenteditor.Size = new System.Drawing.Size(621, 396);
this.commenteditor.TabIndex = 0;
//
// ThingEditFormUDMF
//
this.AcceptButton = this.apply;
@ -1109,11 +960,10 @@
this.grouprendering.ResumeLayout(false);
this.actiongroup.ResumeLayout(false);
this.actiongroup.PerformLayout();
this.hexenpanel.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.tabcomment.ResumeLayout(false);
this.tabcustom.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.hint)).EndInit();
this.tabcomment.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -1129,27 +979,13 @@
private System.Windows.Forms.TabPage tabcustom;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.GroupBox actiongroup;
private System.Windows.Forms.Panel hexenpanel;
private System.Windows.Forms.Label arg1label;
private System.Windows.Forms.Label arg0label;
private System.Windows.Forms.Label arg3label;
private System.Windows.Forms.Label arg2label;
private System.Windows.Forms.Label arg4label;
private CodeImp.DoomBuilder.Controls.ActionSelectorControl action;
private System.Windows.Forms.Button browseaction;
private CodeImp.DoomBuilder.Controls.FieldsEditorControl fieldslist;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg2;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg1;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg0;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg3;
private CodeImp.DoomBuilder.Controls.ArgumentBox arg4;
private CodeImp.DoomBuilder.Controls.ThingBrowserControl thingtype;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox angle;
private System.Windows.Forms.CheckBox cbArgStr;
private CodeImp.DoomBuilder.Controls.ColoredComboBox scriptNames;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox angle;
private System.Windows.Forms.Label labelAngle;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private CodeImp.DoomBuilder.Controls.ColoredComboBox scriptNumbers;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private System.Windows.Forms.Label labelGravity;
private CodeImp.DoomBuilder.GZBuilder.Controls.AngleControl anglecontrol;
private System.Windows.Forms.PictureBox hint;
@ -1200,5 +1036,6 @@
private System.Windows.Forms.CheckBox cbrandompitch;
private System.Windows.Forms.TabPage tabcomment;
private CodeImp.DoomBuilder.Controls.CommentEditor commenteditor;
private CodeImp.DoomBuilder.Controls.ArgumentsControl argscontrol;
}
}

View file

@ -20,12 +20,10 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Controls;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.GZBuilder.Data;
using CodeImp.DoomBuilder.GZBuilder.Tools;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
@ -51,8 +49,6 @@ namespace CodeImp.DoomBuilder.Windows
private bool preventmapchange; //mxd
private bool undocreated; //mxd
private static bool useabsoluteheight; //mxd
private string arg0str;
private bool haveArg0Str;
private List<ThingProperties> thingprops; //mxd
private readonly string[] renderstyles; //mxd
@ -132,18 +128,6 @@ namespace CodeImp.DoomBuilder.Windows
// Fill universal fields list
fieldslist.ListFixedFields(General.Map.Config.ThingFields);
// Tag/Effects
scriptNumbers.Location = new Point(arg0.Location.X, arg0.Location.Y + 2);
scriptNames.Location = scriptNumbers.Location;
// Setup script names
foreach(ScriptItem nsi in General.Map.NamedScripts)
scriptNames.Items.Add(new ColoredComboBoxItem(nsi, nsi.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
foreach(ScriptItem si in General.Map.NumberedScripts)
scriptNumbers.Items.Add(new ColoredComboBoxItem(si, si.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText));
scriptNames.DropDownWidth = Tools.GetDropDownWidth(scriptNames);
scriptNumbers.DropDownWidth = Tools.GetDropDownWidth(scriptNumbers);
// Thing height?
posZ.Visible = General.Map.FormatInterface.HasThingHeight;
zlabel.Visible = General.Map.FormatInterface.HasThingHeight;
@ -218,8 +202,6 @@ namespace CodeImp.DoomBuilder.Windows
health.Text = ft.Fields.GetValue("health", 1).ToString();
alpha.Text = ft.Fields.GetValue("alpha", 1.0f).ToString();
color.SetValueFrom(ft.Fields);
arg0str = ft.Fields.GetValue("arg0str", string.Empty);
haveArg0Str = !string.IsNullOrEmpty(arg0str);
scale.SetValues(ft.ScaleX, ft.ScaleY, true);
pitch.Text = ft.Pitch.ToString();
roll.Text = ft.Roll.ToString();
@ -229,11 +211,9 @@ namespace CodeImp.DoomBuilder.Windows
action.Value = ft.Action;
tagSelector.Setup(UniversalType.ThingTag);
tagSelector.SetTag(ft.Tag);
arg0.SetValue(ft.Args[0]);
arg1.SetValue(ft.Args[1]);
arg2.SetValue(ft.Args[2]);
arg3.SetValue(ft.Args[3]);
arg4.SetValue(ft.Args[4]);
//mxd. Args
argscontrol.SetValue(ft, true);
////////////////////////////////////////////////////////////////////////
// Now go for all lines and change the options when a setting is different
@ -281,11 +261,9 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
if(t.Action != action.Value) action.Empty = true;
if(t.Tag != ft.Tag) tagSelector.ClearTag(); //mxd
if(t.Args[0] != arg0.GetResult(-1)) arg0.ClearValue();
if(t.Args[1] != arg1.GetResult(-1)) arg1.ClearValue();
if(t.Args[2] != arg2.GetResult(-1)) arg2.ClearValue();
if(t.Args[3] != arg3.GetResult(-1)) arg3.ClearValue();
if(t.Args[4] != arg4.GetResult(-1)) arg4.ClearValue();
//mxd. Arguments
argscontrol.SetValue(t, false);
//mxd. Custom fields
fieldslist.SetValues(t.Fields, false);
@ -306,12 +284,6 @@ namespace CodeImp.DoomBuilder.Windows
if(renderStyle.SelectedIndex > -1 && renderStyle.SelectedIndex != Array.IndexOf(renderstyles, t.Fields.GetValue("renderstyle", "normal")))
renderStyle.SelectedIndex = -1;
if (arg0str != t.Fields.GetValue("arg0str", string.Empty))
{
haveArg0Str = true;
arg0str = string.Empty;
}
//mxd. Store initial properties
thingprops.Add(new ThingProperties(t));
@ -336,44 +308,10 @@ namespace CodeImp.DoomBuilder.Windows
flags_OnValueChanged(flags, EventArgs.Empty);
preventmapchange = false;
UpdateScriptControls(); //mxd
argscontrol.UpdateScriptControls(); //mxd
actionhelp.UpdateAction(action.GetValue()); //mxd
labelScale.Enabled = scale.NonDefaultValue; //mxd
commenteditor.FinishSetup(); //mxd
//mxd. Set intial script-related values, if required
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1)
{
if(haveArg0Str)
{
scriptNames.Text = arg0str;
arg0label.Text = "Script Name:";
}
else
{
int a0 = arg0.GetResult(0);
if(a0 > 0)
{
for(int i = 0; i < General.Map.NumberedScripts.Count; i++)
{
if(General.Map.NumberedScripts[i].Index == a0)
{
scriptNumbers.SelectedIndex = i;
break;
}
}
}
if(scriptNumbers.SelectedIndex == -1)
{
scriptNumbers.Text = a0.ToString();
}
}
}
else
{
scriptNumbers.Text = "0";
}
}
//mxd
@ -387,51 +325,6 @@ namespace CodeImp.DoomBuilder.Windows
foreach(Thing t in things) t.Fields.BeforeFieldsChange();
}
//mxd
private void UpdateScriptControls()
{
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1)
{
bool showNamedScripts = haveArg0Str;
cbArgStr.Visible = true;
cbArgStr.Checked = showNamedScripts;
scriptNames.Visible = showNamedScripts;
scriptNumbers.Visible = !showNamedScripts;
}
else
{
cbArgStr.Visible = false;
scriptNames.Visible = false;
scriptNumbers.Visible = false;
cbArgStr.Checked = false;
}
arg0.Visible = (!scriptNames.Visible && !scriptNumbers.Visible);
}
//mxd
private void UpdateArgument(ArgumentBox arg, Label label, ArgumentInfo info)
{
label.Text = info.Title + ":";
label.Enabled = info.Used;
arg.ForeColor = (label.Enabled ? SystemColors.WindowText : SystemColors.GrayText);
arg.Setup(info);
// Update tooltip
if(info.Used && !string.IsNullOrEmpty(info.ToolTip))
{
tooltip.SetToolTip(label, info.ToolTip);
label.Font = new Font(label.Font, FontStyle.Underline);
label.ForeColor = SystemColors.HotTrack;
}
else
{
tooltip.SetToolTip(label, null);
label.Font = new Font(label.Font, FontStyle.Regular);
label.ForeColor = SystemColors.WindowText;
}
}
#endregion
#region ================== Events
@ -446,44 +339,19 @@ namespace CodeImp.DoomBuilder.Windows
private void action_ValueChanges(object sender, EventArgs e)
{
int showaction = 0;
ArgumentInfo[] arginfo;
// Only when line type is known, otherwise use the thing arguments
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
if((showaction == 0) && (thinginfo != null)) arginfo = thinginfo.Args;
else arginfo = General.Map.Config.LinedefActions[showaction].Args;
// Change the argument descriptions
UpdateArgument(arg0, arg0label, arginfo[0]); //mxd
UpdateArgument(arg1, arg1label, arginfo[1]); //mxd
UpdateArgument(arg2, arg2label, arginfo[2]); //mxd
UpdateArgument(arg3, arg3label, arginfo[3]); //mxd
UpdateArgument(arg4, arg4label, arginfo[4]); //mxd
//mxd. Change the argument descriptions
argscontrol.UpdateAction(showaction, preventchanges, (action.Empty ? null : thinginfo));
if(!preventchanges)
{
MakeUndo(); //mxd
// mxd. Apply action's or thing's default arguments
if(showaction != 0 || thinginfo != null)
{
arg0.SetDefaultValue();
arg1.SetDefaultValue();
arg2.SetDefaultValue();
arg3.SetDefaultValue();
arg4.SetDefaultValue();
}
else //or set them to 0
{
arg0.SetValue(0);
arg1.SetValue(0);
arg2.SetValue(0);
arg3.SetValue(0);
arg4.SetValue(0);
}
//mxd. Update what must be updated
UpdateScriptControls();
argscontrol.UpdateScriptControls();
actionhelp.UpdateAction(showaction);
}
}
@ -579,8 +447,6 @@ namespace CodeImp.DoomBuilder.Windows
return;
}
bool hasAcs = !action.Empty && Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1; //mxd
//mxd
string[] rskeys = null;
if(General.Map.Config.ThingRenderStyles.Count > 0)
@ -616,46 +482,10 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
t.Tag = General.Clamp(tagSelector.GetSmartTag(t.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty)
{
t.Action = action.Value;
if(!action.Empty) t.Action = action.Value;
//mxd. Script name/number handling
if(hasAcs)
{
if(!cbArgStr.Checked) //apply script number
{
if(!string.IsNullOrEmpty(scriptNumbers.Text))
{
if(scriptNumbers.SelectedItem != null)
t.Args[0] = ((ScriptItem)((ColoredComboBoxItem)scriptNumbers.SelectedItem).Value).Index;
else if(!int.TryParse(scriptNumbers.Text.Trim(), out t.Args[0]))
t.Args[0] = 0;
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
}
}
else //apply arg0str
{
if(!string.IsNullOrEmpty(scriptNames.Text))
t.Fields["arg0str"] = new UniValue(UniversalType.String, scriptNames.Text);
}
}
else
{
t.Args[0] = arg0.GetResult(t.Args[0]);
if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str");
}
}
else
{
t.Args[0] = arg0.GetResult(t.Args[0]);
}
t.Args[1] = arg1.GetResult(t.Args[1]);
t.Args[2] = arg2.GetResult(t.Args[2]);
t.Args[3] = arg3.GetResult(t.Args[3]);
t.Args[4] = arg4.GetResult(t.Args[4]);
//mxd. Apply args
argscontrol.Apply(t);
//mxd. Custom fields
fieldslist.Apply(t.Fields);
@ -711,15 +541,6 @@ namespace CodeImp.DoomBuilder.Windows
this.Close();
}
//mxd
private void cbArgStr_CheckedChanged(object sender, EventArgs e)
{
if(!cbArgStr.Visible) return;
scriptNames.Visible = cbArgStr.Checked;
scriptNumbers.Visible = !cbArgStr.Checked;
arg0label.Text = cbArgStr.Checked ? "Script Name:" : "Script Number:";
}
//mxd
private void cbAbsoluteHeight_CheckedChanged(object sender, EventArgs e)
{

View file

@ -120,4 +120,7 @@
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>