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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Devices.Enumeration.idl";
import "Windows.Storage.Streams.idl";
import "Windows.UI.Popups.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Edevices2Eenumeration_h__)")
cpp_quote("#include <Windows.Devices.Enumeration.h>")
cpp_quote("#endif // !defined(__windows2Edevices2Eenumeration_h__)")
cpp_quote("#if !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#include <Windows.Storage.Streams.h>")
cpp_quote("#endif // !defined(__windows2Estorage2Estreams_h__)")
cpp_quote("#if !defined(__windows2Eui2Epopups_h__)")
cpp_quote("#include <Windows.UI.Popups.h>")
cpp_quote("#endif // !defined(__windows2Eui2Epopups_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

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

            runtimeclass DevicePickerAppearance;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        typedef struct Rect Rect;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStreamReference;
        }
    }
}
namespace Windows
{
    namespace UI
    {
        namespace Popups
        {
            typedef enum Placement Placement;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace DialProtocol
        {
            typedef enum DialAppState DialAppState;

            typedef enum DialAppLaunchResult DialAppLaunchResult;

            typedef enum DialAppStopResult DialAppStopResult;

            typedef enum DialDeviceDisplayStatus DialDeviceDisplayStatus;

            interface IDialAppStateDetails;

            interface IDialApp;

            interface IDialDevice;

            interface IDialDevice2;

            interface IDialDeviceStatics;

            interface IDialDeviceSelectedEventArgs;

            interface IDialDisconnectButtonClickedEventArgs;

            interface IDialDevicePickerFilter;

            interface IDialDevicePicker;

            runtimeclass DialAppStateDetails;

            runtimeclass DialApp;

            runtimeclass DialDevice;

            runtimeclass DialDeviceSelectedEventArgs;

            runtimeclass DialDisconnectButtonClickedEventArgs;

            runtimeclass DialDevicePickerFilter;

            runtimeclass DialDevicePicker;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace DialProtocol
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppLaunchResult>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStateDetails*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStopResult>;

                interface Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDeviceSelectedEventArgs*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDisconnectButtonClickedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace DialProtocol
        {
            [version(0x0A000000)]
            enum DialAppState
            {
                Unknown        = 0,
                Stopped        = 1,
                Running        = 2,
                NetworkFailure = 3
            };

            [version(0x0A000000)]
            enum DialAppLaunchResult
            {
                Launched       = 0,
                FailedToLaunch = 1,
                NotFound       = 2,
                NetworkFailure = 3
            };

            [version(0x0A000000)]
            enum DialAppStopResult
            {
                Stopped               = 0,
                StopFailed            = 1,
                OperationNotSupported = 2,
                NetworkFailure        = 3
            };

            [version(0x0A000000)]
            enum DialDeviceDisplayStatus
            {
                None          = 0,
                Connecting    = 1,
                Connected     = 2,
                Disconnecting = 3,
                Disconnected  = 4,
                Error         = 5
            };

            [exclusiveto(Windows.Media.DialProtocol.DialAppStateDetails)]
            [uuid(DDC4A4A1-F5DE-400D-BEA4-8C8466BB2961)]
            [version(0x0A000000)]
            interface IDialAppStateDetails : IInspectable
            {
                [propget] HRESULT State([out] [retval] Windows.Media.DialProtocol.DialAppState* value);
                [propget] HRESULT FullXml([out] [retval] HSTRING* value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialApp)]
            [uuid(555FFBD3-45B7-49F3-BBD7-302DB6084646)]
            [version(0x0A000000)]
            interface IDialApp : IInspectable
            {
                [propget] HRESULT AppName([out] [retval] HSTRING* value);
                HRESULT RequestLaunchAsync([in] HSTRING appArgument, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppLaunchResult>** value);
                HRESULT StopAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStopResult>** value);
                HRESULT GetAppStateAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialAppStateDetails*>** value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDevice)]
            [uuid(FFF0EDAF-759F-41D2-A20A-7F29CE0B3784)]
            [version(0x0A000000)]
            interface IDialDevice : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                HRESULT GetDialApp([in] HSTRING appName, [out] [retval] Windows.Media.DialProtocol.DialApp** value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDevice)]
            [uuid(BAB7F3D5-5BFB-4EBA-8B32-B57C5C5EE5C9)]
            [version(0x0A000000)]
            interface IDialDevice2 : IInspectable
            {
                [propget] HRESULT FriendlyName([out] [retval] HSTRING* value);
                [propget] HRESULT Thumbnail([out] [retval] Windows.Storage.Streams.IRandomAccessStreamReference** value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDevice)]
            [uuid(AA69CC95-01F8-4758-8461-2BBD1CDC3CF3)]
            [version(0x0A000000)]
            interface IDialDeviceStatics : IInspectable
            {
                HRESULT GetDeviceSelector([in] HSTRING appName, [out] [retval] HSTRING* selector);
                HRESULT FromIdAsync([in] HSTRING value, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>** operation);
                HRESULT DeviceInfoSupportsDialAsync([in] Windows.Devices.Enumeration.DeviceInformation* device, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDeviceSelectedEventArgs)]
            [uuid(480B92AD-AC76-47EB-9C06-A19304DA0247)]
            [version(0x0A000000)]
            interface IDialDeviceSelectedEventArgs : IInspectable
            {
                [propget] HRESULT SelectedDialDevice([out] [retval] Windows.Media.DialProtocol.DialDevice** value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDisconnectButtonClickedEventArgs)]
            [uuid(52765152-9C81-4E55-ADC2-0EBE99CDE3B6)]
            [version(0x0A000000)]
            interface IDialDisconnectButtonClickedEventArgs : IInspectable
            {
                [propget] HRESULT Device([out] [retval] Windows.Media.DialProtocol.DialDevice** value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDevicePickerFilter)]
            [uuid(C17C93BA-86C0-485D-B8D6-0F9A8F641590)]
            [version(0x0A000000)]
            interface IDialDevicePickerFilter : IInspectable
            {
                [propget] HRESULT SupportedAppNames([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
            }

            [exclusiveto(Windows.Media.DialProtocol.DialDevicePicker)]
            [uuid(BA7E520A-FF59-4F4B-BDAC-D89F495AD6E1)]
            [version(0x0A000000)]
            interface IDialDevicePicker : IInspectable
            {
                [propget] HRESULT Filter([out] [retval] Windows.Media.DialProtocol.DialDevicePickerFilter** value);
                [propget] HRESULT Appearance([out] [retval] Windows.Devices.Enumeration.DevicePickerAppearance** value);
                [eventadd] HRESULT DialDeviceSelected([in] Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDeviceSelectedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DialDeviceSelected([in] EventRegistrationToken token);
                [eventadd] HRESULT DisconnectButtonClicked([in] Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, Windows.Media.DialProtocol.DialDisconnectButtonClickedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DisconnectButtonClicked([in] EventRegistrationToken token);
                [eventadd] HRESULT DialDevicePickerDismissed([in] Windows.Foundation.TypedEventHandler<Windows.Media.DialProtocol.DialDevicePicker*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT DialDevicePickerDismissed([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);
                [overload("PickSingleDialDeviceAsync")] HRESULT PickSingleDialDeviceAsync([in] Windows.Foundation.Rect selection, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>** operation);
                [overload("PickSingleDialDeviceAsync")] HRESULT PickSingleDialDeviceAsyncWithPlacement([in] Windows.Foundation.Rect selection, [in] Windows.UI.Popups.Placement preferredPlacement, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Media.DialProtocol.DialDevice*>** operation);
                HRESULT Hide();
                HRESULT SetDisplayStatus([in] Windows.Media.DialProtocol.DialDevice* device, [in] Windows.Media.DialProtocol.DialDeviceDisplayStatus status);
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialAppStateDetails
            {
                [default] interface Windows.Media.DialProtocol.IDialAppStateDetails;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialApp
            {
                [default] interface Windows.Media.DialProtocol.IDialApp;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Media.DialProtocol.IDialDeviceStatics, 0x0A000000)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialDevice
            {
                [default] interface Windows.Media.DialProtocol.IDialDevice;
                [version(0x0A000000)] interface Windows.Media.DialProtocol.IDialDevice2;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialDeviceSelectedEventArgs
            {
                [default] interface Windows.Media.DialProtocol.IDialDeviceSelectedEventArgs;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialDisconnectButtonClickedEventArgs
            {
                [default] interface Windows.Media.DialProtocol.IDialDisconnectButtonClickedEventArgs;
            }

            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialDevicePickerFilter
            {
                [default] interface Windows.Media.DialProtocol.IDialDevicePickerFilter;
            }

            [activatable(0x0A000000)]
            [marshaling_behavior(agile)]
            [threading(both)]
            [version(0x0A000000)]
            runtimeclass DialDevicePicker
            {
                [default] interface Windows.Media.DialProtocol.IDialDevicePicker;
            }
        }
    }
}
