#region ================== Copyright /* * Made by MaxED, mkay? */ #endregion #region ================== Namespaces using System; using System.Drawing; using System.Windows.Forms; using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.Rendering; #endregion namespace CodeImp.DoomBuilder.Controls { public partial class CommentEditor : UserControl { #region ================== Variables private const string DEFAULT_TEXT = "Click to enter a comment..."; private bool mixedvalues; private int commenttype; #endregion #region ================== Constructor / Disposer public CommentEditor() { InitializeComponent(); } #endregion #region ================== Methods public void SetValues(UniFields fields, bool first) { if(mixedvalues) return; string c = fields.GetValue("comment", string.Empty); if(first) { textbox.Text = c; } else if(textbox.Text != c) { textbox.Clear(); mixedvalues = true; } } public void FinishSetup() { if(mixedvalues) return; if(string.IsNullOrEmpty(textbox.Text)) { textbox.Text = DEFAULT_TEXT; textbox.ForeColor = SystemColors.InactiveCaptionText; radioButton1.Checked = true; } else if(textbox.Text.Length > 2) { string type = textbox.Text.Substring(0, 3); int index = Array.IndexOf(CommentType.Types, type); commenttype = (index > 0 ? index : 0); if(commenttype > 0) textbox.Text = textbox.Text.TrimStart(type.ToCharArray()); // Isn't there a better way to do this?.. switch(commenttype) { case 0: radioButton1.Checked = true; break; case 1: radioButton2.Checked = true; break; case 2: radioButton3.Checked = true; break; case 3: radioButton4.Checked = true; break; case 4: radioButton5.Checked = true; break; } } } public void Apply(UniFields fields) { if(mixedvalues) return; string text = (!string.IsNullOrEmpty(textbox.Text) && textbox.Text != DEFAULT_TEXT ? CommentType.Types[commenttype] + textbox.Text : String.Empty); UniFields.SetString(fields, "comment", text, string.Empty); } #endregion #region ================== Events private void clear_Click(object sender, EventArgs e) { textbox.Text = DEFAULT_TEXT; textbox.ForeColor = SystemColors.InactiveCaptionText; mixedvalues = false; } private void textbox_Enter(object sender, EventArgs e) { if(textbox.Text == DEFAULT_TEXT) { textbox.Clear(); textbox.ForeColor = SystemColors.WindowText; } } private void textbox_Leave(object sender, EventArgs e) { if(string.IsNullOrEmpty(textbox.Text) && !mixedvalues) { textbox.Text = DEFAULT_TEXT; textbox.ForeColor = SystemColors.InactiveCaptionText; } } private void textbox_TextChanged(object sender, EventArgs e) { mixedvalues = false; } private void radiobutton_CheckedChanged(object sender, EventArgs e) { 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; } //mxd. Because anchor-based alignment fails when using high-Dpi settings... private void CommentEditor_Resize(object sender, EventArgs e) { clear.Left = this.Width - clear.Margin.Right - clear.Width; textbox.Width = this.Width - textbox.Left - textbox.Margin.Right; textbox.Height = this.Height - textbox.Top - textbox.Margin.Bottom; } #endregion } }