diff Source/Common/Compatibility3.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Common/Compatibility3.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,294 @@
+#if FW2
+
+namespace System
+{
+	public delegate void Action();
+
+	public delegate void Action<T1, T2>(T1 arg1, T2 arg2);
+
+	public delegate void Action<T1, T2, T3>(T1 arg1, T2 arg2, T3 arg3);
+
+	public delegate void Action<T1, T2, T3, T4>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
+
+	public delegate TResult Func<TResult>();
+
+	public delegate TResult Func<T1, TResult>(T1 arg1);
+
+	public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);
+
+	public delegate TResult Func<T1, T2, T3, TResult>(T1 arg1, T2 arg2, T3 arg3);
+
+	public delegate TResult Func<T1, T2, T3, T4, TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4);
+}
+
+namespace System.Collections.Specialized
+{
+	public interface INotifyCollectionChanged
+	{
+		event NotifyCollectionChangedEventHandler CollectionChanged;
+	}
+
+	/// <summary>
+	/// This enum describes the action that caused a CollectionChanged event.
+	/// </summary>
+	public enum NotifyCollectionChangedAction
+	{
+		/// <summary> One or more items were added to the collection. </summary> 
+		Add,
+		/// <summary> One or more items were removed from the collection. </summary>
+		Remove,
+		/// <summary> One or more items were replaced in the collection. </summary>
+		Replace,
+		/// <summary> One or more items were moved within the collection. </summary>
+		Move,
+		/// <summary> The contents of the collection changed dramatically. </summary>
+		Reset,
+	}
+
+	/// <summary> 
+	/// Arguments for the CollectionChanged event. A collection that supports
+	/// INotifyCollectionChangedThis raises this event whenever an item is added or
+	/// removed, or when the contents of the collection changes dramatically. 
+	/// </summary>
+	public class NotifyCollectionChangedEventArgs : EventArgs
+	{
+		#region .ctors
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a reset change. 
+		/// </summary> 
+		/// <param name="action">The action that caused the event (must be Reset).</param>
+		public NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction action)
+			: this(action, null, -1)
+		{
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a one-item change. 
+		/// </summary>
+		/// <param name="action">The action that caused the event; can only be Reset, Add or Remove action.</param>
+		/// <param name="changedItem">The item affected by the change.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			object                        changedItem)
+			: this(action, changedItem, -1)
+		{
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a one-item change. 
+		/// </summary> 
+		/// <param name="action">The action that caused the event.</param>
+		/// <param name="changedItem">The item affected by the change.</param> 
+		/// <param name="index">The index where the change occurred.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			object                        changedItem,
+			int                           index)
+			: this(action, changedItem == null? null: new[]{ changedItem }, index)
+		{
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a multi-item change. 
+		/// </summary> 
+		/// <param name="action">The action that caused the event.</param>
+		/// <param name="changedItems">The items affected by the change.</param> 
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			IList                         changedItems)
+			: this(action, changedItems, -1)
+		{
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a multi-item change (or a reset). 
+		/// </summary> 
+		/// <param name="action">The action that caused the event.</param>
+		/// <param name="changedItems">The items affected by the change.</param> 
+		/// <param name="startingIndex">The index where the change occurred.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			IList                         changedItems,
+			int                           startingIndex)
+		{
+			_action = action;
+
+			if (action == NotifyCollectionChangedAction.Add)
+			{
+				_newItems = changedItems;
+				_newStartingIndex = startingIndex;
+			}
+			else if (action == NotifyCollectionChangedAction.Remove)
+			{
+				_oldItems = changedItems;
+				_oldStartingIndex = startingIndex;
+			}
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a one-item Replace event.
+		/// </summary>
+		/// <param name="action">Can only be a Replace action.</param> 
+		/// <param name="newItem">The new item replacing the original item.</param>
+		/// <param name="oldItem">The original item that is replaced.</param> 
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			object                        newItem,
+			object                        oldItem)
+			: this(action, new[] { newItem }, new[] { oldItem }, -1)
+		{
+		}
+
+		/// <summary> 
+		/// Construct a NotifyCollectionChangedEventArgs that describes a one-item Replace event. 
+		/// </summary>
+		/// <param name="action">Can only be a Replace action.</param> 
+		/// <param name="newItem">The new item replacing the original item.</param>
+		/// <param name="oldItem">The original item that is replaced.</param>
+		/// <param name="index">The index of the item being replaced.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			object                        newItem,
+			object                        oldItem,
+			int                           index)
+			: this(action, new[] { newItem }, new[] { oldItem }, index)
+		{
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a multi-item Replace event. 
+		/// </summary>
+		/// <param name="action">Can only be a Replace action.</param> 
+		/// <param name="newItems">The new items replacing the original items.</param> 
+		/// <param name="oldItems">The original items that are replaced.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			IList                         newItems,
+			IList                         oldItems)
+			: this(action, newItems, oldItems, -1)
+		{
+		}
+
+		/// <summary>
+		/// Construct a NotifyCollectionChangedEventArgs that describes a multi-item Replace event. 
+		/// </summary>
+		/// <param name="action">Can only be a Replace action.</param> 
+		/// <param name="newItems">The new items replacing the original items.</param> 
+		/// <param name="oldItems">The original items that are replaced.</param>
+		/// <param name="startingIndex">The starting index of the items being replaced.</param> 
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			IList                         newItems,
+			IList                         oldItems,
+			int                           startingIndex)
+		{
+			_action = action;
+
+			_newItems = newItems;
+			_newStartingIndex = startingIndex;
+			_oldItems = oldItems;
+			_oldStartingIndex = startingIndex;
+		}
+
+		/// <summary> 
+		/// Construct a NotifyCollectionChangedEventArgs that describes a one-item Move event.
+		/// </summary> 
+		/// <param name="action">Can only be a Move action.</param> 
+		/// <param name="changedItem">The item affected by the change.</param>
+		/// <param name="index">The new index for the changed item.</param> 
+		/// <param name="oldIndex">The old index for the changed item.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			object                        changedItem,
+			int                           index,
+			int                           oldIndex)
+			: this(action, new[]{changedItem}, index, oldIndex)
+		{
+		}
+
+		/// <summary> 
+		/// Construct a NotifyCollectionChangedEventArgs that describes a multi-item Move event.
+		/// </summary> 
+		/// <param name="action">The action that caused the event.</param> 
+		/// <param name="changedItems">The items affected by the change.</param>
+		/// <param name="index">The new index for the changed items.</param> 
+		/// <param name="oldIndex">The old index for the changed items.</param>
+		public NotifyCollectionChangedEventArgs(
+			NotifyCollectionChangedAction action,
+			IList                         changedItems,
+			int                           index,
+			int                           oldIndex)
+		{
+			_action = action;
+
+			_newItems = changedItems;
+			_newStartingIndex = index;
+			_oldItems = changedItems;
+			_oldStartingIndex = oldIndex;
+		}
+
+		#endregion
+
+		#region Properties
+
+		private readonly NotifyCollectionChangedAction _action;
+		/// <summary>
+		/// The action that caused the event. 
+		/// </summary>
+		public NotifyCollectionChangedAction Action
+		{
+			get { return _action; }
+		}
+
+		private readonly IList _newItems;
+		/// <summary>
+		/// The items affected by the change.
+		/// </summary> 
+		public IList NewItems
+		{
+			get { return _newItems; }
+		}
+
+		private readonly IList _oldItems;
+		/// <summary>
+		/// The old items affected by the change (for Replace events).
+		/// </summary>
+		public IList OldItems
+		{
+			get { return _oldItems; }
+		}
+
+		private readonly int _newStartingIndex = -1;
+		/// <summary> 
+		/// The index where the change occurred.
+		/// </summary>
+		public int NewStartingIndex
+		{
+			get { return _newStartingIndex; }
+		}
+
+		private readonly int _oldStartingIndex = -1;
+		/// <summary>
+		/// The old index where the change occurred (for Move events). 
+		/// </summary>
+		public int OldStartingIndex
+		{
+			get { return _oldStartingIndex; }
+		}
+
+		#endregion
+	}
+
+	/// <summary>
+	/// The delegate to use for handlers that receive the CollectionChanged event.
+	/// </summary>
+	public delegate void NotifyCollectionChangedEventHandler(object sender, NotifyCollectionChangedEventArgs e);
+}
+
+namespace System.Runtime.CompilerServices
+{
+	internal class ExtensionAttribute : Attribute {}
+}
+
+#endif
\ No newline at end of file