File: System\Windows\Input\StagingAreaInputItem.cs
Web Access
Project: src\src\Microsoft.DotNet.Wpf\src\PresentationCore\PresentationCore.csproj (PresentationCore)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System.Collections;
 
namespace System.Windows.Input
{
    /// <summary>
    ///     This class encapsulates an input event while it is being
    ///     processed by the input manager.
    /// </summary>
    /// <remarks>
    ///     This class just provides the dictionary-based storage for
    ///     all of the listeners of the various input manager events.
    /// </remarks>
    public class StagingAreaInputItem
    {
        // Only we can make these.
        internal StagingAreaInputItem(bool isMarker)
        {
            _isMarker = isMarker;
        }
        
        // For performace reasons, we try to reuse these event args.
        // Allow an existing item to be promoted by keeping the existing dictionary. 
        internal void Reset(InputEventArgs input, StagingAreaInputItem promote)
        {
            _input = input;
 
            if(promote != null && promote._dictionary != null)
            {
                _dictionary = (Hashtable) promote._dictionary.Clone();
            }
            else
            {
                if(_dictionary != null)
                {
                    _dictionary.Clear();
                }
                else
                {
                    _dictionary = new Hashtable();
                }
            }
        }
 
        /// <summary>
        ///     Returns the input event.
        /// </summary>
        public InputEventArgs Input
        {
            get {return _input;}
        }
 
        /// <summary>
        ///     Provides storage for arbitrary data needed during the
        ///     processing of this input event.
        /// </summary>
        /// <param name="key">
        ///     An arbitrary key for the data.  This cannot be null.
        /// </param>
        /// <returns>
        ///     The data previously set for this key, or null.
        /// </returns>
        public object GetData(object key)
        {
            return _dictionary[key];
        }
 
        /// <summary>
        ///     Provides storage for arbitrary data needed during the
        ///     processing of this input event.
        /// </summary>
        /// <param name="key">
        ///     An arbitrary key for the data.  This cannot be null.
        /// </param>
        /// <param name="value">
        ///     The data to set for this key.  This can be null.
        /// </param>
        public void SetData(object key, object value)
        {
            _dictionary[key] = value;
        }
 
        internal bool IsMarker {get {return _isMarker;}}
        
        private bool _isMarker;
        private InputEventArgs _input;
        private Hashtable _dictionary;
    }
}