//------------------------------------------------------------------------------
// <copyright file="COM2ExtendedBrowsingHandler.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------

namespace System.Windows.Forms.ComponentModel.Com2Interop {
    using System.ComponentModel;

    using System.Diagnostics;
    using System;
    
    /// <include file='doc\COM2ExtendedBrowsingHandler.uex' path='docs/doc[@for="Com2ExtendedBrowsingHandler"]/*' />
    /// <devdoc>
    /// This is the base class for handlers for COM2 extended browsing interface
    /// such as IPerPropertyBrowsing, etc.
    ///
    /// These handlers should be stateless.  That is, they should keep no refs to object
    /// and should only work on a give object and dispid.  That way all objects that
    /// support a give interface can share a handler.
    ///
    /// See COM2Properties for the array of handler classes to interface classes
    /// where handlers should be registered.
    /// </devdoc>
    internal abstract class Com2ExtendedBrowsingHandler{
        
         /// <include file='doc\COM2ExtendedBrowsingHandler.uex' path='docs/doc[@for="Com2ExtendedBrowsingHandler.Interface"]/*' />
         /// <devdoc>
         /// The interface that this handler managers
         /// such as IPerPropertyBrowsing, IProvidePropertyBuilder, etc.
         /// </devdoc>
         public abstract Type Interface{
            get;
         }    
         
         /// <include file='doc\COM2ExtendedBrowsingHandler.uex' path='docs/doc[@for="Com2ExtendedBrowsingHandler.SetupPropertyHandlers"]/*' />
         /// <devdoc>
         /// Called to setup the property handlers on a given property
         /// In this method, the handler will add listeners to the events that
         /// the COM2PropertyDescriptor surfaces that it cares about.
         /// </devdoc>
         public virtual void SetupPropertyHandlers(Com2PropertyDescriptor propDesc){
            SetupPropertyHandlers(new Com2PropertyDescriptor[]{propDesc});
         }
         
         /// <include file='doc\COM2ExtendedBrowsingHandler.uex' path='docs/doc[@for="Com2ExtendedBrowsingHandler.SetupPropertyHandlers1"]/*' />
         /// <devdoc>
         /// Called to setup the property handlers on a given properties
         /// In this method, the handler will add listeners to the events that
         /// the Com2PropertyDescriptor surfaces that it cares about.
         /// </devdoc>
         public abstract void SetupPropertyHandlers(Com2PropertyDescriptor[] propDesc);
    }
}
