Update tab pointers on removal

- Issue MatterHackers/MCCentral#2853
Revise Tab logic to prevent this anomaly
This commit is contained in:
John Lewin 2018-03-13 21:02:02 -07:00
parent 8e35506f71
commit 8cf1be9c24

View file

@ -117,14 +117,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
internal void RemoveTab(ITab tab)
internal virtual void RemoveTab(ITab tab)
{
_allTabs.Remove(tab);
TabBar.ActionArea.RemoveChild(tab as GuiWidget);
this.TabContainer.RemoveChild(tab.TabContent);
ActiveTab = _allTabs.LastOrDefault();
if (tab is ChromeTab chromeTab)
{
// Activate next or last tab
ActiveTab = chromeTab.NextTab ?? _allTabs.LastOrDefault();
}
else
{
// Activate last tab
ActiveTab = _allTabs.LastOrDefault();
}
}
private ITab _activeTab;
@ -228,6 +237,28 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
internal override void RemoveTab(ITab tab)
{
base.RemoveTab(tab);
// Update pointers - collapse out removed tab
if (tab is ChromeTab removedTab)
{
var tabA = removedTab.PreviousTab;
var tabB = removedTab.NextTab;
if (tabA != null)
{
tabA.NextTab = tabB;
}
if (tabB != null)
{
tabB.PreviousTab = tabA;
}
}
}
private async void ChromeTab_CloseClicked(object sender, EventArgs e)
{
if (sender is ITab tab