private void SlideWindowToIncludeTab(int tabSelected)
{
int newSlidingWindowSize = GetSlidingWindowSize();
if (newSlidingWindowSize == 0)
{
tabSlidingWindowStart = tabSlidingWindowEnd = 0;
return;
}
if (tabSelected != 0)
{
// Selection is not home tab
if (tabSelected < tabSlidingWindowStart)
{
// Slide window towards the front
tabSlidingWindowStart = tabSelected;
tabSlidingWindowEnd = tabSlidingWindowStart + (newSlidingWindowSize - 1);
}
else if (tabSelected > tabSlidingWindowEnd)
{
// Slide window towards the end
tabSlidingWindowEnd = tabSelected;
tabSlidingWindowStart = tabSlidingWindowEnd - (newSlidingWindowSize - 1);
}
else
{
int currentSlidingWindowSize = tabSlidingWindowEnd - tabSlidingWindowStart + 1;
int windowDiff = Math.Abs(currentSlidingWindowSize - newSlidingWindowSize);
// Handles sliding window size change caused by window resizing
if (currentSlidingWindowSize > newSlidingWindowSize)
{
// Trim window
while (windowDiff > 0)
{
if (tabSelected == tabSlidingWindowEnd)
tabSlidingWindowStart++; // Trim from front
else
tabSlidingWindowEnd--; // Trim from end
windowDiff--;
}
}
else if (currentSlidingWindowSize < newSlidingWindowSize)
{
// Expand window
int lastTab = WorkspaceTabs.Items.Count - 1;
while (windowDiff > 0)
{
if (tabSlidingWindowEnd == lastTab)
tabSlidingWindowStart--;
else
tabSlidingWindowEnd++;
windowDiff--;
}
}
else
{
// Handle tab closing
}
}
}
else
{
// Selection is home tab
int currentSlidingWindowSize = tabSlidingWindowEnd - tabSlidingWindowStart + 1;
int windowDiff = Math.Abs(currentSlidingWindowSize - newSlidingWindowSize);
int lastTab = WorkspaceTabs.Items.Count - 1;
// Handles sliding window size change caused by window resizing and tab close
if (currentSlidingWindowSize > newSlidingWindowSize)
{
// Trim window
while (windowDiff > 0)
{
tabSlidingWindowEnd--; // Trim from end
windowDiff--;
}
}
else if (currentSlidingWindowSize < newSlidingWindowSize)
{
// Expand window due to window resize
while (windowDiff > 0)
{
if (tabSlidingWindowEnd == lastTab)
tabSlidingWindowStart--;
else
tabSlidingWindowEnd++;
windowDiff--;
}
}
else
{
// Handle tab closing with no change in window size
// Shift window
if (tabSlidingWindowEnd > lastTab)
{
tabSlidingWindowStart--;
tabSlidingWindowEnd--;
}
// Handle case that selected tab is still 0 and
// a new tab is created.
else if (tabSlidingWindowEnd < lastTab)
{
tabSlidingWindowEnd++;
}
}
}
}