From 2bb2c92aaa0bf036e238aafdba2dc4f8da514f0b Mon Sep 17 00:00:00 2001 From: ZZYZX <zzyzx@virtual> Date: Sat, 25 Feb 2017 11:04:00 +0200 Subject: [PATCH] Fixed: don't use script control for non-script arg0str. That breaks things. --- .../Controls/ArgumentsControl.Designer.cs | 44 +++--- Source/Core/Controls/ArgumentsControl.cs | 133 +++++++++++------- Source/Core/Controls/ColoredComboBox.cs | 13 +- 3 files changed, 125 insertions(+), 65 deletions(-) diff --git a/Source/Core/Controls/ArgumentsControl.Designer.cs b/Source/Core/Controls/ArgumentsControl.Designer.cs index 0526fec8a..94b546315 100755 --- a/Source/Core/Controls/ArgumentsControl.Designer.cs +++ b/Source/Core/Controls/ArgumentsControl.Designer.cs @@ -27,8 +27,9 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.splitcontainer = new System.Windows.Forms.SplitContainer(); + this.arg0str = new System.Windows.Forms.TextBox(); this.cbuseargstr = new System.Windows.Forms.CheckBox(); - this.arg0str = new CodeImp.DoomBuilder.Controls.ColoredComboBox(); + this.arg0named = new CodeImp.DoomBuilder.Controls.ColoredComboBox(); this.arg0int = new CodeImp.DoomBuilder.Controls.ColoredComboBox(); this.arg0label = new System.Windows.Forms.Label(); this.arg1label = new System.Windows.Forms.Label(); @@ -55,8 +56,9 @@ // // splitcontainer.Panel1 // - this.splitcontainer.Panel1.Controls.Add(this.cbuseargstr); this.splitcontainer.Panel1.Controls.Add(this.arg0str); + this.splitcontainer.Panel1.Controls.Add(this.cbuseargstr); + this.splitcontainer.Panel1.Controls.Add(this.arg0named); this.splitcontainer.Panel1.Controls.Add(this.arg0int); this.splitcontainer.Panel1.Controls.Add(this.arg0label); this.splitcontainer.Panel1.Controls.Add(this.arg1label); @@ -77,6 +79,14 @@ this.splitcontainer.TabIndex = 0; this.splitcontainer.TabStop = false; // + // arg0str + // + this.arg0str.Location = new System.Drawing.Point(237, 131); + this.arg0str.Name = "arg0str"; + this.arg0str.Size = new System.Drawing.Size(110, 20); + this.arg0str.TabIndex = 45; + this.arg0str.Visible = false; + // // cbuseargstr // this.cbuseargstr.Location = new System.Drawing.Point(3, -5); @@ -87,19 +97,19 @@ this.cbuseargstr.UseVisualStyleBackColor = true; this.cbuseargstr.CheckedChanged += new System.EventHandler(this.cbuseargstr_CheckedChanged); // - // arg0str + // arg0named // - this.arg0str.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.arg0str.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; - this.arg0str.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; - this.arg0str.BackColor = System.Drawing.Color.Honeydew; - this.arg0str.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; - this.arg0str.FormattingEnabled = true; - this.arg0str.Location = new System.Drawing.Point(237, 104); - this.arg0str.Name = "arg0str"; - this.arg0str.Size = new System.Drawing.Size(110, 21); - this.arg0str.TabIndex = 41; - this.arg0str.TextChanged += new System.EventHandler(this.arg0str_TextChanged); + this.arg0named.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.arg0named.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; + this.arg0named.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.arg0named.BackColor = System.Drawing.Color.Honeydew; + this.arg0named.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.arg0named.FormattingEnabled = true; + this.arg0named.Location = new System.Drawing.Point(237, 104); + this.arg0named.Name = "arg0named"; + this.arg0named.Size = new System.Drawing.Size(110, 21); + this.arg0named.TabIndex = 41; + this.arg0named.TextChanged += new System.EventHandler(this.arg0str_TextChanged); // // arg0int // @@ -218,6 +228,7 @@ this.Name = "ArgumentsControl"; this.Size = new System.Drawing.Size(700, 140); this.splitcontainer.Panel1.ResumeLayout(false); + this.splitcontainer.Panel1.PerformLayout(); this.splitcontainer.Panel2.ResumeLayout(false); this.splitcontainer.ResumeLayout(false); this.ResumeLayout(false); @@ -233,7 +244,7 @@ private ColoredComboBox arg0int; private System.Windows.Forms.Label arg2label; private System.Windows.Forms.Label arg1label; - private ColoredComboBox arg0str; + private ColoredComboBox arg0named; private System.Windows.Forms.Label arg3label; private System.Windows.Forms.Label arg4label; private ArgumentBox arg3; @@ -241,5 +252,6 @@ private System.Windows.Forms.CheckBox cbuseargstr; private System.Windows.Forms.ToolTip tooltip; private ArgumentBox arg2; - } + private System.Windows.Forms.TextBox arg0str; + } } diff --git a/Source/Core/Controls/ArgumentsControl.cs b/Source/Core/Controls/ArgumentsControl.cs index 86f01b9a0..77dd699af 100755 --- a/Source/Core/Controls/ArgumentsControl.cs +++ b/Source/Core/Controls/ArgumentsControl.cs @@ -140,8 +140,16 @@ namespace CodeImp.DoomBuilder.Controls { // Apply arg0str case ArgZeroMode.STRING: - if(!string.IsNullOrEmpty(arg0str.Text)) - l.Fields["arg0str"] = new UniValue(UniversalType.String, arg0str.Text); + if (isacs) + { + if (!string.IsNullOrEmpty(arg0named.Text)) + l.Fields["arg0str"] = new UniValue(UniversalType.String, arg0named.Text); + } + else + { + if (!string.IsNullOrEmpty(arg0str.Text)) + l.Fields["arg0str"] = new UniValue(UniversalType.String, arg0str.Text); + } break; // Apply script number @@ -178,41 +186,53 @@ namespace CodeImp.DoomBuilder.Controls public void Apply(Thing t, int step) { - //mxd. Script name/number handling - // We can't rely on control visibility here, because all controlls will be invisible if ArgumentsControl is invisible - // (for example, when a different tab is selected) - switch(Arg0Mode) - { - // Apply arg0str - case ArgZeroMode.STRING: - if(!string.IsNullOrEmpty(arg0str.Text)) - t.Fields["arg0str"] = new UniValue(UniversalType.String, arg0str.Text); - break; + //mxd. Script name/number handling + // We can't rely on control visibility here, because all controlls will be invisible if ArgumentsControl is invisible + // (for example, when a different tab is selected) + bool isacs = (Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1); + switch (Arg0Mode) + { + // Apply arg0str + case ArgZeroMode.STRING: + if (isacs) + { + if (!string.IsNullOrEmpty(arg0named.Text)) + t.Fields["arg0str"] = new UniValue(UniversalType.String, arg0named.Text); + } + else + { + if (!string.IsNullOrEmpty(arg0str.Text)) + t.Fields["arg0str"] = new UniValue(UniversalType.String, arg0str.Text); + } + break; - // Apply script number - case ArgZeroMode.INT: - if(!string.IsNullOrEmpty(arg0int.Text)) - { - if(arg0int.SelectedItem != null) - t.Args[0] = ((ScriptItem)((ColoredComboBoxItem)arg0int.SelectedItem).Value).Index; - else if(!int.TryParse(arg0int.Text.Trim(), out t.Args[0])) - t.Args[0] = 0; + // Apply script number + case ArgZeroMode.INT: + if (!isacs) + goto case ArgZeroMode.DEFAULT; + // + if (!string.IsNullOrEmpty(arg0int.Text)) + { + if (arg0int.SelectedItem != null) + t.Args[0] = ((ScriptItem)((ColoredComboBoxItem)arg0int.SelectedItem).Value).Index; + else if (!int.TryParse(arg0int.Text.Trim(), out t.Args[0])) + t.Args[0] = 0; - if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str"); - } - break; + if (t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str"); + } + break; - // Apply classic arg - case ArgZeroMode.DEFAULT: - t.Args[0] = arg0.GetResult(t.Args[0], step); - if(t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str"); - break; + // Apply classic arg + case ArgZeroMode.DEFAULT: + t.Args[0] = arg0.GetResult(t.Args[0], step); + if (t.Fields.ContainsKey("arg0str")) t.Fields.Remove("arg0str"); + break; - default: throw new NotImplementedException("Unknown ArgZeroMode"); - } + default: throw new NotImplementedException("Unknown ArgZeroMode"); + } - // Apply the rest of args - t.Args[1] = arg1.GetResult(t.Args[1], step); + // Apply the rest of args + t.Args[1] = arg1.GetResult(t.Args[1], step); t.Args[2] = arg2.GetResult(t.Args[2], step); t.Args[3] = arg3.GetResult(t.Args[3], step); t.Args[4] = arg4.GetResult(t.Args[4], step); @@ -275,6 +295,7 @@ namespace CodeImp.DoomBuilder.Controls arg4.SetValue(0); } // arg0str currently can't have any default + arg0named.Text = arg0strval = " "; arg0str.Text = arg0strval = " "; } @@ -305,29 +326,35 @@ namespace CodeImp.DoomBuilder.Controls //mxd. Setup script names if (General.Map.UDMF) { - arg0str.Items.Clear(); - arg0str.Location = arg0int.Location; // [ZZ] note: only do this if our action is acs. if (isacs) { + arg0named.Items.Clear(); + arg0named.Location = arg0int.Location; foreach (ScriptItem nsi in General.Map.NamedScripts.Values) - arg0str.Items.Add(new ColoredComboBoxItem(nsi, nsi.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText)); - arg0str.DropDownWidth = Tools.GetDropDownWidth(arg0str); + arg0named.Items.Add(new ColoredComboBoxItem(nsi, nsi.IsInclude ? SystemColors.HotTrack : SystemColors.WindowText)); + arg0named.DropDownWidth = Tools.GetDropDownWidth(arg0named); + } + else + { + arg0str.Clear(); + arg0str.Location = arg0int.Location; } } else { + arg0named.Visible = false; arg0str.Visible = false; cbuseargstr.Visible = false; } // - arg0str.DropDownStyle = isacs ? ComboBoxStyle.DropDown : ComboBoxStyle.Simple; // Update script controls visibility bool showarg0str = (General.Map.UDMF && havearg0str); cbuseargstr.Visible = General.Map.UDMF; cbuseargstr.Checked = showarg0str; - arg0str.Visible = showarg0str; + arg0named.Visible = showarg0str && isacs; + arg0str.Visible = showarg0str && !isacs; arg0int.Visible = (!showarg0str && isacs); arg0.Visible = (!showarg0str && !isacs); @@ -335,7 +362,7 @@ namespace CodeImp.DoomBuilder.Controls if(showarg0str) { Arg0Mode = ArgZeroMode.STRING; - arg0str.Text = arg0strval; + arg0str.Text = arg0named.Text = arg0strval; if (isacs && General.Map.NamedScripts.ContainsKey(arg0strval)) UpdateScriptArguments(General.Map.NamedScripts[arg0strval]); @@ -371,7 +398,8 @@ namespace CodeImp.DoomBuilder.Controls { arg0.Visible = true; cbuseargstr.Visible = false; - arg0str.Visible = false; + arg0named.Visible = false; + arg0str.Visible = false; arg0int.Visible = false; cbuseargstr.Checked = false; Arg0Mode = ArgZeroMode.DEFAULT; @@ -486,7 +514,8 @@ namespace CodeImp.DoomBuilder.Controls { if(!cbuseargstr.Visible) return; bool isacs = (Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1); - arg0str.Visible = cbuseargstr.Checked; + arg0named.Visible = (cbuseargstr.Checked && isacs); + arg0str.Visible = (cbuseargstr.Checked && !isacs); arg0int.Visible = (!cbuseargstr.Checked && isacs); arg0.Visible = (!cbuseargstr.Checked && !isacs); Arg0Mode = (cbuseargstr.Checked ? ArgZeroMode.STRING : ArgZeroMode.INT); @@ -512,15 +541,15 @@ namespace CodeImp.DoomBuilder.Controls private void arg0str_TextChanged(object sender, EventArgs e) { - if(string.IsNullOrEmpty(arg0str.Text)) return; + if(string.IsNullOrEmpty(arg0named.Text)) return; ScriptItem item = null; - if(arg0str.SelectedIndex != -1) + if(arg0named.SelectedIndex != -1) { - item = ((ScriptItem)((ColoredComboBoxItem)arg0str.SelectedItem).Value); + item = ((ScriptItem)((ColoredComboBoxItem)arg0named.SelectedItem).Value); } else { - string scriptname = arg0str.Text.Trim().ToLowerInvariant(); + string scriptname = arg0named.Text.Trim().ToLowerInvariant(); if(General.Map.NamedScripts.ContainsKey(scriptname)) item = General.Map.NamedScripts[scriptname]; } @@ -528,6 +557,16 @@ namespace CodeImp.DoomBuilder.Controls UpdateScriptArguments(item); } - #endregion - } + #endregion + + private void scriptnames_TextChanged(object sender, EventArgs e) + { + + } + + private void scriptnumbers_TextChanged(object sender, EventArgs e) + { + + } + } } diff --git a/Source/Core/Controls/ColoredComboBox.cs b/Source/Core/Controls/ColoredComboBox.cs index 9eb795922..6cb235235 100755 --- a/Source/Core/Controls/ColoredComboBox.cs +++ b/Source/Core/Controls/ColoredComboBox.cs @@ -7,10 +7,19 @@ namespace CodeImp.DoomBuilder.Controls { public ColoredComboBox() { - this.DrawMode = DrawMode.OwnerDrawFixed; + this.DrawMode = DrawMode.OwnerDrawFixed; + this.KeyPress += ColoredComboBox_KeyPress; } - protected override void OnDrawItem(DrawItemEventArgs e) + private void ColoredComboBox_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)13) + { + e.Handled = true; + } + } + + protected override void OnDrawItem(DrawItemEventArgs e) { base.OnDrawItem(e); e.DrawBackground(); -- GitLab