//
// 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";
import "Windows.Devices.Enumeration.idl";
import "Windows.Storage.Streams.idl";
import "Windows.UI.Popups.idl";

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Enumeration
        {
            runtimeclass DeviceInformation;

            runtimeclass DevicePickerAppearance;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IClosable;

        typedef struct Rect Rect;

        apicontract UniversalApiContract;

        runtimeclass Uri;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStreamWithContentType;
        }
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Popups
        {
            typedef enum Placement Placement;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Casting
        {
            typedef enum CastingConnectionErrorStatus CastingConnectionErrorStatus;

            typedef enum CastingConnectionState CastingConnectionState;

            typedef enum CastingPlaybackTypes CastingPlaybackTypes;

            interface ICastingConnection;

            interface ICastingConnectionErrorOccurredEventArgs;

            interface ICastingDevice;

            interface ICastingDevicePicker;

            interface ICastingDevicePickerFilter;

            interface ICastingDeviceSelectedEventArgs;

            interface ICastingDeviceStatics;

            interface ICastingSource;

            runtimeclass CastingConnection;

            runtimeclass CastingConnectionErrorOccurredEventArgs;

            runtimeclass CastingDevice;

            runtimeclass CastingDevicePicker;

            runtimeclass CastingDevicePickerFilter;

            runtimeclass CastingDeviceSelectedEventArgs;

            runtimeclass CastingSource;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace Casting
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Media.Casting.CastingSource*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Media.Casting.CastingSource*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Media.Casting.CastingSource*>;

                interface Windows.Foundation.Collections.IVector<Windows.Media.Casting.CastingSource*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingConnectionErrorStatus>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingDevice*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingPlaybackTypes>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingConnection*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingConnection*, Windows.Media.Casting.CastingConnectionErrorOccurredEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingDevicePicker*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingDevicePicker*, Windows.Media.Casting.CastingDeviceSelectedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace Casting
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum CastingConnectionErrorStatus
            {
                Succeeded               = 0,
                DeviceDidNotRespond     = 1,
                DeviceError             = 2,
                DeviceLocked            = 3,
                ProtectedPlaybackFailed = 4,
                InvalidCastingSource    = 5,
                Unknown                 = 6
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum CastingConnectionState
            {
                Disconnected  = 0,
                Connected     = 1,
                Rendering     = 2,
                Disconnecting = 3,
                Connecting    = 4
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [flags]
            enum CastingPlaybackTypes
            {
                None    = 0x0,
                Audio   = 0x1,
                Video   = 0x2,
                Picture = 0x4
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingConnection)]
            [uuid(CD951653-C2F1-4498-8B78-5FB4CD3640DD)]
            interface ICastingConnection : IInspectable
                requires
                    Windows.Foundation.IClosable
            {
                [propget] HRESULT State([out] [retval] Windows.Media.Casting.CastingConnectionState* value);
                [propget] HRESULT Device([out] [retval] Windows.Media.Casting.CastingDevice** value);
                [propget] HRESULT Source([out] [retval] Windows.Media.Casting.CastingSource** value);
                [propput] HRESULT Source([in] Windows.Media.Casting.CastingSource* value);
                [eventadd] HRESULT StateChanged([in] Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingConnection*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT StateChanged([in] EventRegistrationToken token);
                [eventadd] HRESULT ErrorOccurred([in] Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingConnection*, Windows.Media.Casting.CastingConnectionErrorOccurredEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT ErrorOccurred([in] EventRegistrationToken token);
                HRESULT RequestStartCastingAsync([in] Windows.Media.Casting.CastingSource* value, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingConnectionErrorStatus>** operation);
                HRESULT DisconnectAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingConnectionErrorStatus>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingConnectionErrorOccurredEventArgs)]
            [uuid(A7FB3C69-8719-4F00-81FB-961863C79A32)]
            interface ICastingConnectionErrorOccurredEventArgs : IInspectable
            {
                [propget] HRESULT ErrorStatus([out] [retval] Windows.Media.Casting.CastingConnectionErrorStatus* value);
                [propget] HRESULT Message([out] [retval] HSTRING* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingDevice)]
            [uuid(DE721C83-4A43-4AD1-A6D2-2492A796C3F2)]
            interface ICastingDevice : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                [propget] HRESULT Icon([out] [retval] Windows.Storage.Streams.IRandomAccessStreamWithContentType** value);
                HRESULT GetSupportedCastingPlaybackTypesAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingPlaybackTypes>** operation);
                HRESULT CreateCastingConnection([out] [retval] Windows.Media.Casting.CastingConnection** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingDevicePicker)]
            [uuid(DCD39924-0591-49BE-AACB-4B82EE756A95)]
            interface ICastingDevicePicker : IInspectable
            {
                [propget] HRESULT Filter([out] [retval] Windows.Media.Casting.CastingDevicePickerFilter** value);
                [propget] HRESULT Appearance([out] [retval] Windows.Devices.Enumeration.DevicePickerAppearance** value);
                [eventadd] HRESULT CastingDeviceSelected([in] Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingDevicePicker*, Windows.Media.Casting.CastingDeviceSelectedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT CastingDeviceSelected([in] EventRegistrationToken token);
                [eventadd] HRESULT CastingDevicePickerDismissed([in] Windows.Foundation.TypedEventHandler<Windows.Media.Casting.CastingDevicePicker*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT CastingDevicePickerDismissed([in] EventRegistrationToken token);
                [overload("Show")] HRESULT Show([in] Windows.Foundation.Rect selection);
                [overload("Show")] HRESULT ShowWithPlacement([in] Windows.Foundation.Rect selection, [in] Windows.UI.Popups.Placement preferredPlacement);
                HRESULT Hide();
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingDevicePickerFilter)]
            [uuid(BE8C619C-B563-4354-AE33-9FDAAD8C6291)]
            interface ICastingDevicePickerFilter : IInspectable
            {
                [propget] HRESULT SupportsAudio([out] [retval] boolean* value);
                [propput] HRESULT SupportsAudio([in] boolean value);
                [propget] HRESULT SupportsVideo([out] [retval] boolean* value);
                [propput] HRESULT SupportsVideo([in] boolean value);
                [propget] HRESULT SupportsPictures([out] [retval] boolean* value);
                [propput] HRESULT SupportsPictures([in] boolean value);
                [propget] HRESULT SupportedCastingSources([out] [retval] Windows.Foundation.Collections.IVector<Windows.Media.Casting.CastingSource*>** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingDeviceSelectedEventArgs)]
            [uuid(DC439E86-DD57-4D0D-9400-AF45E4FB3663)]
            interface ICastingDeviceSelectedEventArgs : IInspectable
            {
                [propget] HRESULT SelectedCastingDevice([out] [retval] Windows.Media.Casting.CastingDevice** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingDevice)]
            [uuid(E7D958D7-4D13-4237-A365-4C4F6A4CFD2F)]
            interface ICastingDeviceStatics : IInspectable
            {
                HRESULT GetDeviceSelector([in] Windows.Media.Casting.CastingPlaybackTypes type, [out] [retval] HSTRING* value);
                HRESULT GetDeviceSelectorFromCastingSourceAsync([in] Windows.Media.Casting.CastingSource* castingSource, [out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** operation);
                HRESULT FromIdAsync([in] HSTRING value, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.Casting.CastingDevice*>** operation);
                HRESULT DeviceInfoSupportsCastingAsync([in] Windows.Devices.Enumeration.DeviceInformation* device, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.Media.Casting.CastingSource)]
            [uuid(F429EA72-3467-47E6-A027-522923E9D727)]
            interface ICastingSource : IInspectable
            {
                [propget] HRESULT PreferredSourceUri([out] [retval] Windows.Foundation.Uri** value);
                [propput] HRESULT PreferredSourceUri([in] Windows.Foundation.Uri* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass CastingConnection
            {
                [default] interface Windows.Media.Casting.ICastingConnection;
                interface Windows.Foundation.IClosable;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass CastingConnectionErrorOccurredEventArgs
            {
                [default] interface Windows.Media.Casting.ICastingConnectionErrorOccurredEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.Media.Casting.ICastingDeviceStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            [threading(both)]
            runtimeclass CastingDevice
            {
                [default] interface Windows.Media.Casting.ICastingDevice;
            }

            [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass CastingDevicePicker
            {
                [default] interface Windows.Media.Casting.ICastingDevicePicker;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass CastingDevicePickerFilter
            {
                [default] interface Windows.Media.Casting.ICastingDevicePickerFilter;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass CastingDeviceSelectedEventArgs
            {
                [default] interface Windows.Media.Casting.ICastingDeviceSelectedEventArgs;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass CastingSource
            {
                [default] interface Windows.Media.Casting.ICastingSource;
            }
        }
    }
}
