/// <summary> /// Scrolls to chosen item /// </summary> public bool ScrollToItem(MItem item) { // Do we have more than one item? if (DisplayedItems.Count > 0) { // Iterate over all displayed items foreach (MItem searchedItem in DisplayedItems) { // Is this item we are looking for? if (searchedItem == item) { // Update scroll-bar value Scrollbar.Value = searchedItem.Bounds.Y; // Force update Scrollbar.ForceUpdate(); // Redraw scroll-bar Scrollbar.Invalidate(); // Set scroll view to chosen item Panel.AutoScrollPosition = new Point(0, searchedItem.Bounds.Y); // Refresh Refresh(); // Success return(true); } } } // Fail -> searched item not found return(false); }
/// <summary> /// Filter items /// </summary> private void FilterItems() { // Clear displayed items DisplayedItems.Clear(); // Do we have any items to filter? if (Items.Count > 0) { // Iterate over all items foreach (MItem item in Items) { // Do primary text contains searched word (filter) ? if (item.PrimaryText.ToLower().Contains(_filter.ToLower())) { // Add item to displayed-items collection DisplayedItems.Add(item); } } } // Redraw control Invalidate(true); // Force update component Component.Outdated = true; // Force update scroll-bar Scrollbar.ForceUpdate(); // Call resize OnResize(EventArgs.Empty); // Refresh control Refresh(); }
/// <summary> /// Items changed /// </summary> private void ItemsChanged(object sender, NotifyCollectionChangedEventArgs e) { // Update items owner foreach (MItem item in Items) { item.Owner = this; } // Filter items FilterItems(); // Redraw control Invalidate(true); // Force update component Component.Outdated = true; // Force update scroll-bar Scrollbar.ForceUpdate(); // Call resize OnResize(EventArgs.Empty); // Refresh control Refresh(); }
/// <summary> /// On resize event /// </summary> protected override void OnResize(EventArgs e) { // Base call base.OnResize(e); // Update scroll-bar Scrollbar.ForceUpdate(); }
/// <summary> /// Clears both Items and DisplayedItems collections. Resets selected item property. /// </summary> public void Clear() { // Reset selected item SelectedItem = null; // Clear items Items.Clear(); // Clear displayed items DisplayedItems.Clear(); // Redraw control Invalidate(true); // Force update component Component.Outdated = true; // Force update scroll-bar Scrollbar.ForceUpdate(); // Refresh control Refresh(); }
/// <summary> /// Mouse move /// </summary> private void OnPanelMouseMove(object sender, MouseEventArgs e) { // Show scroll-bar Scrollbar.Wake(); // Update mouse location mouseLocation = new Point(e.Location.X - Panel.AutoScrollPosition.X, e.Location.Y - Panel.AutoScrollPosition.Y); // Handle M-Items events // Draw items if (DisplayedItems.Count > 0) { // Iterate over all displayed items foreach (MItem item in DisplayedItems) { // Modify mouse event arguments MouseEventArgs args = new MouseEventArgs( e.Button, e.Clicks, e.X, Math.Abs(Panel.AutoScrollPosition.Y) + e.Y, e.Delta ); // Trigger mouse move item.TriggerMouseMove(this, args); // Trigger MouseEnter and MouseLeave methods of M-Items // Do mouse hover over item? if (item.Bounds.Contains(mouseLocation)) { // Didn't we already triggered OnMouseEnter method for this item? if (_tempItem == item) { return; } // Trigger mouse leave before changing temp-item if (_tempItem != null) { _tempItem.TriggerMouseLeave(this, e); } // Update currently hovered item _tempItem = item; // Trigger item's OnMouseEnter method item.TriggerMouseEnter(this, e); } } } // Redraw control Invalidate(true); // Force update component Component.Outdated = true; // Force update scroll-bar Scrollbar.ForceUpdate(); // Call resize OnResize(EventArgs.Empty); // Refresh control Refresh(); // Redraw panel Panel.Invalidate(); }