//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992-1998.
//
//  File:       notftn.idl
//
//  Contents:   wrapper idl for the msnotify.idl
//              private interfaces are in this idl file
//
//  Classes:
//
//  Functions:
//
//  History:    1-09-1997   JohannP (Johann Posch)   Created
//
//----------------------------------------------------------------------------
import "msnotify.idl";
#pragma midl_echo("#include <msnotify.h>             ")


//
// private interface; used by notfmgr only
//
cpp_quote("#ifndef _LPNOTIFICATIONRUNNING_DEFINED")
cpp_quote("#define _LPNOTIFICATIONRUNNING_DEFINED")

[
        local,
        object,
        uuid(c733e4ad-576e-11d0-b28c-00c04fd7cd22),
        pointer_default(unique)
]

interface INotificationRunning : IUnknown
{
        typedef [unique] INotificationRunning *LPNOTIFICATIONRUNNING;

}
cpp_quote("#endif")

//
// this interface is not public yet
//
cpp_quote("#ifndef _LPNOTIFICATIONPROCESSMGR0_DEFINED")
cpp_quote("#define _LPNOTIFICATIONPROCESSMGR0_DEFINED")

[
        local,
        object,
        uuid(c733e4ae-576e-11d0-b28c-00c04fd7cd22),
        pointer_default(unique)
]

interface INotificationProcessMgr0 : IUnknown
{
        typedef [unique] INotificationProcessMgr0 *LPNOTIFICATIONPROCESSMGR0;


        typedef enum _tagNOTIFICATIONMGRMODE
        {
            // **** FLAGS OF THE NOTIFICATIONMGR ***
            //
            // the normal mode is to deliver imedialty
            // and async (postmessage to enter thread
            // of destination

            // this process is the default process
            NM_DEFAULT_PROCESS        = 0x00000001

            // set this thread as the default thread of this process
           ,NM_DEFAULT_THREAD         = 0x00000002

        } _NOTIFICATIONMGRMODE;

        typedef DWORD NOTIFICATIONMGRMODE;

        HRESULT SetMode(
            // the clsid of the process
            [in]    REFCLSID                rClsID,
            // initialization mode
            [in]    NOTIFICATIONMGRMODE     NotificationMgrMode,
            // out previous default notification mgr
            [out]   LPCLSID                *pClsIDPre,
            // a reserved again
            [in]    DWORD                   dwReserved
            );

        //
        //
        //
        typedef enum _tagTHROTTLE_ITEMS_FLAGS
        {
            // do not deliver a scheduled item with this type
             TF_DONT_DELIVER_SCHEDULED_ITEMS    = 0x00000001
            // apply the time range of the structur; do not deliver during that range
            ,TF_APPLY_EXCLUDE_RANGE             = 0x00000002
            // items should not be delivered in shorter time distance as specified in
            // the dwMinItemUpdateInterval in minutes
            ,TF_APPLY_UPDATEINTERVAL            = 0x00000004

        } _THROTTLE_ITEMS_FLAGS;

        typedef DWORD THROTTLE_ITEMS_FLAGS;

        typedef struct THROTTLEITEM
        {
            // type of notification to be throttled
            NOTIFICATIONTYPE    NotificationType;
            // maximum intances running parallel
            LONG                nParallel;
            // mode flag: TBD
            DWORD               dwFlags;
            // begin time it can run
            SYSTEMTIME          stBegin;
            // end time it can run
            SYSTEMTIME          stEnd;
            // the mimimum update interval in minutes
            DWORD               dwMinItemUpdateInterval;
        } THROTTLEITEM, *PTHROTTLEITEM;

        HRESULT RegisterThrottleNotificationType(
            [in]        ULONG               cItems,
            [in, size_is(cItems)]
                        PTHROTTLEITEM       pThrottleItems,
            [out]       ULONG              *pcItemsOut,
            [out]       PTHROTTLEITEM      *ppThrottleItemsOut,
            [in]        DWORD               dwMode,
            [in]        DWORD               dwReserved
            );


}
cpp_quote("#endif")

//
// unimplemented deliver modes
//
cpp_quote("#define DM_SYNCHRONOUS              0x00000010       ")
cpp_quote("#define DM_ONLY_IF_NOT_PENDING      0x00001000       ")