85 lines
2.8 KiB
C#
85 lines
2.8 KiB
C#
|
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<string> RecentProjects
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
using var regKey = this.I18NCommanderKey;
|
|||
|
var recentProjectsValue = regKey.GetValue("recentProjects");
|
|||
|
return recentProjectsValue switch
|
|||
|
{
|
|||
|
string[] list => new List<string>(list),
|
|||
|
_ => new List<string>(),
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|