// -*- Mode: C++ -*-
/*++

Copyright (c) 1998 Microsoft Corporation

Abstract:

    Interface definitions for DirectAnimation TxD components

--*/

cpp_quote("#include \"danim.h\"")

#define DANIM_TLB "danim.tlb"

[
    uuid(D2A88CB4-C16D-11d1-A4E0-00C04FC29D46),
    lcid(0x0000),
    version(1.0)
]
library DirectAnimationTxD
{
    importlib("STDOLE2.TLB");
    importlib(DANIM_TLB);

    interface IDALBehavior;
    interface IDALTrack;
    interface IDALFactory;

    typedef enum {
        DAL_PLAY_EVENT,
        DAL_STOP_EVENT,
        DAL_REPEAT_EVENT,
        DAL_BOUNCE_EVENT,
        DAL_PAUSE_EVENT,
        DAL_RESUME_EVENT,
        DAL_ONLOAD_EVENT,
        DAL_ONLOAD_ERROR_EVENT,
    } DAL_EVENT_TYPE ;

    [
        object,
        uuid(D2A88CB5-C16D-11d1-A4E0-00C04FC29D46),
        dual,
        pointer_default(unique)
    ]
    interface IDALEventCB : IUnknown
    {
        HRESULT OnEvent([in] LONG ID,
                        [in] double eventTime,
                        [in] IDALBehavior *,
                        [in] DAL_EVENT_TYPE et);
    }

    [
        object,
        uuid(D2A88CB6-C16D-11d1-A4E0-00C04FC29D46),
        dual,
        pointer_default(unique)
    ]
    interface IDALBehavior : IDispatch
    {
        [propget] HRESULT ID([out, retval] LONG *);
        [propput] HRESULT ID([in] LONG);

        [propget] HRESULT Duration([out, retval] double *);
        [propput] HRESULT Duration([in] double);

        [propget] HRESULT Repeat([out, retval] LONG *);
        [propput] HRESULT Repeat([in] LONG);

        [propget] HRESULT Bounce([out, retval] VARIANT_BOOL *);
        [propput] HRESULT Bounce([in] VARIANT_BOOL);

        [propget] HRESULT EventCB([out, retval] IDALEventCB **);
        [propput] HRESULT EventCB([in] IDALEventCB *);

        [propget] HRESULT TotalTime([out, retval] double *);
        [propput] HRESULT TotalTime([in] double);

        [propget] HRESULT EaseIn([out, retval] float *);
        [propput] HRESULT EaseIn([in] float);

        [propget] HRESULT EaseInStart([out, retval] float *);
        [propput] HRESULT EaseInStart([in] float);

        [propget] HRESULT EaseOut([out, retval] float *);
        [propput] HRESULT EaseOut([in] float);

        [propget] HRESULT EaseOutEnd([out, retval] float *);
        [propput] HRESULT EaseOutEnd([in] float);
    }

    [
        object,
        uuid(445DE914-C3D8-11d1-A001-00C04FA32195),
        dual,
        pointer_default(unique)
    ]
    interface IDALSingleBehavior : IDALBehavior
    {
        [propget] HRESULT DABehavior([out, retval] IDABehavior **);
        [propput] HRESULT DABehavior([in] IDABehavior *);

        HRESULT GetDABehavior(REFIID iid, void ** retobj);
    }

    [
        object,
        uuid(95057368-DBC6-11d1-A00B-00C04FA32195),
        dual,
        pointer_default(unique)
    ]
    interface IDALImportBehavior : IDALBehavior
    {
    }

    [
        object,
        uuid(445DE915-C3D8-11d1-A001-00C04FA32195),
        dual,
        pointer_default(unique)
    ]
    interface IDALSequenceBehavior : IDALBehavior
    {
    }

    typedef enum {
        DAL_PLAYING_STATE,
        DAL_STOPPED_STATE,
        DAL_PAUSED_STATE,
    } DAL_TRACK_STATE;

    [
        object,
        uuid(D2A88CB7-C16D-11d1-A4E0-00C04FC29D46),
        dual,
        pointer_default(unique)
    ]
    interface IDALTrack : IDispatch
    {
        [propget] HRESULT Behavior([out, retval] IDALBehavior **);
        [propput] HRESULT Behavior([in] IDALBehavior *);

        HRESULT Play([in] double gTime, [in] double lTime);
        HRESULT Stop([in] double gTime, [in] double lTime);
        HRESULT Pause([in] double gTime, [in] double lTime);
        HRESULT Resume([in] double gTime, [in] double lTime);

        [propget] HRESULT CurrentValue([out, retval] IDABehavior **ppResult);

        HRESULT GetCurrentValueEx([in] REFIID iid,
                                  [out, retval] void **ppResult);

        [propget] HRESULT TrackState([out, retval] DAL_TRACK_STATE *);

        // Yank out the DABehavior and use it in other places.
        [propget] HRESULT DABehavior([out, retval] IDABehavior **);

        HRESULT GetDABehavior(REFIID iid, void ** retobj);

        [propget] HRESULT CurrentTime([out, retval] double * d);

        HRESULT SetPosition([in] double gTime, [in] double lTime);
        HRESULT SetDirection([in] VARIANT_BOOL bForward);

        [propget] HRESULT CurrentGlobalTime([out, retval] double * d);
    }


    [
        object,
        uuid(D2A88CB8-C16D-11d1-A4E0-00C04FC29D46),
        dual,
        hidden,
        pointer_default(unique)
    ]
    interface IDALFactory : IDispatch
    {
        HRESULT CreateSingleBehavior([in] LONG id,
                                     [in] double duration,
                                     [in] IDABehavior *bvr,
                                     [out, retval] IDALSingleBehavior **ppOut);
        HRESULT CreateSequenceBehavior([in] LONG id,
                                       [in] VARIANT seqArray,
                                       [out, retval] IDALSequenceBehavior **ppOut);
        HRESULT CreateSequenceBehaviorEx([in] LONG id,
                                         [in] LONG s,
                                         [in] IDALBehavior **seqArray,
                                         [out, retval] IDALSequenceBehavior **ppOut);
        HRESULT CreateTrack([in] IDALBehavior *bvr,
                            [out, retval] IDALTrack **ppOut);
        HRESULT CreateImportBehavior([in] LONG id,
                                     [in] IDABehavior *bvr,
                                     [in] IDAImportationResult *impres,
                                     [in] IDABehavior *prebvr,
                                     [in] IDABehavior *postbvr,
                                     [out, retval] IDALImportBehavior **ppOut);
    }

    [
        uuid(D2A88CB9-C16D-11d1-A4E0-00C04FC29D46)
    ]
    coclass DALFactory
    {
        [default] interface IDALFactory;
    };
}
