예제 #1
0
        private void OnPanelsChanging(object sender, NotifyCollectionEventArgs e)
        {
            switch (e.Event)
            {
            case NotifyEvent.Clear:
                _panelHover.Drop();
                break;

            case NotifyEvent.Remove:
                if (_panelHover.Index >= e.StartIndex)
                {
                    if (_panelHover.Index <= e.EndIndex)
                    {
                        _panelHover.Drop();
                    }
                    else
                    {
                        _panelHover.ResetIndex(_panelHover.Index - e.ModifiedItems);
                    }
                }
                break;

            case NotifyEvent.Set:
                if (_panelHover.Index >= e.StartIndex)
                {
                    if (_panelHover.Index <= e.EndIndex)
                    {
                        _panelHover.Drop();
                    }
                    else
                    {
                        _panelHover.ResetIndex(_panelHover.Index - e.ModifiedItems);
                    }
                }
                break;
            }
        }
예제 #2
0
        private void OnViewRemoved(object sender, ViewEventArgs e)
        {
            e.View.TextChanged -= OnViewTextChanged;
            var size  = 0;
            int index = -1;

            for (int i = _tabs.Count - 1; i >= 0; --i)
            {
                if (_tabs[i].View == e.View)
                {
                    size = _tabs[i].Length;
                    _tabs.RemoveAt(i);
                    index = i;
                    break;
                }
            }
            if (index != -1)
            {
                _size -= size;
                size   = _size;
                switch (_orientation)
                {
                case Orientation.Vertical:
                {
                    var space = _grid.VerticalClientSpace;
                    size += _tabs.Count * Renderer.SideTabSpacing;
                    if (size > space)
                    {
                        size = space;
                    }
                    Height = size;
                }
                break;

                case Orientation.Horizontal:
                {
                    var space = _grid.HorizontalClientSpace;
                    size += _tabs.Count * Renderer.SideTabSpacing;
                    if (size > space)
                    {
                        size = space;
                    }
                    Width = size;
                }
                break;

                default:
                    throw new ApplicationException(string.Format(
                                                       CultureInfo.InvariantCulture,
                                                       "Unexpected {0}.Orientation: {1}", GetType().Name, Orientation));
                }
                Invalidate();
                if (_tabHover.Index == index)
                {
                    _tabHover.Reset(-1, null);
                }
                else if (_tabHover.Index > index)
                {
                    _tabHover.ResetIndex(_tabHover.Index - 1);
                }
                if (sender == _visibleHost)
                {
                    DespawnPanel();
                }
            }
        }