// rstrui.idl : IDL source for rstrui.exe
//

// This file will be processed by the MIDL tool to
// produce the type library (rstrui.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";

#include "olectl.h"

#define DISPID_IRESTOREPOINT_TYPE                1
#define DISPID_IRESTOREPOINT_SEQUENCENUMBER      2
#define DISPID_IRESTOREPOINT_TIMESTAMP           3
#define DISPID_IRESTOREPOINT_YEAR                4
#define DISPID_IRESTOREPOINT_MONTH               5
#define DISPID_IRESTOREPOINT_DAY                 6
#define DISPID_IRESTOREPOINT_ISADVANCED          7

#define DISPID_IRESTOREPOINT_COMPARESEQUENCE     10

#define DISPID_IRENAMEDFOLDERS_COUNT             1
#define DISPID_IRENAMEDFOLDERS_OLDNAME           2
#define DISPID_IRENAMEDFOLDERS_NEWNAME           3
#define DISPID_IRENAMEDFOLDERS_LOCATION          4

#define DISPID_IRESTORESHELL_COUNT               1
#define DISPID_IRESTORESHELL_LASTRESTORE         2
#define DISPID_IRESTORESHELL_ISSAFEMODE          16
#define DISPID_IRESTORESHELL_MAXDATE             3
#define DISPID_IRESTORESHELL_MINDATE             4
#define DISPID_IRESTORESHELL_REALPOINT           5
#define DISPID_IRESTORESHELL_ISUNDO              6
#define DISPID_IRESTORESHELL_SELECTEDDATE        7
#define DISPID_IRESTORESHELL_SELECTEDNAME        8
#define DISPID_IRESTORESHELL_SELECTEDPOINT       9
#define DISPID_IRESTORESHELL_STARTMODE           10
#define DISPID_IRESTORESHELL_RPSELFLAG           11
#define DISPID_IRESTORESHELL_CURRENTDATE         12
#define DISPID_IRESTORESHELL_SMGRUNAVAILABLE     13
#define DISPID_IRESTORESHELL_CANNAVIGATEPAGE     14
#define DISPID_IRESTORESHELL_RENAMEDFOLDERS      15
#define DISPID_IRESTORESHELL_MANUALRPNAME        17
#define DISPID_IRESTORESHELL_FIRSTDAYOFWEEK      18
#define DISPID_IRESTORESHELL_MAINOPTION          19
#define DISPID_IRESTORESHELL_USEDDATE            27
#define DISPID_IRESTORESHELL_USEDNAME            28

#define DISPID_IRESTORESHELL_CANCEL              21
#define DISPID_IRESTORESHELL_COMPAREDATE         22
#define DISPID_IRESTORESHELL_FINISH              23
#define DISPID_IRESTORESHELL_FORMATDATE          24
#define DISPID_IRESTORESHELL_FORMATTIME          25
#define DISPID_IRESTORESHELL_RESTORE             26
#define DISPID_IRESTORESHELL_SETFORMSIZE         29
#define DISPID_IRESTORESHELL_INITIALIZEALL       33
#define DISPID_IRESTORESHELL_ENABLEFIFO          34
#define DISPID_IRESTORESHELL_DISABLEFIFO         35
#define DISPID_IRESTORESHELL_GETLOCALEDATEFORMAT 37
#define DISPID_IRESTORESHELL_GETYEARMONTHSTR     38
#define DISPID_IRESTORESHELL_BEGINRESTORE        39

#define DISPID_IRESTORESHELL_CREATERESTOREPOINT  40
#define DISPID_IRESTORESHELL_CANCELRESTOREPOINT  41

#define DISPID_IRESTORESHELL_SHOWMESSAGE         43
#define DISPID_IRESTORESHELL_FORMATLOWDISKMSG    42
#define DISPID_IRESTORESHELL_CANRUNRESTORE       44
#define DISPID_IRESTORESHELL_DISPLAYOTHERUSERSWARNING 45
#define DISPID_IRESTORESHELL_DISPLAYMOVEFILEEXWARNING 46
#define DISPID_IRESTORESHELL_WASLASTRESTOREFROMSAFEMODE 47
#define DISPID_IRESTORESHELL_CHECKRESTORE         48

#define DISPID_IRSTRPROGRESS_MAX                1
#define DISPID_IRSTRPROGRESS_MIN                2
#define DISPID_IRSTRPROGRESS_VALUE              3

#define DISPID_DRSTRPROGRESSEVENTS_ONCREATE     1

[
    uuid(B545857A-1D0E-11d3-B9C7-00C04F79E399),
    version(1.0),
    helpstring("Microsoft Restore 1.0 Type Library")
]
library RestoreUILib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    typedef [v1_enum] enum
    {
        rsmNormal      = 0,
        rsmSuccess     = 1,
        rsmFail        = 2,
        rsmFailLowDisk = 3
    }
    rstrStartMode;

    [
        object,
        uuid(1159A00E-2862-11d3-B9CF-00C04F79E399),
        dual,
        helpstring("IRestorePoint Interface"),
        pointer_default(unique)
    ]
    interface IRestorePoint : IDispatch
    {
        // properties
        [propget, id(DISPID_VALUE), helpstring("Returns the name of the restore point")]
        HRESULT Name([out, retval] BSTR *pbstrName);
        [propget, id(DISPID_IRESTOREPOINT_TYPE), helpstring("Returns the type of the restore point")]
        HRESULT Type([out, retval] INT *pnType);
        [propget, id(DISPID_IRESTOREPOINT_SEQUENCENUMBER), helpstring("Returns the sequence number")]
        HRESULT SequenceNumber([out, retval] INT *pnSeq);
        [propget, id(DISPID_IRESTOREPOINT_TIMESTAMP), helpstring("property TimeStamp")]
        HRESULT TimeStamp([in] INT nOffDate, [out, retval] VARIANT *pvarTime);
        [propget, id(DISPID_IRESTOREPOINT_YEAR), helpstring("Returns the year of the time stamp")]
        HRESULT Year([out, retval] INT *pnYear);
        [propget, id(DISPID_IRESTOREPOINT_MONTH), helpstring("Returns the month number [1-12] of the time stamp")]
        HRESULT Month([out, retval] INT *pnMonth);
        [propget, id(DISPID_IRESTOREPOINT_DAY), helpstring("Returns the day number [1-31] of the time stamp")]
        HRESULT Day([out, retval] INT *pnDay);
        [propget, id(DISPID_IRESTOREPOINT_ISADVANCED), helpstring("Returns if is an Advanced RP")]
        HRESULT IsAdvanced([out, retval] VARIANT_BOOL *pfIsAdvanced);

        // methods
        [id(DISPID_IRESTOREPOINT_COMPARESEQUENCE), helpstring("Compares sequence numbers")]
        HRESULT CompareSequence([in] IRestorePoint *pRP, [out,retval] INT *pnCmp);
    };

    [
        object,
        uuid(92C71C4E-CAC8-11D3-B9FB-00C04F79E399),
        dual,
        helpstring("IRenamedFolder Interface"),
        pointer_default(unique)
    ]
    interface IRenamedFolders : IDispatch
    {
        // properties
        [propget, id(DISPID_IRENAMEDFOLDERS_COUNT)]
        HRESULT Count([out, retval] long *plCount);
        [propget, id(DISPID_IRENAMEDFOLDERS_OLDNAME)]
        HRESULT OldName([in] long lIndex, [out, retval] BSTR *pbstrName);
        [propget, id(DISPID_IRENAMEDFOLDERS_NEWNAME)]
        HRESULT NewName([in] long lIndex, [out, retval] BSTR *pbstrName);
        [propget, id(DISPID_IRENAMEDFOLDERS_LOCATION)]
        HRESULT Location([in] long lIndex, [out, retval] BSTR *pbstrName);
    };

    [
        object,
        uuid(9341d916-7cdf-11d3-b9e5-00c04f79e399),
        dual,
        helpstring("IRestoreShell Interface"),
        pointer_default(unique)
    ]
    interface IRestoreShell : IDispatch
    {
        // check point enumerator
        [id(DISPID_VALUE), helpstring("method item")]
        HRESULT Item([in] INT nIndex, [out, retval] IRestorePoint** ppRP);
        [propget, id(DISPID_IRESTORESHELL_COUNT), helpstring("property Count")]
        HRESULT Count([out, retval] INT *pnCount);

        // properties

        [propget, id(DISPID_IRESTORESHELL_LASTRESTORE)]
        HRESULT LastRestore([out,retval] INT *pnLastRestore);
        [propget, id(DISPID_IRESTORESHELL_ISSAFEMODE)]
        HRESULT IsSafeMode([out,retval] VARIANT_BOOL *pfIsSafeMode);
        [propget, id(DISPID_IRESTORESHELL_MAXDATE)]
        HRESULT MaxDate([out,retval] VARIANT *pvarDate);
        [propget, id(DISPID_IRESTORESHELL_MINDATE)]
        HRESULT MinDate([out,retval] VARIANT *pvarDate);
        [propget, id(DISPID_IRESTORESHELL_REALPOINT)]
        HRESULT RealPoint([out,retval] INT *pnPoint);

        [propget, id(DISPID_IRESTORESHELL_ISUNDO)]
        HRESULT IsUndo([out,retval] VARIANT_BOOL *pfIsUndo);
        [propput, id(DISPID_IRESTORESHELL_ISUNDO)]
        HRESULT IsUndo([in] VARIANT_BOOL fIsUndo);

        [propget, id(DISPID_IRESTORESHELL_SELECTEDDATE)]
        HRESULT SelectedDate([out,retval] VARIANT *pvarDate);
        [propput, id(DISPID_IRESTORESHELL_SELECTEDDATE)]
        HRESULT SelectedDate([in] VARIANT varDate);
        [propget, id(DISPID_IRESTORESHELL_SELECTEDNAME)]
        HRESULT SelectedName([out,retval] BSTR *pbstrName);
        [propget, id(DISPID_IRESTORESHELL_SELECTEDPOINT)]
        HRESULT SelectedPoint([out,retval] INT *pnPoint);
        [propput, id(DISPID_IRESTORESHELL_SELECTEDPOINT)]
        HRESULT SelectedPoint([in] INT nPoint);
        [propget, id(DISPID_IRESTORESHELL_STARTMODE)]
        HRESULT StartMode([out,retval] INT *pnMode);

        [propget, id(DISPID_IRESTORESHELL_USEDDATE)]
        HRESULT UsedDate([out,retval] VARIANT *pvarDate);
        [propget, id(DISPID_IRESTORESHELL_USEDNAME)]
        HRESULT UsedName([out,retval] BSTR *pbstrName);

        [propget, id(DISPID_IRESTORESHELL_RPSELFLAG)]
        HRESULT RestorePtSelected([out, retval] VARIANT_BOOL *pfPtSel);
        [propput, id(DISPID_IRESTORESHELL_RPSELFLAG)]
        HRESULT RestorePtSelected([in] VARIANT_BOOL fPtSel);

        [propget, id(DISPID_IRESTORESHELL_CURRENTDATE)]
        HRESULT CurrentDate([out,retval] VARIANT *pvarDate);

        [propget, id(DISPID_IRESTORESHELL_SMGRUNAVAILABLE)]
        HRESULT SmgrUnavailable([out, retval] VARIANT_BOOL *pfSmgr);

        [propget, id(DISPID_IRESTORESHELL_CANNAVIGATEPAGE)]
        HRESULT CanNavigatePage([out, retval] VARIANT_BOOL *pfCanNavigatePage);
        [propput, id(DISPID_IRESTORESHELL_CANNAVIGATEPAGE)]
        HRESULT CanNavigatePage([in] VARIANT_BOOL fCanNavigatePage);

        [propget, id(DISPID_IRESTORESHELL_RENAMEDFOLDERS)]
        HRESULT RenamedFolders([out, retval] IRenamedFolders **ppList);

        [propget, id(DISPID_IRESTORESHELL_MANUALRPNAME)]
        HRESULT ManualRPName([out,retval] BSTR *pbstrManualRP);
        [propput, id(DISPID_IRESTORESHELL_MANUALRPNAME)]
        HRESULT ManualRPName([in] BSTR bstrManualRP);

        [propget, id(DISPID_IRESTORESHELL_FIRSTDAYOFWEEK)]
        HRESULT FirstDayOfWeek([out,retval] INT *pnFirstDay);

        [propget, id(DISPID_IRESTORESHELL_MAINOPTION)]
        HRESULT MainOption([out, retval] INT *pnMainOption);
        [propput, id(DISPID_IRESTORESHELL_MAINOPTION)]
        HRESULT MainOption([in] INT nMainOption);

        // methods
        [id(DISPID_IRESTORESHELL_CHECKRESTORE), helpstring("method CheckRestore")]
        HRESULT CheckRestore([out,retval] VARIANT_BOOL *pfCheckRestore);
        [id(DISPID_IRESTORESHELL_BEGINRESTORE), helpstring("method BeginRestore")]
        HRESULT BeginRestore([out,retval] VARIANT_BOOL *pfBeginRestore);
        [id(DISPID_IRESTORESHELL_CANCEL), helpstring("method Cancel")]
        HRESULT Cancel([out,retval] VARIANT_BOOL *pfAbort);
        [id(DISPID_IRESTORESHELL_COMPAREDATE), helpstring("method CompareDate")]
        HRESULT CompareDate([in] VARIANT varDate1, [in] VARIANT varDate2,
                            [out, retval] INT *pnCmp);
        //[id(DISPID_IRESTORESHELL_FINISH), helpstring("method Finish")]
        //HRESULT Finish();
        [id(DISPID_IRESTORESHELL_FORMATDATE), helpstring("method FormatDate")]
        HRESULT FormatDate([in] VARIANT varDate, [in] VARIANT_BOOL fLongFmt, [out, retval] BSTR *bstrDate);
        [id(DISPID_IRESTORESHELL_FORMATTIME), helpstring("method FormatTime")]
        HRESULT FormatTime([in] VARIANT varTime, [out, retval] BSTR *bstrTime);
        [id(DISPID_IRESTORESHELL_RESTORE), helpstring("method Restore")]
        HRESULT Restore([in] OLE_HANDLE pwndProgress);
        [id(DISPID_IRESTORESHELL_SETFORMSIZE), helpstring("method SetFormSize")]
        HRESULT SetFormSize([in] INT nWidth, [in] INT nHeight);
        [id(DISPID_IRESTORESHELL_INITIALIZEALL), helpstring("method InitializeAll")]
        HRESULT InitializeAll();
        [id(DISPID_IRESTORESHELL_DISABLEFIFO), helpstring("method DisableFIFO")]
        HRESULT DisableFIFO();
        [id(DISPID_IRESTORESHELL_ENABLEFIFO), helpstring("method EnableFIFO")]
        HRESULT EnableFIFO();
        [id(DISPID_IRESTORESHELL_GETLOCALEDATEFORMAT), helpstring("method GetLocaleDateFormat")]
        HRESULT GetLocaleDateFormat([in] VARIANT varDate, [in] BSTR bstrFormat, [out, retval] BSTR *bstrDayName);
        [id(DISPID_IRESTORESHELL_GETYEARMONTHSTR), helpstring("method GetLocaleMonthName")]
        HRESULT GetYearMonthStr([in] INT nYear, [in] INT nMonth, [out, retval] BSTR *bstrYearMonth);

        [id(DISPID_IRESTORESHELL_CREATERESTOREPOINT)]
        HRESULT CreateRestorePoint([out,retval] VARIANT_BOOL *pfSucceeded);
        [id(DISPID_IRESTORESHELL_CANCELRESTOREPOINT)]
        HRESULT CancelRestorePoint();

        [id(DISPID_IRESTORESHELL_SHOWMESSAGE), helpstring("method ShowMessage")]
        HRESULT ShowMessage([in] BSTR bstrMsg);
        [id(DISPID_IRESTORESHELL_FORMATLOWDISKMSG)]
        HRESULT FormatLowDiskMsg([in] BSTR bstrFmt, [out,retval] BSTR *pbstrMsg);
        [id(DISPID_IRESTORESHELL_CANRUNRESTORE), helpstring("method CanRunRestore")]
        HRESULT CanRunRestore([out,retval] VARIANT_BOOL *pfSucceeded);
        [id(DISPID_IRESTORESHELL_DISPLAYOTHERUSERSWARNING), helpstring("method DisplayOtherUsersWarning")]
        HRESULT DisplayOtherUsersWarning();
        [id(DISPID_IRESTORESHELL_DISPLAYMOVEFILEEXWARNING), helpstring("method DisplayMoveFileExWarning")]
        HRESULT DisplayMoveFileExWarning([out,retval] VARIANT_BOOL *pfSucceeded);
        [id(DISPID_IRESTORESHELL_WASLASTRESTOREFROMSAFEMODE), helpstring("method WasLastRestoreFromSafemode")]
        HRESULT WasLastRestoreFromSafeMode([out,retval] VARIANT_BOOL *pfSucceeded);
    };

    [
        object,
        uuid(cd7874b8-7d3a-11d3-b9e5-00c04f79e399),
        dual,
        helpstring("IRstrProgress Interface"),
        pointer_default(unique)
    ]
    interface IRstrProgress : IDispatch
    {
        //
        // Properties
        //
        [propput, id(DISPID_BACKCOLOR)]
        HRESULT BackColor([in]OLE_COLOR clr);
        [propget, id(DISPID_BACKCOLOR)]
        HRESULT BackColor([out,retval]OLE_COLOR* pclr);
        [propput, id(DISPID_FORECOLOR)]
        HRESULT ForeColor([in]OLE_COLOR clr);
        [propget, id(DISPID_FORECOLOR)]
        HRESULT ForeColor([out,retval]OLE_COLOR* pclr);
        [propget, id(DISPID_HWND)]
        HRESULT hWnd([out,retval] OLE_HANDLE *phWnd);
        [propput, id(DISPID_IRSTRPROGRESS_MAX)]
        HRESULT Max([in] long lMax);
        [propget, id(DISPID_IRSTRPROGRESS_MAX)]
        HRESULT Max([out,retval] long *plMax);
        [propput, id(DISPID_IRSTRPROGRESS_MIN)]
        HRESULT Min([in] long lMin);
        [propget, id(DISPID_IRSTRPROGRESS_MIN)]
        HRESULT Min([out,retval] long *plMin);
        [propput, id(DISPID_IRSTRPROGRESS_VALUE)]
        HRESULT Value([in] long lValue);
        [propget, id(DISPID_IRSTRPROGRESS_VALUE)]
        HRESULT Value([out,retval] long *plValue);
    };

    [
        uuid(e0732ca2-80dc-11d3-b9e6-00c04f79e399),
        helpstring("DRstrProgressEvents Interface")
    ]
    dispinterface DRstrProgressEvents
    {
        properties:
        methods:
        [id(DISPID_DRSTRPROGRESSEVENTS_ONCREATE)]
        void oncreate();
    };

    [
        uuid(bf404da2-7d3b-11d3-b9e5-00c04f79e399),
        helpstring("RstrProgress Class")
    ]
    coclass RstrProgress
    {
        [default]         interface IRstrProgress;
        [default, source] dispinterface DRstrProgressEvents;
    };

    interface IRestoreShell;

    [
        uuid(fd589b7c-7ce0-11d3-b9e5-00c04f79e399),
        helpstring("RestoreShellExternal Class")
    ]
    coclass RestoreShellExternal
    {
        [default] interface IUnknown;
    };
};
