From c44bf09a024e417d5c3723dd3575ac01f4f6738c Mon Sep 17 00:00:00 2001 From: Alex Davies Date: Wed, 9 Feb 2022 00:02:22 +0000 Subject: [PATCH] Added Loading of External DLLs for custom nodes --- .vs/Dynamo/DesignTimeBuild/.dtbcache.v2 | Bin 118049 -> 118049 bytes Dynamo/App.config | 6 ++ .../PropertyEditors/SavePathPropertyEditor.cs | 2 +- Dynamo/MainWindow.xaml.cs | 92 ++++++++++++------ Examples/ExternalNodeExample.dll | Bin 0 -> 9216 bytes 5 files changed, 70 insertions(+), 30 deletions(-) create mode 100644 Dynamo/App.config create mode 100644 Examples/ExternalNodeExample.dll diff --git a/.vs/Dynamo/DesignTimeBuild/.dtbcache.v2 b/.vs/Dynamo/DesignTimeBuild/.dtbcache.v2 index 7f449659f5b437df19758b8531bb19664ecd8e60..107b1359c53760c0d3899d18154f086f105411ce 100644 GIT binary patch literal 118049 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 literal 118049 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 VKZW>n!HbFyUn*kg67kME{|~yyO$z`3 diff --git a/Dynamo/App.config b/Dynamo/App.config new file mode 100644 index 0000000..5dafd51 --- /dev/null +++ b/Dynamo/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dynamo/Controls/PropertyEditors/SavePathPropertyEditor.cs b/Dynamo/Controls/PropertyEditors/SavePathPropertyEditor.cs index 30b9bc7..fb2577d 100644 --- a/Dynamo/Controls/PropertyEditors/SavePathPropertyEditor.cs +++ b/Dynamo/Controls/PropertyEditors/SavePathPropertyEditor.cs @@ -19,7 +19,7 @@ public string Value DependencyProperty.Register( "Value", typeof(string), - typeof(OpenPathPropertyEditor), + typeof(SavePathPropertyEditor), new PropertyMetadata( ""), new ValidateValueCallback(IsValid)); diff --git a/Dynamo/MainWindow.xaml.cs b/Dynamo/MainWindow.xaml.cs index 9f0ed18..15fc01b 100644 --- a/Dynamo/MainWindow.xaml.cs +++ b/Dynamo/MainWindow.xaml.cs @@ -55,6 +55,7 @@ public static bool AutoExecute } private string _projectPath; + private List _loadedAssemblies = new List(); public MainWindow() { @@ -112,6 +113,8 @@ private void Window_Loaded(object sender, RoutedEventArgs e) }; startupWindow.Show(); + + _loadedAssemblies.Add(Assembly.GetExecutingAssembly()); } private void BuidFileContextMenu() @@ -159,6 +162,12 @@ private void BuildEditContextMenu() saveItem.Click += (sender, e) => NodeGraphManager.DeselectAllNodes(FlowchartViewModel.Model); root.Items.Add(saveItem); + root.Items.Add(new Separator()); + + MenuItem loadAssemblyItem = new MenuItem() { Header = "Load External Nodes" }; + loadAssemblyItem.Click += (sender, e) => OpenAssembly(); + root.Items.Add(loadAssemblyItem); + EditMenu.Items.Add(root); } @@ -176,42 +185,45 @@ private MenuItem GetAddNodeMenuItem(BuildContextMenuArgs args) Flowchart flowchart = args.Model as Flowchart; MenuItem addNodeItem = new MenuItem() { Header = "Add Node" }; - Assembly assembly = Assembly.GetExecutingAssembly(); PathTreeItem root = new PathTreeItem("Add Node", null); - foreach (Type type in assembly.GetTypes()) + foreach (Assembly assembly in _loadedAssemblies) { - var nodeAttribute = type.GetCustomAttribute(); - if (nodeAttribute != null) + foreach (Type type in assembly.GetTypes()) { - PathTreeItem curr = root; - string[] pathArgs = nodeAttribute.Path.Split('/', StringSplitOptions.RemoveEmptyEntries); - for (int i = 0; i < pathArgs.Length - 1; i++) + var nodeAttribute = type.GetCustomAttribute(); + if (nodeAttribute != null) { - PathTreeItem branch = new PathTreeItem(pathArgs[i], null); - if (!curr.Children.ContainsKey(pathArgs[i])) + PathTreeItem curr = root; + string[] pathArgs = nodeAttribute.Path.Split('/', StringSplitOptions.RemoveEmptyEntries); + for (int i = 0; i < pathArgs.Length - 1; i++) { - curr.Children.Add(pathArgs[i], branch); - curr = branch; + PathTreeItem branch = new PathTreeItem(pathArgs[i], null); + if (!curr.Children.ContainsKey(pathArgs[i])) + { + curr.Children.Add(pathArgs[i], branch); + curr = branch; + } + else + curr = curr.Children[pathArgs[i]]; } - else - curr = curr.Children[pathArgs[i]]; - } - curr.Children.Add( - pathArgs[^1], - new PathTreeItem(pathArgs[^1], - () => { - Node node = NodeGraphManager.CreateNode( - pathArgs[^1], - Guid.NewGuid(), - flowchart, - type, - args.ModelSpaceMousePosition.X, - args.ModelSpaceMousePosition.Y - ); - if (node is ExecutableNode executableNode) - ExecutionManager.MarkDirty(executableNode); + curr.Children.Add( + pathArgs[^1], + new PathTreeItem(pathArgs[^1], + () => + { + Node node = NodeGraphManager.CreateNode( + pathArgs[^1], + Guid.NewGuid(), + flowchart, + type, + args.ModelSpaceMousePosition.X, + args.ModelSpaceMousePosition.Y + ); + if (node is ExecutableNode executableNode) + ExecutionManager.MarkDirty(executableNode); }, nodeAttribute.Order) - ); + ); + } } } @@ -322,6 +334,28 @@ private void OpenFile() } } + private void OpenAssembly() + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + openFileDialog.Filter = "Class Assembly (*.dll)|*.dll|All files (*.*)|*.*"; + openFileDialog.RestoreDirectory = true; + if (openFileDialog.ShowDialog() == true) + { + var path = openFileDialog.FileName; + if (System.IO.File.Exists(path)) + { + try + { + _loadedAssemblies.Add(Assembly.LoadFrom(path)); + } + catch (Exception ex) + { + // TODO: Error handling + } + } + } + } + private void NewFile() { bool temp = ExecutionManager.AutoExecute; diff --git a/Examples/ExternalNodeExample.dll b/Examples/ExternalNodeExample.dll new file mode 100644 index 0000000000000000000000000000000000000000..10feca48ee72060541d1eb144b0eb61f89a7e04c GIT binary patch literal 9216 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