From dbe806b301c00bb7d0c81171e06903243685e5be Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Wed, 9 Feb 2022 17:12:10 -0800 Subject: [PATCH] switch to correct tab if open when opening from file system --- .../ApplicationView/ApplicationController.cs | 26 +++++++++++++++++++ .../Widgets/ListView/LibraryListView.cs | 23 +++------------- .../PartPreviewWindow/MainViewWidget.cs | 9 +++++-- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/MatterControlLib/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index c0f019de7..af2df4f5a 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -1417,6 +1417,32 @@ namespace MatterHackers.MatterControl } } + public bool SwitchToWorkspaceIfAlreadyOpen(string assetPath) + { + var mainViewWidget = Instance.MainView; + foreach (var openWorkspace in Instance.Workspaces) + { + if (openWorkspace.SceneContext.EditContext.SourceFilePath == assetPath + || (openWorkspace.SceneContext.EditContext.SourceItem is IAssetPath cloudItem + && cloudItem.AssetPath == assetPath)) + { + foreach (var tab in mainViewWidget.TabControl.AllTabs) + { + if (tab.TabContent is DesignTabPage tabContent + && (tabContent.sceneContext.EditContext.SourceFilePath == assetPath + || (tabContent.sceneContext.EditContext.SourceItem is IAssetPath cloudItem2 + && cloudItem2.AssetPath == assetPath))) + { + mainViewWidget.TabControl.ActiveTab = tab; + return true; + } + } + } + } + + return false; + } + public DragDropData DragDropData { get; set; } = new DragDropData(); private string _uiHint = ""; diff --git a/MatterControlLib/Library/Widgets/ListView/LibraryListView.cs b/MatterControlLib/Library/Widgets/ListView/LibraryListView.cs index 5c22bb452..398344849 100644 --- a/MatterControlLib/Library/Widgets/ListView/LibraryListView.cs +++ b/MatterControlLib/Library/Widgets/ListView/LibraryListView.cs @@ -511,25 +511,10 @@ namespace MatterHackers.MatterControl.CustomWidgets var mainViewWidget = ApplicationController.Instance.MainView; // check if it is already open - foreach (var openWorkspace in ApplicationController.Instance.Workspaces) - { - if (openWorkspace.SceneContext.EditContext.SourceFilePath == asset.AssetPath - || (openWorkspace.SceneContext.EditContext.SourceItem is IAssetPath cloudItem - && cloudItem.AssetPath == asset.AssetPath)) - { - foreach (var tab in mainViewWidget.TabControl.AllTabs) - { - if (tab.TabContent is DesignTabPage tabContent - && (tabContent.sceneContext.EditContext.SourceFilePath == asset.AssetPath - || (tabContent.sceneContext.EditContext.SourceItem is IAssetPath cloudItem2 - && cloudItem2.AssetPath == asset.AssetPath))) - { - mainViewWidget.TabControl.ActiveTab = tab; - return; - } - } - } - } + if (ApplicationController.Instance.SwitchToWorkspaceIfAlreadyOpen(asset.AssetPath)) + { + return; + } var workspace = new PartWorkspace(new BedConfig(ApplicationController.Instance.Library.PlatingHistory)); diff --git a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs index dac1699f7..1410320c8 100644 --- a/MatterControlLib/PartPreviewWindow/MainViewWidget.cs +++ b/MatterControlLib/PartPreviewWindow/MainViewWidget.cs @@ -431,7 +431,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } // you can use this code to test the ShellOpenFile code -#if false +#if true public override void OnKeyPress(KeyPressEventArgs keyPressEvent) { var files = new string[] @@ -472,7 +472,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { if (Path.GetExtension(filePath).ToLower() == ".mcx") { - var history = ApplicationController.Instance.Library.PlatingHistory; + if (ApplicationController.Instance.SwitchToWorkspaceIfAlreadyOpen(filePath)) + { + return; + } + + var history = ApplicationController.Instance.Library.PlatingHistory; var workspace = new PartWorkspace(new BedConfig(history)); // Load the previous content await workspace.SceneContext.LoadContent(new EditContext()