//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright 1995-2000 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------

cpp_quote("#ifndef _SHAPPMGRP_H_")
cpp_quote("#define _SHAPPMGRP_H_")

import "oleidl.idl";
import "oaidl.idl";
import "shappmgr.idl";


#include <olectl.h>
#include <shdispid.h>

[
    uuid(157193AA-D8B2-435f-A79C-B8F332357C6B),     // LIBID_SHAPPMGRP
    helpstring("shappmgrp 1.0 Type Library"),
    lcid(0x0000),
    version(1.0)
]
library SHAPPMGRPLib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    //
    // IADCCtl interface
    //
    [
        uuid(3964D99F-AC96-11D1-9851-00C04FD91972),     // IID_IADCCtl
        helpstring("Application Data Control Interface"),
        pointer_default(unique),
        oleautomation,
        object,
        dual
    ]
    interface IADCCtl : IDispatch
    {
        // Properties

        [propput, id(DISPID_IADCCTL_DIRTY)]
            HRESULT Dirty([in] VARIANT_BOOL bDirty);
        [propget, id(DISPID_IADCCTL_DIRTY)]
            HRESULT Dirty([out, retval] VARIANT_BOOL * pbDirty);

        [propput, id(DISPID_IADCCTL_PUBCAT)]
            HRESULT Category([in] BSTR bstrCategory);
        [propget, id(DISPID_IADCCTL_PUBCAT)]
            HRESULT Category([out, retval] BSTR * pbstrCategory);

        [propput, id(DISPID_IADCCTL_SORT)]
            HRESULT Sort([in] BSTR bstrSortExpr);
        [propget, id(DISPID_IADCCTL_SORT)]
            HRESULT Sort([out, retval] BSTR* pbstrSortExpr);

        [propput, id(DISPID_IADCCTL_FORCEX86)]
            HRESULT Forcex86([in] VARIANT_BOOL bForce);
        [propget, id(DISPID_IADCCTL_FORCEX86)]
            HRESULT Forcex86([out, retval] VARIANT_BOOL * pbForce);

        [propget, id(DISPID_IADCCTL_SHOWPOSTSETUP)]
            HRESULT ShowPostSetup([out, retval] VARIANT_BOOL * pbShow);

        [propput, id(DISPID_IADCCTL_ONDOMAIN)]
            HRESULT OnDomain([in] VARIANT_BOOL bOnDomain);
        [propget, id(DISPID_IADCCTL_ONDOMAIN)]
            HRESULT OnDomain([out, retval] VARIANT_BOOL * pbOnDomain);

        [propget, id(DISPID_IADCCTL_DEFAULTCAT)]
            HRESULT DefaultCategory([out, retval] BSTR * pbstrCategory);

        [restricted, id(-3900)]
        HRESULT msDataSourceObject([in] BSTR qualifier,
                                   [out, retval] IUnknown **ppUnk);

        [restricted, id(-3901)]
        HRESULT addDataSourceListener([in] IUnknown *pEvent);

        // Methods
        //

        HRESULT Reset(BSTR bstrQualifier);

        HRESULT IsRestricted([in] BSTR bstrPolicy, [out, retval] VARIANT_BOOL * pbRestricted);

        // Valid Exec command strings:
        //
        //  "install"       - install app at nRecord
        //  "uninstall"     - uninstall app
        //  "modify"        - modify app
        //  "repair"        - repair app
        //  "upgrade"       - upgrade app
        //  "generic install" - invoke the 'install from floppy or CD' wizard
        //  "ntoptions"     - add/remove NT options
        //  "winupdate"     - update windows
        HRESULT Exec(BSTR bstrQualifier, [in] BSTR bstrCmd, [in] LONG nRecord);
    };

    [
        uuid(3964D9A0-AC96-11D1-9851-00C04FD91972),     // CLSID_ADCCtl
        helpstring("ADCCtl Class")
    ]
    coclass ADCCtl
    {
        [default] interface IADCCtl;
    };

    //
    // IInstalledApp interface
    //
    [
        uuid(1BC752DF-9046-11D1-B8B3-006008059382),     // IID_IInstalledApp
        helpstring("Shell Installed Application Interface"),
        object
    ]
    interface IInstalledApp : IShellApp
    {
        HRESULT Uninstall(HWND hwnd); // Same as Add/Remove maybe we should call it AddRemove.
        HRESULT Modify(HWND hwndParent);
        HRESULT Repair([in] BOOL bReinstall);
        HRESULT Upgrade(void);
    };


    //
    // IEnumInstalledApps interface
    //
    [
        uuid(1BC752E1-9046-11D1-B8B3-006008059382),     // IID_IEnumInstalledApps
        helpstring("Shell Installed Apps Enumeration Interface"),
        object,
    ]

    interface IEnumInstalledApps : IUnknown
    {
        HRESULT Next([out] IInstalledApp** pia);
        HRESULT Reset(void);
    };

    [
        uuid(0B124F8F-91F0-11D1-B8B5-006008059382),     // CLSID_EnumInstalledApps
        helpstring("Shell Installed Applications Enumeration Object"),
    ]
    coclass EnumInstalledApps
    {
        [default] interface IEnumInstalledApps;
    };


    //
    // IShellAppManager interface
    //
    [
        uuid(352EC2B8-8B9A-11D1-B8AE-006008059382),     // IID_IShellAppManager
        helpstring("Application Manager"),
        object,
    ]

    interface IShellAppManager : IUnknown
    {
        // NOTE: These structures are very similar to CategoryInfo* in NT5
        typedef struct _ShellAppCategory {
            LPWSTR pszCategory;  // category description
            UINT  idCategory;   // category id for ShellAppManager
        } SHELLAPPCATEGORY, *PSHELLAPPCATEGORY;

        typedef struct _ShellAppCategoryList {
            UINT  cCategories;
            SHELLAPPCATEGORY * pCategory;
        } SHELLAPPCATEGORYLIST, *PSHELLAPPCATEGORYLIST;

        HRESULT GetNumberofInstalledApps(DWORD * pdwResult);
        HRESULT EnumInstalledApps(IEnumInstalledApps ** peia);
        HRESULT GetPublishedAppCategories(PSHELLAPPCATEGORYLIST pCategoryList);
        HRESULT EnumPublishedApps(LPCWSTR pszCategory, IEnumPublishedApps ** ppepa);
        HRESULT InstallFromFloppyOrCDROM(HWND hwndParent);
    }

    [
        uuid(352EC2B7-8B9A-11D1-B8AE-006008059382),     // CLSID_ShellAppManager
        helpstring("Shell Application Manager"),
    ]

    coclass ShellAppManager
    {
        [default] interface IShellAppManager;
    };

};

cpp_quote("#endif // _SHAPPMGRP_H_")


