forked from lin-ycv/Melanoplus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AssemblyPriority.cs
105 lines (95 loc) · 4.55 KB
/
AssemblyPriority.cs
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using Grasshopper;
using Grasshopper.GUI;
using Grasshopper.GUI.Canvas;
using Grasshopper.Kernel;
using Grasshopper.Kernel.Special;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Melanoplus.Widget;
using Melanoplus.Util;
namespace Melanoplus
{
public class AssemblyPriority : GH_AssemblyPriority
{
private static List<ToolStripMenuItem> MenuEntryAllowShortcut = new List<ToolStripMenuItem>() { };
public override GH_LoadingInstruction PriorityLoad()
{
GH_Canvas.WidgetListCreated += AddWidget;
GH_Canvas.WidgetListCreated += AddWindowsWidget;
Instances.CanvasCreated += LoadQuickButtons;
Instances.CanvasCreated += LoadMenuOptions;
GH_DocumentEditor.AggregateShortcutMenuItems += AggregateShortcutMenuItems;
/*var server = Instances.ComponentServer;
server.AddCategoryShortName("Melanoplus", "Plus");
server.AddCategorySymbolName("Melanoplus", '➕');
server.AddCategoryIcon("Melanoplus", Properties.Resources.MelanoplusSimple16);*/
return GH_LoadingInstruction.Proceed;
}
private void AddWidget(object s, GH_CanvasWidgetListEventArgs e)
{
GH_Canvas.WidgetListCreated -= AddWidget;
var c = (GH_Canvas)s;
e.AddWidget(new WiresWidget());
WiresWidget.CanvasCreated(c);
e.AddWidget(new LabelWidget());
LabelWidget.CanvasCreated(c);
e.AddWidget(new ViewportBGWidget());
ViewportBGWidget.CanvasCreated(c);
}
private void AddWindowsWidget(object s, GH_CanvasWidgetListEventArgs e)
{
GH_Canvas.WidgetListCreated -= AddWindowsWidget;
e.AddWidget(new WindowsOnly.Widget.ViewportWidget());
WindowsOnly.Widget.ViewportWidget.CanvasCreated((GH_Canvas)s);
}
private void LoadQuickButtons(GH_Canvas canvas)
{
Instances.CanvasCreated -= LoadQuickButtons;
ToolStripItemCollection items = ((ToolStrip)(Instances.DocumentEditor).Controls[0].Controls[1]).Items;
items.Add(new ToolStripButton("Create Snippet", Properties.Resources.SnippetBuilder, (s, e) => Snippet.Save(canvas.Document))
{
AutoSize = true,
DisplayStyle = ToolStripItemDisplayStyle.Image,
ImageAlign = ContentAlignment.MiddleCenter,
ImageScaling = ToolStripItemImageScaling.SizeToFit,
Margin = new Padding(1, 1, 0, 2),
Name = "Melanoplus_Snippet",
Size = new Size(28, 28),
ToolTipText = "Create a multi-component user object.",
});
}
private void LoadMenuOptions(GH_Canvas canvas)
{
Instances.CanvasCreated -= LoadMenuOptions;
var editor = Instances.DocumentEditor;
if (editor != null)
{
editor.SuspendLayout();
var mnu = (ToolStripMenuItem)editor.MainMenuStrip.Items["mnuDisplay"];
var index = mnu.DropDownItems.IndexOfKey("mnuFullNames") + 1;
var cleancanvas = new ToolStripMenuItem("Clean Canvas", Properties.Resources.CleanCanvas, (s, e) => CleanCanvas.Clean(canvas.Document), "mnuCleanCanvas");
mnu.DropDownItems.Insert(index, cleancanvas);
MenuEntryAllowShortcut.Add(cleancanvas);
mnu = (ToolStripMenuItem)editor.MainMenuStrip.Items["mnuEdit"];
index = mnu.DropDownItems.IndexOfKey("mnuClusterSelection") + 1;
var cluster = new ToolStripMenuItem("Unlock", Properties.Resources.unlock, (s, e) => Cluster.Un(canvas.Document), "mnuUnlockCluster") { ShortcutKeys = System.Windows.Forms.Keys.U | System.Windows.Forms.Keys.Control };
mnu.DropDownItems.Insert(index, cluster);
MenuEntryAllowShortcut.Add(cluster);
editor.ResumeLayout();
mnu.DropDownOpening += (s, e) => mnu.DropDownItems["mnuUnlockCluster"].Visible = canvas.IsDocument && canvas.Document.SelectedObjects().Any(o => o is GH_Cluster);
}
}
private static void AggregateShortcutMenuItems(object sender, GH_MenuShortcutEventArgs e)
{
GH_DocumentEditor.AggregateShortcutMenuItems -= AggregateShortcutMenuItems;
MenuEntryAllowShortcut.ForEach(e.AppendItem);
}
}
}