/// <summary>
/// Sets up a drop-down menu to allow file-system selection.
/// </summary>
private void _Setup(string Path, ToolStripMenuItem Item, _Mode Mode, Action<string> OnSelect)
{
if (Mode == _Mode.Save)
{
ToolStripTextBox textbox = new ToolStripTextBox();
Item.DropDownItems.Add(textbox);
textbox.ToolTipText = "Type a file name here. Press Enter to save, or Control + Enter to make a new folder.";
textbox.KeyDown += delegate(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (e.Control)
{
string dirname = textbox.Text;
string dirpath = Path + System.IO.Path.DirectorySeparatorChar + dirname;
Directory.CreateDirectory(dirpath);
ToolStripMenuItem item = new ToolStripMenuItem(dirname);
this._Setup(dirpath, item, _Mode.Save, OnSelect);
Item.DropDownItems.Insert(1, item);
textbox.Clear();
}
else
{
this.HideDropDown();
OnSelect(Path + System.IO.Path.DirectorySeparatorChar + textbox.Text + this.Extension);
}
}
};
Item.DropDownOpening += delegate
{
this._Populate(Path, Item, Mode, OnSelect);
};
Item.DropDownClosed += delegate
{
textbox.Clear();
Item.DropDownItems.Clear();
Item.DropDownItems.Add(textbox);
};
}
else
{
ToolStripMenuItem dummy = new ToolStripMenuItem("(Nothing Here)");
dummy.Enabled = false;
Item.DropDownItems.Add(dummy);
Item.DropDownOpening += delegate
{
if (this._Populate(Path, Item, Mode, OnSelect))
{
Item.DropDownItems.Remove(dummy);
}
};
Item.DropDownClosed += delegate
{
Item.DropDownItems.Clear();
Item.DropDownItems.Add(dummy);
};
}
}