Apricot.Balloon.OnMouseWheel C# (CSharp) Method

OnMouseWheel() protected method

protected OnMouseWheel ( System.Windows.Input.MouseWheelEventArgs e ) : void
e System.Windows.Input.MouseWheelEventArgs
return void
        protected override void OnMouseWheel(MouseWheelEventArgs e)
        {
            base.OnMouseWheel(e);

            const int WHEEL_DATA = 120;
            int lines = e.Delta * SystemParameters.WheelScrollLines / WHEEL_DATA;

            if (this.messageCollection.Count > 0 && this.historyPoint.HasValue && this.historyPoint.Value < this.messageCollection.Count)
            {
                if (this.enableFilter)
                {
                    Message message = this.messageCollection[this.historyPoint.Value];

                    if (message.HasAttachments)
                    {
                        if (e.Delta > 0)
                        {
                            double interval = GetNextInterval(message.Attachments, this.nextThresholdScore, lines, true);

                            if (this.nextThresholdScore - interval < this.minScore)
                            {
                                this.thresholdQueue.Enqueue(this.minScore - this.nextThresholdScore);
                                this.nextThresholdScore = this.minScore;
                            }
                            else
                            {
                                this.thresholdQueue.Enqueue(-interval);
                                this.nextThresholdScore -= interval;
                            }
                        }
                        else if (e.Delta < 0)
                        {
                            double interval = GetNextInterval(message.Attachments, this.nextThresholdScore, lines, false);

                            if (this.nextThresholdScore + interval > this.maxScore)
                            {
                                this.thresholdQueue.Enqueue(this.maxScore - this.nextThresholdScore);
                                this.nextThresholdScore = this.maxScore;
                            }
                            else
                            {
                                this.thresholdQueue.Enqueue(interval);
                                this.nextThresholdScore += interval;
                            }
                        }
                    }
                }
                else
                {
                    if (this.selectedPosition.HasValue)
                    {
                        this.selectedPositionQueue.Enqueue(-lines);
                    }
                    else
                    {
                        this.scrollQueue.Enqueue(-lines);
                    }
                }
            }
        }