//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File:       Tlogstg.idl
//
//  Contents:   TravelLog public interfaces
//
//  Classes:
//
//  Functions:
//
//  History:    10-DEC-99  Sifrim (Silviu Ifrim)  - created
//
//----------------------------------------------------------------------------
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// tlogstg.h")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.")
cpp_quote("//")
cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
cpp_quote("// PARTICULAR PURPOSE.")
cpp_quote("//=--------------------------------------------------------------------------=")
cpp_quote("")
cpp_quote("#pragma comment(lib,\"uuid.lib\")")
cpp_quote("")
cpp_quote("//---------------------------------------------------------------------------=")
cpp_quote("// ITravelLogStg Interface.")
cpp_quote("")
cpp_quote("#define SID_STravelLogCursor IID_ITravelLogStg ")

import "objidl.idl";
import "oleidl.idl";

// ITravelLogEntry
[
    object,
    uuid(7EBFDD87-AD18-11d3-A4C5-00C04F72D6B8), //IID_ITravelLogEntry
    helpstring("ITravelLogEntry interface"),
    local
]
interface ITravelLogEntry : IUnknown
{
    [helpstring("Get page title"), helpcontext(0x0000)]
    HRESULT GetTitle([out] LPOLESTR *ppszTitle);

    [helpstring("Get URL"), helpcontext(0x0000)]
    HRESULT GetURL([out] LPOLESTR *ppszURL);
};

//IEnumTravelLogEntry
[
    object,
    uuid(7EBFDD85-AD18-11d3-A4C5-00C04F72D6B8), //IID_IEnumTravelLogEntry
    helpstring("IEnumTravelLogEntry interface"),
    helpcontext(0x0000),
    local,
]
interface IEnumTravelLogEntry : IUnknown 
{ 
    [helpstring("Get the next items in the enumeration sequence"), helpcontext(0x0000)]
    HRESULT Next(
        [in]                        ULONG cElt,
        [out, 
         size_is(cElt), 
         length_is(*pcEltFetched)]  ITravelLogEntry **rgElt,
        [out]                       ULONG* pcEltFetched);

    [helpstring("Skip over the next cElt elements"), helpcontext(0x0000)]
    HRESULT Skip(
        [in] ULONG cElt);

    [helpstring("Reset the enumeration sequence"), helpcontext(0x0000)]
    HRESULT Reset(void);

    [helpstring("Creates a copy of the current state of enumeration"), helpcontext(0x0000)]
    HRESULT Clone(
        [out] IEnumTravelLogEntry **ppEnum);
 };



[
    uuid(7EBFDD80-AD18-11d3-A4C5-00C04F72D6B8),  // IID_ITravelLogStg 
    object,
    pointer_default(unique),
    local,
]
interface ITravelLogStg : IUnknown
{
    // care on these, they should match TLMENUF_xxx
    enum 
    {
        TLEF_RELATIVE_INCLUDE_CURRENT   = 0x00000001,
        TLEF_RELATIVE_BACK              = 0x00000010,
        TLEF_RELATIVE_FORE              = 0x00000020,
        TLEF_INCLUDE_UNINVOKEABLE       = 0x00000040,
        TLEF_ABSOLUTE                   = 0x00000031,
    };
    typedef DWORD TLENUMF;

    [helpstring("Insert a dummy entry in the travel log"), helpcontext(0x0000)]
    HRESULT CreateEntry(
        [in] LPCOLESTR pszUrl,
        [in] LPCOLESTR pszTitle,
        [in] ITravelLogEntry *ptleRelativeTo,
        [in] BOOL fPrepend,
        [out] ITravelLogEntry **pptle);

    [helpstring("Navigate to an entry"), helpcontext(0x0000)]
    HRESULT TravelTo(
        [in] ITravelLogEntry *ptle);

    [helpstring("Create enumerator for travel log entries"), helpcontext(0x0000)]
    HRESULT EnumEntries(
        [in] TLENUMF flags,
        [out] IEnumTravelLogEntry **ppenum);

    [helpstring("Search for all entries with given URL"), helpcontext(0x0000)]
    HRESULT FindEntries(
        [in] TLENUMF flags,
        [in] LPCOLESTR pszUrl,
        [out] IEnumTravelLogEntry **ppenum);

    [helpstring("Number of entries in the travel log"), helpcontext(0x0000)]
    HRESULT GetCount(
        [in] TLENUMF flags,
        [out] DWORD *pcEntries);
    
    [helpstring("Delete from travel log"), helpcontext(0x0000)]
    HRESULT RemoveEntry(
        [in] ITravelLogEntry *ptle);
       
    [helpstring("Get entry from the travel log"), helpcontext(0x0000)]
    HRESULT GetRelativeEntry(
        [in] int iOffset,
        [out] ITravelLogEntry **ptle);
};