Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / MS / Internal / Automation / EventMap.cs / 1 / EventMap.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // Accessibility event map classes are used to determine if, and how many // listeners there are for events and property changes. // // History: // 07/23/2003 : BrendanM Ported to WCP // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Windows; using System.Windows.Automation; using System.Windows.Automation.Peers; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace MS.Internal.Automation { // Manages the event map that is used to determine if there are Automation // clients interested in specific events. internal static class EventMap { private class EventInfo { internal EventInfo() { NumberOfListeners = 1; } internal int NumberOfListeners; } // Never inline, as we don't want to unnecessarily link the automation DLL. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] private static bool IsKnownEvent(int id) { if ( id == AutomationElementIdentifiers.ToolTipOpenedEvent.Id || id == AutomationElementIdentifiers.ToolTipClosedEvent.Id || id == AutomationElementIdentifiers.MenuOpenedEvent.Id || id == AutomationElementIdentifiers.MenuClosedEvent.Id || id == AutomationElementIdentifiers.AutomationFocusChangedEvent.Id || id == InvokePatternIdentifiers.InvokedEvent.Id || id == SelectionItemPatternIdentifiers.ElementAddedToSelectionEvent.Id || id == SelectionItemPatternIdentifiers.ElementRemovedFromSelectionEvent.Id || id == SelectionItemPatternIdentifiers.ElementSelectedEvent.Id || id == SelectionPatternIdentifiers.InvalidatedEvent.Id || id == TextPatternIdentifiers.TextSelectionChangedEvent.Id || id == TextPatternIdentifiers.TextChangedEvent.Id || id == AutomationElementIdentifiers.AsyncContentLoadedEvent.Id || id == AutomationElementIdentifiers.AutomationPropertyChangedEvent.Id || id == AutomationElementIdentifiers.StructureChangedEvent.Id ) { return true; } return false; } // Never inline, as we don't want to unnecessarily link the automation DLL. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] private static AutomationEvent GetRegisteredEventObjectHelper(AutomationEvents eventId) { AutomationEvent eventObject = null; switch(eventId) { case AutomationEvents.ToolTipOpened: eventObject = AutomationElementIdentifiers.ToolTipOpenedEvent; break; case AutomationEvents.ToolTipClosed: eventObject = AutomationElementIdentifiers.ToolTipClosedEvent; break; case AutomationEvents.MenuOpened: eventObject = AutomationElementIdentifiers.MenuOpenedEvent; break; case AutomationEvents.MenuClosed: eventObject = AutomationElementIdentifiers.MenuClosedEvent; break; case AutomationEvents.AutomationFocusChanged: eventObject = AutomationElementIdentifiers.AutomationFocusChangedEvent; break; case AutomationEvents.InvokePatternOnInvoked: eventObject = InvokePatternIdentifiers.InvokedEvent; break; case AutomationEvents.SelectionItemPatternOnElementAddedToSelection: eventObject = SelectionItemPatternIdentifiers.ElementAddedToSelectionEvent; break; case AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection: eventObject = SelectionItemPatternIdentifiers.ElementRemovedFromSelectionEvent; break; case AutomationEvents.SelectionItemPatternOnElementSelected: eventObject = SelectionItemPatternIdentifiers.ElementSelectedEvent; break; case AutomationEvents.SelectionPatternOnInvalidated: eventObject = SelectionPatternIdentifiers.InvalidatedEvent; break; case AutomationEvents.TextPatternOnTextSelectionChanged: eventObject = TextPatternIdentifiers.TextSelectionChangedEvent; break; case AutomationEvents.TextPatternOnTextChanged: eventObject = TextPatternIdentifiers.TextChangedEvent; break; case AutomationEvents.AsyncContentLoaded: eventObject = AutomationElementIdentifiers.AsyncContentLoadedEvent; break; case AutomationEvents.PropertyChanged: eventObject = AutomationElementIdentifiers.AutomationPropertyChangedEvent; break; case AutomationEvents.StructureChanged: eventObject = AutomationElementIdentifiers.StructureChangedEvent; break; default: throw new ArgumentException(SR.Get(SRID.Automation_InvalidEventId), "eventId"); } if (!_eventsTable.ContainsKey(eventObject.Id)) { eventObject = null; } return (eventObject); } internal static void AddEvent(int idEvent) { if (_eventsTable == null) _eventsTable = new Hashtable(20, .1f); if (_eventsTable.ContainsKey(idEvent)) { EventInfo info = (EventInfo)_eventsTable[idEvent]; info.NumberOfListeners++; } // to avoid unbound memory allocations, // register only events that we recognize else if (IsKnownEvent(idEvent)) { _eventsTable[idEvent] = new EventInfo(); } } internal static void RemoveEvent(int idEvent) { if (_eventsTable != null) { // Decrement the count of listeners for this event if (_eventsTable.ContainsKey(idEvent)) { EventInfo info = (EventInfo)_eventsTable[idEvent]; // Update or remove the entry based on remaining listeners info.NumberOfListeners--; if (info.NumberOfListeners <= 0) { _eventsTable.Remove(idEvent); // If no more entries exist kill the table if (_eventsTable.Count == 0) { _eventsTable = null; } } } } } // Unlike GetRegisteredEvent below, // HasRegisteredEvent does NOT cause automation DLLs loading internal static bool HasRegisteredEvent(AutomationEvents eventId) { if (_eventsTable != null && _eventsTable.Count != 0) { return (GetRegisteredEventObjectHelper(eventId) != null); } return (false); } internal static AutomationEvent GetRegisteredEvent(AutomationEvents eventId) { if (_eventsTable != null && _eventsTable.Count != 0) { return (GetRegisteredEventObjectHelper(eventId)); } return (null); } private static Hashtable _eventsTable; // key=event id, data=listener count } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // Accessibility event map classes are used to determine if, and how many // listeners there are for events and property changes. // // History: // 07/23/2003 : BrendanM Ported to WCP // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Windows; using System.Windows.Automation; using System.Windows.Automation.Peers; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace MS.Internal.Automation { // Manages the event map that is used to determine if there are Automation // clients interested in specific events. internal static class EventMap { private class EventInfo { internal EventInfo() { NumberOfListeners = 1; } internal int NumberOfListeners; } // Never inline, as we don't want to unnecessarily link the automation DLL. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] private static bool IsKnownEvent(int id) { if ( id == AutomationElementIdentifiers.ToolTipOpenedEvent.Id || id == AutomationElementIdentifiers.ToolTipClosedEvent.Id || id == AutomationElementIdentifiers.MenuOpenedEvent.Id || id == AutomationElementIdentifiers.MenuClosedEvent.Id || id == AutomationElementIdentifiers.AutomationFocusChangedEvent.Id || id == InvokePatternIdentifiers.InvokedEvent.Id || id == SelectionItemPatternIdentifiers.ElementAddedToSelectionEvent.Id || id == SelectionItemPatternIdentifiers.ElementRemovedFromSelectionEvent.Id || id == SelectionItemPatternIdentifiers.ElementSelectedEvent.Id || id == SelectionPatternIdentifiers.InvalidatedEvent.Id || id == TextPatternIdentifiers.TextSelectionChangedEvent.Id || id == TextPatternIdentifiers.TextChangedEvent.Id || id == AutomationElementIdentifiers.AsyncContentLoadedEvent.Id || id == AutomationElementIdentifiers.AutomationPropertyChangedEvent.Id || id == AutomationElementIdentifiers.StructureChangedEvent.Id ) { return true; } return false; } // Never inline, as we don't want to unnecessarily link the automation DLL. [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] private static AutomationEvent GetRegisteredEventObjectHelper(AutomationEvents eventId) { AutomationEvent eventObject = null; switch(eventId) { case AutomationEvents.ToolTipOpened: eventObject = AutomationElementIdentifiers.ToolTipOpenedEvent; break; case AutomationEvents.ToolTipClosed: eventObject = AutomationElementIdentifiers.ToolTipClosedEvent; break; case AutomationEvents.MenuOpened: eventObject = AutomationElementIdentifiers.MenuOpenedEvent; break; case AutomationEvents.MenuClosed: eventObject = AutomationElementIdentifiers.MenuClosedEvent; break; case AutomationEvents.AutomationFocusChanged: eventObject = AutomationElementIdentifiers.AutomationFocusChangedEvent; break; case AutomationEvents.InvokePatternOnInvoked: eventObject = InvokePatternIdentifiers.InvokedEvent; break; case AutomationEvents.SelectionItemPatternOnElementAddedToSelection: eventObject = SelectionItemPatternIdentifiers.ElementAddedToSelectionEvent; break; case AutomationEvents.SelectionItemPatternOnElementRemovedFromSelection: eventObject = SelectionItemPatternIdentifiers.ElementRemovedFromSelectionEvent; break; case AutomationEvents.SelectionItemPatternOnElementSelected: eventObject = SelectionItemPatternIdentifiers.ElementSelectedEvent; break; case AutomationEvents.SelectionPatternOnInvalidated: eventObject = SelectionPatternIdentifiers.InvalidatedEvent; break; case AutomationEvents.TextPatternOnTextSelectionChanged: eventObject = TextPatternIdentifiers.TextSelectionChangedEvent; break; case AutomationEvents.TextPatternOnTextChanged: eventObject = TextPatternIdentifiers.TextChangedEvent; break; case AutomationEvents.AsyncContentLoaded: eventObject = AutomationElementIdentifiers.AsyncContentLoadedEvent; break; case AutomationEvents.PropertyChanged: eventObject = AutomationElementIdentifiers.AutomationPropertyChangedEvent; break; case AutomationEvents.StructureChanged: eventObject = AutomationElementIdentifiers.StructureChangedEvent; break; default: throw new ArgumentException(SR.Get(SRID.Automation_InvalidEventId), "eventId"); } if (!_eventsTable.ContainsKey(eventObject.Id)) { eventObject = null; } return (eventObject); } internal static void AddEvent(int idEvent) { if (_eventsTable == null) _eventsTable = new Hashtable(20, .1f); if (_eventsTable.ContainsKey(idEvent)) { EventInfo info = (EventInfo)_eventsTable[idEvent]; info.NumberOfListeners++; } // to avoid unbound memory allocations, // register only events that we recognize else if (IsKnownEvent(idEvent)) { _eventsTable[idEvent] = new EventInfo(); } } internal static void RemoveEvent(int idEvent) { if (_eventsTable != null) { // Decrement the count of listeners for this event if (_eventsTable.ContainsKey(idEvent)) { EventInfo info = (EventInfo)_eventsTable[idEvent]; // Update or remove the entry based on remaining listeners info.NumberOfListeners--; if (info.NumberOfListeners <= 0) { _eventsTable.Remove(idEvent); // If no more entries exist kill the table if (_eventsTable.Count == 0) { _eventsTable = null; } } } } } // Unlike GetRegisteredEvent below, // HasRegisteredEvent does NOT cause automation DLLs loading internal static bool HasRegisteredEvent(AutomationEvents eventId) { if (_eventsTable != null && _eventsTable.Count != 0) { return (GetRegisteredEventObjectHelper(eventId) != null); } return (false); } internal static AutomationEvent GetRegisteredEvent(AutomationEvents eventId) { if (_eventsTable != null && _eventsTable.Count != 0) { return (GetRegisteredEventObjectHelper(eventId)); } return (null); } private static Hashtable _eventsTable; // key=event id, data=listener count } } // 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
- ReferenceConverter.cs
- autovalidator.cs
- DataServices.cs
- WmlPanelAdapter.cs
- Grammar.cs
- ClientRuntimeConfig.cs
- _DigestClient.cs
- ActionMessageFilter.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- _Events.cs
- DefaultIfEmptyQueryOperator.cs
- DesignTimeVisibleAttribute.cs
- ChtmlTextWriter.cs
- XMLDiffLoader.cs
- Base64Encoder.cs
- WorkflowOperationBehavior.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- Script.cs
- PrintControllerWithStatusDialog.cs
- XPathDescendantIterator.cs
- RowType.cs
- SignatureToken.cs
- CaseInsensitiveOrdinalStringComparer.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- RadioButtonRenderer.cs
- InvokeFunc.cs
- XmlCharType.cs
- CheckBoxStandardAdapter.cs
- Vector3DAnimationBase.cs
- AstTree.cs
- HttpRawResponse.cs
- ProfileBuildProvider.cs
- Int64AnimationBase.cs
- ActiveXContainer.cs
- ResourceSet.cs
- XmlChildEnumerator.cs
- MdbDataFileEditor.cs
- DataGridDetailsPresenter.cs
- StaticDataManager.cs
- PaperSize.cs
- NavigatingCancelEventArgs.cs
- ViewCellSlot.cs
- DBCSCodePageEncoding.cs
- UshortList2.cs
- MediaPlayerState.cs
- ValidationSummary.cs
- ArgumentOutOfRangeException.cs
- XmlSchemaAnnotation.cs
- LookupBindingPropertiesAttribute.cs
- SelectionWordBreaker.cs
- ProfileManager.cs
- RunWorkerCompletedEventArgs.cs
- WebHttpSecurityModeHelper.cs
- LinkButton.cs
- _WinHttpWebProxyDataBuilder.cs
- EventLogStatus.cs
- ListBoxAutomationPeer.cs
- CodeDOMProvider.cs
- Grid.cs
- Socket.cs
- ImageAutomationPeer.cs
- FixedSOMLineRanges.cs
- MatchAttribute.cs
- LowerCaseStringConverter.cs
- TrackBar.cs
- DataRecordObjectView.cs
- GridItem.cs
- CommandEventArgs.cs
- MessageLogTraceRecord.cs
- ObjectPersistData.cs
- ToolStripContainerDesigner.cs
- Registration.cs
- RNGCryptoServiceProvider.cs
- ToolTip.cs
- OperatingSystem.cs
- EntitySqlQueryCacheEntry.cs
- SmtpFailedRecipientException.cs
- InvalidCastException.cs
- ProgressBarRenderer.cs
- NotSupportedException.cs
- ZipIOLocalFileDataDescriptor.cs
- GridEntryCollection.cs
- PointAnimation.cs
- DesignTable.cs
- ConfigXmlWhitespace.cs
- OneOfElement.cs
- ApplyImportsAction.cs
- BitmapMetadataEnumerator.cs
- DocumentAutomationPeer.cs
- ColumnReorderedEventArgs.cs
- WindowsSlider.cs
- ZipIOFileItemStream.cs
- SchemaMerger.cs
- WebSysDescriptionAttribute.cs
- XmlAttribute.cs
- UserControl.cs
- Configuration.cs
- StringFormat.cs
- EdmType.cs
- UpdateCommand.cs