//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Xaml
        {
            namespace Interop
            {
                typedef enum NotifyCollectionChangedAction NotifyCollectionChangedAction;

                typedef enum TypeKind TypeKind;

                typedef struct TypeName TypeName;

                delegate BindableVectorChangedEventHandler;

                delegate NotifyCollectionChangedEventHandler;

                interface IBindableIterable;

                interface IBindableIterator;

                interface IBindableObservableVector;

                interface IBindableVector;

                interface IBindableVectorView;

                interface INotifyCollectionChanged;

                interface INotifyCollectionChangedEventArgs;

                interface INotifyCollectionChangedEventArgsFactory;

                runtimeclass NotifyCollectionChangedEventArgs;
            }
        }
    }
}

// Generic instantiations

// Type definition
namespace Windows
{
    namespace UI
    {
        namespace Xaml
        {
            namespace Interop
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum NotifyCollectionChangedAction
                {
                    Add     = 0,
                    Remove  = 1,
                    Replace = 2,
                    Move    = 3,
                    Reset   = 4
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum TypeKind
                {
                    Primitive = 0,
                    Metadata  = 1,
                    Custom    = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                struct TypeName
                {
                    HSTRING Name;
                    Windows.UI.Xaml.Interop.TypeKind Kind;
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(624CD4E1-D007-43B1-9C03-AF4D3E6258C4)]
                delegate
                    HRESULT BindableVectorChangedEventHandler([in] Windows.UI.Xaml.Interop.IBindableObservableVector* vector, [in] IInspectable* e);

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(CA10B37C-F382-4591-8557-5E24965279B0)]
                delegate
                    HRESULT NotifyCollectionChangedEventHandler([in] IInspectable* sender, [in] Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs* e);

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(036D2C08-DF29-41AF-8AA2-D774BE62BA6F)]
                interface IBindableIterable : IInspectable
                {
                    HRESULT First([out] [retval] Windows.UI.Xaml.Interop.IBindableIterator** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(6A1D6C07-076D-49F2-8314-F52C9C9A8331)]
                interface IBindableIterator : IInspectable
                {
                    [propget] HRESULT Current([out] [retval] IInspectable** value);
                    [propget] HRESULT HasCurrent([out] [retval] boolean* value);
                    HRESULT MoveNext([out] [retval] boolean* result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(FE1EB536-7E7F-4F90-AC9A-474984AAE512)]
                interface IBindableObservableVector : IInspectable
                    requires
                        Windows.UI.Xaml.Interop.IBindableVector,
                        Windows.UI.Xaml.Interop.IBindableIterable
                {
                    [eventadd] HRESULT VectorChanged([in] Windows.UI.Xaml.Interop.BindableVectorChangedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT VectorChanged([in] EventRegistrationToken token);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(393DE7DE-6FD0-4C0D-BB71-47244A113E93)]
                interface IBindableVector : IInspectable
                    requires
                        Windows.UI.Xaml.Interop.IBindableIterable
                {
                    HRESULT GetAt([in] UINT32 index, [out] [retval] IInspectable** result);
                    [propget] HRESULT Size([out] [retval] UINT32* value);
                    HRESULT GetView([out] [retval] Windows.UI.Xaml.Interop.IBindableVectorView** result);
                    HRESULT IndexOf([in] IInspectable* value, [out] UINT32* index, [out] [retval] boolean* returnValue);
                    HRESULT SetAt([in] UINT32 index, [in] IInspectable* value);
                    HRESULT InsertAt([in] UINT32 index, [in] IInspectable* value);
                    HRESULT RemoveAt([in] UINT32 index);
                    HRESULT Append([in] IInspectable* value);
                    HRESULT RemoveAtEnd();
                    HRESULT Clear();
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(346DD6E7-976E-4BC3-815D-ECE243BC0F33)]
                interface IBindableVectorView : IInspectable
                    requires
                        Windows.UI.Xaml.Interop.IBindableIterable
                {
                    HRESULT GetAt([in] UINT32 index, [out] [retval] IInspectable** result);
                    [propget] HRESULT Size([out] [retval] UINT32* value);
                    HRESULT IndexOf([in] IInspectable* value, [out] UINT32* index, [out] [retval] boolean* returnValue);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [uuid(28B167D5-1A31-465B-9B25-D5C3AE686C40)]
                interface INotifyCollectionChanged : IInspectable
                {
                    [eventadd] HRESULT CollectionChanged([in] Windows.UI.Xaml.Interop.NotifyCollectionChangedEventHandler* handler, [out] [retval] EventRegistrationToken* token);
                    [eventremove] HRESULT CollectionChanged([in] EventRegistrationToken token);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs)]
                [uuid(4CF68D33-E3F2-4964-B85E-945B4F7E2F21)]
                interface INotifyCollectionChangedEventArgs : IInspectable
                {
                    [propget] HRESULT Action([out] [retval] Windows.UI.Xaml.Interop.NotifyCollectionChangedAction* value);
                    [propget] HRESULT NewItems([out] [retval] Windows.UI.Xaml.Interop.IBindableVector** value);
                    [propget] HRESULT OldItems([out] [retval] Windows.UI.Xaml.Interop.IBindableVector** value);
                    [propget] HRESULT NewStartingIndex([out] [retval] INT32* value);
                    [propget] HRESULT OldStartingIndex([out] [retval] INT32* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs)]
                [uuid(B30C3E3A-DF8D-44A5-9A38-7AC0D08CE63D)]
                interface INotifyCollectionChangedEventArgsFactory : IInspectable
                {
                    HRESULT CreateInstanceWithAllParameters([in] Windows.UI.Xaml.Interop.NotifyCollectionChangedAction action, [in] Windows.UI.Xaml.Interop.IBindableVector* newItems, [in] Windows.UI.Xaml.Interop.IBindableVector* oldItems, [in] INT32 newIndex, [in] INT32 oldIndex, [in] IInspectable* baseInterface, [out] IInspectable** innerInterface, [out] [retval] Windows.UI.Xaml.Interop.NotifyCollectionChangedEventArgs** value);
                }

                [composable(Windows.UI.Xaml.Interop.INotifyCollectionChangedEventArgsFactory, public, Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass NotifyCollectionChangedEventArgs
                {
                    [default] interface Windows.UI.Xaml.Interop.INotifyCollectionChangedEventArgs;
                }
            }
        }
    }
}
