コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        /// <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();
        }
コード例 #4
0
        /// <summary>
        /// On resize event
        /// </summary>
        protected override void OnResize(EventArgs e)
        {
            // Base call
            base.OnResize(e);

            // Update scroll-bar
            Scrollbar.ForceUpdate();
        }
コード例 #5
0
        /// <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();
        }
コード例 #6
0
        /// <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();
        }