Repository navigation
Expand file tree
/
Copy pathCommands.cs
More file actions
70 lines (61 loc) · 2.7 KB
/
Copy pathCommands.cs
File metadata and controls
70 lines (61 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.ComponentModel.Design;
using Community.VisualStudio.Toolkit;
using Microsoft.VisualStudio.Shell;
using NetForge.VsExtension.Core;
using NetForge.VsExtension.UI;
using Task = System.Threading.Tasks.Task;
namespace NetForge.VsExtension
{
/// <summary>Registers the Tools ▸ NetForge / File ▸ New commands against the menu command service.</summary>
internal static class Commands
{
public static async Task RegisterAsync(AsyncPackage package)
{
await package.JoinableTaskFactory.SwitchToMainThreadAsync();
if (!(await package.GetServiceAsync(typeof(IMenuCommandService)) is OleMenuCommandService mcs))
return;
mcs.AddCommand(Bind(PackageIds.NewProject, () => Fire(package, NewProjectAsync)));
mcs.AddCommand(Bind(PackageIds.WhatsInPro, ShowPro));
mcs.AddCommand(Bind(PackageIds.OpenConfigurator, () => NetForgeUrls.Open(NetForgeUrls.Configure)));
mcs.AddCommand(Bind(PackageIds.OpenDemo, () => NetForgeUrls.Open(NetForgeUrls.Demo)));
mcs.AddCommand(Bind(PackageIds.OpenDocs, () => NetForgeUrls.Open(NetForgeUrls.Docs)));
}
private static MenuCommand Bind(int id, Action exec) =>
new MenuCommand((s, e) => exec(), new CommandID(PackageGuids.CmdSet, id));
private static void Fire(AsyncPackage package, Func<Task> work)
{
_ = package.JoinableTaskFactory.RunAsync(async () =>
{
try
{
await work();
}
catch (Exception ex)
{
await VS.MessageBox.ShowErrorAsync("NetForge", ex.Message);
}
});
}
private static void ShowPro()
{
ThreadHelper.ThrowIfNotOnUIThread();
new ProShowcaseDialog().ShowDialog();
}
private static async Task NewProjectAsync()
{
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
var dialog = new NewProjectDialog();
if (dialog.ShowDialog() != true)
return;
if (dialog.SelectedEdition == NewProjectDialog.Edition.Pro)
{
var name = Uri.EscapeDataString(dialog.ProjectName ?? string.Empty);
var url = NetForgeUrls.Configurator + "?edition=pro" + (string.IsNullOrEmpty(name) ? "" : "&name=" + name) + "#configure";
NetForgeUrls.Open(url);
return;
}
await ProjectCreator.CreateCommunityAsync(dialog.ProjectName, dialog.Location, dialog.Frontend, dialog.Database, dialog.BrandColor, dialog.BrandTheme);
}
}
}