public void Select(T value) { var index = _items.FindIndex(it => it.Value.Equals(value)); _selectedItem = _items[index]; OnSelect?.Invoke(value); VerticalScrollTo(index.Clamp(0, VerticalMaxScrollIndex)); }
public override HitBox HitTest() { if (!IsVisible()) { return(HitBox.Miss); } HitBox hit; if ((hit = _scrollBar.HitTest()).IsHit) { return(hit); } if (Categories.ViewAsImageList) { for (int i = VerticalScrollIndex; i < _items.Count && i - VerticalScrollIndex < VerticalMaxVisibleItems; i++) { if (!_items[i].HitTest()) { continue; } _selectedItem = _items[i]; OnSelect?.Invoke(_items[i].Value); return(HitBox.Hit(this)); } } else { for (int i = VerticalScrollIndex * HorizontalMaxVisibleItems; i < _items.Count && i - (VerticalScrollIndex * HorizontalMaxVisibleItems) < MaxVisibleItemsTotal; i++) { if (!_items[i].HitTest()) { continue; } _selectedItem = _items[i]; OnSelect?.Invoke(_items[i].Value); return(HitBox.Hit(this)); } } _clickable.HitTest(MouseButton.Left); if (_clickable.IsDown(MouseButton.Left)) { return(HitBox.Hit(this)); } return(HitBox.Miss); }
public void AddItem(ImageBox image, string text, T value) { image.Parent = this; image.Window = Window; var item = new MultiViewBoxItem { Value = value, Label = new Label(Window, this, Rectangle.Empty, text, ZIndex + 1), ImageBox = image }; _items.Add(item); IsDirty = true; }
public void AddRange(IEnumerable <ImageBox> images, Func <Sprite, string> textFunc, Func <Sprite, T> valueFunc) { foreach (var img in images) { img.Parent = this; img.Window = Window; var item = new MultiViewBoxItem { Value = valueFunc(img.Sprite), Label = new Label(Window, this, Rectangle.Empty, textFunc(img.Sprite), ZIndex + 1), ImageBox = img, }; _items.Add(item); } IsDirty = true; }