From 7b56c24a446cbc09b41eebe9ca8a433302c3ebc9 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Mon, 15 Oct 2018 20:43:20 -0700 Subject: [PATCH] Fix tabs rendering glitch due to async load --- .../PartPreviewWindow/PartPreviewContent.cs | 2 + MatterControlLib/PartPreviewWindow/Tabs.cs | 66 +++++++------------ 2 files changed, 27 insertions(+), 41 deletions(-) diff --git a/MatterControlLib/PartPreviewWindow/PartPreviewContent.cs b/MatterControlLib/PartPreviewWindow/PartPreviewContent.cs index 4e386defc..a722d25a3 100644 --- a/MatterControlLib/PartPreviewWindow/PartPreviewContent.cs +++ b/MatterControlLib/PartPreviewWindow/PartPreviewContent.cs @@ -344,6 +344,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } hardwareTab.Visible = activePrinter?.Settings.PrinterSelected ?? false; + + tabControl.RefreshTabPointers(); }, ref unregisterEvents); } diff --git a/MatterControlLib/PartPreviewWindow/Tabs.cs b/MatterControlLib/PartPreviewWindow/Tabs.cs index 30c17835e..018c2d959 100644 --- a/MatterControlLib/PartPreviewWindow/Tabs.cs +++ b/MatterControlLib/PartPreviewWindow/Tabs.cs @@ -278,52 +278,36 @@ namespace MatterHackers.MatterControl.PartPreviewWindow if (tabWidget is ChromeTab newTab) { - ChromeTab leftTab; - - if (tabIndex == -1) - { - leftTab = AllTabs.OfType().LastOrDefault(); - } - else - { - if (tabIndex == 0) - { - leftTab = null; - var firstTab = AllTabs.OfType().FirstOrDefault(); - - newTab.NextTab = firstTab; - firstTab.PreviousTab = newTab; - } - else - { - leftTab = this.AllTabs.Skip(tabIndex - 1).FirstOrDefault() as ChromeTab; - - var rightTab = leftTab?.NextTab; - if (rightTab != null) - { - // Insert us in the middle - rightTab.PreviousTab = newTab; - - // Set Next - newTab.NextTab = rightTab; - } - } - } - - // Set previous - newTab.PreviousTab = leftTab; - - // Insert us as next - if (leftTab != null) - { - leftTab.NextTab = newTab; - } - newTab.TabContent.Visible = false; // Call AddTab(widget, int) in base explicitly base.AddTab(tabWidget, widgetPosition - firstTabPosition, widgetPosition); + // Listen for tab changes and update links + /* + newTab.VisibleChanged += (s, e) => + { + this.RefreshTabPointers(); + }; */ + + this.RefreshTabPointers(); + } + } + + public void RefreshTabPointers() + { + ChromeTab lastTab = null; + + foreach(var tab in AllTabs.OfType().Where(t => t.Visible)) + { + if (lastTab != null) + { + lastTab.NextTab = tab; + } + + tab.PreviousTab = lastTab; + + lastTab = tab; } }