using Microsoft.Win32; namespace UI_WinForms.Components; public partial class LoaderStart : UserControl { private bool areRecentProjectsVisible = false; public LoaderStart() { this.InitializeComponent(); } private RegistryKey I18NCommanderKey => Registry.CurrentUser.OpenSubKey("Software", RegistryKeyPermissionCheck.ReadWriteSubTree)!.CreateSubKey("I18N Commander", RegistryKeyPermissionCheck.ReadWriteSubTree); private List RecentProjects { get { using var regKey = this.I18NCommanderKey; var recentProjectsValue = regKey.GetValue("recentProjects"); return recentProjectsValue switch { string[] list => new List(list), _ => new List(), }; } set { using var regKey = this.I18NCommanderKey; regKey.SetValue("recentProjects", value, RegistryValueKind.MultiString); } } private void buttonOpen_Click(object sender, EventArgs e) { if(this.areRecentProjectsVisible) { this.areRecentProjectsVisible = false; this.contextMenuRecentProjects.Close(); return; } var recentProjects = this.RecentProjects; this.contextMenuRecentProjects.Items.Clear(); this.contextMenuRecentProjects.Items.Add("Browse for project...", Resources.Icons.icons8_browse_folder_512, (innerSender, args) => this.browseForProject()); foreach (var recentProject in recentProjects) { var fileInfo = new FileInfo(recentProject); var item = this.contextMenuRecentProjects.Items.Add($"{fileInfo.Directory.GetDirectories().Last()}/{fileInfo.Name}", Resources.Icons.icons8_document_512, (innerSender, args) => this.openRecentProject(innerSender)); item.Tag = recentProject; } var button = (sender as Button)!; this.contextMenuRecentProjects.Show(button, 0, button.Height); this.areRecentProjectsVisible = true; } private void browseForProject() { // TODO: Browse for project // TODO: Open the project // TODO: Handle cancel event // TODO: Add the project to the recent projects // TODO: Prune the recent project list } private void openRecentProject(object? sender) { if(sender is null) return; if (sender is ToolStripItem item) { var path = (item.Tag as string)!; // TODO: Open the project } } private void contextMenuRecentProjects_Closing(object sender, ToolStripDropDownClosingEventArgs e) { this.areRecentProjectsVisible = false; } }