Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
                    }
                }
            }
        }