diff --git a/src/DynamoCore/DynamoCore.csproj b/src/DynamoCore/DynamoCore.csproj index 3afc082a9ab..30fe76b77ed 100644 --- a/src/DynamoCore/DynamoCore.csproj +++ b/src/DynamoCore/DynamoCore.csproj @@ -130,6 +130,7 @@ + @@ -221,6 +222,7 @@ + diff --git a/src/DynamoCoreWpf/Controls/StartPage.xaml.cs b/src/DynamoCoreWpf/Controls/StartPage.xaml.cs index 4153aa62e0d..9ed317b147a 100644 --- a/src/DynamoCoreWpf/Controls/StartPage.xaml.cs +++ b/src/DynamoCoreWpf/Controls/StartPage.xaml.cs @@ -654,7 +654,21 @@ private void HandleRegularCommand(StartPageListItem item) private void HandleFilePath(StartPageListItem item) { var path = item.ContextData; - this.DynamoViewModel.OpenCommand.Execute(path); + // Listed templates: use the same open path as the template file-picker (ShowOpenTemplateDialog), + // i.e. open as a new graph from the file contents, not as the saved template path on disk. + object openArg = IsTemplateFilePath(path) + ? Tuple.Create(path, false, true) + : path; + if (this.DynamoViewModel.OpenCommand.CanExecute(openArg)) + { + this.DynamoViewModel.OpenCommand.Execute(openArg); + } + } + + private bool IsTemplateFilePath(string path) + { + return TemplateFiles.Any(template => + string.Equals(template.ContextData, path, StringComparison.OrdinalIgnoreCase)); } private void HandleExternalUrl(StartPageListItem item) diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index 92e4e238109..5b7eaf3af12 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -59,7 +59,7 @@ - 1.0.28 + 1.0.30 DynamoHome diff --git a/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs b/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs index 2fbe44f1901..74739a6f347 100644 --- a/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs @@ -2378,8 +2378,15 @@ internal void OpenOnboardingGuideFile() private bool CanOpen(object parameters) { - - var filePath = parameters as string; + string filePath = parameters as string; + if (filePath == null && parameters is Tuple packedTwo) + { + filePath = packedTwo.Item1; + } + else if (filePath == null && parameters is Tuple packedThree) + { + filePath = packedThree.Item1; + } if (!PathHelper.IsValidPath(filePath)) { diff --git a/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs b/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs index 362c4b2507d..c9a02c05804 100644 --- a/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs +++ b/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs @@ -542,8 +542,20 @@ internal void OpenFile(string path) return; } - if (this.startPage.DynamoViewModel.OpenCommand.CanExecute(path)) - this.startPage.DynamoViewModel.OpenCommand.Execute(path); + var dvm = this.startPage.DynamoViewModel; + var openArg = IsListedHomePageTemplate(path) + ? (object)Tuple.Create(path, false, true) + : path; + if (dvm.OpenCommand.CanExecute(openArg)) + { + dvm.OpenCommand.Execute(openArg); + } + } + + private bool IsListedHomePageTemplate(string path) + { + return startPage?.TemplateFiles?.Any(t => + string.Equals(t.ContextData, path, StringComparison.OrdinalIgnoreCase)) == true; } internal void StartGuidedTour(string path) diff --git a/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs b/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs index f19a9f8bf42..494af8d6857 100644 --- a/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs +++ b/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs @@ -114,6 +114,15 @@ public void OpeningWorkspaceWithAutoRunState() Assert.IsTrue(ws.HasRunWithoutCrash); } + [Test] + public void CanOpenTemplateTupleWithValidPath() + { + var examplePath = Path.Combine(SampleDirectory, @"en-US\Basics\Basics_Basic01.dyn"); + var openParams = Tuple.Create(examplePath, false, true); + + Assert.IsTrue(ViewModel.OpenCommand.CanExecute(openParams)); + } + [Test] public void OpeningXMLWorkspaceShouldSetDeterministicId() {