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; } }
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(); } } }