public void RelocateTab(int fromIndex, int toIndex, bool selectRelocated) { object selectedId = TabIds[SelectedIndex]; if (fromIndex != toIndex && toIndex >= 0 && toIndex < Count) { lock (_syncRoot) { Texts = Texts.Reorder(fromIndex, toIndex); TabIds = TabIds.Reorder(fromIndex, toIndex); Widths = Widths.Reorder(fromIndex, toIndex); Icons = Icons.Reorder(fromIndex, toIndex); Tags = Tags.Reorder(fromIndex, toIndex); } } if (selectRelocated) { SelectedIndex = toIndex; } else { SelectedIndex = TabIds.IndexOf(selectedId); } TabReordered?.Invoke(this); }
public void AddTab(object tabId = null, string tabText = null, Bitmap icon = null, object tag = null, bool?insertToTheLeft = null, bool select = true) { lock (_syncRoot) { tabText = tabText ?? GetDefaultText(Count); var tabIcon = icon ?? DefaultIcon; int width = getTabWidth(tabText, tabIcon, CloseIcon); TabIds.Add(tabId); Texts.Add(tabText); Icons.Add(tabIcon); Widths.Add(width); Tags.Add(tag); } OnLayout(new LayoutEventArgs(this, null)); Invalidate(); int index = Count - 1; TabAdded?.Invoke(this, index); if (select) { SelectedIndex = index; } if ((insertToTheLeft ?? AddNewTabsToTheLeft) && index != 0) { RelocateTab(index, 0, selectRelocated: select); } }
public void RemoveTab(int index) { TabRemoving?.Invoke(this, index); lock (_syncRoot) { Texts.RemoveAt(index); TabIds.RemoveAt(index); Widths.RemoveAt(index); Icons.RemoveAt(index); Tags.RemoveAt(index); var selectedIndex = SelectedIndex >= index ? SelectedIndex - 1 : SelectedIndex; selectedIndex = getValidIndex(selectedIndex); setSelectedIndex(selectedIndex); } OnLayout(new LayoutEventArgs(this, null)); Invalidate(); TabRemoved?.Invoke(this); }
public void ApplyOrderFrom(TabHeaderControl other) { lock (_syncRoot) { var indices = TabIds.Select(id => other.TabIds.IndexOf(id)) .ToArray(); if (indices.Any(i => i < 0 || i >= Count)) { return; } Texts = Enumerable.Range(0, Count).Select(i => Texts[indices[i]]).ToList(); TabIds = Enumerable.Range(0, Count).Select(i => TabIds[indices[i]]).ToList(); Widths = Enumerable.Range(0, Count).Select(i => Widths[indices[i]]).ToList(); Icons = Enumerable.Range(0, Count).Select(i => Icons[indices[i]]).ToList(); } Invalidate(); TabReordered?.Invoke(this); }
internal static void UnregisterWebSocket(WebSocket Socket, string Location, string TabID) { Uri Uri = new Uri(Location); string Resource = Uri.LocalPath; if (eventsByTabID.TryGetValue(TabID, out TabQueue Queue)) { lock (Queue) { Queue.WebSocket = null; } } lock (locationByTabID) { if (locationByTabID.TryGetValue(TabID, out string s) && s == Resource) { locationByTabID.Remove(TabID); } else { return; } } lock (tabIdsByLocation) { if (tabIdsByLocation.TryGetValue(Resource, out Dictionary <string, List <KeyValuePair <string, string> > > TabIds)) { if (TabIds.Remove(TabID) && TabIds.Count == 0) { tabIdsByLocation.Remove(Resource); } } } }