Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Command / InputBindingCollection.cs / 1305600 / InputBindingCollection.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: InputBindingCollection serves the purpose of Storing/Retrieving InputBindings
//
// See spec at : http://avalon/coreui/Specs/Commanding(new).mht
//
//
// History:
// 04/02/2004 : chandras - Created
//
//---------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Collections.Specialized;
using System.Windows;
using System.Windows.Input;
using MS.Internal;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input
{
///
/// InputBindingCollection - Collection of InputBindings.
/// Stores the InputBindings Sequentially in an System.Collections.Generic.List"InputBinding"a.
/// Will be changed to generic List implementation once the
/// parser supports generic collections.
///
public sealed class InputBindingCollection : IList
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Constructor
///
public InputBindingCollection()
{
}
///
/// InputBindingCollection
///
/// InputBinding array
public InputBindingCollection(IList inputBindings)
{
if (inputBindings != null && inputBindings.Count > 0)
{
this.AddRange(inputBindings as ICollection);
}
}
///
/// Internal Constructor
///
internal InputBindingCollection(DependencyObject owner)
{
_owner = owner;
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
#region Implementation of IList
#region Implementation of ICollection
///
/// CopyTo - to copy the entire collection into an array
///
/// generic object array
///
void ICollection.CopyTo(System.Array array, int index)
{
if (_innerBindingList != null)
{
((ICollection)_innerBindingList).CopyTo(array, index);
}
}
#endregion Implementation of ICollection
///
/// IList.Contains
///
/// key
/// true - if found, false - otherwise
bool IList.Contains(object key)
{
return this.Contains(key as InputBinding);
}
///
/// IndexOf - returns the index of the item in the list
///
/// item whose index is sought
/// index of the item or -1
int IList.IndexOf(object value)
{
InputBinding inputBinding = value as InputBinding;
return ((inputBinding != null) ? this.IndexOf(inputBinding) : -1);
}
///
/// Insert
///
///
///
void IList.Insert(int index, object value)
{
this.Insert(index, value as InputBinding);
}
///
/// Add - appends the given inputbinding to the current list.
///
/// InputBinding object to add
int IList.Add(object inputBinding)
{
this.Add(inputBinding as InputBinding);
return 0; // ICollection.Add no longer returns the indice
}
///
/// Remove - removes the given inputbinding from the current list.
///
/// InputBinding object to remove
void IList.Remove(object inputBinding)
{
this.Remove(inputBinding as InputBinding);
}
///
/// Indexing operator
///
object IList.this[int index]
{
get
{
return this[index];
}
set
{
InputBinding inputBinding = value as InputBinding;
if (inputBinding == null)
throw new NotSupportedException(SR.Get(SRID.CollectionOnlyAcceptsInputBindings));
this[index] = inputBinding;
}
}
#endregion Implementation of IList
///
/// Indexing operator
///
public InputBinding this[int index]
{
get
{
// disable PreSharp warning about throwing exceptions in getter;
// this is allowed in an indexed property. (First disable C#
// warning about unknown warning numbers.)
#pragma warning disable 1634, 1691
#pragma warning disable 6503
if (_innerBindingList != null)
{
return _innerBindingList[index];
}
else
{
throw new ArgumentOutOfRangeException("index");
}
#pragma warning restore 6503
#pragma warning restore 1634, 1691
}
set
{
if (_innerBindingList != null)
{
InputBinding oldInputBinding = null;
if (index >= 0 && index < _innerBindingList.Count)
{
oldInputBinding = _innerBindingList[index];
}
_innerBindingList[index] = value;
if (oldInputBinding != null)
{
InheritanceContextHelper.RemoveContextFromObject(_owner, oldInputBinding);
}
InheritanceContextHelper.ProvideContextForObject(_owner, value);
}
else
{
throw new ArgumentOutOfRangeException("index");
}
}
}
///
/// Add
///
///
public int Add(InputBinding inputBinding)
{
if (inputBinding != null)
{
if (_innerBindingList == null)
_innerBindingList = new System.Collections.Generic.List(1);
_innerBindingList.Add(inputBinding);
InheritanceContextHelper.ProvideContextForObject(_owner, inputBinding);
return 0; // ICollection.Add no longer returns the indice
}
else
{
throw new NotSupportedException(SR.Get(SRID.CollectionOnlyAcceptsInputBindings));
}
}
///
/// ICollection.IsSynchronized
///
public bool IsSynchronized
{
get
{
if (_innerBindingList != null)
return ((IList)_innerBindingList).IsSynchronized;
return false;
}
}
///
/// IndexOf
///
///
///
public int IndexOf(InputBinding value)
{
return (_innerBindingList != null) ? _innerBindingList.IndexOf(value) : -1;
}
///
/// Adds the elements of the given collection to the end of this list. If
/// required, the capacity of the list is increased to twice the previous
/// capacity or the new size, whichever is larger.
///
/// collection to append
public void AddRange(ICollection collection)
{
if (collection == null)
{
throw new ArgumentNullException("collection");
}
if ( collection.Count > 0)
{
if (_innerBindingList == null)
_innerBindingList = new System.Collections.Generic.List(collection.Count);
IEnumerator collectionEnum = collection.GetEnumerator();
while(collectionEnum.MoveNext())
{
InputBinding inputBinding = collectionEnum.Current as InputBinding;
if (inputBinding != null)
{
_innerBindingList.Add(inputBinding);
InheritanceContextHelper.ProvideContextForObject(_owner, inputBinding);
}
else
{
throw new NotSupportedException(SR.Get(SRID.CollectionOnlyAcceptsInputBindings));
}
}
}
}
///
/// Insert at given index
///
/// index at which to insert the given item
/// inputBinding to insert
public void Insert(int index, InputBinding inputBinding)
{
if (inputBinding == null)
{
throw new NotSupportedException(SR.Get(SRID.CollectionOnlyAcceptsInputBindings));
}
if (_innerBindingList != null)
{
_innerBindingList.Insert(index, inputBinding);
InheritanceContextHelper.ProvideContextForObject(_owner, inputBinding);
}
}
///
/// Remove
///
///
public void Remove(InputBinding inputBinding)
{
if (_innerBindingList != null && inputBinding != null)
{
if (_innerBindingList.Remove(inputBinding as InputBinding))
{
InheritanceContextHelper.RemoveContextFromObject(_owner, inputBinding);
}
}
}
///
/// RemoveAt
///
/// index at which the item needs to be removed
public void RemoveAt(int index)
{
if (_innerBindingList != null)
{
InputBinding oldInputBinding = null;
if (index >= 0 && index < _innerBindingList.Count)
{
oldInputBinding = _innerBindingList[index];
}
_innerBindingList.RemoveAt(index);
if (oldInputBinding != null)
{
InheritanceContextHelper.RemoveContextFromObject(_owner, oldInputBinding);
}
}
}
///
/// IsFixedSize - if readonly - fixed, else false.
///
public bool IsFixedSize
{
get { return IsReadOnly; }
}
///
/// Count
///
public int Count
{
get
{
return (_innerBindingList != null ? _innerBindingList.Count : 0);
}
}
///
/// ICollection.SyncRoot
///
public object SyncRoot
{
get
{
return this;
}
}
///
/// Clears the Entire InputBindingCollection
///
public void Clear()
{
if (_innerBindingList != null)
{
List oldInputBindings = new List(_innerBindingList);
_innerBindingList.Clear();
_innerBindingList = null;
foreach (InputBinding inputBinding in oldInputBindings)
{
InheritanceContextHelper.RemoveContextFromObject(_owner, inputBinding);
}
}
}
#region Implementation of Enumerable
///
/// IEnumerable.GetEnumerator - For Enumeration purposes
///
///
public IEnumerator GetEnumerator()
{
if (_innerBindingList != null)
return _innerBindingList.GetEnumerator();
System.Collections.Generic.List list = new System.Collections.Generic.List(0);
return list.GetEnumerator();
}
#endregion Implementation of IEnumberable
///
/// IList.IsReadOnly - Tells whether this is readonly Collection.
///
public bool IsReadOnly
{
get { return _isReadOnly; }
}
///
/// Contains
///
/// key
/// true - if found, false - otherwise
public bool Contains(InputBinding key)
{
if (_innerBindingList != null && key != null)
{
return _innerBindingList.Contains(key);
}
return false;
}
///
/// CopyTo - to copy the entire collection into an array
///
/// type-safe InputBinding array
/// start index in the current list to copy
public void CopyTo(InputBinding[] inputBindings, int index)
{
if (_innerBindingList != null)
{
_innerBindingList.CopyTo(inputBindings, index);
}
}
#endregion Public
#region internal
internal InputBinding FindMatch(object targetElement, InputEventArgs inputEventArgs)
{
for (int i = Count - 1; i >= 0; i--)
{
InputBinding inputBinding = this[i];
if ((inputBinding.Command != null) && (inputBinding.Gesture != null) &&
inputBinding.Gesture.Matches(targetElement, inputEventArgs))
{
return inputBinding;
}
}
return null;
}
#endregion internal
//------------------------------------------------------
//
// Protected Methods
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Private Fields
//
//-----------------------------------------------------
#region Private Fields
private List _innerBindingList;
private bool _isReadOnly = false;
private DependencyObject _owner = null;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LogReserveAndAppendState.cs
- AssemblyBuilderData.cs
- SoapBinding.cs
- ThicknessAnimationBase.cs
- HttpPostLocalhostServerProtocol.cs
- IxmlLineInfo.cs
- WorkflowTransactionOptions.cs
- ContainerAction.cs
- XPathScanner.cs
- CommonDialog.cs
- SystemNetworkInterface.cs
- ConfigurationManagerHelper.cs
- CodeTypeReferenceExpression.cs
- AbstractDataSvcMapFileLoader.cs
- RegexMatchCollection.cs
- GridViewRowCollection.cs
- ToolBarPanel.cs
- DbParameterCollectionHelper.cs
- NotFiniteNumberException.cs
- ProfileSettings.cs
- MultiByteCodec.cs
- ThicknessAnimationUsingKeyFrames.cs
- FileFormatException.cs
- ISFTagAndGuidCache.cs
- ValueUnavailableException.cs
- FacetDescription.cs
- XmlReaderDelegator.cs
- TextContainerHelper.cs
- BitmapData.cs
- ExtentKey.cs
- AxHost.cs
- DBConcurrencyException.cs
- DbException.cs
- ObjectQuery_EntitySqlExtensions.cs
- ListViewTableRow.cs
- TargetFrameworkAttribute.cs
- figurelength.cs
- BufferedGraphicsManager.cs
- LinqDataSource.cs
- ObjectItemCollection.cs
- CqlIdentifiers.cs
- DataGridTable.cs
- Metadata.cs
- DecimalAverageAggregationOperator.cs
- DataGridViewAdvancedBorderStyle.cs
- ByteFacetDescriptionElement.cs
- TypeValidationEventArgs.cs
- ResourceIDHelper.cs
- AsymmetricKeyExchangeFormatter.cs
- CodeExpressionStatement.cs
- Utils.cs
- HtmlSelect.cs
- ControlCachePolicy.cs
- ViewValidator.cs
- GlobalizationAssembly.cs
- Lookup.cs
- XmlAtomErrorReader.cs
- IndicCharClassifier.cs
- PublishLicense.cs
- TextDecorationCollection.cs
- ImageBrush.cs
- XmlArrayItemAttribute.cs
- DesignerHost.cs
- GlyphRunDrawing.cs
- PrePrepareMethodAttribute.cs
- FontUnitConverter.cs
- SourceFileInfo.cs
- ItemCollection.cs
- XmlCharCheckingWriter.cs
- InputGestureCollection.cs
- Rectangle.cs
- CurrentChangedEventManager.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- _ListenerRequestStream.cs
- SqlServer2KCompatibilityAnnotation.cs
- ResourceIDHelper.cs
- WpfPayload.cs
- AndCondition.cs
- Psha1DerivedKeyGenerator.cs
- OdbcDataAdapter.cs
- BitmapEffectInput.cs
- FigureParaClient.cs
- SigningCredentials.cs
- WebPartConnectionsEventArgs.cs
- JsonReaderDelegator.cs
- DataGridViewCellMouseEventArgs.cs
- DiscoveryClient.cs
- ResourcePermissionBaseEntry.cs
- SqlCommandSet.cs
- DataGridView.cs
- AsyncPostBackTrigger.cs
- ChannelSettingsElement.cs
- EntityContainer.cs
- DoubleCollectionValueSerializer.cs
- StatusStrip.cs
- ReachSerializationUtils.cs
- AutomationElement.cs
- SmiContextFactory.cs
- HttpStreamMessageEncoderFactory.cs
- SingleTagSectionHandler.cs